(注:暫時先記錄這些問題,后期再持續更新)
1,輸入一個正整數n,再輸入n個學生的成績,計算平均分,並統計不及格成績的學生人數。
int count,i,n; //count 為記錄不及格成績的個數 double grade,total; //grade 存放輸入的成績,total保存成績之和 printf("Enter n:"); scanf("%d",&n); //輸入學生人數n total = 0; count = 0; for(i=1;i<=n;i++){ printf("Enter grade #%d:",i); scanf("%lf",&grade); //輸入第i個成績 total = total + grade; if(grade<60){ //統計不及格的學生人數 count++; } } printf("Grade average = %.2f\n",total/n); printf("Number of failures = %d\n",count); return 0;
2,輸入一批學生的成績,以負數作為結束標志,計算平均成績,並統計不及格人數。
int count,num; //count 為記錄不及格成績的個數;num 為記錄輸入的個數 double grade,total; //grade 存放輸入的成績,total保存成績之和 num = 0; total = 0; count = 0; printf("Enter grades:"); scanf("%lf",&grade); while(grade>=0){ total = total+grade; //累加成績 num++; //計數 if(grade<60) count++; scanf("%lf",&grade); //讀入一個新數據,為下次循環做豬呢比 } if(num != 0){ printf("Grade average = %.2f\n",total/num); printf("Number of failures is %d\n",count); } else printf("Grade average is 0\n"); return 0;
3,從輸入的n個成績中選出最高分,用for語句實現。
int i,mark,max,n; printf("Enter n:"); scanf("%d",&n); //輸入數據個數 printf("Enter %d marks:",n); scanf("%d",&mark); //讀入第一個成績 max = mark; for(i=1;i<n;i++){ scanf("%d",&mark); if(max<mark) max = mark; } printf("Max = %d\n",max); return 0;
注:若輸入的一批以負數結束的成績中選出最高分,可以用while語句實現。
4,輸入n個學生的成績信息,計算並輸出每個學生的個人平均成績(結構變量作為函數參數)。
struct student{ //學生信息結構定義 int num; //學號 char name[10]; //姓名 int computer,english,math; //三門課程成績 double average; //個人平均成績 }; double count_average(struct student s); //函數聲明,計算個人平均成績 int main(void) { int i,n; struct student s1; //定義結構變量 printf("Input n:"); scanf("%d",&n); printf("Input the student's number,name,course scores\n"); for(i=1;i<=n;i++){ printf("No.%d:",i); scanf("%d%s%d%d%d",&s1.num,&s1.name,&s1.math,&s1.english,&s1.computer); s1.average = count_average(s1); //函數調用,結構變量作為函數參數 printf("num:%d,name:%s,average:%.2lf\n",s1.num,s1.name,s1.average); } return 0; } double count_average(struct student s) { return (s.math + s.english + s.computer)/3.0; }
5,輸入n(n<50)個學生的成績信息,按照學生的個人平均成績從高到低輸出他們的信息。
struct student{ //學生信息結構定義 int num; //學號 char name[10]; //姓名 int computer,english,math; //三門課程成績 double average; //個人平均成績 }; int main(void) { int i,index,j,n; struct student students[50],temp; //定義結構數組 double count_average(struct student s); /* 輸入*/ printf("Input n:"); scanf("%d",&n); for(i=0;i<n;i++){ printf("Input the info of No.%d:\n",i+1); printf("number:"); scanf("%d",&students[i].num); printf("name:"); scanf("%s",&students[i].name); printf("math.score:"); scanf("%s",&students[i].math); printf("english.score:"); scanf("%s",&students[i].english); printf("computer.score:"); scanf("%s",&students[i].computer); students[i].average = count_average(students[i]); } /* 結構數組排序,選擇排序法*/ for(i=0;i<n-1;i++){ index = i; for(j=i+1;j<n;j++) if(students[j].average>students[index].average) //比較平均成績 index = j; temp = students[index]; //交換數組元素 students[index] = students[i]; students[i] = temp; } /* 輸出排序后的信息*/ printf("num\tname\taverage\n"); for(i=0;i<n;i++) printf("%d\t%s\t%.2lf\n",students[i].num,students[i].name,students[i].average); return 0; } double count_average(struct student s) { return (s.math + s.english + s.computer)/3.0; }
注:本題中,定義了結構數組students用於存儲學生信息,先輸入n個學生的基本信息,其中個人平均成績的計算通過調用函數count_average()實現,然后使用選擇排序法根據個人平均成績從高到低對學生的信息排序,最后按順序輸出結構數組中的數據。