user-0 提问: 大一指针 求助大佬帮助

回复:
user: user-1
content: 两个函数也可以改的稍简略点：void aver1(int **p,int n1,int m1);//学生平均成绩 void aver2(int **q,int n1,int m1);//课程平均成绩  void aver1(int **p,int n1,int m1) {     int i,j;     int sum;     float aver;     for(i=0;i<n1;i++)       {          aver= 0;          sum = 0;          for(j=0;j<m1;j++)            {              sum += *(*(p+i)+j);            }          aver =((float)sum)/((float)m1);          printf("第%d个学生的平均成绩为%.2f分\n",i+1,aver);      }     printf("\n"); }  void aver2(int **q,int n1,int m1) {     int i,j;     int sum;     float aver;     for(j=0;j<m1;j++)        {           aver= 0;           sum = 0;           for(i=0;i<n1;i++)             {                sum += *(*(q+i)+j);             }           aver =((float)sum)/((float)n1);           printf("第%d个课程的平均成绩为%.2f分\n",j+1,aver);        } }

user: user-2
content: #include "stdafx.h" #include <stdio.h> #include <stdlib.h> void aver1(int **p, int *n1, int *m1);//学生平均成绩，*p改为**p---------------- void aver2(int **q, int *n1, int *m1);//课程平均成绩 ,*q改为**q------------------ int main() {	 	int n, m, *n1, *m1;//n代表行，m代表列  	printf("请输入学生个数和课程门数："); 	scanf("%d %d", &n, &m); 	n1 = &n; m1 = &m; 	//int a[n][m];        //-----以下代码为动态分配二维数组----------- 	int** a = new int*[n]; 	for (int i = 0; i < n; i++) 	{ 		a[i] = new int[m]; 	}  	int i, j; 	for (i = 0; i<n; i++) 	{ 		printf("请输入第%d个学生的成绩：", i + 1); 		for (j = 0; j<m; j++) 		{ 			scanf("%d", &a[i][j]); 		} 	} 	int **p, **q;//------改为指针的指针------- 	p = a;//----修改----- 	q = a;//-----修改---- 	aver1(p, n1, m1); 	aver2(q, n1, m1);  //-------以下代码为释放二维数组---------- 	for (i = 0; i < n; ++i) 	{ 		delete[] a[i]; 	} 	delete[] a; 	return 0; } void aver1(int **p, int *n1, int *m1) { 	int i, j; 	int sum[50] = { 0 };//------数组初始化------ 	float aver1; 	for (i = 0; i<*n1; i++) 	{ 		for (j = 0; j<*m1; j++) 		{ 			sum[i] += *((*(p + i) + j));//------修改------- 			aver1 = ((float)sum[i]) / ((float)*m1); 		} 		printf("第%d个学生的平均成绩为%.2f分\n", i + 1, aver1); 	} 	printf("\n"); } void aver2(int **q, int *n1, int *m1) { 	int i, j; 	int sum[50] = { 0 };//------数组初始化------ 	float aver2; 	for (j = 0; j<*m1; j++) 	{ 		sum[0] = 0; 		for (i = 0; i<*n1; i++) 		{ 			sum[j] += *((*(q + i) + j));//------------修改------- 			aver2 = ((float)sum[j]) / ((float)*n1); 		} 		printf("第%d个课程的平均成绩为%.2f分\n", j + 1, aver2); 	} }  VS2015 C++环境调试  请参考《C++中动态分配多维数组》 《C++中的指针数组与数组指针》 希望能够帮到您！

user: user-3
content: #include <stdio.h> #include <stdlib.h>  /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void aver1(int **p, int *n1, int *m1); //学生平均成绩 void aver2(int **q, int *n1, int *m1); //课程平均成绩 int main(int argc, char *argv[]) {     int n, m, *n1, *m1; //n代表行，m代表列     printf("请输入学生个数和课程门数：");     scanf("%d %d", &n, &m);     n1 = &n;     m1 = &m;     int i, j;     int **a = (int*)malloc(sizeof(int)*n);     for(i=0;i<m;i++){         a[i] = (int*)malloc(sizeof(int)*m);     }     for (i = 0; i < n; i++)     {         printf("请输入第%d个学生的成绩：", i + 1);         for (j = 0; j < m; j++)         {             scanf("%d", &a[i][j]);         }     }     aver1(a, n1, m1);     aver2(a, n1, m1);     return 0; } void aver1(int **p, int *n1, int *m1) {     int i, j;     int sum[50]={0};     float aver1;     for (i = 0; i < *n1; i++)     {         for (j = 0; j < *m1; j++)         {             //sum[i] += *(p + i) + j;             sum[i] += *(*(p + i) + j);         }         aver1 = ((float)sum[i]) / ((float)*m1);         printf("第%d个学生的平均成绩为%.2f分\n", i + 1, aver1);     }     printf("\n"); } void aver2(int **q, int *n1, int *m1) {     int i, j;     int sum[50]={0};     float aver2;     for (j = 0; j < *m1; j++)     {         for (i = 0; i < *n1; i++)         {             //sum[j] += *(q + i) + j;             sum[j] += *(*(q + i) + j);         }         aver2 = ((float)sum[j]) / ((float)*n1);         printf("第%d个课程的平均成绩为%.2f分\n", j + 1, aver2);     } }

user: user-4
content: #include <stdio.h> #include <stdlib.h>  /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void aver1(int **p,int *n1,int *m1);//学生平均成绩 void aver2(int **q,int *n1,int *m1);//课程平均成绩  int main(int argc, char *argv[]) {     int n,m,*n1,*m1;//n代表行，m代表列     int i, j;     int **a;     printf("请输入学生个数和课程门数：");     scanf("%d %d",&n,&m);      a = (int **)malloc(sizeof(int *) * n);     if (!a)         return -1;      for (i = 0; i < n; i++) {         a[i] = (int *)malloc(sizeof(int) *m);         if (!a[i])             return -1;     }     n1=&n;m1=&m;     //int a[n][m];     //int i,j;     for(i=0;i<n;i++)     {         printf("请输入第%d个学生的成绩：",i+1);         for(j=0;j<m;j++)         {             scanf("%d",&a[i][j]);         }     }     int *p,*q;     p=&a[0][0];     q=&a[0][0];     aver1(a,n1,m1);     aver2(a,n1,m1);     return 0; } void aver1(int **p,int *n1,int *m1) {     int i,j;     //int sum[50];     int sum;     float aver1;     for(i=0;i<*n1;i++)     {         sum=0;         for(j=0;j<*m1;j++)         {             //sum += *(p+i)+j;             sum += p[i][j];             aver1 = sum * 1.0/(*m1);         }         printf("第%d个学生的平均成绩为%.2f分\n",i+1,aver1);     }     printf("\n"); } void aver2(int **q,int *n1,int *m1) {     int i,j;     //int sum[50];     int sum;     float aver2;     for(j=0;j<*m1;j++)     {         //sum[0]=0;         sum = 0;         for(i=0;i<*n1;i++)         {             //sum[j] += *(q+i)+j;             sum += q[i][j];             //aver2=((float)sum[j])/((float)*n1);             aver2 = sum * 1.0/(*n1);         }         printf("第%d个课程的平均成绩为%.2f分\n",j+1,aver2);     }     for (i = 0; i < n; i++)         free(a[i]);     free(a); } 供参考～  注意n,m不确定大小，a的数组不能确定，因此可以考虑用动态申请空间（定义数组是静态申请空间）

user: user-0
content: 引用 2 楼 丿烟花易冷的回复:编写一个函数，统计n个学生m门课程，每个学生的平均分和每门课程的平均分。在主函数中输入5个学生4门课程的成绩，调用函数，输出每个学生的平均成绩和每门课程的平均成绩。要求，不允许使用全局变量和全局数组。 这是需求。。

user: user-0
content: 编写一个函数，统计n个学生m门课程，每个学生的平均分和每门课程的平均分。在主函数中输入5个学生4门课程的成绩，调用函数，输出每个学生的平均成绩和每门课程的平均成绩。要求，不允许使用全局变量和全局数组。

user: user-0
content: #include <stdio.h> #include <stdlib.h>  /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void aver1(int *p,int *n1,int *m1);//学生平均成绩 void aver2(int *q,int *n1,int *m1);//课程平均成绩  int main(int argc, char *argv[]) { 	int n,m,*n1,*m1;//n代表行，m代表列  	printf("请输入学生个数和课程门数："); 	scanf("%d %d",&n,&m); 	n1=&n;m1=&m; 	int a[n][m]; 	int i,j; 	for(i=0;i<n;i++) 	{ 		printf("请输入第%d个学生的成绩：",i+1); 		for(j=0;j<m;j++) 		{ 			scanf("%d",&a[i][j]); 		} 	} 	int *p,*q; 	p=&a[0][0]; 	q=&a[0][0]; 	aver1(p,n1,m1); 	aver2(q,n1,m1); 	return 0; } void aver1(int *p,int *n1,int *m1) { 	int i,j; 	int sum[50]; 	float aver1;     for(i=0;i<*n1;i++)     {     	sum[0]=0;     	for(j=0;j<*m1;j++)     	{     		sum[i]+=*(p+i)+j;     		aver1=((float)sum[i])/((float)*m1); 		}     	printf("第%d个学生的平均成绩为%.2f分\n",i+1,aver1); 	} 	printf("\n");  }  void aver2(int *q,int *n1,int *m1) { 	int i,j; 	int sum[50]; 	float aver2;     for(j=0;j<*m1;j++)     {     	sum[0]=0;     	for(i=0;i<*n1;i++)     	{     		sum[j]+=*(q+i)+j;     		aver2=((float)sum[j])/((float)*n1); 		}     	printf("第%d个课程的平均成绩为%.2f分\n",j+1,aver2); 	} }