标签:进制 随机 float 怎么 类型 span dom student 做了
3.文件
示例代码运行结果如下:
生成的file3.txt内容如下:
输出与生成文件的内容均完整可读。
4.二进制文件
(1)示例代码运行结果如下:
生成的file4.txt内容如下:
输出内容完整可读,而生成的文件显示为乱码,这是因为file4是用二进制方式写入的。
(2)代码如下:
1 #include <stdio.h> 2 #define N 10 3 typedef struct student { 4 int num; 5 char name[20]; 6 int score; 7 }STU; 8 int main() { 9 FILE *fp; 10 STU stu[N]; 11 fp=fopen("file4.dat","r"); 12 if(fp==NULL) 13 printf("cannot open file"); 14 fread(stu, sizeof(STU),N,fp); 15 for (int i = 0; i < N; ++i) { 16 printf("%-6d%-10s%3d\n", stu[i].num, stu[i].name, stu[i].score); 17 } 18 return 0; 19 }
输出结果如下:
5.计算机成绩
代码如下:
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 FILE *fin; 30 fin=fopen("examinee.txt","r"); 31 if(fin==NULL) 32 printf("cannot open examinee.txt"); 33 for (int i = 0; i < N; ++i) { 34 fscanf(fin,"%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective); 35 } 36 fclose(fin); 37 } 38 //输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级 39 void output(STU s[], int n) { 40 FILE *fout; 41 fout=fopen("result.txt","w"); 42 if(fout==NULL) 43 printf("cannot open result.txt"); 44 printf("-------------输出学生信息--------------\n"); 45 printf("准考证号 姓名 客观题得分 操作题得分 总分 等级\n"); 46 for (int i = 0; i < n; ++i) { 47 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, 48 s[i].level); 49 fprintf(fout, "%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, 50 s[i].level); 51 } 52 fclose(fout); 53 } 54 // 对考生信息进行处理:计算总分,排序,确定等级 55 void process(STU s[], int n) { 56 //计算总分 57 for (int i = 0; i < n; ++i) 58 s[i].sum=s[i].objective+s[i].subjective; 59 //排序(冒泡排序,降序) 60 STU temp; 61 for (int i = 0; i < n-1; ++i) { 62 for (int j = 0; j < n-1-i; ++j) { 63 if (s[j].sum<s[j+1].sum){ 64 temp=s[j]; 65 s[j]=s[j+1]; 66 s[j+1]=temp; 67 } 68 } 69 } 70 //根据比例划分等级 71 for (int i = 0; i < n; ++i) { 72 if (i<=(n/10)-1) //数组序列从0开始 73 strcpy(s[i].level,"优秀"); 74 else if (i<=(n/2)-1) 75 strcpy(s[i].level,"合格"); 76 else 77 strcpy(s[i].level,"不合格"); 78 } 79 }
输出结果如下:
result.txt内容如下:
6.自制抽点器(无重复版)
总之做了一个上午大概写出来了。
把我觉得要注意的东西都往注释里写了,一是注意在循环生成随机数之前先生成种子,二是注意要生成0~n-1的随机数,否则会超出数组范围。
剩下的就是不重复抽点如何实现的问题了,我写的是类似筛选素数的算法。
代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 #define N 80 5 typedef struct student { 6 int num; 7 long id; 8 char name[20]; 9 char class[20]; 10 }STU; 11 void random(STU s[],int n,int x); 12 13 int main() { 14 STU s[N]; 15 int x; 16 FILE *fp; 17 18 //读入数据存入结构体数组s 19 fp=fopen("list.txt","r"); 20 if (fp==NULL) { 21 printf("fail to open list.txt"); 22 exit(0); 23 } 24 for (int i = 0; i < N; ++i) { 25 fscanf(fp,"%d %ld %s %s",&s[i].num,&s[i].id,s[i].name,s[i].class); 26 } 27 28 //随机抽点(函数实现) 29 printf("输入抽点人数:"); 30 scanf("%d",&x); 31 random(s,N,x); 32 33 fclose(fp); 34 return 0; 35 } 36 void random(STU s[],int n,int x){ 37 int i=0,j,rd,lucky[N]={-1}; //数组lucky存储已被抽的号数 38 FILE *fout; 39 fout=fopen("lucky.txt","w"); 40 if (fout==NULL) { 41 printf("fail to create lucky.txt"); 42 exit(0); 43 } 44 srand((unsigned)time(NULL));//要在循环生成随机数前先生成种子,否则会随机出x个相同结果,别问我怎么知道的 45 while(i<x){ 46 rd = rand()%n;//生成0~n-1间随机数 47 for ( j = 0; j<=i ; j++) { //与已抽出号数比对,若已被抽则重新生成,x个随机数生成完毕再输出 48 if (lucky[j]==rd) 49 break; 50 } 51 if (j>i){ 52 lucky[i] = rd; 53 i++; 54 } 55 } 56 for (int k = 0; k < x; ++k) { 57 printf("%d %5ld %2s %5s\n",s[lucky[k]].num,s[lucky[k]].id,s[lucky[k]].name,s[lucky[k]].class);//显示器输出 58 fprintf(fout,"%d %5ld %2s %5s\n",s[lucky[k]].num,s[lucky[k]].id,s[lucky[k]].name,s[lucky[k]].class);//读入文件lucky.txt 59 } 60 61 fclose(fout); 62 }
运行结果如下:
生成的lucky.txt内容如下:
标签:进制 随机 float 怎么 类型 span dom student 做了
原文地址:https://www.cnblogs.com/namelessbird/p/14873294.html