C语言程序设计教程第七道第十二章课后练习题.docx
《C语言程序设计教程第七道第十二章课后练习题.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程第七道第十二章课后练习题.docx(10页珍藏版)》请在冰点文库上搜索。
C语言程序设计教程第七道第十二章课后练习题
C语言程序设计教程第七道第十二章课后练习题
1/23
目录
习题7...............................................................................................................................................1
选择题.......................................................................................................................................12.程序填空题............................................................................................................................3习题8...............................................................................................................................................5
1.填空题....................................................................................................................................5习题9...............................................................................................................................................9
选择题.......................................................................................................................................9程序填空题.............................................................................................................................12习题10...........................................................................................................................................13
选择题.....................................................................................................................................13习题11...........................................................................................................................................15
选择题.....................................................................................................................................15程序填空题.............................................................................................................................18习题12..........................................................................................................................................20
选择题.....................................................................................................................................20程序填空题.............................................................................................................................22
习题7
选择题
在C语言中,引用数组元素时,其数组下标的数据类型允许是。
A.整型常量 B.整型表达式C.整型常量或整型表达式 D.任何类型表达式
若有说明:
inta[0];则对数组元素的正确引用是。
[10]; (5) [10-10]设有数组定义:
chararray=”china”;则数组array所占的空间为。
A.4个字节 个字节 个字节 个字节若二维数组a有m列,则在a[i][j]的元素个数为
*m+I *m+j *m+j-1 *m+j+1若有说明:
inta[3]={1,2,3,4,5,6,7};则a数组第一维的大小是。
A.2 D.无确定值以下不正确的定义语句是。
A.doublex[5]={,,,,};B.inty[5]={0,1,3,5,7,9};C.charc1={‘1’,’2’,’3’,’4’,’5’};D.charc2={‘\\x10’,’\\xa’,’\\x8’};
2/23
以下不能对二维数组a进行正确的初始化的语句是。
A.inta[2][3]={0};
B.inta[3]={{1,2},{0}};
C.inta[2][3]={{1,2},{3,4},{5,6}};D.inta[3]={1,2,3,4,5,6};
以下能对二维数组a进行正确初始化的语句是。
A.inta[2]={{1,0,1},{5,2,3}}; B.inta[3]={{1,2,3},{4,5,6}};
C.inta[2][4]={{1,2,3},{4,5},{6}}; D.inta[3]={{1,0,1},{},{1,1}};\\\\D中间初始值不存在,{}的初始化是错误的
以下不能正确的字符串赋初值的语句是。
A.charstr[5]=”good!
”; B.charstr=”good!
”;
C.charstr[8]=”good!
”; D.charstr[5]={‘g’,’o’.’o’,’d’};(10)判断字符串s1是否大于字符串s2,应当使用A.if(s1>s2) B.if(strcmp(s1,s2));C.if(strcmp(s2,s1)>0) (strcmp(s1,s2)>0)给出以下定义,则正确的叙述为。
charx=”abcdefg”;
chary={‘a’,’b’,’c’,’d’,’e’,’f’,’g’};
A.数组x和数组Y等价 B.数组x和数组y的长度相同
C.数组X的长度大于数组y的长度 D.数组X的长度小于数组y的长度以下程序的输出结果是。
voidmain{
charst[20]=”hello\\0\\t\\\\\\”;
printf(“%d%d\\n”,sterlen(st),sizeof(st));}
9 20 20 20定义如下变量和数组:
Intk;
Inta[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句输出结果是。
for(k=0;k=’0’&&ch[i]voidmain(){
4/23
floatx[8]={,,,,,,,};flaotaver,max,min;intI;
for(i=0,over=0;ix[i])min=x[i];}
aver=(aver-min-max)/6;printf(“Average=%f\\n”,aver);}
以下程序是实现在M行N列的二维数组中,找出每一行上的最大值。
请将程序补充
完整
#defineM3#defineN4voidmain{
intx[M][N]={1,5,7,4,2,6,4,3,8,2,3,1};intI,j,p;
for(i=0;i#includevoidmain{intI;
chars[20],str[3][20];
for(i=0;i0)) strcpy(s,str[2]);printf(“Theminstringis%s\\n”,s);}
5/23
下面程序的功能是将键盘数输入的字符串str中的所有’c’字符用’C’替换,请将程序补
充完整。
#include#incldudevoidmain{inti;char[80];gets(str);for(i=0;str[i]!
=\\0;i++){
if(str[i]!
=’c’)countine;str[i]=0;
printf(“%s\\n”,str);}}
习题8
1.填空题
在C语言程序中,功能模块是函数来实现的。
函数是一段可以重复调用的,功能相对独立完整的程序段。
从函数定义角度看,函数可分为标准库函数和用户自定义函数两种。
对于有返回值的函数来说,通常函数体内包含有return语句,其格式为return;
当一个函数的返回值类型缺省时,意味着该函数的返回值类型为无返回值类型。
调用带参数的函数时,实参列表中的实参必须与函数定义时的形参数量相同,类型相符.
对带有参数的函数进行调用时,参数的传递方式主要有传值调用和传址调用两种方式。
变量的作用域和生存期是从空间和时间的角度来体现变量的特性。
变量的存储类型可分为静态存储和动态存储两种类型。
C语言中,对变量的存储类型说明有以下四种,即auto,register,extern和static。
静态局部变量若在定义时未赋初始值,则系统自动赋初始值0。
其生存期是整个源程序,其作用域是只能在定义该变量的函数内或复合语句中使用该变量。
C语言程序中,函数不允许嵌套定义,但允许嵌套调用。
2.选择题
一下正确的说法是
6/23
A.用户若需调用标准库函数,调用前必须重新定义
B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义C.系统根本不允许用户重新定义标准库函数D.用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调用
(2)以下不正确的说法是
A.实参可以是常量,变量或表达式B.形参可以市常量,变量或表达式C.实参可以为任何类型
D.形参应与对应的实参类型一致
一下正确的函数定义形式是
fun(intx,inty) fun(intx;inty)fun(intx,inty); fun(intx,y);
(4)以下正确的说法是
A.定义函数时,参数的类型说明可以放在函数体内后边的值不能为表达式
C.如果函数值的类型与返回值类型不一致,以实参类型为准D.如果形参与实参类型不一致,以实参类型为标准在C语言中,函数的隐含存储类别是
D.无存储类别
凡是函数中未指定的存储类别的局部变量,其隐含的存储类别为A.自动 B.静态C.外部 D.寄存器
若是用一位数组名作为函数实参,则以下正确的说法是A.必须在主调函数中说明此数组的大小B.实参数组类型与形参数组类型可以不匹配C.在被调用函数中,不需要考虑形参数组的大小D.是参数组名誉形参数组名必须一致
已有如下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array正确定义方式为
inta[3][4];f(a);
A.f(intarray[6]) (intarray[3])B.f(intarray[4]) (intarray{[2][5])若用数组名作为函数的实参,传递给形参的是A.数组的首地址 B.数组的第一元素的地址C.数组中全部元素的地址 D.数组元素的个数函数调用不可以
A.出现在执行语句中 B.出现在一个表达式中C.作为函数的实参 D.作为函数的形参C语言规定函数返回值类型是语句中表达式类型所决定B.调用该函数时的主调函数类型决定
7/23
C.调用该函数时的系统临时决定
D.在定义该函数时所制定的函数类型决定
C语言规定:
简单变量做实参时,他和对性餐之间的数据传递方式是A.地址传递B.单向值传递
C.有实参传给形参,在有形参传回给实参D.有用户指定传递方式
一下只有在使用时才为该类型变量分配内存的存储类说明是A.Auto和static 和register和static 和register以下叙述中不正确的是
A.在不同的函数中可以使用相同名字的变量B.函数中形式参数是局部变量
C.在一个函数内定义变量只在本函数的范围内有效
D.在一个函数内的复合语句中定义的变量只在本函数范围内有效有以下程序,程序运行后的输出结果是floatfun(intx,inty){return(x+y);}voidmain{
Inta=,c=8;
Printf(“%\\n”,fun((int)fun(a+c,b),a-c));;}
A.编译出错 下列程序执行后的输出结果是charst=\voidfunc1(inti){
printf(\if(i
voidmain(intargc,char*argv){inti,
for(i=0;i
A.-386net net-386net -386net
程序填空题
mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回,请填空。
Intmystrlen(char*str){inti;
for(i=0;str[i]!
=’\\0’,i++)return(i);}
(2)函数sstrcmp的功能是对两个字符串进行比较,当s所指字符串和t所指字符串相等时,返回值为0,;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0;.请填空。
#include
intsstrcmp(char*s,char*t){
while(*s&&*t&&*s==*t){s++;t++;}return*s-*t;}
(3)以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度,请填空。
intstrcen(chara,char){
intnum=0,n=0;
while(*(a+num)!
=’\\0’)num++;
13/23
while(b[n]){*(a+num)=b[n];num++;n++}
return(num);}
函数expand(char*s,*t)在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义自字符,即用“\\n”表示换行符,用“\\t”表示制表符,请填空。
voidexpand(char*s,char*t){inti,j;
for(i=j=0;s[i]!
=’\\0’;i++) switch(s[i]){
case‘\\n’:
t[i]=’\\’; t[j++]=’n’; break; case‘\\t’:
t[i]=’\\’; t[j++]=’t’; break;
default:
t[j++]=s[i];break;}
t[j]=’\\0’;}
习题10
选择题
以下叙述中不正确的是A.预处理命令都必须以#号开始
B.在程序中凡是以#号开始的语句行都是预处理命令C.C程序在执行过程中对预处理命令进行处理D.以下正确的宏定义#defineIBM_PC以下程序的运行结果是#defineMIN(x,y)(x)next=&b; D.(*p).next=q;有以下程序,程序运行后的输出结果是structSTU
17/23
{charnum[10];floatscore[3];};voidmain{
structSTUs[3]={{“20XX1”.}, {“20XX2”,95,80,75},
{“20XX3”,100,95,90}},*p=s;inti;floatsum=0;for(i=0;iscore[i];printf(“%\\n”,sum);}
在16位IBM-PC机上,若有下面的说明和定义:
structtest{
intm1;charm2;flaotm3;
unionuu{charu1[5];intu2[2];}ua;}myaa;
则sizeof(structtest)的值是.
B.16 C.14 D.40以下程序的输出是structst{intx;int*y;}*p;intdt[4]={10,20,30,40};
sructstaa[4]={50,&dt[0],60,&dt[0],60,&dt[0]};voidmain{p=aa;
printf(“%d\\n”,++(p->x));}
C.51 D.60以下程序的输出是unionmyun{
struct{intx,y,z;}u;intk;}a;
voidmain{
=4;=5;=6;=0;
printf(“%d\\n”,);}
A.4 B.5 C.6 D.0以下程序的输出是
18/23
structHAR{intx,y;structHAR*p;}h[2];voidmain{
h[0].x=1;h[0].y=2;h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf(“%d,%d\\n”,(h[0].p)->x,(h[1].p)->y);}
,2 ,3 ,4 ,2以下程序的输出是
StructNODE{intnum;structNODE*next;};voidmain{
structNODE*p,*q,*r;
p=(structNODE*)malloc(sizeof(structNODE));q=(structNODE*)malloc(sizeof(structNODE));r=(structNODE*)malloc(sizeof(structNODE));p->num=10;q->num=20;r->num=30;p->next=q;q->next=r;
printf(“%d\\n”,p->num+q->next->num);}
A.10 B.20 C.30 D.40执行以下语句后的输出结果是enumweekday{sun,mon=3,tue,wed,thu};enumweekdayworkday;workday=wed;
printf(“%d\\n”,workday);
A.5 B.3 C.4 D.xx器
程序填空题
从键盘上顺序输入整数,直到输入的整数小于0时停止输入,然后反序输出这些整
数。
请填空。
#include
structdata(intx;structdata*link)voidinput{
intnum;
structdata*q;
printf(\scanf(\if(numx=num;q->link=p;p=q; p++;}
voidmain{
printf(\p=NULL;input;
printf(\while(p->x!
=’\\0’){
printf(\ p++;}}
下面程序从终端上输入5个人的年龄,性别和姓名,然后输出。
请填空。
#include
structman{charname[20];unsignedage;charsex[7];};voiddata_in(structman*p,intn);voiddata_out(structman*p,intn);voidmain{
structmanperson[5];data_in(person,5);data_out(person,5);}
voiddata_in(structman*p,intn){
structman*q=*(p+n);for(;pname);}}
voiddata_out(structman*p,intn){
structman*q=(p+n);for(;p
voidfun(char*fname,char*st){
FILE*myf;intI;
myf=fopen(fname,”w”);
for(i=0;i
voidmain(intargc,char*argv){
FILE*old,*new;charch;if(argc!
=3){
printf(\
23/23
exit(0);}
if((old=fopen(argv[1],”r”))==NULL){
printf(\exit(0);}
if((new=fopen(agrv[2],”w”))==N