C语言 选择题库第11章 文件

合集下载

全国计算机等级考试二级C语言之文件

全国计算机等级考试二级C语言之文件

全国计算机等级考试二级C语言之文件一、选择题:(1)以下叙述中错误的是A)C语言中对二进制文件的访问速度比文本文件快B)C语言中,随机文件以二进制代码形式存储数据C)语句 FILE fp; 定义了一个名为fp的文件指针D)C语言中的文本文件以ASCII码形式存储数据(2)有以下程序#includemain(){ FILE *fp; int i, k, n;fp=fopen("data.dat", "w+");for(i=1; i{ fprintf(fp,"%d ",i);if(i%3==0) fprintf(fp,"\n");}rewind(fp);fscanf(fp, "%d%d", &k, &n); printf("%d %d\n", k, n); fclose(fp);}程序运行后的输出结果是A)0 0B)123 45C)1 4D)1 2(3)以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是A)feof(fp)B)ftell(fp)C)fgetc(fp)D)rewind(fp)(4)有以下程序#include "stdio.h"void WriteStr(char *fn,char *str){FILE *fp;fp=fopen(fn,"W");fputs(str,fp);fclose(fp);}main(){WriteStr("t1.dat","start");WriteStr("t1.dat","end");}程序运行后,文件t1.dat中的内容是A)startB)endC)startendD)endrt(5) 有如下程序#includemain(){FILE *fp1;fp1=fopen("f1.txt","w");fprintf(fp1,"abc");fclose(fp1);}若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为A) goodabcB) abcdC) abcD) abcgood(6) 有以下程序#includemain( ){ FILE *fp; int i,k=0,n=0;fp=fopen(“d1.dat”,”w”);for(i=1;ifclose(fp);fp=fopen(“d1.dat”,”r”);fscanf(fp,”%d%d”,&k,&n); printf(“%d %d\n”,k,n);fclose(fp);}执行后输出结果是A) 1 2B) 123 0C) 1 23D) 0 0(7) 有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END) ;语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节)#includemain( ){ FILE *fp; int i,a[4]={1,2,3,4},b;fp=fopen("data.dat","wb");for(i=0;ifclose(fp);fp=fopen("data.dat","rb");fseek(fp,-2L*sizeof(int).SEEK_END) ;fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到变量b中*/ fclose(fp);printf("%d\n",B) ;}执行后输出结果是A) 2B) 1C) 4(8) 若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为A) 0B) 1C) -1D) 一个非0值(9) 下列关于C语言数据文件的叙述中正确的是A) 文件由ASCII码字符序列组成,C语言只能读写文本文件B) 文件由二进制数据序列组成,C语言只能读写二进制文件C) 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D) 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件(10) 以下叙述中不正确的是A)C语言中的文本文件以ASCⅡ码形式存储数据B)C语言中对二进制文件的访问速度比文本文件快C)C语言中,随机读写方式不适用于文本文件D)C语言中,顺序读写方式不适用于二进制文件(11) 以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。

第11章c语言课后答案

第11章c语言课后答案
般使用字符文件,他们可以方便,快捷的通过显示器或打印机直接输出。
2: /*打开文件,关闭文件的含义是什么?为什么要打开关闭文件?*/
答: 打开文件的含义:要把文件使用方式写入FILE结构体变量中;返回一个FILE结构体指针,指向该文件的FILE结构
体变量,通过该文件指针可以对文件进行操作。
关闭文件的含义:文件指针不再指向原来指向的文件。
为什么要打开文件:(1)要确定文件的使用方式;(2)要得到一个指向文件的指针;(3)还需检测文件是否存在,
磁盘是否出故障等。
为什么要关闭文件:(1)防止文件被误用;(2)具体系统中同时打开的文件的数目是有限的。
{ k=i;
for(j=i+1;j<n;j++)
if(stu1[i].ave<stu1[j].ave)k=j;
if(k!=i)
{ change=stu1[i];stu1[i]=stu1[j];stu1[j]=change;}
}
fp=fopen("stu2","wb");
exit(1);
}
printf("\nInput char: ");
while((str=fgetc(stdin))!='#')
fputc(str,fp);
fclose(fp);
fp=fopen("text.txt","r");
while((str=fgetc(fp))!=EOF)
for(i=0;i<n;i++)
{ printf("Input the message of %d student\n",i+1);

C语言 习题十一 参考答案

C语言 习题十一 参考答案

3.已有一个存放数千种仓库物质信息的文件 CK,每个信息元素含两个内容:物质编号 kno 和库存量 KNOM。请编程通过检查全库物质的库存量,建立一个新的文件 XK,它包含所有库存量大于 100 的物质 的编号和库存量。 参考程序: /*p360_3.c*/ #include "stdio.h" main() {int n,m;
{scanf("%d%s",&n,xm); for(j=0;j<5;j++) scanf("%d",&sc[i][j]); }
fp=fopen("abc.txt","w"); for(i=0;i<N;i++)
fprintf(fp,"%5d%s%4d%4d%4d%4d%4d\n",n,xm,sc[i][0],sc[i][1],sc[i][2],sc[i][3],sc[i][4]); fclose(fp); } /*p360_1a.c*/ #include "stdio.h" main() {FILE *fp; int num,mark[5],i,sum,n=0; float av,t[5]={0}; char name[20]; if((fp=fopen("abd.txt","w"))==NULL)
FILE *fp1,*fp2; fp1=fopen("ck.txt","r"); fp2=fopen("xk.txt","w"); while(feof(fp1)==0) {fscanf(fp1,"%d,%d",&n,&m);

C语言文件选择题

C语言文件选择题

C语言文件选择题(答案在最后)1、标准库函数fgets(s,n,f)得功能就是A) 从文件f中读取长度为n得字符串存入指针s所指得内存B) 从文件f中读取长度不超过n-1得字符串存入指针s所指得内存C) 从文件f中读取n个字符串存入指针s所指得内存D) 从文件f中读取长度为n-1得字符串存入指针s所指得内存2、在C中,对文件得存取以________为单位A) 记录B) 字节C) 元素D) 簇3、下面得变量表示文件指针变量得就是A) FILE *fp B)C) FILER *fp D) file *fp4、在C中,下面对文件得叙述正确得就是A) 用“r”方式打开得文件只能向文件写数据B) 用“R”方式也可以打开文件C) 用“w”方式打开得文件只能用于向文件写数据,且该文件可以不存在D) 用“a”方式可以打开不存在得文件5、在C中,当文件指针变fp已指向“文件结束”,则函数feof(fp)得值就是A) 、t、B) 、F、C) 0 D) 16、在C中,系统自动定义了3个文件指针stdin,stdout与stderr分别指向终端输入、终端输出与标准出错输出,则函数fputc(ch,stdout)得功能就是A) 从键盘输入一个字符给字符变量chB) 在屏幕上输出字符变量ch得值C) 将字符变量得值写入文件stdout中D) 将字符变量ch得值赋给stdout7、下面程序段得功能就是#include <stdio、h>main(){char s1;s1=putc(getc(stdin),stdout);}A) 从键盘输入一个字符给字符变量s1B) 从键盘输入一个字符,然后再输出到屏幕C) 从键盘输入一个字符,然后在输出到屏幕得同时赋给变量s1D) 在屏幕上输出stdout得值8、在C中,常用如下方法打开一个文件if((fp=fopen("","r" ))==NULL){printf("cannot open this file \n");exit(0);}其中函数exit(0)得作用就是A) 退出C环境B) 退出所在得复合语句C) 当文件不能正常打开时,关闭所有得文件,并终止正在调用得过程D) 当文件正常打开时,终止正在调用得过程9、执行如下程序段#include <stdio、h>FILE *fp;fp=fopen("file","w" );则磁盘上生成得文件得全名就是A) file B) file、cC) D)10、在内存与磁盘频繁交换数据得情况下,对磁盘文件得读写最好使用得函数就是A) fscanF,fprintf B) fread,fwriteC) getc,putc D) putchar,getchar11、在C中若按照数据得格式划分,文件可分为A) 程序文件与数据文件B) 磁盘文件与设备文件C) 二进制文件与文本文件D) 顺序文件与随机文件12、若fp就是指向某文件得指针,且已读到该文件得末尾,则C语言函数feof(fp)得返回值就是A) EOF B) -1C) 非零值D) NULL13、在C中,缓冲文件系统就是指A) 缓冲区就是由用户自己申请得B) 缓冲区就是由系统自动建立得D) 缓冲区就是根据文件得大小决定得D) 缓冲区就是根据内存得大小决定得14、在C中,文件型指针就是A) 一种字符型得指针变量B) 一种结构型得指针变量C) 一种共用型得指针变量D) 一种枚举型得指针变量15、在C中,标准输出设备就是指A) 键盘B) 鼠标C) 硬盘D) 光笔16、在C中,标准输出设备与标准错误输出设备就是指显示器,它们对应得指针名分别为A) stdin,stdio B) STDOUT,STDERRC) stdout,stderr D) stderr,stdout17、在C中,所有得磁盘文件在操作前都必须打开,打开文件函数得调用格式为: fopen(文件名,文件操作方式);其中文件名就是要打开得文件得全名,它可以就是:A) 字符变量名、字符串常量、字符数组名B) 字符常量、字符串变量、指向字符串得指针变量C) 字符串常量、存放字符串得字符数组名、指向字符串得指针变量D) 字符数组名、文件得主名、字符串变量名18、在C中,打开文件得程序段中正确得就是A) #include <stdio、h> B) #include <stdio、h>FILE *fp; ;fp=fopen("","WB"); fp=fopen("","w");C) #include <stdio、h> D) #include <string、h>FILE *fp; FILE *fp;fp=fopen("","w"); fp=fopen("","w");19、在C中,打开文件时,选用得文件操作方式为"wb",则下列说法中错误得就是A) 要打开得文件必须存在B) 要打开得文件可以不存在C) 打开文件后可以读取数据D) 要打开得文件就是二进制文件20、在C中,如果要打开C盘一级目录ccw下,名为“ccw、dat”得二进制文件用于读与追加写,则调用打开文件函数得格式为A) fopen("c:\ccw\ccw、dat","ab") B) fopen("c:\ccw、dat","ab+")C) fopen("c:ccw\ccw、dat","ab+") D) fopen("c:\ccw\ccw、dat","ab+")21、在C中,假设文件型指针fp已经指向可写得磁盘文件,并且正确执行了函数调用fputc('A',fp),则该次调用后函数返回得值就是A) 字符'A'或整数65 B) 符号常量EOFC) 整数1 D) 整数-122、以下函数,一般情况下,功能相同得就是A) fputc与putchar B) fwrite与fputcC) fread与fgetc D) putc与fputc23、设文件已存在,且有如下列程序段#include <stdio、h>FILE *fp1;fp1=fopen("","r");while(!feof(fp1)) putchar(getc(fp1));该程序段得功能就是A) 将文件得内容输出到屏幕B) 将文件得内容输出到文件C) 将文件得第一个字符输出到屏幕D) 什么也不干24、设文件stu1、dat已存在,且有如下列程序段#include <stdio、h>FILE *fp1, *fp2;fp1=fopen("stud1、dat","r");fp2=fopen("stud2、dat","w");while(feof(fp1)) putc(getc(fp1),fp2);该程序段得功能就是A) 将文件stud1、dat得内容复制到文件stud2、dat中B) 将文件stud2、dat得内容复制到文件stud1、dat中C) 屏幕输出stud1、dat得内容D) 什么也不干25、下面程序段定义了函数putint,该函数得功能就是putint(int n,FILE *fp){char *s;int num;s=&n;for(num=0;num<2;num++)putc(s[num],fp);}A) 屏幕输出一整数B) 屏幕输出一字符C) 向文件写入一实数D) 向文件写入一整数26、如果要将存放在双精度型数组a[10]中得10个双精度型实数写入文件型指针fp1指向得文件中,正确得语句就是A) for(i=0;i<80;i++) fputc(a[i],fp1);B) for(i=0;i<10;i++) fputc(&a[i],fp1);C) for(i=0;i<10;i++) fwrite(&a[i],8,1,fp1);D) fwrite(fp1,8,10,a);27、如果将文件型指针fp指向得文件内部指针置于文件尾,正确得语句就是A) feof(fp); B) rewind(fp);C) fseek(fp,0L,0); D) fseek(fp,0L,2);28、如果文件型指针fp指向得文件刚刚执行了一次读操作,则关于表达式“ferror(fp)”得正确说法就是A) 如果读操作发生错误,则返回1 B) 如果读操作发生错误,则返回0C) 如果读操作未发生错误,则返回1 D) 如果读操作未发生错误,则返回029、下列程序得主要功能就是#include "stdio、h"main(){FILE *fp;long count=0;fp=fopen("q1、c","r");while(!feof(fp)){fgetc(fp);count++;}printf("count=%ld\n",count);fclose(fp);}A) 读文件中得字符B) 统计文件中得字符数并输出C) 打开文件D) 关闭文件30、下列程序得主要功能就是#include "stdio、h"main(){FILE *fp;char ch;long count1=0,count2=0;fp=fopen("q1、c","r");while(!feof(fp)){ch=fgetc(fp);if(ch=='{'}count++;if(ch==')') count2++;}if(count1==count2) printf("YES!\n");else printf("ERROR!\n");fclose(fp);}A) 读文件中得字符'{'与'}' B) 统计文件中字符'{'与'}'得个数C) 输出“YES!”与“ERROE!”D) 检查C语言源程序中得花括号就是否配对31、假定名为“data1、dat”得二进制文件中依次存放了下列4个单精度实数: -12、1 12、2 -12、3 12、4则下面程序运行后得结果就是#include "stdio、h"main(){FILE *fp;float sum=0、0,x;int i;fp=fopen("data1、dat","rb")for(i=0;i<4;i++,i++){fread(&x,4,1,fp);sum+=x;}printf("%f\n",sum); fclose(fp);}A) 0、1 B) 0、0C) -12、3 D) 12、432、下面程序得主要功能就是:#include "stdio、h"main(){FILE *fp;float x[4]={-12、1,12、2,-12、3,12、4};int i;fp=fopen("data1、dat","wb")for(i=0;i<4;i++){fwrite(&x[i],4,1,fp);fclose(fp);}}A) 创建空文档data1、datB) 创建文本文件data1、datC) 将数组x中得四个实数写入文件data1、dat中D) 定义数组x33、有如下程序段:#include "stdio、h"main(){FILE *fp;int i;char s[10];fp=fopen("name、txt","w")for(i=0;i<40;i++){scanf("%s",s); fputc(s,fp);fputc("\n",fp);}fclose(fp);}下面说法正确得就是A) 将39个人得名字写入文本文件name、txt中B) 将40个人得名字写入文本文件name、txt中B) 文件name、txt中只能写入40个字符D) 文件name、txt必须存在34、有如下函数段:int (fpp)FILE *fpp;{ if(ferror(fpp))return(1);elsereturn(0);}则下列说法正确得就是A) 函数得功能就是测试fpp所指向得文件最后一次操作就是否正确B) 函数得功能就是返回1C) 函数得功能就是返回0D) 函数得功能就是测试fpp所指向得文件最近一次操作就是否正确35、函数fopen()得返回值不能就是A) NULL B) 0C) 1 D) 某个内存地址36、以只写方式打开一个二进制文件,应选择得文件操作方式就是A) "a+" B)"w+"C) "RB" D) "wb"37、存储整型数据-7865时,在二进制文件与文本文件中占用得字节数分别就是A) 2与2 B) 2与5C) 5与5 D) 5与238、在C中,二进制文件中得数据存放格式与整数-12345占用得字节数分别为A) ASCII码方式、4个字节B) ASCII码方式、2个字节C) 二进制数方式、2个字节D) 二进制数方式、4个字节答案:1、B2、B3、A4、C5、D6、B7、C8、C9、A 10、B 11、C 12、C 13、B 14、B 15、A 16、C 17、C 18、C 19、A 20、D 21、A 22、D 23、A 24、D 25、D 26、C 27、D 28、D 29、B 30、D 31、A 32、C 33、B 34、C 36、D 37、B 38、B。

c语言2019课外作业4

c语言2019课外作业4
2019 C 语言课外作业 四
第 8、9、11 章 结构体、指针、文件练习题
一、选择题 1.下面对结构数据类型的错误叙述是______。
A.结构变量可以在说明结构类型后定义,也 可在说明结构时定义。
B.结构可由若干个成员组成,各成员的数据 类型可以不同。
C.定义一个结构类型后,编译程序要为结构 的各成员分配存储空间。
s2 的长,函数值为 1,否则函数值为 0
B.FILE *fp ; fp = fopen( "file1.txt" , "r+" ) ;
15.下列关于 C 语言数据文件的叙述中正确的是
C.FILE *fp ; fp = fopen( "file1.txt" , "rb" ) ;
_______。
D.FILE *fp ; fp = fopen( "file1.txt" , "rb+" ) ;
A.printf( "%c\n" , stu[2].name ) ; B.printf( "%c\n" , stu[2].name[1] ) ; C.printf( "%c\n" , stu[1].name[1] ) ; D.printf( "%c\n" , stu[1].name[0] ) ; 6.若已定义 int a = 5 ; 下面对 ①、② 两个语句的 正确解释是_______。 ① int *p = &a ; ② *p = a ; A.语句①和②中的*p 含义相同,都表示给指
24.读取二进制文件的函数调用形式为:
exit( 0 ) ; }
fread( buffer , size , count , fp ) ;其中参数 buffer

C语言第十一章习题答案

C语言第十一章习题答案

11.1#include <iostream>struct date{int year;int month;int day;}date;void main(){static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31};int i,day_sum;printf("输入年,月,日\n\n");scanf("%d%d%d",&date.year,&date.month,&date.day);day_sum=0;for(i=0;i<date.month-1;i++)day_sum+=day_table[i];day_sum+=date.day;if((date.year%4==0)&&(date.year%100!=0)||(date.year%400==0)&&(date.m onth>2))day_sum+=1;printf("\n\n该日在本年中是第%d天\n\n",day_sum);}11.2#include <iostream>struct date{int year;int month;}date;void main(){int days(int y,int m,int d);printf("输入年,月,日\n\n");scanf("%d%d%d",&date.year,&date.month,&date.day);printf("\n\n该日在本年中是第%d天\n\n",days(date.year,date.month,date.day));}int days(int y,int m,int d){static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31}; int i,day_sum;day_sum=0;for(i=0;i<m-1;i++)day_sum+=day_table[i];day_sum+=date.day;if((y%4==0)&&(y%100!=0)||(y%400==0)&&(m>2))day_sum+=1;return day_sum;}11.3#include <iostream>#define N 2struct stu{int num;char name[10];float score[3];}stu[N];void main(){void print(struct stu *p);int i,j;struct stu *p;p=stu;for(i=0;i<N;i++){printf("\n\n输入第%d个学生的成绩\n\n",i+1);printf("输入学号:");scanf("%d",&((p+i)->num));printf("\n输入姓名:");scanf("%s",(p+i)->name);for(j=0;j<3;j++){printf("\n输入成绩%d:",j+1);scanf("%f",&((p+i)->score[j]));}}print(stu);}void print(struct stu *p){int i,j;printf("学号姓名成绩1 成绩2 成绩3\n\n"); for(i=0;i<N;i++){printf("%-8d%-8s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++){printf("%-8f",(p+i)->score[j]);}printf("\n\n");}}11.4#include <iostream>#define N 2struct stu{int num;char name[10];float score[3];}stu[N];void main(){void input(struct stu *p);void print(struct stu *p);struct stu *p;p=stu;input(p);print(p);}void input(struct stu *p){int i,j;for(i=0;i<N;i++){printf("\n\n输入第%d个学生的成绩\n\n",i+1);printf("输入学号:");scanf("%d",&((p+i)->num));printf("\n输入姓名:");scanf("%s",(p+i)->name);for(j=0;j<3;j++){printf("\n输入成绩%d:",j+1);scanf("%f",&((p+i)->score[j]));}}}void print(struct stu *p){int i,j;printf("学号姓名成绩1 成绩2 成绩3\n\n"); for(i=0;i<N;i++){printf("%-7d%-7s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++){printf("%-9.2f",(p+i)->score[j]);}printf("\n\n");}}11.5#include <iostream>#define N 3struct stu{char num[10];char name[10];float score[3];float average;}stu[N];void main(){void input(struct stu *p);void aver(struct stu *p);float aver_total(struct stu *p);void print(struct stu *p);struct stu *p;p=stu;input(p);aver(p);print(p);}void input(struct stu *p){int i,j;printf("按顺序依次输入学生的学号,姓名,成绩1,成绩2,成绩3\n\n"); for(i=0;i<N;i++){scanf("%s%s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++)scanf("%f",&((p+i)->score[j]));}}void aver(struct stu *p){int i,j;float sum;for(i=0;i<N;i++){sum=0;for(j=0;j<3;j++){sum+=(p+i)->score[j];}(p+i)->average=sum/3;}}float aver_total(struct stu *p){float sum=0;for(;p<stu+N;p++)sum+=p->average;return (sum/N);}void print(struct stu *p){int i,j;struct stu *q;float max=0;printf("三门课的总平均成绩为:%f\n\n",aver_total(p));for(i=0;i<N;i++){if((p+i)->average>max){max=(p+i)->average;q=p+i;}}printf("最高分学生的数据为:\n\n");printf("学号姓名成绩1 成绩2 成绩3 平均成绩\n\n"); printf("%-7s%-7s",q->num,q->name);for(j=0;j<3;j++){printf("%-8.2f",q->score[j]);}printf("%-8.2f",q->average);printf("\n\n");}11.8#include <iostream>#include <malloc.h>#define NULL 0#define LEN sizeof(struct student)struct student{long int num;float score;struct student *next;}list_a,list_b;int n,sum;void main(){struct student *creat(void);struct student *insert(struct student *ha,struct student *hb); void print(struct student *head);struct student *ahead,*bhead,*abh;ahead=creat();sum=n;bhead=creat();sum=sum+n;abh=insert(ahead,bhead);print(abh);}struct student *creat(void){struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);printf("输入学生的学号和成绩\n\n");printf("如果输入的学号为0,就停止输入\n\n");scanf("%ld%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf("%ld%f",&p1->num,&p1->score);}p2->next=NULL;return(head);}struct student *insert(struct student *ha,struct student *hb) {struct student *pa1,*pa2,*pb1,*pb2;pa1=pa2=ha;pb1=pb2=hb;if(ha==NULL&&hb!=NULL) ha=hb;else{while((pb1->num>pa1->num)&&(pa1->next!=NULL)){pa2=pa1;pa1=pa1->next;if(pb1->num<=pa1->num){if(ha==pa1) ha=pb1;else pa2->next=pb1;pb2=pb1;pb1=pb1->next;pa2=pa1;pa1=pb2;pb2->next=pa2;}}if((pb1->num>pa1->num)&&(pa1->next==NULL)) pa1->next=pb1;}return (ha);}void print(struct student *head){struct student *p;printf("\n\n共有%d条记录,分别为:\n\n",sum); p=head;if(head!=NULL)do{printf("%ld%8.2f\n",p->num,p->score);p=p->next;}while(p!=NULL);}11.9#include <iostream>#include <malloc.h>#define N 13struct person{int num;int next;}link[N+1];void main(){int i,count,h;for(i=1;i<=N;i++){if(i==N) link[i].next=1;else link[i].next=i+1;link[i].num=i;}printf("\n\n");count=0;h=N;printf("退出者依次是:\n\n");while(count<N-1){i=0;while(i!=3){h=link[h].next;if(link[h].num) i++;}printf("%d ",link[h].num);link[h].num=0;count++;}printf("\n\n最后的成员是:");for(i=1;i<=N;i++){if(link[i].num) printf("%d\n\n",link[i].num); }}11.10#include <iostream>#include <malloc.h>#define LEN sizeof(struct student)#define NULL 0struct student{long int num;char name[20];struct student *next;}a,b;int n;void main(){struct student *creat(void);struct student *dele(struct student *ahead,struct student *bhead); void print(struct student *head);struct student *p1,*p2;printf("输入a中同学的学号,姓名\n\n");p1=creat();printf("输入b中同学的学号,姓名\n\n");p2=creat();print(dele(p1,p2));}struct student *creat(void){struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);scanf("%d%s",&p1->num,p1->name);head=NULL;while(p1->num!=0){n+=1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf("%d%s",&p1->num,p1->name);}p2->next=NULL;return(head);}struct student *dele(struct student *ahead,struct student *bhead) {struct student *ah,*bh;struct student *ap1,*ap2,*bp1,*bp2;ap1=ap2=ahead;bp1=bp2=bhead;while(ap1->next){while(bp1->next){if(ap1->num!=bp1->num){bp2=bp1;bp1=bp1->next;}else{if(ap1==ahead) ahead=ap1->next;else ap2->next=ap1;ap2=ap1;ap1=ap1->next;break;}}}return(ahead);}void print(struct student *head){struct student *p;printf("删除后a中学生学号及成绩分别为:\n\n"); p=head;if(head!=NULL){do{printf("%ld%s",p->num,p->name);p=p->next;}while(p!=NULL);}}。

C语言程序设计第九-十一章习题参考答案

C语言程序设计第九-十一章习题参考答案

C语言第九章参考答案1.选择题:12345 67890 12ADCDB BCDDC BB2.填空题:(1)指针或者地址(2)110(3)①char *p; ②p=&ch; ③scanf("%c",p); ④*p='a'; ⑤printf("%c",*p);(4)10 (5)0、7 (6)ab (7)abcdcd (8) 7ㄩ1(9)void (*p)(int * ,int*); (10)r+b[k] (11) '\0' 、n++; (12)aegi 3.改错题:(1) 第一处改正:* sub=x-y第二处改正:scanf("%f%f",&x,&y);第三处改正:calc(x,y,&add,&sub);(2)第一处:char swap (char *p1,char*p2)改为void swap (char *p1,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)(3)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处:*p2="\0"改为*p2='\0'(4)第一处:char *fun(char *str,char t)改为char *fun(char *str,char *t)第二处:s=NuLL改为s=NULL;第三处:if(r==p)改为if(*r==*p)(5)第一处:fun(int **b,int n)改为fun(int (*b)[N],int n)第二处:b[j][k]=k*j 改为b[j][k]=(k+1)*(j+1)4编程题(1)/*习题9-4-1 */void move(int array[20],int n,int m) ;main(){ int number[20],n,m,i;printf("How many numbers?"); /*共有多少个数*/scanf("%d",&n);printf("Input %d numbers:\n",n); /*输入n个数*/for(i=0;i<n;i++)scanf("%d",&number[i]);printf("How many place you want to move?"); /*后移多少个位置*/scanf("%d",&m);move(number,n,m); /*调用move函数*/ printf("Now,they are:\n");for(i=0;i<n;i++)printf("%d ",number[i]);}void move(int array[20],int n,int m) /*循环后移函数*/{ int *p,array_end;array_end=*(array+n-1);for(p=array+n-1;p>array;p--)*p=*(p-1);*array=array_end;m--;if(m>0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/}(2)/*习题9-4-2 */#include<stdio.h>#include<string.h>#define TOTAL 6int mseek(char*str[],char xstr[],int n){ int i;for(i=0; i<n; i++){ if(strcmp(str[i],xstr)==0)return 1;}return 0;}main(){ char*name[TOTAL]={"Lining","Linshan","Tianyuan","Zhangqiang","Haipo","Fangbing"};char xname[20];printf("enter a name:");gets(xname);if(mseek(name,xname,TOTAL))printf("Found!\n");elseprintf("Not found!\n");}(3)/*习题9-4-3 */#include <stdio.h>#include <string.h>void fun(char *str,int num[4]){ int i;for(i=0; i<4; i++) num[i]=0;while(*str!='\0'){ if(*str>='a' && *str<='z' || *str>='A' && *str<='Z')num[0]++;else if(*str==' ')num[1]++;else if(*str>='0' && *str<='9')num[2]++;elsenum[3]++;str++;}}#define N 80main(){ int string[N];int n[4],i;gets(string);fun(string,n);for(i=0; i<4; i++)printf("%d\t",n[i]);}(4)/*习题9-4-4 *//* 调试时,可这样输入数据:*//*11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55 */#include <stdio.h>main(){ int a[5][5],*p,i,j;void change(int *p);printf("Input matrix:\n");for(i=0;i<5;i++) /*输入矩阵*/for(j=0;j<5;j++)scanf("%d",&a[i][j]);p=&a[0][0]; /*使p指向0行0列元素*/ change(p); /*调用函数, 实现交换*/ printf("Now, matrix: \n");for(i=0;i<5;i++) /*输出已交换的矩阵*/{ for(j=0;j<5;j++)printf("%4d",a[i][j]);printf("\n");}}void change(int *p) /*交换函数*/{ int i,j,temp;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++) /*找最大值和最小值的地址,并赋给pmax,pmin*/ for(j=0;j<5;j++){ if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}temp=*(p+12); /*将最大值换给中心元素*/*(p+12)=*pmax;*pmax=temp;temp=*p; /*将最小值换给左上角元素*/*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i<5;i++) /*找第二最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第二最小值换给右上角元素*/*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第三最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j; /*将第三最小值换给左下角元素*/ temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第四最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第四最小值换给右下角元素*/*pmin=*(p+24);*(p+24)=temp;}(5)/*习题9-4-5 *//*可以专门编写一个函数求各学生的平均分,存到aver[4]数组*/#include <stdio.h>void avcour1(float score[][5]);void fali2(int num[4],float score[4][5]);void good(int num[4],float score[4][5]);main(){int i,j,num[4];//数组num代表学号float score[4][5];printf("Input NO. and scores: \n");for(i=0;i<4;i++){ printf("NO.");scanf("%d",&num[i]);printf("scores:");for(j=0;j<5;j++)scanf("%f",&score[i][j]);}printf("\n\n");avcour1(score); /*求出第一门课的平均成绩*/ printf("\n\n");fali2(num,score); /*找出2门课不及格的学生*/printf("\n\n");good(num,score); /*找出成绩好的学生*/}void avcour1(float score[][5]) /*第一门课的平均成绩的函数*/{ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+score[0][i]; /*累计每个学生的得分*/ average1=sum/4; /*计算平均成绩*/printf("course 1 average score: %6.2f. \n",average1);}void fali2(int num[4],float score[4][5])/*找两门以上课程不及格的学生的函数*/{ int i,j,k,label;float sum=0;printf("= = = = = = = =Student who is fail = = = = = = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ label=0;for(j=0;j<5;j++)if((score[i][j])<60.0) label++;if(label>=2){ printf("%5d",num[i]);for(k=0;k<5;k++){ printf("%10.2f",score[i][k]);sum+=score[i][k];}printf("%10.2f\n",sum/5);}}}void good(int num[4],float score[4][5])/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数*/ { int i,j,k,n;float sum=0,aver[4];printf("= = = = = = = =Student whose score is good= = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ n=0;sum=0;for(j=0;j<5;j++){if((score[i][j])>85.0) n++;sum+=score[i][j];}aver[i]=sum/5;if((n==5)||(aver[i]>=90)){ printf("%5d",num[i]);for(k=0;k<5;k++)printf("%10.2f",score[i][k]);printf("%10.2f\n",aver[i]);}}}(6)/*习题9-4-6*/#include <math.h>double sigma(double (*fn)(double),double l,double u){ double sum=0,d;for(d=l; d<u; d+=0.1)sum+=fn(d);return sum;}void main(){ double sum;sum=sigma(sin,0.1,1.0);printf("sum of sin from 0.1 to 1.0 is: %f\n",sum);sum=sigma(cos,0.5,3.0);printf("sum of cos from 0.5 to 3.0 is: %f\n",sum);}(7)/*习题9-4-7 */main(){ int i;char *month_name(int n);printf("input Month No.:\n");scanf("%d",&i);printf("Month No.:%2d --> %s\n",i,month_name(i)); /*调用指针函数month_name()*/ }char *month_name(int n)/*定义一个指针函数month_name(),返回一个指向字符串的指针*/{ static char *name[]={"Illegal Month","January", "February", "March", "April","May", "June", "July", "August","September", "October", "November", "December"};return((n<1||n>12)?name[0]:name[n]);}(8)/*习题9-4-8 */#include <stdio.h>#include <string.h>#define N 10main(){ void sort(char *p[]);int i;char *p[N],str[N][20];for(i=0;i<N;i++)p[i]=str[i]; /*将第i个字符串的首地址赋予指针数组p的第i个元素*/ printf("Input strings:\n");for(i=0;i<N;i++)scanf("%s",p[i]);sort(p);printf("Now, the sequence is:\n");for(i=0;i<N;i++)printf("%s\n",p[i]);}void sort(char *p[]){ int i,j;char *temp;for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(strcmp(*(p+j),*(p+j+1))>0){ temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}(9)/*习题9-4-9 */#include <stdio.h>#define LINEMAX 20 /*定义字符串的最大长度*/main(){ void sort(char **p);int i;char **p,*pstr[5],str[5][LINEMAX];for(i=0;i<5;i++)pstr[i]=str[i]; /*将第i个字符串的首地址赋予指针数组pstr的第i 个元素*/printf("Input 5 strings:\n");for(i=0;i<5;i++)scanf("%s",pstr[i]);p=pstr;sort(p);printf("strings sorted:\n");for(i=0;i<5;i++)printf("%s\n",pstr[i]);}void sort(char **p) /*冒泡法对5个字符串排序的函数*/ { int i,j;char *temp;for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(*(p+i),*(p+j))>0) /*比较后交换字符串地址*/{ temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}}}(10)void StrOR(char xx[][80],int maxline){ int i,righto,j,s,k;char temp[80];for(i=0; i<maxline; i++)for(j=strlen(xx[i])-1; j>=0; j--){ k=0; memset(temp,0,80);if(xx[i][j]=='o'){ righto=j;for(s=righto+1; s<strlen(xx[i]); s++)temp[k++]=xx[i][s];for(s=0;s<righto;s++)if(xx[i][s]!='o') temp[k++]=xx[i][s];strcpy(xx[i],temp);}else continue;}}C语言第十章参考答案1. 选择dccda cab2..填空(1)struct studentstrcmp(str,stu[i].name)==0break;(2)p=personp-person<3old=p->age;q->name,q->age(3)p!=NULLc++p->next(4)&per[i].body.eye&per[i].body.f.height&per[i].body.f.weight3.编程题(1)#include <stdio.h>struct data{ int year;int month;int day;};main(){ struct data a;int monthnum[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,sum=0;scanf("%d%d%d",&a.year,&a.month,&a.day);for(i=0;i<a.month-1;i++)sum+=monthnum[i];sum+=a.day;if(a.year%4==0 && a.year%100!=0 ||a.year%400==0)sum+=1;printf("%d年%d月%d日is the %d day",a.year,a.month,a.day,sum); }(2)#include <stdio.h>#include <stdlib.h>struct study{ float chinese;float maths;float english;float avg;};main(){ struct study student;scanf("%f%f%f",&student.chinese,&student.maths,&student.english);student.avg=(student.chinese+student.maths+student.english)/3;printf("average score is %f\n",student.avg);}(3)#include <stdio.h>#include <stdlib.h>struct study{ int num;float chinese;float maths;float english;float avg;};main(){ struct study s[3];struct study *p;for(p=s;p<s+3;p++){ scanf("%d%f%f%f",&(p->num),&(p->chinese),&(p->maths),&(p->english));p->avg=(p->chinese+p->maths+p->english)/3;}for(p=s;p<s+3;p++)printf("%d %3.1f %3.1f %3.1f %3.1f\n",p->num,p->chinese,p->maths,p->english,p->a vg);}(4)#include <stdio.h>#include <string.h>#define N 3typedef struct{char dm[5]; /*产品代码*/char mc[11]; /* 产品名称*/int dj; /* 单价*/int sl; /* 数量*/long je; /* 金额*/} PRO;void SortDat(PRO sell[],int n){ int i,j;PRO xy;for(i=0; i<N-1; i++)for(j=i+1; j<N; j++)if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je) { xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}void main(){ PRO sell[N];int i;for(i=0; i<N; i++){scanf("%s%s",sell[i].dm,sell[i].mc); //可这样输入,如:101 aaascanf("%d%d",&sell[i].dj,&sell[i].sl); //可这样输入,如:10 20sell[i].je=sell[i].dj*sell[i].sl;}SortDat(sell,N);printf("dm\t\tmc\t\tdj\tsl\tje\n");for(i=0; i<N; i++){printf("%s\t\t%s\t\t%d\t%d\t%ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}}(5)#include <stdio.h>#include <stdlib.h>main(){int *pi;int i,j,t,n;printf("输入整数个数:");scanf("%d",&n);pi=(int *)malloc(n*sizeof(int));printf("输入整数:");for(i=0; i<n; i++)scanf("%d",&pi[i]);for(i=0; i<n-1; i++)for(j=i+1; j<n; j++)if(pi[i]>pi[j]){t=pi[i]; pi[i]=pi[j]; p i[j]=t;}for(i=0; i<n; i++)printf("%d ",pi[i]);printf("\n");free(pi);}#include <stdio.h>#include <stdlib.h>struct stu{ int num;char name[20];int age;struct stu *next;};void list(struct stu *head){ struct stu *p;printf("The list records are:\n");p=head;if(head!=NULL)do{ printf("%d\t%s\t%d\n",p->num,p->name,p->age);p=p->next;}while(p!=NULL);elseprintf("The list is null");}struct stu * insert(struct stu *head,struct stu *stud){ struct stu *p0,*p1,*p2;p1=head; /*p1指向链表第一个节点*/ p0=stud; /*p0指向要插入的节点*/if(head==NULL) /*原链表是空表*/{ head=p0;p0->next=NULL; /*p0作为头指针*/ }else{ while((p1!=NULL)&&(p0->num>=p1->num)){ p2=p1;p1=p1->next;} /*p1指针后移*/if(p1!=NULL){ if(head==p1) head=p0;/*插入链表开头*/else p2->next=p0; /*插入到p2节点之后*/p0->next=p1;}else{ p2->next=p0;p0->next=NULL;}/*插入到最后*/return head;}main(){ struct stu *newstu,*head;head=NULL;int num;scanf("%d",&num);while(num!=0){ newstu=(struct stu *)malloc(sizeof(struct stu));newstu->num=num;scanf("%s",newstu->name);scanf("%d",&newstu->age);head=insert(head,newstu);scanf("%d",&num);}list(head);}(7)#include <stdio.h>void partition(unsigned long int num){ union a{ unsigned short int part[2];unsigned long int w;}n,*p;p=&n;n.w=num;printf("long int=%lx\n",num);printf("low part num=%0x,high part num=%0x\n",p->part[0],p->part[1]); }main(){ unsigned long int x;x=0x23456789; //这是为了调试方便,应改为scanf函数partition(x);}C语言第十一章参考答案一、选择1.B2.A3.B4.C5.B6.C7.D8.C9.C、D 10.A 11.A 12.C 13.B二、填空1 :fopen(fname,"w")ch2:"r"fgetc(fp) 或getc(fp)3:"bi.dat"&jfp4:==NULLflag==1s[strlen(s)-1]=='\n'三、改错题1:第一处改为:long num=0;第二处改为: !feof(fp) 或!=0改为==02: 第一处改为:rewind(fp)第二处改为: fgetc(fp)!= '\n' '\0'后面加上&& feof(fp)!=1四、编程题(1)#include<stdio.h>#include <stdlib.h>#include <string.h>main(){FILE *fp;char str[100];int i=0;if((fp=fopen("myfile","w"))==NULL){ printf("Can not open the file.\n");exit(0);}printf("Input a string:\n");gets(str);while(str[i]!='!'){ if(str[i]>='a'&& str[i]<='z')str[i]=str[i]-32;fputc(str[i],fp);i++;}fclose(fp);fp=fopen("myfile","r");fgets(str,strlen(str)+1,fp);printf("%s\n",str);fclose(fp);}(2)#include<stdio.h>struct student{ char num[10];char name[8];int score[3];float ave;}stu[5];main(){int i,j,sum;FILE *fp;for(i=0;i<5;i++){ printf("\nInput score of student %d:\n",i+1);printf("NO.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);sum=0;for(j=0;j<3;j++){ printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/3.0;}fp=fopen("stud","w");for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("File write error\n");fclose(fp);fp=fopen("stud","r");for(i=0;i<5;i++){ fread(&stu[i],sizeof(struct student),1,fp);printf("%s,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);}}(3)#include<stdio.h>#include <stdlib.h>main(){char s[80];int a;FILE *fp;if((fp=fopen("test","w"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(stdin,"%s%d",s,&a); //相当于scanffprintf(fp,"%s %d",s,a);fclose(fp);if((fp=fopen("test","r"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(fp,"%s %d",s,&a);fprintf(stdout,"%s %d\n",s,a); //相当于printf fclose(fp);}(4)#include<stdio.h>#include <stdlib.h>main(){FILE *fp;int i,j,n,i1;char c[100],t,ch;if((fp=fopen("A","r"))==NULL){printf("Can not open the file.\n");exit(0);}printf("\nfile A:\n");for(i=0;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);i1=i;if((fp=fopen("B","r"))==NULL){ printf("\n Can not open the file.");exit(0);}printf("\nfile B:\n");for(i=i1;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);n=i;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(c[i]>c[j]){ t=c[i];c[i]=c[j];c[j]=t;}printf("\n file C:\n");fp=fopen("c","w");for(i=0;i<n;i++){ putc(c[i],fp);putchar(c[i]);}fclose(fp);}(5)#include<stdio.h>main(){FILE *fp1,*fp2;char ch;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");ch=fgetc(fp1);while(!feof(fp1)){putchar(ch);ch=fgetc(fp1);}rewind(fp1);while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}(6)#include<stdio.h>main(){FILE *fp; long position;fp=fopen("data.txt","w");position=ftell(fp);printf("position=%ld\n",position);fprintf(fp,"Sample data\n");position=ftell(fp);printf("position=%ld\n",position);fclose(fp);}第12章1.选择题(1)D (2)C (3)D (4)D (5)C(6)D (7)D (8)B (9)A (10).C2.填空题(1) //(2) public、private 、protected(3) 函数类型类名::函数名(形参表列) 或类型类名::函数名(参数表)(4) 内联函数(5) 构造函数(6) 类名, 创建对象时(7) 私有(8) 私有(9) 基类的构造函数成员对象的构造函数派生类本身的构造函数3.概念题(1)答:本质差别是C++是面向对象的,而C语言是面向过程的。

(完整版)C语言各章练习题

(完整版)C语言各章练习题

目录第一章程序设计和C语言 (2)第二章最简单的C程序设计 (2)第三章选择结构程序设计 (4)第四章循环结构程序设计 (7)第五章数组 (11)第六章函数 (14)第七章指针 (18)第一章程序设计和C语言一、选择题:1.一个C程序的执行是从( )A、本程序的main函数开始,到main函数结束B、本文件第一个函数开始,到本文件的最后一个函数结束C、本程序的main函数开始,到本文件的最后一个函数结束D、本文件的第一个函数开始,到本文件的main结束2.以下说法不正确的是()A、一个C源程序可由一个或多个函数组成B、一个C程序必须包含一个main函数C、C程序的基本组成单位是函数D、在C程序中,注释说明只能位于一条语句的后面3.C语言规定:在一个源程序中,main函数的位置()A、必须在开始B、必须在系统调用的库函数的位置C、可以任意D、必须在最后4.源程序program.c经编译产生的目标文件和连接后产生的可执行文件是( )A、program.bak和program.objB、program.obj和program.exeC、program.exl和program.cD、program.bak和prgram.exe第二章最简单的C程序设计一、选择题1.是合法的用户自定义标识符的( )A、ah-spksB、doubleC、<ctrl>D、_myapple2.以下正确的C语言标识符是()A、%xB、a+bC、a123D、test!3.以下不能定义为用户标识符的是( )A、V oidB、b_2C、intD、name4.以下选项中可作为C语言合法整数的是( )A、11010(B)B、0583C、x2b2D、0xafb5.VC++6.0中的短整型数值在计算机中占用的字节个数是( )A、1B、2C、3D、46.设short int型的数据长度为2个字节,则unsigned short 类型数据的取值范围是()P34A、均为2个字节B、0至65535C、-3276至32767D、-256至255 7.以下选项中可作为C语言合法常量的是()(指数E或e前必须有数字,后面必须有整数)A、-80.0B、-080C、-8e1.2D、-80.0e8.在VC++6.0编译环境下,下列式中,值不为4的表达式是()P34,double为8字节A、sizeof(unsigned long)B、sizeof(long)C、sizeof(unsigned int)D、sizeof(double)9.设有说明语句:char a=’\123’;则变量a( )一个ascii字符A、包含1个字符B、包含2个字符C、3个字符D、说明不合法10.设x为一数字字符,则其所对应的十进制数值为()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十一章文件1.下列关于C语言文件的叙述中正确的是A) 文件由一系列数据依次排列组成,只能构成二进制文件B) 文件由结构序列组成,可以构成二进制文件或文本文件C) 文件由数据序列组成,可以构成二进制文件或文本文件D) 文件由字符序列组成,其类型只能是文本文件参考答案:C【解析】本题考查文件的概念,文件是由数据序列组成,可以构成二进制文件或文本文件,所以答案为C 选项。

2.下面选项中关于"文件指针"概念的叙述正确的是A) 文件指针是程序中用FILE定义的指针变量B) 文件指针就是文件位置指针,表示当前读写数据的位置C) 文件指针指向文件在计算机中的存储位置D) 把文件指针传给fscanf函数,就可以向文本文件中写入任意的字符参考答案:A【解析】在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。

通过文件指针就可对它所指的文件进行各种操作。

文件指针不是文件位置指针,所以BC选项错误,D选项中不可以写入任意的字符。

3.以下叙述中正确的是()。

A) 当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B) 打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C) 在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据D) C语言中的文件是流式文件,因此只能顺序存取数据参考答案:A【解析】B)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。

C)选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。

D)选项中,C语言中的文件可以进行随机读写。

4.有以下程序:#include <stdio.h>main(){FILE *fp;int a[10]={1,2,3},i,n;fp =fopen("d1.dat","w");for (i=0;i<3;i++) fprintf(fp,"%d",a[i]);fprintf(fp,"\n");fclose(fp);fp =fopen("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d\n",n);}程序的运行结果是()。

A) 321 B) 12300 C) 1 D) 123参考答案:D【解析】程序首先将数组a[10]中的元素1、2、3分别写入了文件d1.dat文件中,然后又将d1.dat文件中的数据123,整体写入到了变量n的空间中,所以打印n时输出的数据为123。

5.设文件指针fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是A) 只能写不能读B) 写操作结束后可以从头开始读C) 可以在原有内容后追加写D) 可以随意读和写参考答案:A【解析】考查文件操作函数fopen的基础知识,以"w"方式打开文件,只能写不能读。

6.有以下程序#include <stdio.h>main(){ FILE *f;f=fopen("filea.txt","w");fprintf(f,"abc");fclose(f);}若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt中的内容为A) abclo B) abc C) helloabc D) abchello参考答案:B【解析】本题考查文件操作函数,执行fprintf(f,"abc");后f文件的内容就变为了abc,所以B选项正确。

7.有以下程序#include <stdio.h>main(){ FILE *fp;int a[10]={1,2,3,0,0}, i;fp = fopen("d2.dat", "wb");fwrite(a, sizeof(int), 5, fp);fwrite(a, sizeof(int), 5, fp);fclose(fp);fp = fopen("d2.dat", "rb");fread(a, sizeof(int), 10, fp);fclose(fp);for (i=0; i<10; i++)printf("%d,", a[i]);}程序的运行结果是A) 1,2,3,0,0,0,0,0,0,0, B) 1,2,3,1,2,3,0,0,0,0,C) 123,0,0,0,0,123,0,0,0,0, D) 1,2,3,0,0,1,2,3,0,0,参考答案:D【解析】本题考查文件操作函数,两次fwrite后,fp文件中已经写入1,2,3,0,0,1,2,3,0,0然后将文件fp中的内容重新写入数组a中,最后输出a为1,2,3,0,0,1,2,3,0,0,所以选项D正确。

8.以下程序依次把从终端输入的字符存放到f文件中,用#作为结束输入的标志, 则在横线处应填入的选项是#include <stdio.h>main(){ FILE *fp; char ch;fp=fopen( "fname", "w" );while( ( ch=getchar()) !='#' ) fputc( __________ );fclose(fp);}A) ch, "fname" B) fp, ch C) ch D) ch, fp参考答案:D【解析】本题考查fputc函数,该函数将字符ch写到文件指针fp所指向的文件的当前写指针的位置。

函数格式:int fputc (int n, File *fp)答案为D选项。

9.以下叙述中错误的是A) gets函数用于从终端读入字符串B) getchar函数用于从磁盘文件读入字符C) fputs函数用于把字符串输出到文件D) fwrite函数用于以二进制形式输出数据到文件参考答案:B【解析】本题考查字符处理函数和文件做操函数,属于基础知识,其中B选项getchar是用于从终端读入字符。

10.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是()。

A) 一个内存块的字节数B) 一个整型变量,代表待读取的数据的字节数C) 一个文件指针,指向待读取的文件D) 一个内存块的首地址,代表读入数据存放的地址参考答案:D【解析】fread(void *buffer,size t size,size t count,FILE *stream);功能是从一个文件流中读数据,读取count个元素,每个元素size字节,如果调用成功返回count。

buffer :用于接收数据的内存地址,大小至少是size*count 字节;size :单个元素的大小,单位是字节;count :元素的个数,每个元素是size 字节;stream :输入流。

11.有以下程序#include <stdio.h>main(){ FILE *pf;char *s1="China", *s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是A) China B) Chinang C) ChinaBeijing D) BeijingChina参考答案:B【解析】本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。

12.有以下程序#include <stdio.h>main(){ FILE *fp;int k, n, a[6]={1,2,3,4,5,6};fp = fopen("d2.dat", "w");fprintf(fp, "%d%d%d\n", a[0],a[1],a[2]);fprintf(fp, "%d%d%d\n", a[3],a[4],a[5]);fclose(fp);fp = fopen("d2.dat", "r");fscanf(fp, "%d%d", &k, &n);printf("%d %d\n", k, n);fclose(fp);}程序运行后的输出结果是A) 1 2 B) 1 4 C) 123 4 D) 123 456参考答案:D【解析】fprintf()函数向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上执行两次fprintf后文件中有123 456,所以D选项正确。

13.有以下程序#include <stdio.h>main(){ FILE *fp;char str[10];fp=fopen("myfile.dat","w");fputs("abc",fp);fclose(fp);fp=fopen("myfile.dat","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str);puts(str);fclose(fp);}程序运行后的输出结果是A) abc B) 28c C) abc28 D) 因类型不一致而出错参考答案:C【解析】本题考查文件操作函数fprintf()函数,fprintf()函数向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上执行两次fprintf后文件中有abc28,所以C选项正确。

相关文档
最新文档