首页 > 其他分享 >实验7

实验7

时间:2023-12-14 21:13:33浏览次数:32  
标签:stu int void lucky st STU 实验

四、实验结论

1. 实验任务1

思考*: 把line34改成 n = i; ,重新编译,再次运行程序,观察结果,对比运行结果是否有不同。如有不同,尝试分析原因。

若改成n=1,则有以下运行截图:

尝试分析原因:feof函数实际上是根据读取到最后一个位置的内容来判断的。所以要多走一字节。

 

2. 实验任务2

 

3. 实验任务3 

task3_1.c

思考:代码line8,字符串 "Working\'s Blues"在文件中为什么没有出现\?

答:\'实际是转义字符,输出单引号。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符。

 

4. 实验任务4

程序task4.c源码,及,运行结果截图

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main(){
 5     FILE *fp;
 6     char ch;
 7     int cnt=0;
 8     
 9     fp = fopen("data4.txt","r");
10     if(fp==NULL){
11         printf("fail\n");
12         exit(0); 
13     }
14     
15     while(!(feof(fp))){
16         ch = fgetc(fp);
17         if(ch==' '||ch=='\n') continue;
18         if(ch==EOF) break;
19         cnt++;
20     }
21     fclose(fp);
22     
23     printf("data4.txt中有字符%d个\n",cnt);
24     
25     return 0;
26 } 
View Code

 

5. 实验任务5

补足后的完整源码task5.c,以及,运行结果截图(包括屏幕输出截图和文件list_pass.txt内容截图)

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 
  5 #define N 10
  6 
  7 typedef struct {
  8     long int id;
  9     char name[20];
 10     float objective;    // 客观题得分
 11     float subjective;   // 操作题得分
 12     float sum;          // 总分
 13     char ans[10];       // 考试结果
 14 } STU;
 15 
 16 // 函数声明
 17 void finput(STU st[], int n);
 18 void foutput(STU st[], int n);
 19 void output(STU st[], int n);
 20 int process(STU st[], int n, STU st_pass[]);
 21 
 22 int main() {
 23     STU stu[N], stu_pass[N];
 24     int cnt;
 25     double pass_rate;
 26 
 27     printf("从文件读入%d个考生信息...\n", N);
 28     finput(stu, N);
 29 
 30     printf("\n对考生成绩进行统计...\n");
 31     cnt = process(stu, N, stu_pass);
 32 
 33     printf("\n通过考试的名单:\n");
 34     output(stu, N);      // 输出到屏幕
 35     foutput(stu, N);    // 输出到文件
 36 
 37     pass_rate = 1.0 * cnt / N;
 38     printf("\n本次等级考试通过率: %.2f%%\n", pass_rate*100);
 39 
 40     return 0;
 41 }
 42 
 43 // 把通过考试的考生完整信息输出到屏幕上
 44 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
 45 void output(STU st[], int n) {
 46     int i;
 47     
 48     printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
 49     for (i = 0; i < n; i++)
 50         printf("%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", st[i].id, st[i].name, st[i].objective, st[i].subjective, st[i].sum, st[i].ans);
 51 }
 52 
 53 // 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
 54 void finput(STU st[], int n) {
 55     int i;
 56     FILE *fin;
 57 
 58     fin = fopen("examinee.txt", "r");
 59     if (fin == NULL) {
 60         printf("fail to open file\n");
 61         exit(0);
 62     }
 63 
 64     while (!feof(fin)) {
 65         for (i = 0; i < n; i++)
 66             fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, &st[i].objective, &st[i].subjective);
 67     }
 68 
 69     fclose(fin);
 70 }
 71 
 72 // 把通过考试的考生完整信息写入文件list_pass.txt
 73 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
 74 void foutput(STU s[], int n) {
 75     FILE *fout;
 76     int i;
 77     
 78     // 保存到文件 
 79     fout = fopen("list_pass.txt", "w");
 80     if (!fout) {
 81         printf("fail to open or create list_pass.txt\n");
 82         exit(0);
 83     }
 84     
 85     fprintf(fout, "准考证号\t\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
 86 
 87     for (i = 0; i < n; i++)
 88         fprintf(fout, "%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].ans);
 89 
 90     fclose(fout);
 91 }
 92 
 93 
 94 
 95 // 对考生信息进行处理:计算每位考生考试总分、结果;统计考试通过的人数
 96 int process(STU st[], int n, STU st_pass[]) {
 97     int i;
 98     int cnt=0;
 99     for(i=0;i<n;++i){
100         st[i].sum=st[i].objective+st[i].subjective;
101         if(st[i].sum>=60){
102             strcpy(st[i].ans,"pass");
103             cnt++;
104         }
105         else strcpy(st[i].ans,"fail");    
106     }
107     
108     return cnt;
109 }
View Code

 

6. 实验任务6

必做部分

源代码,及,运行测试截图

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<time.h>
 5 
 6 #define N 80
 7 #define M 5
 8 
 9 typedef struct{
10     long number;
11     char name[20];
12     char classname[20];
13 }STU;
14 
15 void finput(STU stu[],int n);//从list.txt读入 
16 void foutput(STU stu[],STU lucky[],int m);//取随机数,并写入lucky.txt 
17 void output(STU lucky[],int n);//屏幕上输出 
18 
19 int main(){
20     STU stu[N],lucky[5];
21     
22     finput(stu,N); 
23     
24     foutput(stu,lucky,M);
25     
26     output(lucky,M);
27             
28     return 0;
29 }
30 
31 void finput(STU stu[],int n){
32     FILE *fp;
33     int i;
34     
35     fp = fopen("list.txt","r");
36     if(fp==NULL){
37         printf("fail\n");
38         exit(0);
39     }
40     
41     while(!feof(fp))
42         for(i=0;i<N;++i)
43             fscanf(fp,"%d%s%s",&stu[i].number,stu[i].name,stu[i].classname);
44             
45     fclose(fp);
46 }
47 
48 void foutput(STU stu[],STU lucky[],int m){
49     FILE *fp;
50     int i;
51     
52     fp = fopen("lucky.txt", "w");
53     if (fp==NULL) {
54         printf("fail\n");
55         exit(0);
56     }
57     
58     srand(time(NULL));
59     for(i=0;i<m;++i){        
60         int number=rand()%N;//在0,N-1间取随机整数
61         lucky[i]=stu[number];
62     }
63     
64     for(i=0;i<m;++i)
65         fprintf(fp,"%d\t%s\t%s\n",lucky[i].number,lucky[i].name,lucky[i].classname);
66     
67     fclose(fp);
68 }
69 
70 void output(STU lucky[],int n){
71     int i;
72     
73     for(i=0;i<n;++i)
74         printf("%d\t%s\t%s\n",lucky[i].number,lucky[i].name,lucky[i].classname);
75     
76 }
View Code

 

选做部分*

如果选做,请附上源代码,及运行测试截图

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<time.h>
  4 
  5 #define N 80
  6 #define M 5
  7 
  8 
  9 typedef struct{
 10     long number;
 11     char name[20];
 12     char classname[20];
 13 }STU;
 14 
 15 void finput(STU stu[],int n);//从list.txt读入  
 16 void foutput(STU stu[],STU lucky[],int flag[],int n,int m,char date[]);//取随机数,排除重复,并写入lucky.txt 
 17 void sort(STU lucky[],int m);//按学号排序
 18 void output(STU lucky[],int n);//屏幕上输出 
 19 
 20 int main(){
 21     STU stu[N],lucky[5];
 22     int flag[N]={0};//初始0,若被标记则1 
 23          
 24     finput(stu,N); //读入
 25     
 26     //取日期,文件名存入char date[]
 27     char date[20]={0};
 28     time_t t;
 29     time(&t);
 30     strftime(date,sizeof(date),"%Y%m%d.txt",localtime(&t));    
 31  
 32     foutput(stu,lucky,flag,N,M,date); //写入
 33     
 34     output(lucky,M); //屏幕输出
 35             
 36     return 0;
 37 }
 38 
 39 
 40 void finput(STU stu[],int n){
 41     FILE *fp;
 42     int i;
 43     
 44     fp = fopen("list.txt","r");
 45     if(fp==NULL){
 46         printf("fail\n");
 47         exit(0);
 48     }
 49     
 50     while(!feof(fp))
 51         for(i=0;i<N;++i)
 52             fscanf(fp,"%d%s%s",&stu[i].number,stu[i].name,stu[i].classname);
 53             
 54     fclose(fp);
 55 }
 56 
 57 void foutput(STU stu[],STU lucky[],int flag[],int n,int m,char date[]){
 58     FILE *fp;
 59     int i;
 60     
 61     fp = fopen(date,"w");
 62     if (fp==NULL) {
 63         printf("fail\n");
 64         exit(0);
 65     }
 66     
 67     srand(time(NULL));
 68     for(i=0;i<m;++i){        
 69         int number=rand()%N;//在0,N-1间取随机整数
 70         
 71         if(!flag[number])//未被标记
 72             lucky[i]=stu[number];
 73         
 74         else continue;
 75         
 76         flag[number]=1;
 77     }
 78     
 79     sort(lucky,M); //排序
 80     
 81     for(i=0;i<m;++i)
 82         fprintf(fp,"%d\t%s\t%s\n",lucky[i].number,lucky[i].name,lucky[i].classname);
 83     
 84     fclose(fp);
 85 }
 86 
 87 void output(STU lucky[],int n){
 88     int i;
 89     
 90     for(i=0;i<n;++i)
 91         printf("%d\t%s\t%s\n",lucky[i].number,lucky[i].name,lucky[i].classname);
 92     
 93 }
 94 
 95 void sort(STU lucky[],int m){
 96     int i,j;
 97     STU t;
 98     
 99     for(i=0;i<m-1;++i)
100         for(j=0;j<m-1-i;++j)
101             if(lucky[j].number>lucky[j+1].number){
102                 t=lucky[j];
103                 lucky[j]=lucky[j+1];
104                 lucky[j+1]=t;
105             }
106     
107 }
View Code

 

标签:stu,int,void,lucky,st,STU,实验
From: https://www.cnblogs.com/tjssj16/p/17901368.html

相关文章

  • 实验7
    实验4 实验5 实验6  ......
  • 实验6_C语言结构体、枚举应用编程
    4.task_41#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];6charname[80];7charauthor[80];8doublesales_price;9intsales_count;10}Book;1112voidoutput(Bookx[],intn);13voids......
  • java实验
    零.前置芝士(可以不了解)信息量定义信号量(semaphore)是操作系统中用来解决并发中的互斥和同步问题的一种方法。是可以用来保证两个或多个关键代码段不被并发调用。目的类似计数器,常用在多线程同步任务上,信号量可以在当前线程某个任务完成后,通知别的线程,再进行别的任务。同步:处......
  • 实验7
    task41#include<stdio.h>2#include<string.h>3#defineN54#defineM805intmain(){6charsongs[N][M];78FILE*fp;9fp=fopen("data1.txt","r");10if(fp==NULL){11print......
  • RK3568行业定制主板信号抗扰传导实验整改方案验证
    为了整改验证RK3568行业定制主板CAN口的抗干扰能力,在可靠性测试实验室内对定制主板进行了信号抗扰传导实验,其测试环境如下图所示。1. 实验目的图1.1测试实验环境 为了滤波,起到一个抗干扰的作用,需要对RK3568定制主板CAN口进行调整,如下图所示需要在L11位置的C82、C84增加两个......
  • 实验6 C语言结构体、枚举应用编程
    实验任务41#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count;......
  • 3.1-华三-无线局域网的配置实验
    1.规划需求目的:搭建一个基本的无线局域网。AC上的配置:1.网段规划管理AP:vlan100IP:10.1.1.024业务地址:vlan1000IP:10.1.2.0242.做DHCP服务器,能分配地址给AP/客户端。(实际上,dhcp服务器,大多数是用微软windowsserver系统做DHCP服务器。第一步:模拟器画上好拓扑......
  • 大数据实验2
    实验内容与完成情况:向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件; 从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名; 将HDFS中指定文件的内容输出到终端中; 显示HDF......
  • 实验6 模板类、文件I/O和异常处理
    实验任务4:1.代码:vector.hpp:1#pragmaonce2#include<iostream>3#include<stdexcept>4usingstd::cout;5usingstd::endl;67template<typenameT>8classVector{9public:10Vector(Tn);11Vector(Tn,Tvalue);12Vector(c......
  • 实验6 模板类、文件I/O和异常处理
    实验任务4Vector.hpp#ifndefVECTOR_HPP#defineVECTOR_HPP#include<iostream>#include<stdexcept>template<typenameT>classVector;template<typenameU>voidoutput(constVector<U>&vec);template<typenameT&......