前言
以下代码全为个人见解,仅供参考
如果代码有误或者优化建议,直接相应博客下方评论
代码面向新手,看起来觉得低级的不要喷我QWQ
提示:以下是本篇文章正文内容,下面案例可供参考
实验11:文件一
由于文件题锐格无法提交检测,写实验报告时建议使用编译器运行结果和文件内结果的截图作为实验结果
5864
提前在工程文件夹下建立一个TXT文档命名为data.in
在文件中输入串含有大小写字母的字符串并保存
ps:注意调整打开文件时文件的位置
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;//定义文件变量
char ch;
//打开文件
fp = fopen("D:\\C L project\\file_1\\5864\\data.in.txt","r+");
if(fp == NULL)
{
printf("error!\n");
exit(0);
}
//获取文件中的所有字符
while((ch = getc(fp)) != EOF)
{
//检索文件中的大写字母
if(ch >= 'A' && ch <= 'Z')
{
//大写字母转化为小写字母
ch += 32;
}
//输出文件中的字符
putchar(ch);
}
//释放文件
fclose(fp);
return 0;
}
5865
提前在工程文件夹下建立一个TXT文档命名为test01
文件运行结束后打开该文件进行检查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;//定义文件变量
//打开文件
fp = fopen("D:\\C L project\\file_1\\5865\\test01.txt","r+");
if(fp == NULL)
{
printf("errer!");
}
int n;
char ch[300];
//多组数输入,n表示输入句子的行数
while(scanf("%d",&n) != EOF)
{
getchar();//消除n与后面输入的句子间的回车
//如果没有,最后的结果可能会出现一个空行
//*********************
//输入0时停止输入
if(n == 0)
{
fclose(fp);
exit(0);
}
int i;//循环器
for(i = 0; i < n; i++)//循环输入n句句子并保存在文件中
{
gets(ch);
fputs(ch,fp);
fputc('\n',fp);//由于fputs不能接收\n,所以这里要加上
}
}
//释放文件
fclose(fp);
exit(0);
}
5866
提前在工程文件夹下建立一个TXT文档命名为student
文件运行结束后打开该文件进行检查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char num[8];
char name[20];
char sex;
double score[3];
} stu;
int main()
{
FILE *fp;
fp = fopen("D:\\C L project\\file_1\\5866\\student.txt","r+");
if(fp == NULL)
{
printf("error!\n");
exit(0);
}
int n;
while(~scanf("%d",&n))
{
if(n == 0)
{
exit(0);
}
getchar();
int i;
for(i = 0; i < n; i++)
{
printf("请输入学生学号:\n");
//输入学号
gets(stu.num);
//将学号录入文件
fputs(stu.num,fp);
fputc(' ',fp);
printf("请输入学生姓名:\n");
//输入姓名,计算长度
gets(stu.name);
int len = strlen(stu.name);
//将姓名长度和姓名录入文件
fprintf(fp,"%d ",len);
fputs(stu.name,fp);
fputc(' ',fp);
//输入性别
printf("输入学生性别:\n");
scanf("%c",&stu.sex);
getchar();
//录入性别
fprintf(fp,"%c ",stu.sex);
//输入三科成绩
printf("输入三科成绩:\n");
scanf("%lf %lf %lf",&stu.score[0],&stu.score[1],&stu.score[2]);
getchar();
//计算三科平均分和总分
double ave,sum = 0;
int j;
for(j = 0; j < 3; j++)
{
sum = sum + stu.score[j];
}
ave = sum/3.0;
//录入成绩
fprintf(fp,"%.2lf %.2lf %.2lf %.2lf %.2lf",stu.score[0],stu.score[1],stu.score[2],ave,sum);
fputc('\n',fp);
}
}
fclose(fp);
return 0;
}
5867
本题的文件地址为上一题(5866)的文件地址
#include <stdio.h>
#include <stdlib.h>
struct student
{
int num;
char name[20];
char sex;
double score[3];
double ave,sum;
} stu;
int main()
{
FILE *fp;
int len;
char ch[20];
fp = fopen("D:\\C L project\\file_1\\5866\\student.txt","r+");
if(fp == NULL)
{
printf("error!\n");
exit(0);
}
while((fscanf(fp,"%d %d",&stu.num,&len)) != EOF)
{
printf("%d",stu.num);
//printf("%d",ftell(fp));
fgets(ch,len+1+1,fp);//两个+1分别是抵消数据间的空格和必须加的不然读取的字符会少一个
printf("%s",ch);
//printf("%d**",ftell(fp));
fseek(fp,1,1);//将文件中的光标指针向后移动一位
fscanf(fp,"%c",&stu.sex);
printf(" %c",stu.sex);
fscanf(fp,"%lf %lf %lf %lf %lf",&stu.score[0],&stu.score[1],&stu.score[2],&stu.ave,&stu.sum);
printf(" %.2lf %.2lf %.2lf %.2lf %.2lf\n",stu.score[0],stu.score[1],stu.score[2],stu.ave,stu.sum);
}
fclose(fp);
return 0;
}
5868
提前在工程文件夹下建立一个TXT文档命名为student
文件运行结束后打开该文件进行检查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int num;
char name[20];
char sex;
double score[3];
double ave,sum;
struct node* next;
} Lnode;
void creatvist(Lnode *H,int n)
{
Lnode *p, *r;
int num;
char sex;
r = H;
int i,j;//循环器
for(i = 0; i < n; i++)
{
p = (Lnode*)malloc(sizeof(Lnode));//分配动态空间
printf("请输入学生学号:\n");
scanf("%d",&num);//储存在链表结点中的数据
getchar();
printf("请输入学生姓名:\n");
gets(p->name);
printf("输入学生性别:\n");
//getchar();
scanf("%c",&sex);
printf("输入三科成绩:\n");
for(j = 0; j < 3; j++)
{
scanf("%lf",&p->score[j]);
}
p->num = num;//存放数据
p->sex = sex;
p->sum = 0;
int j;
for(j = 0; j < 3; j++)
{
p->sum = p->sum + p->score[j];
}
p->ave = p->sum/3.0;
r->next = p;//指向下一个结点的地址
r = p;//循环
}
r->next = NULL;//尾部指向空
}
void printList(Lnode * H)
{
Lnode * p;
p = H->next;
while(p != NULL)
{
printf("%d ",p->num);
printf("%s ",p->name);
printf("%c ",p->sex);
printf("%lf %lf %lf\n",p->score[0],p->score[1],p->score[2]);
p = p->next;
}
printf("\n");
}
void sortvist(Lnode *H)
{
double t;
char a[20];
Lnode *p,*pre;
pre = H->next;
int i;
char ch;
while(pre != NULL)
{
p = pre->next;
while(p != NULL)
{
if(pre->sum < p->sum)
{
t = pre->num;
pre->num = p->num;
p->num = t;//学号互换
strcpy(a,pre->name);
strcpy(pre->name,p->name);
strcpy(p->name,a);//姓名
ch = pre->sex;
pre->sex = p->sex;
p->sex = ch;//性别
for(i = 0; i < 3; i++)
{
t = pre->score[i];
pre->score[i] = p->score[i];
p->score[i] = t;//成绩
}
t = pre->ave;
pre->ave = p->ave;
p->ave = t;//平均成绩
t = pre->sum;
pre->sum = p->sum;
p->sum = t;//总成绩
}
p = p->next;
}
pre = pre->next;
}
}
int main()
{
int n;
int i,j;
scanf("%d",&n);
Lnode *H;
H = (Lnode*)malloc(sizeof(Lnode));
H->next = NULL;
creatvist(H,n);
//printList(H);
sortvist(H);
//创建文件变量
FILE *fp;
fp = fopen("D:\\C L project\\file_1\\5868\\student.txt","wb");
if(fp == NULL)
{
printf("error!\n");
exit(0);
}
//建立一个新结点进行文件写入
Lnode *p;
p = H->next;
char en = '\n';
while(p)
{
fwrite(p,sizeof(Lnode),1,fp);
p = p->next;
}
fclose(fp);
//进行文件读取
fp = fopen("D:\\C L project\\file_1\\5868\\student.txt","rb+");
if(fp == NULL)
{
printf("error!\n");
exit(0);
}
p = (Lnode*)malloc(sizeof(Lnode));
while(fread(p,sizeof(Lnode),1,fp)==1)
{
printf("%d ",p->num);
printf("%s ",p->name);
printf("%c ",p->sex);
printf("%.2lf %.2lf %.2lf",p->score[0],p->score[1],p->score[2]);
printf("%.2lf %.2lf\n",p->ave,p->sum);
}
fclose(fp);
return 0;
}
建议
为了方便文件的查看和文件变量的定义建议把文件建立在工程文件下