《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx

上传人:b****5 文档编号:8160940 上传时间:2023-01-29 格式:DOCX 页数:15 大小:20.03KB
下载 相关 举报
《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx_第1页
第1页 / 共15页
《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx_第2页
第2页 / 共15页
《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx_第3页
第3页 / 共15页
《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx_第4页
第4页 / 共15页
《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx

《《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx(15页珍藏版)》请在冰豆网上搜索。

《C语言程序设计实验指导与习题集》练习题的参考答案中国铁道出版社期末测试题参考答案.docx

《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);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1