标签:考证 const can subject 调整 感受 return string 元素
1.学生信息处理
代码如下:
(全部手敲了一遍累到自己了,就没有加很多注释.....)
1 #include <stdio.h> 2 #include <string.h> 3 #define N 3 4 typedef struct student{ 5 int num; //学号 6 char name[20]; //姓名 7 char subj[20]; //科目 8 float perf; //平时分 9 float mid; //期中 10 float final; //期末 11 float total; //总评 12 char level[10]; //等级 13 }STU; 14 15 void input(STU s[],int n); 16 void output(STU s[],int n); 17 void calc(STU s[],int n); 18 int fail(STU s[],STU fs[],int n); 19 void sort(STU s[],int n); 20 21 int main() { 22 STU s[N],fs[N]; 23 int k; 24 printf("输入学生信息:\n"); 25 input(s,N); 26 printf("数据处理中.....\n"); 27 calc(s,N); 28 sort(s,N); 29 k=fail(s,fs,N); 30 printf("排名情况如下:\n"); 31 output(s,N); 32 printf("不及格学生信息:\n"); 33 output(fs,k); 34 printf("共有%d人不及格。",k); 35 return 0; 36 } 37 38 void input(STU s[],int n){ 39 for (int i = 0; i < n; ++i) 40 scanf("%d %s %s %f %f %f",&s[i].num,s[i].name,s[i].subj,&s[i].perf,&s[i].mid,&s[i].final); 41 42 } 43 44 void output(STU s[],int n){ 45 printf("------------输出学生信息-------------\n"); 46 printf("学号 姓名 考试科目 平时成绩 期中成绩 期末成绩 总评分 等级\n"); 47 for (int i = 0; i < n; ++i) 48 printf("%5d %5s%10s %8.1f %8.1f %8.1f %6.1f %5s\n",s[i].num,s[i].name,s[i].subj,s[i].perf,s[i].mid,s[i].final,s[i].total,s[i].level); 49 } 50 51 void calc(STU s[],int n){ 52 for (int i = 0; i < n; ++i) { 53 s[i].total=s[i].perf*0.2+s[i].mid*0.2+s[i].final*0.6; 54 if (s[i].total>=90) 55 strcpy(s[i].level,"优"); 56 else if (s[i].total>=80) 57 strcpy(s[i].level,"良"); 58 else if (s[i].total>=70) 59 strcpy(s[i].level,"中"); 60 else if (s[i].total>=60) 61 strcpy(s[i].level,"及格"); 62 else 63 strcpy(s[i].level,"不及格"); 64 } 65 } 66 67 int fail(STU s[],STU fs[],int n){ 68 int k=0; 69 for (int i = 0; i < n; ++i) { 70 if (s[i].total<60) 71 fs[k++]= s[i]; 72 } 73 return k; 74 } 75 76 void sort(STU s[],int n){ 77 STU temp; 78 for (int i = 0; i < n-1; ++i) { 79 for (int j = 0; j < n-1-i; ++j) { 80 if (s[j].total<s[j+1].total){ 81 temp=s[j]; 82 s[j]=s[j+1]; 83 s[j+1]=temp; 84 } 85 } 86 } 87 }
N=3时运行结果如下:
(看着输出结果,对着代码调整了好久排版,这下看起来舒服多了)
利用结构体解决数据整理问题时,首先要将问题划分模块,然后用一个一个函数编写好模块部分,再在主函数中整合。
感觉最需要的还是耐心。
2.最低分计数
代码如下:
1 #include <stdio.h> 2 #define N 5 3 // 定义结构体类型struct student,并定义STU为其别名 4 typedef struct student { 5 long no; 6 char name[20]; 7 int score; 8 }STU; 9 // 函数声明 10 void input(STU s[], int n); 11 int findMinlist(STU s[], STU t[], int n); 12 void output(STU s[], int n); 13 int main() { 14 STU stu[N], minlist[N]; 15 int count; 16 printf("录入%d个学生信息\n", N); 17 input(stu, N); 18 printf("\n统计最低分人数和学生信息...\n"); 19 count = findMinlist(stu, minlist, N); 20 printf("\n一共有%d个最低分,信息如下:\n", count); 21 output(minlist, count); 22 return 0; 23 } 24 // 输入n个学生信息,存放在结构体数组s中 25 void input(STU s[], int n) { 26 int i; 27 for(i=0; i<n; i++) 28 scanf("%ld %s %d", &s[i].no, s[i].name, &s[i].score); 29 } 30 // 输出结构体s中n个元素信息 31 void output(STU s[], int n) { 32 int i; 33 for(i=0; i<n; i++) 34 printf("%ld %s %d\n", s[i].no, s[i].name, s[i].score); 35 } 36 int findMinlist(STU s[], STU t[], int n) { 37 int min=s[0].score,k=0; 38 for (int i = 0; i < n; ++i) { 39 if (s[i].score<min) 40 min=s[i].score; 41 } 42 for (int i = 0; i < n; ++i) { 43 if (s[i].score==min){ 44 t[k++]=s[i]; 45 } 46 } 47 return k; 48 }
运行结果如下:
3.计算机等级
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 const int N = 10; 4 // 定义结构体类型struct student,并定义其别名为STU 5 typedef struct student { 6 long int id; 7 char name[20]; 8 float objective; /*客观题得分*/ 9 float subjective; /*操作题得分*/ 10 float sum; 11 char level[10]; 12 }STU; 13 // 函数声明 14 void input(STU s[], int n); 15 void output(STU s[], int n); 16 void process(STU s[], int n); 17 int main() { 18 STU stu[N]; 19 printf("录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n", N); 20 input(stu, N); 21 printf("\n对考生信息进行处理: 计算总分,确定等级\n"); 22 process(stu, N); 23 printf("\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级\n"); 24 output(stu, N); 25 return 0; 26 } 27 // 录入考生信息:准考证号,姓名,客观题得分,操作题得分 28 void input(STU s[], int n) { 29 for (int i = 0; i < n; ++i) 30 scanf("%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective); 31 } 32 //输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级 33 void output(STU s[], int n) { 34 printf("-------------输出学生信息--------------\n"); 35 printf("准考证号 姓名 客观题得分 操作题得分 总分 等级\n"); 36 for (int i = 0; i < n; ++i) 37 printf("%5ld %6s %8.1f %8.1f %8.1f %4s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level); 38 } 39 // 对考生信息进行处理:计算总分,排序,确定等级 40 void process(STU s[], int n) { 41 //计算总分 42 for (int i = 0; i < n; ++i) 43 s[i].sum=s[i].objective+s[i].subjective; 44 //排序(冒泡排序,降序) 45 STU temp; 46 for (int i = 0; i < n-1; ++i) { 47 for (int j = 0; j < n-1-i; ++j) { 48 if (s[j].sum<s[j+1].sum){ 49 temp=s[j]; 50 s[j]=s[j+1]; 51 s[j+1]=temp; 52 } 53 } 54 } 55 //根据比例划分等级 56 for (int i = 0; i < n; ++i) { 57 if (i<=(n/10)-1) //数组序列从0开始 58 strcpy(s[i].level,"优秀"); 59 else if (i<=(n/2)-1) 60 strcpy(s[i].level,"合格"); 61 else 62 strcpy(s[i].level,"不合格"); 63 } 64 }
运行结果如下:
实验做完的感想:感觉编输入数据比写代码还费脑子......所以往里塞了巨量私货(
似乎感受到文件输入的好处了。
标签:考证 const can subject 调整 感受 return string 元素
原文地址:https://www.cnblogs.com/namelessbird/p/14851451.html