#include <stdio.h>
#include <string.h>
#define MaxSize 30
struct student {
int num; /*學號*/
char name[20]={'/0'}; /* 姓名*/
int chinese, english,math; /*三門課成績*/
float average; /*個人平均成績*/
};
/*輸入函式*/
void new_student(struct student students[])
{
int i, n,Count;
if(Count==MaxSize){
printf("full!\n");
return;
}
printf("請輸入該學生的號數:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("請輸入該學生的學號:");
scanf("%d",&students[i].num);
printf("請輸入該學生的姓名:");
scanf("%s",&students[i].name);
printf("請輸入該學生的語文成績:");
scanf("%d",&students[i].chinese);
printf("請輸入該學生的數學成績:");
scanf("%d",&students[i].math);
printf("請輸入該學生的英語成績:");
scanf("%d",&students[i].english);
Count++;
}
}
/*輸出函式*/
void output_student(struct student students[])
{
int i,Count;
if(Count==0){
printf("\n");
return;
}
printf(" num\t name\t chinese\t math\t english\t average\n");
for(i=0;i<Count;i++){
printf("%d\t",students[i].num);
printf("%s\t",students[i].name);
printf("%d\t",students[i].chinese);
printf("%d\t",students[i].math);
printf("%d\t",students[i].english);
printf("%f\t\n",students[i].average);
}
}
/*計算平均成績函式*/
void average(struct student s[])
{
int i;
int Count;
for(i=0;i<Count;i++)
s[i].average = (s[i].chinese + s[i].math + s[i].english) /3.0;
}
/*平均成績排序函式*/
void sort (struct student s[])
{
struct student temp;
int i,index,j;
int Count;
for(i=0;i<Count-1;++i)
{
index=i;
for(j+1;j<Count;j++)
if(s[j].average>s[index].average)
index=j;
temp=s[index];
s[index]=s[i];
s[i]=temp;
}
}
/*修改成績函式*/
void modify(struct student *p)
{
int num, course,score,i,Count;
printf("請輸入成績要被修改的學生的姓名:");
scanf("%d",&num);
printf("選擇課程:1.chinese 2.math 3.english:");
scanf("%d",&course);
printf("輸入新的成績:");
scanf("%d",&score);
for(i=0;i<Count;i++,p++)
if(p->num==num)
break;
if(i<Count)
switch(course)
{
case1:p->chinese=score;break;
case2:p->math=score;break;
case3:p->english=score;break;
}
}
/*查詢學生資訊函式*/
void search_student(struct student students[], int num)
{
int i,flag=0,Count;
if(Count==0){
printf("\n");
return;
}
for(i=0;i<Count;i++)
if(students[i].num==num){
flag=1;
break;
}
if(flag){
printf("num:%d",students[i].num);
printf("name:%s",students[i].name);
printf("chinese:%d",students[i].chinese);
printf("math:%d",students[i].math);
printf("english%d",students[i].english);
printf("average:%.2f\n",students[i].average);
}
else
printf("查找不到!");
}
int main(void)
{
struct student students[MaxSize]; /*定義學生資訊陣列*/
new_student(students); /*輸入學生資訊結構陣列*/
output_student(students); /*顯示輸入學生資訊結構陣列*/
average(students); /*計算每個學生的平均成績*/
sort(students); /*按學生的平均成績排序*/
output_student(students); /*顯示排序后的結構陣列*/
modify(students); /*修改指定輸入的學生資訊*/
output_student(students); /*顯示修改后的結構陣列*/
return 0;
}
uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
#define MaxSize 30
struct student {
int num; /*學號*/
//char name[20]={'/0'}; /* 姓名*/
char name[20];
int chinese, english,math; /*三門課成績*/
float average; /*個人平均成績*/
};
int Count;
/*輸入函式*/
void new_student(struct student students[])
{
int i, n;//,Count; //定義成全域變數吧
if(Count==MaxSize){
printf("full!\n");
return;
}
printf("請輸入該學生的個數:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("請輸入該學生的學號:");
scanf("%d",&students[i].num);
printf("請輸入該學生的姓名:");
//scanf("%s",&students[i].name);
scanf("%s", students[i].name);
printf("請輸入該學生的語文成績:");
scanf("%d",&students[i].chinese);
printf("請輸入該學生的數學成績:");
scanf("%d",&students[i].math);
printf("請輸入該學生的英語成績:");
scanf("%d",&students[i].english);
Count++;
}
}
/*輸出函式*/
void output_student(struct student students[])
{
int i;//,Count;
if(Count==0){
printf("\n");
return;
}
printf(" num\t name\t chinese\t math\t english\t average\n");
for(i=0;i<Count;i++){
printf("%d\t",students[i].num);
printf("%s\t",students[i].name);
printf("%d\t",students[i].chinese);
printf("%d\t",students[i].math);
printf("%d\t",students[i].english);
printf("%f\t\n",students[i].average);
}
}
/*計算平均成績函式*/
void average(struct student s[])
{
int i;
//int Count;
for(i=0;i<Count;i++)
s[i].average = (s[i].chinese + s[i].math + s[i].english) /3.0;
}
/*平均成績排序函式*/
void sort (struct student s[])
{
struct student temp;
int i,index,j;
//int Count;
for(i=0;i<Count-1;++i)
{
index=i;
for(j+1;j<Count;j++)
if(s[j].average>s[index].average)
index=j;
temp=s[index];
s[index]=s[i];
s[i]=temp;
}
}
/*修改成績函式*/
void modify(struct student *p)
{
int num, course,score,i;//,Count;
printf("請輸入成績要被修改的學生的姓名:");
scanf("%d",&num);
printf("選擇課程:1.chinese 2.math 3.english:");
scanf("%d",&course);
printf("輸入新的成績:");
scanf("%d",&score);
for(i=0;i<Count;i++,p++)
if(p->num==num)
break;
if(i > Count)
return;
switch(course)
{
case 1:p->chinese=score;break;
case 2:p->math=score;break;
case 3:p->english=score;break;
}
}
/*查詢學生資訊函式*/
void search_student(struct student students[], int num)
{
int i,flag=0;//,Count;
if(Count==0){
printf("\n");
return;
}
for(i=0;i<Count;i++)
if(students[i].num==num){
flag=1;
break;
}
if(flag){
printf("num:%d",students[i].num);
printf("name:%s",students[i].name);
printf("chinese:%d",students[i].chinese);
printf("math:%d",students[i].math);
printf("english%d",students[i].english);
printf("average:%.2f\n",students[i].average);
}
else
printf("查找不到!");
}
int main(void)
{
struct student students[MaxSize]; /*定義學生資訊陣列*/
new_student(students); /*輸入學生資訊結構陣列*/
output_student(students); /*顯示輸入學生資訊結構陣列*/
average(students); /*計算每個學生的平均成績*/
sort(students); /*按學生的平均成績排序*/
output_student(students); /*顯示排序后的結構陣列*/
modify(students); /*修改指定輸入的學生資訊*/
output_student(students); /*顯示修改后的結構陣列*/
return 0;
}
供參考~
區域變數未初始化就比較
改成全域變數,其他問題詳見代碼~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/252769.html
標籤:C語言
上一篇:PAT甲級1017. Queueing at Bank (25) [模擬] 最后一個測驗點求救!!
下一篇:求大神指點啊
