实验七
#include <stdio.h> #include <stdlib.h> int main() { FILE *fin, *fout; int ch; fin = fopen("file1.txt", "r"); if (fin == NULL) { printf("fail to open file1.txt\n"); exit(0); } fout = fopen("file2.txt", "w"); if (fout == NULL) { printf("fail to open or create file2.txt\n"); exit(0); } while( !feof(fin) ) { ch = fgetc(fin); if(ch >= 'a' && ch <= 'z') ch -= 32; fputc(ch, fout); } fclose(fin); fclose(fout); return 0; }
// 从文本数据文件file1.dat中读入数据,按成绩从高到低排序,将排序结果输出到屏幕上,同时以文本方式存入文件file3.dat中。 #include <stdio.h> #include <stdlib.h> #define N 10 // 定义一个结构体类型STU typedef struct student { int num; char name[20]; int score; }STU; void sort(STU *pst, int n); // 函数声明 int main() { FILE *fin, *fout; STU st[N]; int i; // 以只读文本方式打开文件file1.dat fin = fopen("file1.dat", "r"); if( !fin ) { // 如果打开失败,则输出错误提示信息,然后退出程序 printf("fail to open file1.dat\n"); exit(0); } // 从fin指向的数据文件file1.dat中读取数据到结构体数组st for(i=0; i<N; i++) fscanf(fin, "%d %s %d", &st[i].num, st[i].name, &st[i].score); fclose(fin); // 关闭fin指向的文件file1.dat // 调用函数sort()对数组st中数据,按分数又高到低排序 sort(st, N); // 以写方式打开/创建文本文件file3.dat fout = fopen("file3.dat", "w"); if( !fout ) { // 如果打开失败,则输出错误提示信息,然后退出程序 printf("fail to open file1.dat\n"); exit(0); } // 将排序后的数组st中数据输出到屏幕,同时,也写入文件file3.dat for(i=0; i<N; i++) { printf("%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score); fprintf(fout, "%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score); } fclose(fout); // 关闭fout指向的文件file3.dat return 0; } // 函数功能描述:对pst指向的n个STU结构体数据进行排序,按成绩数据项由高到底排序 // 排序算法:冒泡法 void sort(STU *pst, int n) { STU *pi, *pj, t; for(pi = pst; pi < pst+n-1; pi++) for(pj = pi+1; pj < pst+n; pj++) if(pi->score < pj->score) { t = *pi; *pi = *pj; *pj = t; } }
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const
int
N = 10;
// 定义结构体类型struct student,并定义其别名为STU
typedef
struct
student {
long
int
id;
char
name[20];
float
objective;
/*客观题得分*/
float
subjective;
/*操作题得分*/
float
sum;
char
level[10];
}STU;
// 函数声明
void
input(STU s[],
int
n);
void
output(STU s[],
int
n);
void
process(STU s[],
int
n);
int
main() {
STU stu[N];
printf(
"录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n"
, N);
input(stu, N);
printf(
"\n对考生信息进行处理: 计算总分,确定等级\n"
);
process(stu, N);
printf(
"\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级\n"
);
output(stu, N);
return
0;
}
// 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
void
input(STU s[],
int
n) {
// 补足代码
FILE *fin;
int
i;
// 以只读文本方式打开文件examinee.txt
fin = fopen(
"examinee.txt"
,
"r"
);
if
( !fin ) {
// 如果打开失败,则输出错误提示信息,然后退出程序
printf(
"fail to open file\n"
);
exit(0);
}
for
(i=0; i<n; i++) {
if
(fscanf(fin,
"%ld %s %f %f"
, &s[i].id, s[i].name, &s[i].objective,&s[i].subjective)==0);
// 从fin指定的文件中格式化读取一个学生信息
printf(
"读取错误!"
);
}
fclose(fin);}
// 输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
// 不仅输出到屏幕上,还写到文本文件result.txt中
void
output(STU s[],
int
n) {
int
i;
FILE *fout;
// 以只读文本方式打开文件result.txt
fout=fopen(
"result.txt"
,
"w"
);
printf(
"准考证号 姓名 客观题得分 操作题得分 总分 等级\n"
);
fprintf(fout,
"准考证号 姓名 客观题得分 操作题得分 总分 等级\n"
);
for
(i=0; i<n; i++)
{
printf(
" %-9ld%-10s%-13.2f%-10.2f%-7.2f%-8s\n"
,
s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);
fprintf(fout,
" %-9ld%-10s%-13.2f%-10.2f%-7.2f%-8s\n"
,
s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level);
}
fclose(fout);
}
// 对考生信息进行处理:计算总分,排序,确定等级
void
process(STU s[],
int
n) {
// 补足代码
int
i,j,k;
int
a1,a2;
a1=(
int
)(N*0.1),a2=(
int
)(N*0.5);
STU temp;
for
(i=0;i<n;i++)
s[i].sum=s[i].objective+s[i].subjective;
for
(j=0;j<n-1;j++)
for
(k=0;k<n-j-1;k++)
if
(s[k].sum<s[k+1].sum)
{
temp = s[k];
s[k] = s[k+1];
s[k+1] = temp;
}
for
(i=0;i<a1;i++)
strcpy(s[i].level,
"优秀"
);
for
(i=a1;i<a2;i++)
strcpy(s[i].level,
"合格"
);
for
(i=a2;i<n;i++)
strcpy(s[i].level,
"不合格"
);
}