内容正文:
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第88卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①C文件的打开与关闭;②向文件读写字符及字符串;③格式化读写文本文件及随机读写数据文件;④用二进制方式向文件读写一组数据;⑤文件的定位和文件的结尾标志。
湖南省《计算机应用类专业综合考纲百套卷》 第88卷
《计算机编程语言——C语言》
文件的打开、关闭、读写、定位和文件结尾标志
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.(2023年)下列关于文件操作的描述中,错误的是( )
A.file* fp;可定义一个文件指针
B.fputc 函数可用于把数据写入到文件
C.fprintf 函数可用于把数据写入到文件
D.fputs 函数可用于把数据写入到文件
【答案】A
【解析】C语言中定义文件指针的正确关键字为小写的 FILE,即 FILE *fp;。C语言是严格区分大小写的,file* 是未定义的类型,会导致编译错误。其余选项 B、C、D 均为正确的文件写入函数。
2.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
char str[20];
fp = fopen("data.txt", "w");
fputs("Hello World", fp);
fclose(fp);
fp = fopen("data.txt", "r");
fgets(str, 5, fp);
puts(str);
fclose(fp);
return 0; }
A. Hello B. Hell C. Hello World D. 乱码
【答案】B
【解析】fgets(char *buf, int n, FILE*) 规则:最多读取 n-1 个字符,末尾自动添加字符串结束符\0。本题n=5,读取 4 个字符Hell。
3.C 语言中,用于判断文件读取是否到达末尾的标准函数 / 宏,搭配正确且用法规范的是( )
A. 使用 feof(fp),在每次读写操作之后判断是否到文件尾
B. 使用 feof(fp),在每次读写操作之前判断是否到文件尾
C. EOF 可以用于判断二进制文件的读取结束
D. ferror(fp) 可以替代 feof(fp) 判断文件末尾
【答案】A
【解析】feof 特性:只有尝试读取数据失败后,文件结束标志才会被置位,必须先读、后判断;B 是经典错误用法;C 错误,二进制文件中数据可能包含EOF对应数值,不能用EOF判断结束;D 错误,ferror用于判断文件读写错误,和文件末尾无关。
4.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
int arr[3] = {10,20,30},res[3];
fp = fopen("bin.dat", "wb");
fwrite(arr, sizeof(int), 3, fp);
fclose(fp);
fp = fopen("bin.dat", "rb");
fread(res, sizeof(int), 3, fp);
printf("%d", res[1]);
fclose(fp);
return 0; }
A. 10 B. 20 C. 30 D. 随机值
【答案】B
【解析】wb二进制写、rb二进制读;fwrite一次性写入 3 个整型,fread完整读取,数组res[1]值为 20。
5.关于 C 语言文件打开模式"r+"和"w+",下列区别描述正确的是( )
A. "r+" 新建文件,"w+" 打开已有文件
B. "r+" 文件不存在则创建,"w+" 文件不存在则打开失败
C. "r+" 保留原文件内容,"w+" 会清空原文件所有内容
D. 二者功能完全一致,仅写法不同
【答案】C
【解析】r+:读写模式,文件必须存在,保留原有内容,指针在文件开头;w+:读写模式,文件不存在则创建,文件存在则直接清空原有内容。
6.C 语言中fseek函数用于文件指针定位,若要将指针定位到从文件末尾向前偏移 5 个字节,参数组合正确的是( )
A. fseek(fp, 5, SEEK_END) B. fseek(fp, -5, SEEK_END)
C. fseek(fp, 5, SEEK_SET) D. fseek(fp, -5, SEEK_CUR)
【答案】B
【解析】SEEK_END 代表文件末尾;偏移量offset:正数向后偏移,负数向前偏移。从末尾向前 5 字节:offset=-5,基准位SEEK_END。
7.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
int num;
char buf[20];
fp = fopen("a.txt", "w");
fprintf(fp, "%d:%s", 100, "C_language");
fclose(fp);
fp = fopen("a.txt", "r");
fscanf(fp, "%d:%s", &num, buf);
printf("%d %s", num, buf);
fclose(fp);
return 0; }
A. 100 C_language B. 100 : C_language
C. 编译报错 D. 读取失败,输出乱码
【答案】A
【解析】fprintf格式化写入文本文件,fscanf按照相同格式符 + 分隔符读取,可正常解析整型和字符串,输出100 C_language。
8.设有以下程序代码,若empty.txt是新建的空文本文件,程序输出为( )
#include <stdio.h>
int main()
{ FILE *fp;
fp = fopen("empty.txt", "r");
if(feof(fp))
printf("文件为空");
else
printf("文件非空");
fclose(fp);
return 0; }
A. 文件为空 B. 文件非空 C. 崩溃 D. 随机值
【答案】B
【解析】空文件刚打开时,未执行任何读取操作,feof不会置位文件结束标志,返回假,判定为文件非空。必须先尝试读取,再用feof判断。
9.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
char ch;
fp = fopen("t.txt", "w+");
fputc('A', fp);
rewind(fp);
ch = fgetc(fp);
printf("%c", ch);
fclose(fp);
return 0; }
A. A B. 空字符 C. 乱码 D. EOF
【答案】A
【解析】w+读写模式,写入字符A后,rewind将指针回到文件开头,读取字符得到A。
10.执行以下程序的输出结果是( )
#include <stdio.h>
struct Stu
{ int id; char name[10];};
int main()
{ FILE *fp;
struct Stu s = {1, "Tom"},temp;
fp = fopen("stu.dat", "wb");
fwrite(&s, sizeof(struct Stu), 1, fp);
fclose(fp);
fp = fopen("stu.dat", "rb");
fread(&temp, sizeof(struct Stu), 1, fp);
printf("%d %s", temp.id, temp.name);
return 0; }
A. 1 Tom B. 1 空字符串 C. 乱码 D. 编译报错
【答案】A
【解析】fread/fwrite支持直接读写结构体整块数据,二进制方式完整保存并恢复结构体内容。
11.设有以下程序代码,原文件写入内容为255,执行后文件内最终内容是( )
#include <stdio.h>
int main()
{ FILE *fp;
int a = 255;
fp = fopen("num.txt", "w");
fprintf(fp, "%d", a);
fseek(fp, -2, SEEK_CUR);
fputc('9', fp);
fclose(fp);
return 0; }
A. 295 B. 259 C. 955 D. 255
【答案】A
【解析】写入255后,指针在文件末尾(第3个字符后);fseek(fp,-2,SEEK_CUR) 从当前位置向前偏移 2 字节,定位到第 2 个字符5的位置;覆盖写入9,最终内容295。
12.设有以下程序代码,若文件总长度为 10 字节,程序输出为( )
#include <stdio.h>
int main()
{ FILE *fp;
long t1, t2;
fp = fopen("test.txt", "r");
fseek(fp, 0, SEEK_END);
t1 = ftell(fp);
rewind(fp);
fgetc(fp);
t2 = ftell(fp);
printf("%ld %ld", t1, t2);
fclose(fp);
return 0; }
A. 10 1 B. 10 0 C. 9 1 D. 9 0
【答案】A
【解析】fseek(0,SEEK_END) 指针定位到文件末尾,ftell获取总字节数 10;rewind回到开头,读取 1 个字符后偏移量为 1。
13.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
char buf[10];
fp = fopen("str.txt", "w");
fputs("ABCD
EF", fp);
fclose(fp);
fp = fopen("str.txt", "r");
fgets(buf, 10, fp);
printf("%s", buf);
return 0;}
A. ABCD B. ABCD (换行) C. ABCDEF D. EF
【答案】B
【解析】fgets 遇到换行符
会立即停止读取,并且保留换行符,因此读取内容为ABCD
,输出会换行。
14.设有以下程序代码,若文件内有 5 个有效字符,cnt最终值为( )
#include <stdio.h>
int main()
{ FILE *fp;
int cnt = 0;
char ch;
fp = fopen("data.txt", "r");
while(1)
{ ch = fgetc(fp);
if(feof(fp)) break;
cnt++; }
printf("%d", cnt);
fclose(fp);
return 0; }
A. 4 B. 5 C. 6 D. 0
【答案】B
【解析】先读取字符,再判断feof,是规范写法;5 个字符全部读取完成后,下一次fgetc触发文件结束,循环终止,计数为 5。
15.设有以下程序代码,该程序实现的功能是( )
#include <stdio.h>
int main()
{ FILE *fp1, *fp2;
char ch;
fp1 = fopen("src.txt", "r");
fp2 = fopen("dest.txt", "w");
while( (ch = fgetc(fp1)) != EOF )
{ fputc(ch, fp2); }
fclose(fp1);
fclose(fp2);
return 0; }
A. 两个文件合并 B. 将src.txt内容复制到dest.txt
C. 清空src.txt所有内容 D. 交换两个文件内容
【答案】B
【解析】逐字符读取源文件,同步写入目标文件,是基础的文件复制功能。
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int ch;
fp = fopen("file1.txt", "w");
fputs("Program 123", fp);
fclose(fp);
fp = fopen("file1.txt", "r");
while(1)
{ ch = fgetc(fp);
if(feof(fp))
break;
if(ch >= 'A' && ch <= 'Z')
putchar(ch + 32);
else
putchar(ch); }
fclose(fp);
return 0; }
【答案】program 123
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
long pos1, pos2, pos3;
fp = fopen("file2.txt", "w+");
fputs("ABCDEFG", fp);
pos1 = ftell(fp);
fseek(fp, -3, SEEK_CUR);
fputc('#', fp);
pos2 = ftell(fp);
rewind(fp);
pos3 = ftell(fp);
printf("%ld %ld %ld", pos1, pos2, pos3);
fclose(fp);
return 0; }
【答案】7 5 0
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int count = 0;
char buf[10];
fp = fopen("file3.txt", "w");
fputs("Hi
Hello", fp);
fclose(fp);
fp = fopen("file3.txt", "r");
while(fgets(buf, 10, fp) != NULL)
{ count++; }
printf("%d", count);
fclose(fp);
return 0; }
【答案】2
4.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int arr[5] = {11,22,33,44,55};
int temp[2];
fp = fopen("file6.dat", "wb");
fwrite(arr, sizeof(int), 5, fp);
fclose(fp);
fp = fopen("file6.dat", "rb");
fseek(fp, 2 * sizeof(int), SEEK_SET);
fread(temp, sizeof(int), 2, fp);
printf("%d %d", temp[0], temp[1]);
fclose(fp);
return 0; }
【答案】33 44
5.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
FILE *fp;
int flag1, flag2;
fp = fopen("file7.txt", "w");
fclose(fp);
fp = fopen("file7.txt", "r");
flag1 = feof(fp);
fgetc(fp);
flag2 = !(!feof(fp));
printf("%d %d", flag1, flag2);
fclose(fp);
return 0;
}
【答案】0 1
6.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
char buf[8];
fp = fopen("file8.txt", "w");
fputs("Sunshine", fp);
fclose(fp);
fp = fopen("file8.txt", "r");
fgets(buf, 7, fp);
printf("%s", buf);
fclose(fp);
return 0; }
【答案】Sunshi
7.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
long total;
char c;
fp = fopen("file9.txt", "w+");
fputs("QWERTY", fp);
fseek(fp, 0, SEEK_END);
total = ftell(fp);
fseek(fp, -4, SEEK_END);
c = fgetc(fp);
printf("%ld %c", total, c);
fclose(fp);
return 0; }
【答案】6 E
8.下列程序的运行结果是__________________。
#include <stdio.h>
typedef struct
{ int score;
char level;} Info;
int main(void)
{ FILE *fp;
Info s = {95, 'A'}, res;
fp = fopen("file11.dat", "wb");
fwrite(&s, sizeof(Info), 1, fp);
fclose(fp);
fp = fopen("file11.dat", "rb");
fread(&res, sizeof(Info), 1, fp);
printf("%d %c", res.score, res.level);
return 0; }
【答案】95 A
9.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int i;
char ch;
fp = fopen("file12.txt", "w");
for(i = 1; i <= 4; i++)
fputc('0' + i, fp);
fclose(fp);
fp = fopen("file12.txt", "r");
fseek(fp, 2, SEEK_CUR);
ch = fgetc(fp);
putchar(ch);
fclose(fp);
return 0; }
【答案】3
10.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int sum = 0, val;
fp = fopen("file15.txt", "w");
fprintf(fp, "1 3 5 7 9");
fclose(fp);
fp = fopen("file15.txt", "r");
while(fscanf(fp, "%d", &val) == 1)
sum += val;
printf("%d", sum);
fclose(fp);
return 0; }
【答案】25
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2025年)下列程序功能是:从已按相应格式存有销售人员姓名与销售额的二进制文件(fd.dat)中读取数据到结构体数组中,再存放在链表中;统计总销售额,并输出总销售额、销售额不少于100的人员相关信息。
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#define ① (LDU *)malloc(sizeof(LDU))
#define N 5
typedef struct Fnode{
char name[30];
int sale;
}FDU;
typedef struct Lnode{ /*定义链表结构*/
char name[30]; /*存放姓名*/
int sale; /*存放销售额*/
②
}LDU;
LDU *inputLDU(FDU s[]){ /*创建存放信息的链表*/
LDU *p,*q,*h;
int i;
h=q=NEWLDU;
for(i=0;i<N;i++){
p=NEWLDU;
strcpy(p->name,s[i].name);
p->sale=s[i].sale;
p->next=p;
q->next=p;
q=q->next;
}
③
return h;
}
void outputLDU(LDU *h){ /*输出存放信息的链表*/
LDU *p;
int i;
p=h->next;
printf("h->");
while(p!=NULL){
printf("Name-%s ",p->name);
printf("Sale-%d->",p->sale);
p=p->next;
}
printf("NULL
");
}
int calcSale(LDU *h){/*统计总销售额,并输出销售额不少于100的信息*/
LDU *p;
int sum=0;
p=h->next;
while(p!=NULL){
sum+=p->sale;
if(p->sale>=100)
printf("%s %d,",p->name,p->sale);
p=p->next;
}
return sum;
}
int main(){
④
FDU s[N];
int i;
LDU *lp;
fp=fopen("fd.dat","rb");
for(i=0;i<N;i++)
fread(s+i,sizeof(FDU),1,fp);
fclose(fp);
lp=inputLDU(s);
outputLDU(lp);
printf("
the total of sale is:%d
", ⑤ );
return 0;
}
【答案】① NEWLDU
② struct Lnode *next;
③ q->next=NULL;
④ FILE *fp;
⑤ calcSale(lp)
2.下列程序的功能是:自动创建文本文件,写入一串混合大小写字母,读取文件,将所有小写转大写、大写转小写,覆盖写回原文件,最后输出最终文件内容。
#include <stdio.h>
int main()
{ FILE *fp;
char buf[100];
int len;
fp = fopen("test1.txt","w");
fputs("AbCdEfG123xYz",fp);
fclose(fp);
fp = _________①_________;
fgets(buf,100,fp);
fclose(fp);
for(len=0;________②_______;len++)
{
if(buf[len]>='a'&&buf[len]<='z')
buf[len]-=32;
else if(__________③_________)
buf[len]+=32;
}
fp = fopen("test1.txt","w");
_________④________;
fclose(fp);
fp = fopen("test1.txt","r");
fgets(buf,100,fp);
printf("转换后文件内容:%s
",buf);
fclose(fp);
return 0;
}
【答案】①fopen("test1.txt","r") ②buf[len]!='\0'
③buf[len]>='A'&&buf[len]<='Z' ④fputs(buf,fp)
3.下列程序的功能是:创建文件存储一串数字,读取文件,剔除所有奇数,只保留偶数,重新写回文件并输出。
#include <stdio.h>
int main()
{ FILE *fp;
char str[100],res[100];
int i,j=0;
fp = fopen("test2.txt","w");
fputs("1234567890",fp);
fclose(fp);
fp = fopen("test2.txt","r");
fgets(str,100,fp);
fclose(fp);
for(i=0;str[i]!='\0';i++)
{
if(str[i]>='0'&&str[i]<='9')
{
if(__________①_________)
________②_______;
}
}
_______③_______;
fp = fopen("test2.txt","w");
fputs(res,fp);
fclose(fp);
fp = fopen("test2.txt","r");
fgets(str,100,fp);
printf("保留偶数:%s
",str);
fclose(fp);
return 0;
}
【答案】①(str[i]-'0')%2==0 ②res[j++]=str[i] ③res[j]='\0'
4.下列程序的功能是:读取文件全部内容,字符串整体反转后重新写入文件。
#include <stdio.h>
#include <string.h>
int main()
{ ________①_________
char buf[100],t;
int i,len;
fp = fopen("test7.txt","w");
fputs("ABCDE123",fp);
fclose(fp);
fp = fopen("test7.txt","r");
fgets(buf,100,fp);
fclose(fp);
len = ________②________;
for(i=0;i<len/2;i++)
{
t=buf[i];
__________③____________
buf[len-1-i]=t;
}
fp = fopen("test7.txt","w");
fputs(buf,fp);
fclose(fp);
fp = fopen("test7.txt","r");
fgets(buf,100,fp);
printf("反转结果:%s
",buf);
fclose(fp);
return 0;
}
【答案】①FILE *fp; ②strlen(buf) ③buf[i]=buf[len-1-i];
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.(2024年)下列程序功能是把一个字符串写入磁盘文件“fb.txt”。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 file fp;
L5 char s[]="2024 lucky!";
L6 fp=fopen("f:\\fb.txt","w");
L7 if(fp==NULL)
L8 {
L9 printf("can not open file!
");
L10 exit(0);
L11 }
L12 fgets(s,fp);
L13 fclose(fp);
L14 return 0;
L15 }
【答案】①L4 FILE *fp; ②L12 fputs(s,fp);
2.(2022年)下列程序的功能是:将3个学生的记录(姓名与成绩)存入文件fd.dat中。以下程序只允许修改两行。
L1 #include "stdio.h"
L2 #define N 3
L3 #define LEN sizeof(STU)
L4 typedef struct node{
L5 char name[10];
L6 int score;
L7 }STU;
L8 main(){
L9 file fp;
L10 STU s[N];
L11 int i=0;
L12 fp=fopen("fd.dat","wb");
L13 for(;i<N;i++){
L14 scanf("%s%d",s[i].name,&s[i].score);
L15 fread(s[i],LEN,1,fp);
L16 }
L17 fclose(fp);
L18 }
【答案】①L9 FILE *fp;
②L15 fwrite(s+i,LEN,1,fp);
或 L15 fwrite(&s[i],LEN,1,fp);
3.下列程序的功能是:统计文件中 字母、数字、符号 各自数量。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 FILE *fp;
L5 int c,letter=0,num=0,other=0;
L6 fp = fopen("test10.txt","r");
L7 fputs("Abc123!@#XY",fp);
L8 fclose(fp);
L9 fp = fopen("test10.txt","r");
L10 while((c=fputc(fp))!=EOF)
L11 {
L12 if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
L13 letter++;
L14 else if(c>='0'||c<='9')
L15 num++;
L16 else
L17 other++;
L18 }
L19 printf("字母:%d 数字:%d 符号:%d
",letter,num,other);
L20 fclose(fp);
L21 return 0;
L22 }
【答案】①L6 fp = fopen("test10.txt","w");
②L10 while((c=fgetc(fp))!=EOF)
③L14 else if(c>='0'&&c<='9')
4.下列程序的功能是:创建文件写入多行学生成绩;读取所有成绩;找出最高分、最低分、平均分;最后将统计结果追加写入文件末尾。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 FILE *fp;
L5 int sc,max=0,min=100,sum=0,n=0;
L6 fp = fopen("test15.txt","w");
L7 fputs("85
92
78
66
95",fp);
L8 fclose(fp);
L9 fp = fopen("test15.txt","r");
L10 while(fscanf(fp,"%d",sc)==1)
L11 {
L12 if(sc>max) max=sc;
L13 if(sc<min) min=sc;
L14 sum=sc;
L15 n++;
L16 }
L17 fclose(fp);
L18 fp = fopen("test15.txt","a");
L19 fprintf(fp,"
max=%d min=%d avg=%.2f",max,min,sum*1.0/n);
L20 fclose(fp);
L21 fp = fopen("test15.txt","r");
L22 while((sc=fputc(fp))!=EOF) putchar(sc);
L23 fclose(fp);
L24 return 0;
L25 }
【答案】①L10 while(fscanf(fp,"%d",&sc)==1)
②L14 sum+=sc;
③L22 while((sc=fgetc(fp))!=EOF) putchar(sc);
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:湖南省普通高校对口招生专业理论考试《计算机应用类专业综合考纲百套卷》,依据《湖南省普通高校对口招生计算机应用类专业综合知识基本要求及考试大纲》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第88卷,按《计算机编程语言——C语言》范围和要求编写。具体内容为:①C文件的打开与关闭;②向文件读写字符及字符串;③格式化读写文本文件及随机读写数据文件;④用二进制方式向文件读写一组数据;⑤文件的定位和文件的结尾标志。
湖南省《计算机应用类专业综合考纲百套卷》 第88卷
《计算机编程语言——C语言》
文件的打开、关闭、读写、定位和文件结尾标志
考点训练卷
考试时间60分钟 满分100分
班级________姓名________学号________成绩________
一、单项选择题(本大题共15小题,每题2分,共30分)
1.(2023年)下列关于文件操作的描述中,错误的是( )
A.file* fp;可定义一个文件指针
B.fputc 函数可用于把数据写入到文件
C.fprintf 函数可用于把数据写入到文件
D.fputs 函数可用于把数据写入到文件
2.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
char str[20];
fp = fopen("data.txt", "w");
fputs("Hello World", fp);
fclose(fp);
fp = fopen("data.txt", "r");
fgets(str, 5, fp);
puts(str);
fclose(fp);
return 0; }
A. Hello B. Hell C. Hello World D. 乱码
3.C 语言中,用于判断文件读取是否到达末尾的标准函数 / 宏,搭配正确且用法规范的是( )
A. 使用 feof(fp),在每次读写操作之后判断是否到文件尾
B. 使用 feof(fp),在每次读写操作之前判断是否到文件尾
C. EOF 可以用于判断二进制文件的读取结束
D. ferror(fp) 可以替代 feof(fp) 判断文件末尾
4.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
int arr[3] = {10,20,30},res[3];
fp = fopen("bin.dat", "wb");
fwrite(arr, sizeof(int), 3, fp);
fclose(fp);
fp = fopen("bin.dat", "rb");
fread(res, sizeof(int), 3, fp);
printf("%d", res[1]);
fclose(fp);
return 0; }
A. 10 B. 20 C. 30 D. 随机值
5.关于 C 语言文件打开模式"r+"和"w+",下列区别描述正确的是( )
A. "r+" 新建文件,"w+" 打开已有文件
B. "r+" 文件不存在则创建,"w+" 文件不存在则打开失败
C. "r+" 保留原文件内容,"w+" 会清空原文件所有内容
D. 二者功能完全一致,仅写法不同
6.C 语言中fseek函数用于文件指针定位,若要将指针定位到从文件末尾向前偏移 5 个字节,参数组合正确的是( )
A. fseek(fp, 5, SEEK_END) B. fseek(fp, -5, SEEK_END)
C. fseek(fp, 5, SEEK_SET) D. fseek(fp, -5, SEEK_CUR)
7.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
int num;
char buf[20];
fp = fopen("a.txt", "w");
fprintf(fp, "%d:%s", 100, "C_language");
fclose(fp);
fp = fopen("a.txt", "r");
fscanf(fp, "%d:%s", &num, buf);
printf("%d %s", num, buf);
fclose(fp);
return 0; }
A. 100 C_language B. 100 : C_language
C. 编译报错 D. 读取失败,输出乱码
8.设有以下程序代码,若empty.txt是新建的空文本文件,程序输出为( )
#include <stdio.h>
int main()
{ FILE *fp;
fp = fopen("empty.txt", "r");
if(feof(fp))
printf("文件为空");
else
printf("文件非空");
fclose(fp);
return 0; }
A. 文件为空 B. 文件非空 C. 崩溃 D. 随机值
9.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
char ch;
fp = fopen("t.txt", "w+");
fputc('A', fp);
rewind(fp);
ch = fgetc(fp);
printf("%c", ch);
fclose(fp);
return 0; }
A. A B. 空字符 C. 乱码 D. EOF
10.执行以下程序的输出结果是( )
#include <stdio.h>
struct Stu
{ int id; char name[10];};
int main()
{ FILE *fp;
struct Stu s = {1, "Tom"},temp;
fp = fopen("stu.dat", "wb");
fwrite(&s, sizeof(struct Stu), 1, fp);
fclose(fp);
fp = fopen("stu.dat", "rb");
fread(&temp, sizeof(struct Stu), 1, fp);
printf("%d %s", temp.id, temp.name);
return 0; }
A. 1 Tom B. 1 空字符串 C. 乱码 D. 编译报错
11.设有以下程序代码,原文件写入内容为255,执行后文件内最终内容是( )
#include <stdio.h>
int main()
{ FILE *fp;
int a = 255;
fp = fopen("num.txt", "w");
fprintf(fp, "%d", a);
fseek(fp, -2, SEEK_CUR);
fputc('9', fp);
fclose(fp);
return 0; }
A. 295 B. 259 C. 955 D. 255
12.设有以下程序代码,若文件总长度为 10 字节,程序输出为( )
#include <stdio.h>
int main()
{ FILE *fp;
long t1, t2;
fp = fopen("test.txt", "r");
fseek(fp, 0, SEEK_END);
t1 = ftell(fp);
rewind(fp);
fgetc(fp);
t2 = ftell(fp);
printf("%ld %ld", t1, t2);
fclose(fp);
return 0; }
A. 10 1 B. 10 0 C. 9 1 D. 9 0
13.执行以下程序的输出结果是( )
#include <stdio.h>
int main()
{ FILE *fp;
char buf[10];
fp = fopen("str.txt", "w");
fputs("ABCD
EF", fp);
fclose(fp);
fp = fopen("str.txt", "r");
fgets(buf, 10, fp);
printf("%s", buf);
return 0;}
A. ABCD B. ABCD (换行) C. ABCDEF D. EF
14.设有以下程序代码,若文件内有 5 个有效字符,cnt最终值为( )
#include <stdio.h>
int main()
{ FILE *fp;
int cnt = 0;
char ch;
fp = fopen("data.txt", "r");
while(1)
{ ch = fgetc(fp);
if(feof(fp)) break;
cnt++; }
printf("%d", cnt);
fclose(fp);
return 0; }
A. 4 B. 5 C. 6 D. 0
15.设有以下程序代码,该程序实现的功能是( )
#include <stdio.h>
int main()
{ FILE *fp1, *fp2;
char ch;
fp1 = fopen("src.txt", "r");
fp2 = fopen("dest.txt", "w");
while( (ch = fgetc(fp1)) != EOF )
{ fputc(ch, fp2); }
fclose(fp1);
fclose(fp2);
return 0; }
A. 两个文件合并 B. 将src.txt内容复制到dest.txt
C. 清空src.txt所有内容 D. 交换两个文件内容
二、阅读程序,写出运行结果(本大题共10小题。每空2分,合计20分)
1.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int ch;
fp = fopen("file1.txt", "w");
fputs("Program 123", fp);
fclose(fp);
fp = fopen("file1.txt", "r");
while(1)
{ ch = fgetc(fp);
if(feof(fp))
break;
if(ch >= 'A' && ch <= 'Z')
putchar(ch + 32);
else
putchar(ch); }
fclose(fp);
return 0; }
2.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
long pos1, pos2, pos3;
fp = fopen("file2.txt", "w+");
fputs("ABCDEFG", fp);
pos1 = ftell(fp);
fseek(fp, -3, SEEK_CUR);
fputc('#', fp);
pos2 = ftell(fp);
rewind(fp);
pos3 = ftell(fp);
printf("%ld %ld %ld", pos1, pos2, pos3);
fclose(fp);
return 0; }
3.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int count = 0;
char buf[10];
fp = fopen("file3.txt", "w");
fputs("Hi
Hello", fp);
fclose(fp);
fp = fopen("file3.txt", "r");
while(fgets(buf, 10, fp) != NULL)
{ count++; }
printf("%d", count);
fclose(fp);
return 0; }
4.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int arr[5] = {11,22,33,44,55};
int temp[2];
fp = fopen("file6.dat", "wb");
fwrite(arr, sizeof(int), 5, fp);
fclose(fp);
fp = fopen("file6.dat", "rb");
fseek(fp, 2 * sizeof(int), SEEK_SET);
fread(temp, sizeof(int), 2, fp);
printf("%d %d", temp[0], temp[1]);
fclose(fp);
return 0; }
5.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{
FILE *fp;
int flag1, flag2;
fp = fopen("file7.txt", "w");
fclose(fp);
fp = fopen("file7.txt", "r");
flag1 = feof(fp);
fgetc(fp);
flag2 = !(!feof(fp));
printf("%d %d", flag1, flag2);
fclose(fp);
return 0;
}
6.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
char buf[8];
fp = fopen("file8.txt", "w");
fputs("Sunshine", fp);
fclose(fp);
fp = fopen("file8.txt", "r");
fgets(buf, 7, fp);
printf("%s", buf);
fclose(fp);
return 0; }
7.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
long total;
char c;
fp = fopen("file9.txt", "w+");
fputs("QWERTY", fp);
fseek(fp, 0, SEEK_END);
total = ftell(fp);
fseek(fp, -4, SEEK_END);
c = fgetc(fp);
printf("%ld %c", total, c);
fclose(fp);
return 0; }
8.下列程序的运行结果是__________________。
#include <stdio.h>
typedef struct
{ int score;
char level;} Info;
int main(void)
{ FILE *fp;
Info s = {95, 'A'}, res;
fp = fopen("file11.dat", "wb");
fwrite(&s, sizeof(Info), 1, fp);
fclose(fp);
fp = fopen("file11.dat", "rb");
fread(&res, sizeof(Info), 1, fp);
printf("%d %c", res.score, res.level);
return 0; }
9.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int i;
char ch;
fp = fopen("file12.txt", "w");
for(i = 1; i <= 4; i++)
fputc('0' + i, fp);
fclose(fp);
fp = fopen("file12.txt", "r");
fseek(fp, 2, SEEK_CUR);
ch = fgetc(fp);
putchar(ch);
fclose(fp);
return 0; }
10.下列程序的运行结果是__________________。
#include <stdio.h>
int main(void)
{ FILE *fp;
int sum = 0, val;
fp = fopen("file15.txt", "w");
fprintf(fp, "1 3 5 7 9");
fclose(fp);
fp = fopen("file15.txt", "r");
while(fscanf(fp, "%d", &val) == 1)
sum += val;
printf("%d", sum);
fclose(fp);
return 0; }
三、程序填空。按照题目要求,将正确内容填入答题卡相应位置,使程序完整(每空2分,共计30分)
1.(2025年)下列程序功能是:从已按相应格式存有销售人员姓名与销售额的二进制文件(fd.dat)中读取数据到结构体数组中,再存放在链表中;统计总销售额,并输出总销售额、销售额不少于100的人员相关信息。
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#define ① (LDU *)malloc(sizeof(LDU))
#define N 5
typedef struct Fnode{
char name[30];
int sale;
}FDU;
typedef struct Lnode{ /*定义链表结构*/
char name[30]; /*存放姓名*/
int sale; /*存放销售额*/
②
}LDU;
LDU *inputLDU(FDU s[]){ /*创建存放信息的链表*/
LDU *p,*q,*h;
int i;
h=q=NEWLDU;
for(i=0;i<N;i++){
p=NEWLDU;
strcpy(p->name,s[i].name);
p->sale=s[i].sale;
p->next=p;
q->next=p;
q=q->next;
}
③
return h;
}
void outputLDU(LDU *h){ /*输出存放信息的链表*/
LDU *p;
int i;
p=h->next;
printf("h->");
while(p!=NULL){
printf("Name-%s ",p->name);
printf("Sale-%d->",p->sale);
p=p->next;
}
printf("NULL
");
}
int calcSale(LDU *h){/*统计总销售额,并输出销售额不少于100的信息*/
LDU *p;
int sum=0;
p=h->next;
while(p!=NULL){
sum+=p->sale;
if(p->sale>=100)
printf("%s %d,",p->name,p->sale);
p=p->next;
}
return sum;
}
int main(){
④
FDU s[N];
int i;
LDU *lp;
fp=fopen("fd.dat","rb");
for(i=0;i<N;i++)
fread(s+i,sizeof(FDU),1,fp);
fclose(fp);
lp=inputLDU(s);
outputLDU(lp);
printf("
the total of sale is:%d
", ⑤ );
return 0;
}
2.下列程序的功能是:自动创建文本文件,写入一串混合大小写字母,读取文件,将所有小写转大写、大写转小写,覆盖写回原文件,最后输出最终文件内容。
#include <stdio.h>
int main()
{ FILE *fp;
char buf[100];
int len;
fp = fopen("test1.txt","w");
fputs("AbCdEfG123xYz",fp);
fclose(fp);
fp = _________①_________;
fgets(buf,100,fp);
fclose(fp);
for(len=0;________②_______;len++)
{
if(buf[len]>='a'&&buf[len]<='z')
buf[len]-=32;
else if(__________③_________)
buf[len]+=32;
}
fp = fopen("test1.txt","w");
_________④________;
fclose(fp);
fp = fopen("test1.txt","r");
fgets(buf,100,fp);
printf("转换后文件内容:%s
",buf);
fclose(fp);
return 0;
}
3.下列程序的功能是:创建文件存储一串数字,读取文件,剔除所有奇数,只保留偶数,重新写回文件并输出。
#include <stdio.h>
int main()
{ FILE *fp;
char str[100],res[100];
int i,j=0;
fp = fopen("test2.txt","w");
fputs("1234567890",fp);
fclose(fp);
fp = fopen("test2.txt","r");
fgets(str,100,fp);
fclose(fp);
for(i=0;str[i]!='\0';i++)
{
if(str[i]>='0'&&str[i]<='9')
{
if(__________①_________)
________②_______;
}
}
_______③_______;
fp = fopen("test2.txt","w");
fputs(res,fp);
fclose(fp);
fp = fopen("test2.txt","r");
fgets(str,100,fp);
printf("保留偶数:%s
",str);
fclose(fp);
return 0;
}
4.下列程序的功能是:读取文件全部内容,字符串整体反转后重新写入文件。
#include <stdio.h>
#include <string.h>
int main()
{ ________①_________
char buf[100],t;
int i,len;
fp = fopen("test7.txt","w");
fputs("ABCDE123",fp);
fclose(fp);
fp = fopen("test7.txt","r");
fgets(buf,100,fp);
fclose(fp);
len = ________②________;
for(i=0;i<len/2;i++)
{
t=buf[i];
__________③____________
buf[len-1-i]=t;
}
fp = fopen("test7.txt","w");
fputs(buf,fp);
fclose(fp);
fp = fopen("test7.txt","r");
fgets(buf,100,fp);
printf("反转结果:%s
",buf);
fclose(fp);
return 0;
}
四、阅读程序:修改程序中的错误,不得增行或删行,也不得更改程序结构。请在答题卡中指出错误代码所在的行号,并给出该行修改后的程序代码。(每空2分,共计20分)
1.(2024年)下列程序功能是把一个字符串写入磁盘文件“fb.txt”。以下程序只允许修改两行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 file fp;
L5 char s[]="2024 lucky!";
L6 fp=fopen("f:\\fb.txt","w");
L7 if(fp==NULL)
L8 {
L9 printf("can not open file!
");
L10 exit(0);
L11 }
L12 fgets(s,fp);
L13 fclose(fp);
L14 return 0;
L15 }
2.(2022年)下列程序的功能是:将3个学生的记录(姓名与成绩)存入文件fd.dat中。以下程序只允许修改两行。
L1 #include "stdio.h"
L2 #define N 3
L3 #define LEN sizeof(STU)
L4 typedef struct node{
L5 char name[10];
L6 int score;
L7 }STU;
L8 main(){
L9 file fp;
L10 STU s[N];
L11 int i=0;
L12 fp=fopen("fd.dat","wb");
L13 for(;i<N;i++){
L14 scanf("%s%d",s[i].name,&s[i].score);
L15 fread(s[i],LEN,1,fp);
L16 }
L17 fclose(fp);
L18 }
3.下列程序的功能是:统计文件中 字母、数字、符号 各自数量。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 FILE *fp;
L5 int c,letter=0,num=0,other=0;
L6 fp = fopen("test10.txt","r");
L7 fputs("Abc123!@#XY",fp);
L8 fclose(fp);
L9 fp = fopen("test10.txt","r");
L10 while((c=fputc(fp))!=EOF)
L11 {
L12 if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
L13 letter++;
L14 else if(c>='0'||c<='9')
L15 num++;
L16 else
L17 other++;
L18 }
L19 printf("字母:%d 数字:%d 符号:%d
",letter,num,other);
L20 fclose(fp);
L21 return 0;
L22 }
4.下列程序的功能是:创建文件写入多行学生成绩;读取所有成绩;找出最高分、最低分、平均分;最后将统计结果追加写入文件末尾。以下程序只允许修改三行。
L1 #include <stdio.h>
L2 int main()
L3 {
L4 FILE *fp;
L5 int sc,max=0,min=100,sum=0,n=0;
L6 fp = fopen("test15.txt","w");
L7 fputs("85
92
78
66
95",fp);
L8 fclose(fp);
L9 fp = fopen("test15.txt","r");
L10 while(fscanf(fp,"%d",sc)==1)
L11 {
L12 if(sc>max) max=sc;
L13 if(sc<min) min=sc;
L14 sum=sc;
L15 n++;
L16 }
L17 fclose(fp);
L18 fp = fopen("test15.txt","a");
L19 fprintf(fp,"
max=%d min=%d avg=%.2f",max,min,sum*1.0/n);
L20 fclose(fp);
L21 fp = fopen("test15.txt","r");
L22 while((sc=fputc(fp))!=EOF) putchar(sc);
L23 fclose(fp);
L24 return 0;
L25 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$