《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx
- 文档编号:8160940
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:15
- 大小:20.03KB
《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx
《《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx(15页珍藏版)》请在冰豆网上搜索。
《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案
附录四期末测试题
一、选择题
1.下面对C语言字符数组的描述中错误的是________。
A.字符数组可以存放字符串
B.字符数组的字符串可以整体输入、输出
C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D.不可以用关系运算符对字符数组中的字符串进行比较
2.在宏定义#definePI3.14159中,用宏名PI代替一个________。
A.常量B.单精度数C.双精度数D.字符串
3.以下有关宏替换的叙述不正确的是________。
A.宏替换不占用运行时间B.宏名无类型
C.宏替换只是字符替换D.宏名必须用大写字母表示
4.若有语句intw[5]={-4,6,0,-1,9};
则以下说法错误的是_________。
A.w是地址的概念B.编译后,数组w占用连续的储存空间
C.表达式w+3是地址的概念D.表达式*(w+1)的值为-4
5.变量的指针,其含义是指该变量的______。
A.值B.地址C.名称D.一个标志
6.若有语句chars[]=“WELCOME”;
为得到字符串中的字符‘w’,如下_______的引用方法是错误的。
A.s[0]B.*(s+1)C.*sD.*(s+0)
7.若有语句int*point,a=4;
point=&a;
下面均代表地址的一组选项是________。
A.a,point,*&aB.&*a,&a,*point
C.*&point,*point,&aD.&a,&*point,point
8.若有赋值语句x=2,y=3;,则x&y的位运算结果是_______。
A.0B.2C.3D.5
9.用feof(fp)函数判断文件是否结束时,如果文件结束,则函数值为________。
A.1B.‘\0’C.0D.NULL
10.对于库函数fread(buffer,size,count,fp),关于参数buffer的描述正确的是_____。
A.buffer是一个整型变量,代表要读入的数据项总和
B.buffer是一个文件指针,指向要读的文件
C.buffer是一个指向某连续存储空间的指针
D.buffer是fread()函数执行成功的返回值
二、填空题
1.在C语言中供用户使用的内存可分为三部分,全局变量应放在静态存储区中。
2.已知A的ASCII码是65,则printf(“%c”,66)的执行结果为___B__。
3.若有以下定义和语句,则通过指针p引用值为98的数组元素的表达式
是_*(P+5)。
intw[10]={23,54,10,33,47,98,72,80,61},*p;
p=w;
4.宏展开是在预编译时进行的。
5.若用数组名作为函数调用的实参,则传递给形参的是地址。
6.若有以下定义,则引用变量stu中的num成员项的引用方式为stu.num。
struct
{intnum;
charname[10];
intscore;}stu;
7.在C语言中对文件的存取是以字节为单位的。
8.若fopen()函数执行不成功,则返回值为NULL或0。
9.如果文件没结束,feof()函数的返回值为0。
10.在对文件进行操作的过程中,若要求文件的位置指针回到文件的开头,应当调用的库函数是rewind()。
三、阅读程序,写出程序的运行结果
1.f(inta[])
{inti=0;
while(a[i]<=10)
{printf(“%d”,a[i]);
i++;}
}
main()
{inta[]={1,5,10,9,11,7};
f(a+1);
}
输出的结果是5109。
2.main()
{char*s=“121”;
intk=0,a=0,b=0;
do
{k++;
if(k%2==0){a=a+s[k]-‘0’;continue;}
b=b+s[k]-‘0’;a=a+s[k]-‘0’;
}
while(s[k+1]);
printf(“k=%d,a=%d,b=%d\n”,k,a,b);
}
输出的结果是k=2,a=3,b=2。
3.main()
{int**pp,*p,a=10,b=20;
pp=&p;
p=&a;
p=&b;
printf(“%d,%d”,*p,**pp);
}
输出的结果是20,20。
4.#defineDOUBLE(r)r*r
main()
{intx=1,y=2,t;
t=DOUBLE(x+y);
printf(“%d\n”,t);
}
输出的结果是5。
5.main()
{intx[]={0,1,2,3,4,5};
ints,i,*p;
s=0;
p=&x[0];
for(i=1;i<6;i+=2)
s+=*(p+i);
printf("sum=%d",s);
}
输出的结果是sum=9。
6.#include“stdio.h”
main()
{union{longa;
intb;
charc;
}m;
printf(“%d\n”,sizeof(m));
}
输出的结果是4。
7.#include“stdio.h”
cp(char*s,char*t)
{inti=0;
while(t[i]!
=’\0’)
{s[i]=t[i];i++;}
s[i]=’\0’;}
main()
{chara[20],b[10];
scanf(“%s”,b);
cp(a,b);
puts(a);
}
输入:
dcba
输出的结果是dcba。
8.structks
{inta;
int*b;
}s[4],*p;
main()
{intn=1,i;
printf(“\n”);
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=&s[i].a;
n=n+2;}
p=&s[0];
p++;
printf(“%d,%d\n”,(++p)-->a,(p++)-->a);/*提示:
参数从右向左计算*/
}
输出的结果是7,3。
四、完善程序,在程序的___处,填入正确的内容,使其完整正确
1.下面程序通过函数调用,在一维数组中查找最大值,并输出之。
请填空。
intmax_in_array(inta[],intn)
{
inti;
inttemp=a[0];
for(i=1;i if(a[i]>temp) temp=a[i]; return(temp); } main() { intt; intw[5]={-2,10,1,5,3}; t=max_in_array(w,5); printf("%d",t); } 2.count函数的功能是统计一个字符串中英文字母(letter)和其它字符(other)的个数。 count(charstr[],int*letter,int*other) {inti; for(i=0;str[i]! ='\0';i++) if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') (*letter)++; else (*other)++; } main() {chara[20]; intletter=0,other=0; gets(a); count(a,*letter,*other); printf("小写字母为: %d,大写字母为: %d.",letter,other); } 3.下面程序是对输入的两个整数按大小顺序输出,其中swap()函数的功能是交换两个数。 swap(int*p1,int*p2) {intp; p=*p1; *p1=*p2; *p2=p; } main() {inta,b; int*pp1=&a,*pp2=&b; scanf(“%d,%d”,&a,&b); if(a printf(“\n%d,%d”,a,b); } 4.下面程序average函数的功能是计算10名学生1门课成绩的平均分。 floataverage(float*array) {inti;floataver,sum=array[0]; for(i=1;i<10;i++)sum+=array[i]; aver=sum/10; returnaver; } main() {floatscore[10],aver; inti; for(i=0;i<10;i++)scanf(“%f”,&score[i]); aver=average(score); printf(“平均分为: %f”,aver); } 5.下面程序将一个磁盘文件上的信息复制到另一个磁盘文件上去,请填空。 #include"stdio.h" main() { FILE*in,*out; charinfile[20],outfile[20]; printf("Entertheinfilename: \n"); scanf("%s",infile); printf("Entertheoutfilename: \n"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) {printf("Cannotopeninfile\n");exit(0);} if((out=fopen(outfile,"w"))==NULL) {printf("Cannotopenoutfile\n");exit(0);} while(! feof(in))fputc(fgetc(in),out); fclose(in); fclose(out); } 五、程序改错,以下每题都有两个错,写出有错误的程序全行及改正后的程序全行。 1.max()函数的功能是求三个数中的最大数。 max(foata,floatb,floatc)=>正确为: floatmax(foata,floatb,floatc) {floatm; m=a>b? a: b; m=b>c? b: c;=>正确为: m=m>c? m: c; return(m);} main() {floata,b,c,m; scanf("%f,%f,%f",&a,&b,&c); m=max(a,b,c); printf("\n最大数为: %f",m); } 2.下面程序功能是: 将从键盘输入的英文字符串变成大写的,然后输出该字符串。 #include"stdio.h" main() {inti=0; charp[100]; gets(p); while(p[i]! =\0)=>正确为: while(p[i]! =’\0’) { if(p[i]>='a'&&p[i]<='z') p[i]=p[i]-32; i++;} puts(*p);=>正确为: puts(p); } 3.下面程序的功能是实现字符串的连接。 例如,若字符串a[80]=“HELLO! ”,字符串b[10]=“Jone”,则连接后,字符串a成为“HELLO! Jone”。 voidjoin(char*a,*b)=>正确为: voidjoin(char*a,char*b) {inti,j; char*p1,*p2; p1=a;p2=b; while(*p1)p1++; while(*p2) { *p1=*p2; p1++;p2++; } *p1='\0'; } main() {char*x="HELLO! "; char*y="jone"; join(x,&y);=>正确为: join(x,y); puts(x); } 4.下面程序将一个磁盘文件上的信息复制到另一个磁盘文件上去。 #include"stdio.h" main() {file*in,*out;=>正确为: FILE charch,infile[20],outfile[20]; scanf("%s",infile);/*输入要复制的文件名*/ scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) {printf("Cannotopeninfile\n");exit(0);} if((out=fopen(outfile,"w"))==NULL) {printf("Cannotopenoutfile\n");exit(0);} while(! feof(in)) fputc(out,fgetc(in));=>正确为: fputc(fgetc(in),out); fclose(in); fclose(out); } 5.下面程序的功能是: 用命令行方式显示一个文本文件的内容。 #include"stdio.h" main(intargc,char*argv[]) {FILE*fp; charline[81]; if((fp=fopen("argv[1]","r"))==NULL)=>正确为: argv[1] {printf("文件未找到."); exit(0); } while(fgets(line,80,fp)! =NULL) printf("%s",line); fclose(*fp);=>正确为: fclose(fp); } 六、程序设计 1.将一个十进制的正整数转换成二进制数并输出。 参考程序: main() {intm,k,a[20],i=0; printf("\npleaseenterm: "); scanf("%d",&m); while(m) {a[i++]=m%2; m=m/2; } for(i=i-1;i>=0;i--) printf("%d",a[i]); getch(); } 2.从键盘输入一行字符串(<20),按ASCII码值由小到大的顺序排序存放,并输出排序后的字符串。 要求: 在主函数中实现数据的输入与输出,在名为sort的函数中实现排序。 参考程序一: 记录下标的选择法排序 sort(charstr[]) {inti,j,k,t,m; k=strlen(str); for(i=0;i {m=i; for(j=i+1;j if(str[m]>str[j])m=j; t=str[m]; str[m]=str[i]; str[i]=t;} } main() {charss[20]; clrscr(); printf("\n\n请输入一行字符串: "); gets(ss); sort(ss); printf("由小到大排序结果为: "); puts(ss); } 参考程序二: 起泡法 sort(charstr[]) {inti,j,k,t; k=strlen(str); for(i=0;i for(j=0;j if(str[j]>str[j+1]) {t=str[j];str[j]=str[j+1];str[j+1]=t;} } main() {charss[20]; clrscr(); printf("\n\n请输入一行字符串: "); gets(ss); sort(ss); printf("由小到大排序结果为: "); puts(ss); } 3.有两个磁盘文件,各自存放若干已排好序的字符(如a1.dat中存放“abort”,a2.dat中存放“boy”),要求将两个文件合并,合并后仍然保持有序(如“abboorty”),存放在a3.dat文件中。 参考程序一: #include"stdio.h" sort(charstr[]) {inti,j,k,t; k=strlen(str); for(i=0;i for(j=0;j if(str[j]>str[j+1]) {t=str[j];str[j]=str[j+1];str[j+1]=t;} } main() {FILE*fp1,*fp2,*fp3; charstr1[100],str2[100],str3[200],str[30]; if((fp1=fopen("d: \\a1.dat","rt"))==NULL) { printf("Cannotopeninfile\n"); exit(0);} if((fp2=fopen("d: \\a2.dat","rt"))==NULL) { printf("Cannotopeninfile\n"); exit(0);} if((fp3=fopen("d: \\a3.dat","wt"))==NULL) { printf("Cannotopeninfile\n"); exit(0);} fgets(str1,30,fp1); while(! feof(fp1)) {fgets(str,30,fp1); strcat(str1,str);} fgets(str2,30,fp2); while(! feof(fp2)) {fgets(str,30,fp1); strcat(str2,str);} strcpy(str3,str1); strcat(str3,str2); sort(str3); fputs(str3,fp3); puts(str3); fclose(fp1); fclose(fp2); fclose(fp3); } 参考程序二: #include"stdio.h" main() {FILE*fp1,*fp2,*fp3; inti,j,k; charstr1[100],str2[100],str3[200],str[30]; if((fp1=fopen("d: \\a1.dat","rt"))==NULL) { printf("Cannotopeninfile\n"); exit(0);} if((fp2=fopen("d: \\a2.dat","rt"))==NULL) { printf("Cannotopeninfile\n"); exit(0);} if((fp3=fopen("d: \\a3.dat","wt"))==NULL) { printf("Cannotopeninfile\n"); exit(0);} fgets(str1,30,fp1); while(! feof(fp1)) {fgets(str,30,fp1); strcat(str1,str);} fgets(str2,30,fp2); while(! feof(fp2)) {fgets(str,30,fp2); strcat(str2,str);} for(i=0,j=0,k=0;str1[i]! ='\0'&&str2[j]! ='\0';) if(str1[i] {str3[k++]=str1[i];i++;} else {str3[k++]=str2[j];j++;} str3[k]='\0'; if(str1[i]=='\0') strcat(str3,str2+j); if(str2[j]=='\0') strcat(str3,str1+i); fputs(str3,fp3); puts(str3); fclose(fp1); fclose(fp2); fclose(fp3); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计实验指导与习题集 语言程序设计 实验 指导 习题集 练习题 参考答案 中国 铁道 出版社 期末 测试