1185:添加記錄(結構體專題)
題目描述:
有一學生成績表,包括學號、姓名、3門課程成績,已知該成績表按學號升序排序,請編程實作,添加一個新的學生資訊,且使成績表仍按學號有序;若待添加的學號與已有學號重復,則輸出錯誤資訊,拒絕添加,
輸入:
首先輸入一個整數n(1<=n<=100),表示學生人數;
然后輸入n行,每行包含一個學生的資訊:學號(12位)、姓名(不含空格且不超過20位),以及3個整數,表示3門課成績,資料之間用空格隔開,
最后一行輸入一個待添加的學生資訊,包括學號、姓名和3門課成績
輸出:
若待添加的學號與已有學號重復,則輸出只有一行“error!”;否則,輸出n+1行,即添加后的成績單資訊,
樣例輸入:
3
541207010188 Zhangling 78 95 55
541207010189 Wangli 87 99 88
541207010191 Fangfang 68 76 75
541207010190 Lilei 68 79 82
樣例輸出:
541207010188 Zhangling 78 95 55
541207010189 Wangli 87 99 88
541207010190 Lilei 68 79 82
541207010191 Fangfang 68 76 75
代碼:
#include<stdio.h>
#include<stdlib.h>
typedef struct stu{
char num[15];
char name[25];
int a, b, c;
}STU;
int main()
{
int n, i, f = -2; //f作為標志變數,因為下面我用f同時表示了可插入資料時,資料的位置,所以f初始值為負數,防止與下面內容沖突
char s[15];
STU *a,ex; //ex是額外加入的資料
scanf("%d",&n);
a = (STU *)malloc(sizeof(STU)*n);
//此處可以使用申請記憶體的方法,也可以使用STU a[n];的方式
for(i = 0; i < n; i++){
scanf("%s",a[i].num);
scanf("%s",a[i].name);
scanf("%d %d %d",&a[i].a,&a[i].b,&a[i].c);
}
scanf("%s%s%d%d%d",ex.num,ex.name,&ex.a,&ex.b,&ex.c);
for(i = 0; i < n; i++){
if(strcmp(ex.num,a[i].num) == 0){
f = -1;
break;
}
if(strcmp(ex.num,a[i].num) < 0){
f = i;
break;
}
}
/*輸出時直接將回圈在f處截斷,輸出額外資料后繼續回圈*/
if(f == -1){
printf("error!");
return 0;
}
else if(f == -2){
for(i = 0; i < n; i++)
printf("%s %s %d %d %d\n",a[i].num,a[i].name,a[i].a,a[i].b,a[i].c);
printf("%s %s %d %d %d\n",ex.num,ex.name,ex.a,ex.b,ex.c);
return 0;
}
else{
for(i = 0; i < f; i++)
printf("%s %s %d %d %d\n",a[i].num,a[i].name,a[i].a,a[i].b,a[i].c);
printf("%s %s %d %d %d\n",ex.num,ex.name,ex.a,ex.b,ex.c);
for(i = f; i < n; i++)
printf("%s %s %d %d %d\n",a[i].num,a[i].name,a[i].a,a[i].b,a[i].c);
return 0;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262626.html
標籤:其他
