輸入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函式
- C#方法 實現輸入成績顯示等級C#
- 3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
- mysql重點題目--查詢“01“課程比“02“課程成績高的學生的資訊及課程分數MySql
- 演示 資料型別 陣列名[]=new 資料型別[大小],迴圈輸入5個成績,儲存到double陣列,並輸出資料型別陣列
- 新手學python之Python的輸入輸出函式Python函式
- XNMySQL實戰視窗函式SQL分析班級學生考試成績及生活消費rmqMySql函式MQ
- 輸入3個整數a,b,c,要求按由小到大的順序將它們輸出,用函式實現函式
- C語言_輸入輸出函式_PAGE5C語言函式
- ncurses輸入函式:字元+字串的輸入函式字元字串
- 箭頭函式和普通函式的10個區別函式
- SparkSQL練習:對學生選課成績進行分析計算SparkSQL
- 用listagg函式分組實現列轉行函式
- 5-快速入門Python函式使用Python函式
- 正規表示式的應用實現郵箱輸入
- 常用輸入輸出函式函式
- --查詢班級表、課程表、學生選課表、學生表、成績表、15(3+2)計算
- 用case實現成績優良差的判斷
- H5實現輸入框新增語音功能的方法詳解H5
- 百分制成績轉換為五級分製成績(8分) 題目內容: 編寫程式,輸入一個百分制成績,輸出所對應的成績等級“ A ”、“ B ”、“ C ”、“ D ”、“ E ”。 (使用switch語句) 轉換原則為:
- Spring Boot入門系列(十六)使用pagehelper實現分頁功能Spring Boot
- SQL輕鬆入門(5):視窗函式SQL函式
- 一、輸入一個數(這裡用函式實現) 1.輸出它是幾位數 2.逆序輸出 3.正序輸出函式
- 輸出輸入函式彙總函式
- 利用指標實現strncmp函式功能指標函式
- Python常用函式有哪些?Python基礎入門課程Python函式
- OpenFaaS實戰之二:函式入門函式
- 利用可變長度引數定義一個函式,輸入為任意個數的數值,功能為對輸入資料求和並輸出;函式
- Python基礎入門(5)- 函式的定義與使用Python函式
- Python入門-函式Python函式
- 前端入門——函式前端函式
- 11函式入門函式
- 生成函式入門函式
- Java Swing+Mysql+beautyEye(介面優美)學校成績管理系統(管理員/學生/教師,資訊管理/選課管理/成績管理)JavaMySql
- QImage:使用QImage建構函式載入影像和使用成員函式loadFromData載入影像的區別函式
- python入門必會的助手函式:dir()函式Python函式