您的位置:首页 > 编程语言 > C语言/C++

简单的指针应用 成绩表 c语言

2017-12-22 23:25 232 查看
实验要求 然后出现一些问题 这里总结一下

先贴出源代码

#include <stdio.h>

void average(float (*score)[4],int n)  //这里的【4】应该是每行包括的个数
{
int i;
n-=1;  //计算机从0开始 所以计算机里面的0就是人类的1
float sum=0;
for(i=0;i<5;i++)
sum+=*(*(score+i)+n);
printf("第%d门课程的平均成绩%.2f\n\n",n+1,sum/5.0);
}

void search(float (*score)[4])
{
int flag,i,j;
int k;
float sum=0;
for(i=0;i<5;i++)
{
flag=0;
for(j=0;j<4;j++)
//判断成绩
if(*(*(score+i)+j)<60)  flag++;  //统计课程数目

if(flag>=2)
{printf("NO %d:学生有%d课程不及格\n",i+1,flag);
printf("-----------各科成绩为----------\n");
for(k=0;k<4;k++)
{printf("%.2f  ",*(*(score+i)+k));
sum+=*(*(score+i)+k);}
printf("\n         平均成绩为%.2f\n",sum/4.0);
putchar('\n');}

}
}
void search2(float (*score)[4])
{
float sum[5];   //用来求平均数
int i,j;
int flag;     //统计85分以上的科目
int k;
for(i=0;i<5;i++){
flag=0;
for(j=0;j<4;j++){
sum[i]+=*(*(score+i)+j);
if(*(*(score+i)+j)>=85)  flag++;}
//判断学生是否优秀
if((sum[i]/4)>=90||flag==4){
printf("No %d :成绩优秀\n",i+1);
printf("--------各科成绩分数为----------\n");
for(k=0;k<4;k++)
printf("%.2f ",*(*(score+i)+k));

putchar('\n');
printf("       平均成绩为:%.2f\n\n",sum[i]/4.0);
}
}
}
int main()
{
int n;
//随机写了学生的成绩
float score[5][4]={{98,99,97,95},
{85,65,78,98},
{45,65,55,98},
{78,98,56,80},
{56,78,98,85}};
int i,j;
//输出学生的成绩
printf("全班5名学生参加了4们考试");
printf("\n---------成绩如下---------\n");
for( i=0;i<5;i++){
printf("NO %d:",i+1);
for(j=0;j<4;j++)
printf("%4.0f",score[i][j]);

putchar('\n');}
// 求第一门课程的成绩 这里设计的比较人性化
printf("\n请输入你要查询的课程的平均成绩:");
scanf("%d",&n);
putchar('\n');
average(score,n);
//找不及格的学生
search(score);
//找优秀的学生
search2(score);

printf("by \n");
return 0;
}




首先是前面文章提到的行指针

(*score)[4];
//score[5][4];


因为是行指针所以必须[ ]中的个数应该是这一行中的个数

void f(float (*score)[])
//这样填写形参系统会报错
//因为传入形参有[]这个的只有最里面的不用写个数


因为传入形参有[]这个的只有最里面的不用写个数

只有填写了 系统才能知道是行还是列

//这里为实验感悟
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 实验 指针