实验七

实验任务4

实验代码:

#include<stdio.h>

int cnt_chars();
int cnt_lines();

int main(){
	int lines,chars;
	
	printf("data4.txt统计结果:\n");
	lines=cnt_lines();
	printf("行数:\t%d\n",lines);
	chars=cnt_chars();
	printf("字符数(不计空白符):\t%d\n",chars);
	
	return 0;
}

int cnt_lines(){
	FILE *fp;
	char ch;
	int lines=0,content=0;
	fp=fopen("data4.txt","r");
	if(!fp){
		printf("fail to open file\n");
		return 0;
	}
	while((ch=fgetc(fp))!=EOF){
		content=1;
    if(ch=='\n'){
		lines++;
	}
	}
	if(content){
		lines++;
	}
	fclose(fp);
	return lines;
} 

int cnt_chars(){
	FILE *fp;
	char ch;
	int chars=0;
	fp=fopen("data4.txt","r");
	if(!fp){
		printf("fail to open file\n");
		return 0;
	}
	while((ch=fgetc(fp))!=EOF){
	if(ch!=' '&&ch!='\n'&&ch!='\t'){
			chars++;
		}	
	}
	fclose(fp);
	return chars;
}

运行截图:
image

实验任务5

实验代码:

#include<stdio.h>
#include<string.h>

#define N 10

typedef struct{
	long id;
	char name[20];
	float objective;
	float subjective;
	float sum;
	char result[10];
}STU;

void read(STU st[],int n);
void write(STU st[],int n);
void output(STU st[],int n);
int process(STU st[],int n,STU st_pass[]);

int main(){
	STU stu[N],stu_pass[N];
	int cnt;
	double pass_rate;
	
	printf("从文件读入%d个考生信息...\n",N);
	read(stu,N);
	
	printf("\n对考生成绩进行统计...\n");
	cnt=process(stu,N,stu_pass);
	
	printf("\n通过考试的名单:\n");
	output(stu,N);
	write(stu,N);
	
	pass_rate=1.0*cnt/N;
	printf("\n本次等级考试通过率:%.2f%%\n",pass_rate*100);
	
	return 0;
}

void output(STU st[], int n) {
    int i;
    printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
    for (i = 0; i < n; i++){
    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].result);}
}

void read(STU st[], int n) {
    int i;
    FILE *fin;
    fin = fopen("examinee.txt", "r");
    if (!fin) {
        printf("fail to open file\n");
        return;
}
    while (!feof(fin)) {
        for (i = 0; i < n; i++)
            fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, &st[i].objective,&st[i].subjective);
}
    fclose(fin);
}

void write(STU st[],int n){
	int i;
	FILE *fp;
	
	fp=fopen("list_pass.txt","w");
	if(!fp){
		printf("fail to open file\n");
        return ;
	}
	fprintf(fp,"%-10s%-8s%-12s%-12s%-8s %s\n","准考证号","姓名","客观题得分","操作题得分","总分","结果");
	for(i=0;i<n;i++){
		if(st[i].sum>=60)
		fprintf(fp,"%-10ld%-8s  %-12.2f  %-12.2f  %-8.2f%s\n", st[i].id, st[i].name, st[i].objective,st[i].subjective,st[i].sum,st[i].result);
	}
		
	fclose(fp);
}

int process(STU st[],int n,STU st_pass[]){
	int i,j=0;
	FILE *fp;
	for(i=0;i<n;i++){
		st[i].sum=st[i].objective+st[i].subjective;
		if(st[i].sum>=60){
		strcpy(st[i].result,"通过");
		st_pass[j]=st[i];
		j++;
	}
		else
		strcpy(st[i].result,"未通过");
	}
	return j;
}

运行截图:
image

image

实验任务6

实验代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define N 80

 
int main(){
	char info[N][80],name[N],winner[N][80];
	int flag[N]={0};
	int i,j=0;
	int lucky_index;
	FILE *fp;
	
	fp=fopen("list.txt","r");
	if(!fp){
		printf("fail to open file to read\n");
		return 1;
	}
	for(i=0;i<N;++i){
	fgets(info[i],80,fp);
}  
	fclose(fp);
	
	printf("----------中奖名单--------\n");
	srand(time(NULL));
	for(i=0;i<5;++i){
	lucky_index=rand()%N;
	if(flag[lucky_index]==0){
	printf("%s",info[lucky_index]);
	strcpy(winner[j],info[lucky_index]);
	j++;
	flag[lucky_index]=1;
	}
	}
	printf("\n");
	printf("--------保存到文件--------\n");
	printf("输入文件名:");
	scanf("%s",name);
	fp=fopen(name,"w");
	if(!fp){
		printf("fail to open file\n");
		return 1;
	}
	for(i=0;i<5;i++){
		fprintf(fp,"%s\n",winner[i]);
	}
	fclose(fp);
	printf("保存成功!\n");
	
	return 0;
}

运行截图:
image

image

posted @ 2025-06-06 23:52  子春拾捌  阅读(24)  评论(0)    收藏  举报