題目為譚浩強c程式設計的p292 T15。我寫的代碼如下(初學者代碼不好看抱歉)
#include<stdio.h>
void aver(int (*p)[5]);
void fail(int (*p)[5],int *pn,int x);
void good(int (*p)[5],int *pn,int x);
void aver(int (*p)[5]) //求第一門課的平均分
{
int i,j,sum=0;
for(i=0,j=0;i<20;i++)
{
if(i%5==0)sum+=(*(*p+i)+j);
}
sum=sum/4;
printf("第一門課程的平均分為:%d\n",sum);
}
void fail(int (*p)[5],int *pn,int x) //找兩門課不及格的學生,并輸出學號、成績
{
int i,j,flag;
for(i=0;i<x;i++,pn++)
{
flag=0;
for(j=0;j<5;j++)
{
if(*(*(p+i)+j)<60)flag+=1;
}
if(flag>=2)
{
printf("No.%d 不及格,他的全部成績為:\n",*pn);
for(j=0;j<5;j++)printf("%5d",*(*(p+i)+j));
printf("\n");
}
}
}
void good(int (*p)[5],int *pn,int x) //找出平均成績在90以上或全成績在85以上的學生
{
int i,j,flag,sum,goodstudent[5];
printf("成績優秀學生的學號為:");
for(i=0;i<x;i++,pn++)
{
sum=0;
flag=0;
for(j=0;j<5;j++)
{
sum+=(*(*p+i)+j);//這里好像出了問題,回圈一次就多加了數字
printf("\nsumA=%d\n",sum);
if(*(*(p+i)+j)>85)flag+=1;
}
if(flag==5)goodstudent[i]=*pn;
else if(sum/4>90)goodstudent[i]=*pn;
printf("sumB=%d",sum);
}
for(i=0;i<4;i++)printf("%3d",goodstudent[i]);
}
int main()
{
int i,j,score[4][5],num[4];
int *pnum,(*pscore)[5];
printf("請輸入學號:\n");
for(i=0;i<4;i++)scanf("%d",&num[i]);
pnum=&num[0];
for(i=0;i<4;i++,pnum++)
{
printf("請輸入%d號學生的成績:",*pnum);
for(j=0;j<5;j++)
{
scanf("%d",&score[i][j]);
}
getchar();
}
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(score[i][j]>100||score[i][j]<0)printf("第%d行資料有誤!\n",i+1);
}
}
pscore=score;
aver(pscore);
pnum=&num[0];
pscore=score;
fail(pscore,pnum,4);
pscore=score;
pnum=&num[0];
good(pscore,pnum,4);
printf("\n");
return 0;
}
以下為運行結果
請輸入學號:
1 5 2 4
請輸入1號學生的成績:90 90 90 90 90
請輸入5號學生的成績:80 80 80 80 80
請輸入2號學生的成績:70 70 70 70 70
請輸入4號學生的成績:50 50 50 50 50
第一門課程的平均分為:72
No.4 不及格,他的全部成績為:
50 50 50 50 50
成績優秀學生的學號為:
sumA=90
sumA=181 //90+90+1
sumA=273 //90+90+1+90+2 不知為何
sumA=366
sumA=460
sumB=460
sumA=90 //以下重復
sumA=181
sumA=273
sumA=366
sumA=460
sumB=460
sumA=90
sumA=181
sumA=273
sumA=366
sumA=460
sumB=460
sumA=90
sumA=181
sumA=273
sumA=366
sumA=460
sumB=460 1 5 2 4
Press any key to continue
求解惑
uj5u.com熱心網友回復:
修改如下,供參考:#include<stdio.h>
void aver(int (*p)[5]);
void fail(int (*p)[5],int *pn,int x);
void good(int (*p)[5],int *pn,int x);
void aver(int (*p)[5]) //求第一門課的平均分
{
int i,j,sum=0;
for(i=0,j=0;i<20;i++)
{
if(i%5==0)sum+=(*(*p+i)+j);
}
sum=sum/4;
printf("第一門課程的平均分為:%d\n",sum);
}
void fail(int (*p)[5],int *pn,int x) //找兩門課不及格的學生,并輸出學號、成績
{
int i,j,flag;
for(i=0;i<x;i++,pn++)
{
flag=0;
for(j=0;j<5;j++)
{
if(*(*(p+i)+j)<60)flag+=1;
}
if(flag>=2)
{
printf("No.%d 不及格,他的全部成績為:\n",*pn);
for(j=0;j<5;j++)printf("%5d",*(*(p+i)+j));
printf("\n");
}
}
}
void good(int (*p)[5],int *pn,int x)//找出平均成績在90以上或全成績在85以上的學生
{
int i,j,k=0,flag,sum,goodstudent[5]; //增加一個變數k
printf("成績優秀學生的學號為:");
for(i=0;i<x;i++,pn++)
{
sum=0;
flag=0;
for(j=0;j<5;j++)
{
sum += *(*(p+i)+j); //sum+=(*(*p+i)+j);這里好像出了問題,回圈一次就多加了數字
//printf("\nsumA=%d\n",sum);
if(*(*(p+i)+j)>85) flag += 1;
}
if(flag==5 || sum/5>=90) goodstudent[k++]= *pn;
//else
// if(sum/4>90) goodstudent[i]=*pn;
// printf("sumB=%d",sum);
}
for(i=0;i<k;i++) printf("%3d",goodstudent[i]);
}
int main()
{
int i,j,score[4][5],num[4];
int *pnum,(*pscore)[5];
printf("請輸入學號:\n");
for(i=0;i<4;i++)scanf("%d",&num[i]);
pnum=&num[0];
for(i=0;i<4;i++,pnum++)
{
printf("請輸入%d號學生的成績:",*pnum);
for(j=0;j<5;j++)
{
scanf("%d",&score[i][j]);
}
getchar();
}
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(score[i][j]>100||score[i][j]<0)printf("第%d行資料有誤!\n",i+1);
}
}
pscore=score;
aver(pscore); //第一門課平均分
pnum=&num[0];
pscore=score;
fail(pscore,pnum,4);//兩門課不及格的學生
pscore=score;
pnum=&num[0];
good(pscore,pnum,4);//優秀學生
printf("\n");
system("pause");
return 0;
}
uj5u.com熱心網友回復:
第58行 for(i=0;i<k;i++) printf("%3d",goodstudent[i]);//for(i=0;i<4;i++)printf("%3d",goodstudent[i]);
uj5u.com熱心網友回復:
感謝dalao轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234070.html
標籤:C語言
上一篇:新手原始碼,求幫查錯
下一篇:c語言
