C语言实验测试
1. 已知学生的成绩信息如文件student.txt所示, 编写一个程序,读入学生信息,用户输入查询方式(1 按学号查; 2 按成绩查; 3 按姓名查),给出查询结果。可多次查询,按0键退出。
注: 1、student.txt中每行依次为 学号、姓名、性别、成绩。
2、已知学生人数少于100,但不知确切人数。
3、注意:可能有多人有相同的成绩,请输出所有的符合条件的学生。
参考界面如下所示:
附加题:
a. 编写一个函数,实现与strcat一样的功能。
char *strcat(s,ct),参见附录B.3
b. 编写一个函数,实现与strcpy一样的功能。
char *strcpy(s,ct) ,参见附录B.3
评分标准:
1、 完成基本题得5分;
2、 前20%完成基本题(每班10人)+1分;
3、 代码可读性非常强+1分;
(包括: a、缩进、排版格式符合规范;
b、变量、函数命名合理易读;
c、函数封装合理,程序条理清晰、结构化强;
d、有适当的注释说明。)
4、 完成基本题后完成附加题+1分;
5、 完成基本题后实现按学号查找的快速查找+1分,再实现按成绩查找的快速查找+1分。
(提示:先排序再二分查找。
学号是一一对应的,成绩则可能有多人相同。)
附件为:student.txt
内容如下
90 王晶 男 91.5
105 武迪 男 97
71 缪晓晴 女 92
7 曹元 男 92
74 蒲殷 女 90
94 王彤晖 女 91
99 王志孟 女 82
44 李辑 男 80
113 徐姝姝 女 85
104 朱青 女 80
14 姜振国 男 93
117 杨金超 男 84
68 马晓宇 男 71
41 瞿文心 女 89.5
140 周春城 女 93
126 张明洁 女 95.5
127 张奇 124 张欢 17 谌尧 100 魏耀 64 陆海岚 143 周强 139 郑吉君 125 张金龙 142 周凯 45 李加磊 男 94
女 80
女 92
男 81
女 87
男 90
男 87
男 82
男 82
男 79
135 赵清源 女 87.5
2 鲍绪良 男 80
80 沙睿 男 0
86 王常露 女 66
5 曹洁 女 70
147 周晔 男 70
69 马炎 女 76.5
149 朱青 女 73
95 王小军 男 90
57 刘虎 男 84
122 俞佳嘉 女 86
65 陆慧 女 91.5
21 凡金龙 男 75
47 李茜 女 67
33 华阳 女 87
87 王大千 男 85
28 陶纪元 56 刘大力 21 石飞 55 刘爱洲 114 徐鑫 144 周舒篁 15 陈烨 59 刘凌 24 高尚 13 丁辉 男 80
男 81
男 91
男 77
女 90
女 72
女 60
女 0
女 81
男 65
43 李冬华 男 76
111 徐登山 男 87
63 陆保国 男 63
121 殷陆斌 85 汤溢 154 张三 75 李四 98 赵五 107 钱六 24 孙七 73 李八 NJU Student
男 82
女 65
男 62
女 67.5
男 75
女 70
男 78
女 60
解答
#include \"stdafx.h\"
#include #include #include \"stdlib.h\" struct stu_info{ int index; float score; char *name; char *gender; }; const int maxn = 1000; const int max_len = 100; int main() { int n, i, index, tot, flag, mark; float score; char str[max_len], str1[maxn][max_len], str2[maxn][max_len]; struct stu_info stu[maxn]; FILE *fp; if ((fp = fopen(\"D:\\\\2011-c语言\\\\student.txt\ printf(\"No Student Infomation Existed\\n\"); system(\"pause\"); return 0; } tot = 0; while (! feof(fp)) { fscanf(fp, \"%d %s %s %f\\n\ stu[tot].index = index; stu[tot].score = score; stu[tot].name = str1[tot]; stu[tot].gender = str2[tot]; tot ++; }; fclose(fp); printf(\"Welcome to Student Infomation Inquiry System\\n\"); flag = -1; while (flag != 0) { switch (flag) { case -1 : for (i = 0; i < 30; i ++) printf(\"*\"); printf(\"\\n\"); printf(\"请选择查询方式: 1 按学号查询; 2 按成绩查询; 3 按姓名查询;0 退出\\n\"); scanf(\"%d\ break; case 1 : printf(\"请输入学号:\\n\"); scanf(\"%d\ mark = 0; for (i = 0; i < tot; i ++) if (index == stu[i].index) { printf(\"%4d %4s %4s stu[i].name, stu[i].gender, stu[i].score); mark = 1; } %8.1f\\n\stu[i].index, if (mark == 0) printf(\"No Match!\\n\"); flag = -1; break; case 2 : printf(\"请输入成绩:\\n\"); scanf(\"%f\ mark = 0; for (i = 0; i < tot; i ++) if (score == stu[i].score) { printf(\"%4d %4s %4s %8.1f\\n\stu[i].name, stu[i].gender, stu[i].score); mark = 1; } if (mark == 0) printf(\"No Match!\\n\"); flag = -1; stu[i].index, break; case 3 : printf(\"请输入姓名:\\n\"); scanf(\"%s\ mark = 0; for (i = 0; i < tot; i ++) if (strcmp(str, stu[i].name) == 0) { printf(\"%4d %4s %4s %8.1f\\n\stu[i].name, stu[i].gender, stu[i].score); mark = 1; } if (mark == 0) printf(\"No Match!\\n\"); flag = -1; break; default : break; stu[i].index, } } return 0; } #include \"stdafx.h\" #include #include #include \"stdlib.h\" struct Student_type{ int num; float results; char name[8]; char sex[2]; }stud[100]; int main() { FILE *fp; if ((fp = fopen(\"D:\\\\2011-c语言\\\\student.txt\ printf(\"No Student Infomation Existed\\n\"); exit(0); } int i = 0; while (! feof(fp)) { fscanf(fp, \"%d %s %s %f\\n\&stud[i].num, stud[i].name, &stud[i].results); i ++; }; stud[i].sex, fclose(fp); A: printf(\"*************************\\n\"); printf(\"请输入查询方式:1 按学号查;2 按成绩查;3 按姓名查;4 请输入性别;0 退出\\n\"); int CHAXUN,num,j,k; int mark=0; float results; float a[100]; char str1[8],str2[2]; printf(\"查询方式:\"); scanf(\"%d\ if (CHAXUN==0) goto B; switch (CHAXUN) { case 1: printf(\"请输入学号:\\n\"); scanf(\"%d\ for(j=0;j<3;j++) {if(stud[j].num==num) printf(\"%10d %10s %10s %12.1f\\n\stud[j].results), mark=1; } if(mark==0) printf(\"No match!\\n\"); break; case 2: stud[j].num, stud[j].name, stud[j].sex, printf(\"请输入成绩:\\n\"); scanf(\"%f\ for(j=0;j<100;j++) {if(stud[j].results==results) printf(\"%10d %10s %10s %12.1f\\n\stud[j].results), mark=1; } if(mark==0) printf(\"No match!\\n\"); break; case 3: printf(\"请输入姓名:\\n\"); scanf(\"%s\ stud[j].num, stud[j].name, stud[j].sex, for(j=0;j<100;j++) {if (strcmp(str1,stud[j].name) ==0) printf(\"%10d %10s %10s %12.1f\\n\stud[j].num, stud[j].name, stud[j].sex, stud[j].results), mark=1; } if(mark==0) printf(\"No match!\\n\"); break; case 4: printf(\"请输入性别:\\n\"); scanf(\"%s\ for(j=0;j<100;j++) {if (strcmp(str2,stud[j].sex) ==0) printf(\"%10d %10s %10s %12.1f\\n\stud[j].num, stud[j].name, stud[j].sex, stud[j].results), mark=1; } if(mark==0) printf(\"No match!\\n\"); break; default: break; } goto A; B: fclose(fp); return 0; } 程序解答(学生写的) 因篇幅问题不能全部显示,请点此查看更多更全内容