69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
double **a;
double *b;
int i,j,n,m;
int num=0;
double count=0,aver=0;
while(scanf("%d %d",&i,&j)==2)
{
b=(double *)malloc(sizeof(double)*(j+1));
a=(double **)malloc(sizeof(double *)*(i+1));
for(n=0;n<j;n++)
a[n]=(double *)malloc(sizeof(double)*(j+1));
for(n=0;n<i;n++)
{
for(m=0;m<j;m++)
scanf("%lf",&a[n][m]);
}
for(n=0;n<i;n++)
{
for(m=0;m<j;m++)
count+=a[n][m];
aver=count/j;
printf("%.1lf ",aver);
count=0;
}
printf("\n");
for(n=0;n<j;n++)
{
for(m=0;m<i;m++)
count+=a[m][n];
aver=count/i;
b[n]=aver;
printf("%.1lf ",aver);
count=0;
}
for(n=0;n<i;n++)
{
num++;
for(m=0;m<j;m++)
{
if(a[n][m]<b[m])
{
num--;
break;
}
}
}
printf("\n%d\n",num);
num=0;
aver=0;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i,j,n,m;
int num = 0;
float sum = 0, aver = 0;
float **stu, *course_avr_list;
while(scanf("%d %d", &m, &n) == 2)
{
course_avr_list = (float *)malloc(sizeof(float) * n);
if (!course_avr_list)
exit(0);
stu = (float **)malloc(sizeof(float *) * m);
if (!stu)
exit(0);
for(i = 0; i < n; i++) {
stu[i] = (float *)malloc(sizeof(float)*(n + 1));
if (!stu[i])
exit(0);
course_avr_list[i] = 0;
}
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++) {
scanf("%f", &stu[i][j]);
sum += stu[i][j];
course_avr_list[j] += stu[i][j];
}
aver = sum / m;
stu[i][n] = aver;
sum = 0;
}
for (i = 0; i < m; i++)
printf("%.2f\t", stu[i][n]);
printf("\n");
for (j = 0; j < n; j++) {
course_avr_list[j] /= n;
printf("%.2f\t", course_avr_list[j]);
}
printf("\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++)
if (stu[i][j] < course_avr_list[j])
break;
if (j >= n)
num++;
}
printf("\n%d\n",num);
num = 0;
for (i = 0; i < n; i++)
free(stu[i]);
free(stu);
free(course_avr_list);
}
return 0;
}
参考一下吧
对于学生成绩,不建议是用double类型,因为float类型完全能够表示,double比float多占内存空间;
建议减少循环次数,能将循环次数合并的则合并,循环次数增加会导致时间复杂度高,也一定原因上会加剧running time。
malloc需要多少就申请多少,没必要都要多申请一个。
malloc申请的空间需要手动释放,因此使用完之后要记着释放。如果有多次测试数据,那么若不释放会导致内存泄露。