輸入10個學生5門課的成績,分別用函式實現下列功能:
這個題目本身不難,但對於我們學C的人說,在熟悉各類語法及結構方面有非常好的作用。這個題目既可以用簡單的方法例如定義幾個函式分別處理上述問題,由於題目要用的重複資料較多,故建議定義一個全域性陣列以便編碼。本人剛學完結構體和指標,在閱讀完譚教授的教材後,覺得這個題目非常適合練習使用指標,而結構體對於這個題目也具有一定的方便性但不是很明顯,相信如果是用編譯器列印學生的成績,涉及資料更多時,若使用結構體將會使問題更加簡單。
下面是用結構體和指標解決這個題目的程式碼:
#include <stdio.h>
#include <stdlib.h>
struct Student
{
float score[5];
float average;//學生成績變數
float aver[5];//學科成績變數
}student[10];//定義結構體變數student
int main()
{
void input();
void average();
void compare();
void print();
input();
average();
compare();
print();
}
void input()//定義輸入函式
{
int i;
printf("請分別輸入10個同學5門課的成績:");
for(i=0;i<10;i++)
scanf("%f%f%f%f%f",&student[i].score[0],&student[i].score[1],
&student[i].score[2],&student[i].score[3],&student[i].score[4]);
}
void average()
{
struct Student *p;
float sum=0;int i;
for(p=student;p<student+10;p++)
{
for(i=0;i<5;i++)
sum=sum+p->score[i];
p->average = sum/5.0;sum=0;
}//學生平均成績
sum=0;//sum置0
for(i=0;i<5;i++)
{
for(p=student;p<student+10;p++)
sum+=p->score[i];
p->aver[i] = sum/10.0;sum=0;//學科成績都放入結構體陣列最後一個的aver中 省去定義一個新陣列的麻煩,但好像沒有可移植性
}//有點缺陷但可以用 ps:浪費了結構體中的9個aver陣列因為只用了一個而且後邊列印要繞一下
}
void print()//順帶求方差
{
struct Student *p;
int i=1;
printf("學生平均分是:\n");
for(p=student;p<student+10;p++,i++)
printf("No.%d : %.1f\n",i,p->average);
printf("學科平均分是:\n");
for(i=0;i<5;i++)//此時p已經執行結構體陣列最後一個
printf("學科%d: %.1f\n",i+1,p->aver[i]);
float sum1=0,sum2=0,s;
for(p=student;p<student+10;p++)
sum1+=(p->average)*(p->average);sum2+=p->average;
printf("\t方差是: %.4f",s=sum1/10+sum2/10*sum2/10);
}
void compare()
{
struct Student *p;
int i,j,max;
for(i=0;i<10;i++)
for(j=0;j<5;j++)
if(student[i].score[j]>=max){max=student[i].score[j];}//找出最大值
for(i=0;i<10;i++)
for(j=0;j<5;j++)
if(student[i].score[j]>=max)printf("No.%d的學科%d分數最高\n",i+1,j+1);
//遍歷陣列,找出對應最大值的學生序號季學科
}
希望上述內容能在各位的學習過程中起到一點小幫助。
相關文章
- 建立動態陣列,輸入5個學生的成績,另外用一個函式檢查其中有無低於60分的,輸出不合格的成績陣列函式
- 21.C++實現計算八個學生的平均成績C++
- 查詢各課程成績第一的學生的資訊
- 用 splice函式分別實現 push、pop、shift、unshi函式
- 3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
- 第十八章 34用過載輸入運算子函式實現字串的輸入函式字串
- mysql重點題目--查詢“01“課程比“02“課程成績高的學生的資訊及課程分數MySql
- 演示 資料型別 陣列名[]=new 資料型別[大小],迴圈輸入5個成績,儲存到double陣列,並輸出資料型別陣列
- XNMySQL實戰視窗函式SQL分析班級學生考試成績及生活消費rmqMySql函式MQ
- Excel函式應用教程:函式的輸入方法(轉)Excel函式
- SparkSQL練習:對學生選課成績進行分析計算SparkSQL
- 郵箱輸入實現型別自動提示功能型別
- --查詢班級表、課程表、學生選課表、學生表、成績表、15(3+2)計算
- [PY3]——函式——函式註解 | 實現型別檢查功能函式型別
- 輸入3個整數a,b,c,要求按由小到大的順序將它們輸出,用函式實現函式
- ncurses輸入函式:字元+字串的輸入函式字元字串
- SUMIF、COUNTIF和SUMPRODUCT函式在成績統計中的應用函式
- 百分制成績轉換為五級分製成績(8分) 題目內容: 編寫程式,輸入一個百分制成績,輸出所對應的成績等級“ A ”、“ B ”、“ C ”、“ D ”、“ E ”。 (使用switch語句) 轉換原則為:
- 用case實現成績優良差的判斷
- 介紹PHP中的10個實用函式PHP函式
- 正規表示式的應用實現郵箱輸入
- 新手學python之Python的輸入輸出函式Python函式
- 【機器學習PAI實踐八】用機器學習演算法評估學生考試成績機器學習AI演算法
- 常用輸入輸出函式函式
- H5實現輸入框新增語音功能的方法詳解H5
- 箭頭函式和普通函式的10個區別函式
- 用除法實現查詢選修了所有課程的學生
- 軟體工程系今年研究生入學考試成績軟體工程
- PAT1004成績排名(java實現)Java
- 與小卡特一起學python 第5章 輸入 5-1,2,3,4 input()輸入函式Python函式
- Java Swing+Mysql+beautyEye(介面優美)學校成績管理系統(管理員/學生/教師,資訊管理/選課管理/成績管理)JavaMySql
- 學生成績判斷函式介面函式
- 5-快速入門Python函式使用Python函式
- SQL輕鬆入門(5):視窗函式SQL函式
- C#函式實現的小功能集合C#函式
- Spring Boot入門系列(十六)使用pagehelper實現分頁功能Spring Boot
- 一、輸入一個數(這裡用函式實現) 1.輸出它是幾位數 2.逆序輸出 3.正序輸出函式
- YTUOJ-學生成績輸入和輸出(使用者自定義型別)型別