实验任务4
源代码
#include <stdio.h>
#include <ctype.h>
int main(){
FILE *fp;
char ch;
int lines=0;
int chars=0;
fp=fopen("data4.txt","r");
if(fp==NULL){
printf("文件打开失败!\n");
return 1;
}
while((ch=fgetc(fp))!=EOF){
if(ch=='\n'){
lines++;
}else if(!isspace(ch)){
chars++;
}
}
if(chars>0&&lines==0){
lines=1;
}else if(ch!='\n'){
lines++;
}
fclose(fp);
printf("data4.txt统计结果:\n");
printf("行数:\t\t%d\n",lines);
printf("字符数(不计空白符):\t%d\n",chars);
return 0;
}
运行结果
![bky7.4]()
实验任务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_pass,cnt);
pass_rate=1.0*cnt/N;
printf("\n本次等级考试通过率: %.2f%%\n",pass_rate*100);
return 0;
}
void output(STU st[],int n){
int i;
printf("%-12s%-10s%-15s%-15s%-10s%-8s\n","准考证号","姓名","客观题得分","操作题得分","总分","结果");
for(i=0;i<n;i++){
printf("%-12ld%-10s%-15.2f%-15.2f%-10.2f%-8s\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;
}
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 s[],int n){
int i;
FILE *fout;
fout=fopen("list_pass.txt","w");
if(!fout){
printf("fail to open file\n");
return;
}
fprintf(fout,"%-12s%-10s%-15s%-15s%-10s%-8s\n","准考证号","姓名","客观题得分","操作题得分","总分","结果");
for(i=0;i<n;i++){
fprintf(fout,"%-12ld%-10s%-15.2f%-15.2f%-10.2f%-8s\n",
s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].result);
}
fclose(fout);
}
int process(STU st[],int n,STU st_pass[]){
int i,j=0;
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;
}
运行结果
![bky7.5]()
![bky7.5]()
实验任务6
源代码
#define STUDENT_NUM 80
#define LINE_LEN 100
int main(){
char students[STUDENT_NUM][LINE_LEN];
int flag[STUDENT_NUM]={0};
int lucky[5];
char filename[50];
FILE *fp_read,*fp_write;
int i,count=0,rand_idx;
fp_read=fopen("D:\\fhe07\\Documents\\list.txt","r");
if(fp_read==NULL){
printf("list.txt文件打开失败!\n");
return 1;
}
for(i=0;i<STUDENT_NUM&&fgets(students[i],LINE_LEN,fp_read)!=NULL;i++);
fclose(fp_read);
srand((unsigned int)time(NULL));
while(count<5){
rand_idx=rand()%STUDENT_NUM;
if(flag[rand_idx]==0){
lucky[count++]=rand_idx;
flag[rand_idx]=1;
}
}
printf("----------中奖名单----------\n");
for(i=0;i<5;i++){
printf("%s",students[lucky[i]]);
}
printf("----------保存到文件----------\n");
printf("输入文件名:");
scanf("%s",filename);
fp_write=fopen(filename,"w");
if(fp_write==NULL){
printf("文件创建失败!\n");
return 1;
}
for(i=0;i<5;i++){
fputs(students[lucky[i]],fp_write);
}
fclose(fp_write);
printf("保存成功!\n");
return 0;
}
运行结果
![bky7.6]()
![bky7.6]()