c语言程序设计习题集3.docx
《c语言程序设计习题集3.docx》由会员分享,可在线阅读,更多相关《c语言程序设计习题集3.docx(15页珍藏版)》请在冰豆网上搜索。
c语言程序设计习题集3
指针
一单项选择题(每题2分,共40分)
1以下叙述中错误的是_B__。
A在程序中凡是以“#”开始的语句行都是预处理命令行
B预处理命令行的最后不能以分号表示结束
C#defineMAX是合法的宏定义命令行
DC程序对预处理命令行的处理是在程序执行的过程中进行的
2若程序中有宏定义行:
#defineN100,则以下叙述中正确的是__B_。
A宏定义行中定义了标识符N的值为整数100
B在编译程序对C源程序进行预处理时用100替换标识符N
C对C源程序进行编译时用100替换标识符N
D在运行时用100替换标识符
3若有如下宏定义:
#defineN2
#definey(n)((N+1)*n)
则执行下列语句:
z=4*(N+y(5));后的结果是_B__。
A语句有错误Bz值为68Cz值为60Dz值为180
4以下程序运行后的输出结果是_A__。
#defineF(X,Y)(X)*(Y)
main()
{inta=3,b=4;
printf("%d\n",F(a++,b++));
}
A12B15C16D20
5以下程序运行后的输出结果是_C__。
#definef(x)(x*x)
main()
{inti1,i2;
i1=f(8)/f(4);i2=f(4+4)/f(2+2);
printf("%d,%d\n",i1,i2);
}
A64,28B4,4C4,3D64,64
6若已定义a为int型变量,则__D_是对指针变量p的正确说明和初始化。
Aintp=&a;Bint*p=a;Cint*p=*a;Dint*p=&a;
7已知下列说明语句:
staticinta[]={2,4,6,8}
staticint*p[]={a,a+1,a+2,a+3};
int**q;
q=p;
则表达式**(q+2)的值是_A__。
A6B2C4D8
8下面是一个初始化指针的语句:
int*px=&a;,其中指针变量的名字应该__C_。
A*pxBaCpxD&a
9若指针px为空指针,则_B__。
。
Apx指向不定Bpx的值为零Cpx的目标为零Dpx的地址为零
10对下语句int*px[10];,下面正确的说法是_B__。
Apx是一个指针,指向一个数组,数组的元素是整数型。
Bpx是一个数组,其数组的每一个元素是指向整数的指针。
CA和B均错,但它是C语言的正确语句。
DC语言不允许这样的语句。
11具有相同基类型的指针变量p和数组y,下列写法中不合法的是_D__。
Ap=yB*p=y[i]Cp=&y[i]Dp=&y
12已知staticinta[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p;,
则表达式*(p[0]+1)+**(q+2)的值是_A__。
A5B4C6D7
13说明语句int*(*p)();的含义为_D__。
Ap是一个指向int型数组的指针
Bp是指针变量,它构成了指针数组
Cp是一个指向函数的指针,该函数的返回值是一个整型
Dp是一个指向函数的指针,该函数的返回值是一个指向整型的指针
14设有如下程序段
chars[20]="Beijing",*p;p=s;
则执行p=s;语句后,以下叙述正确的是_A__。
A可以用*p表示s[0]
Bs数组中元素个数和p所指字符串长度相等
Cs和p都是指针变量
D数组s中的内容和指针变量p中的内容相同
15设int型变量i、n均已定义,指针变量s1、s2各指向一个字符串。
在for(i=0;iA*s1++=*s2++;Bs1[n-1]=s2[n-1];
C*(s1+n-1)=*(s2+n-1);D*(++s1)=*(++s2);
16给出下列程序的运行结果_B__。
#include
voidmain()
{staticchara[]="language",b[]="program";
char*ptr1=a,*ptr2=b;
intk;
for(k=0;k<7;k++)
if(*(ptr1+k)==*(ptr2+k))printf("%c",*(ptr1+k));
}
AgaeBgaClanguageD有语法错误
17以下程序执行后的输出结果是_A__。
voidfun1(char*p)
{char*q;
q=p;
while(*q!
='\0'){(*q)++;q++;}
}
main()
{chara[]={"Program"},*p;
p=&a[3];fun1(p);printf("%s\n",a);
}
AProhsbnBPrphsbnCProgsbnDProgram
18以下程序执行后的输出结果是_C__。
voidswap(char*x,char*y)
{chart;
t=*x;*x=*y;*y=t;
}
main()
{char*s1="abc",*s2="123";
swap(s1,s2);printf("%s,%s\n",s1,s2);
}
A123,abcBabc,123C1bc,a23D321,cba
19以下程序执行后的输出结果是__C_。
main()
{char*p[]={"3697","2584"};
inti,j;longnum=0;
for(i=0;i<2;i++)
{j=0;
while(p[i][j]!
='\0')
{if((p[i][j]-'0')%2)num=10*num+p[i][j]-'0';
j+=2;
}
}
printf("%d\n",num);
}
A35B37C39D3975
20下列程序运行后的输出结果是_A__。
voidmain()
{charstr[]="The_Microsoft";intn=4;
sub(str,0,n-1);
sub(str,0,strlen(str)-1);
printf("%s\n",str);
}
sub(str,n1,n2)
char*str;
intn1,n2;
{charc,*p;
p=str+n2;
str=str+n1;
while(str
{c=*str;*str=*p;*p=c;
str++;p--;
}
}
AtfosorciMThe_B.ehT_MicrosoftCtfosorciM_ehTD.Microsoft_The
二填空题(每空3分,共30分)
1以下程序的定义语句中,x[1]的初值是2,程序运行后输出的内容是2468。
main()
{intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;
for(i=0;i<4;i++)
{p[i]=&x[2*i+1];printf("%d",p[i][0]);}
printf("\n");
}
2以下程序的输出结果是25。
voidswap(int*a,int*b)
{int*t;
t=a;a=b;b=t;
}
main()
{inti=2,j=5,*p=&i,*q=&j;
swap(p,q);printf("%d%d\n",*p,*q)
}
3以下程序的输出结果是4。
main()
{inta[5]={2,4,6,8,10},*p;
p=a;p++;
printf("%d",*p);
}
4以下程序的输出结果是__55__。
#defineM5
#defineNM+M
main()
{intk;
k=N*N*5;printf("%d\n",k);
}
5若有定义语句:
inta[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是2。
6若有定义:
inta[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是12,*(a[1]+2)的值是12。
7若有程序段:
int*p[3],a[6],i;
for(i=0;i<3;i++)p[i]=&a[2*i];
则*p[0]引用的是a数组元素a[0],*(p[1]+1)引用的是a数组元素a[3]。
三程序填空题(每空3分,共30分)
1下面函数的功能是从输入的十个字符串中找出最长的那个串,请填空使程序完整。
voidfun(charstr[10][81],char**sp)
{inti;
*sp=【1】str[0];
for(i=1;i<10;i++)
if(strlen(*sp)}
2下面函数的功能是将一个整数字符串转换为一个整数,例如:
"1234"转换为1234,请填空使程序完整。
intchnum(char*p)
{intnum=0,k,len,j;
len=strlen(p);
for(;【3】*p;p++)
{k=【4】*p-'0';j=(--len);
while(【5】j--)k=k*10;
num=num+k;
}
return(num);
}
3下面函数的功能使统计子串substr在母串str中出现的次数,请填空使程序完整。
intcount(char*str,char*substr)
{inti,j,k,num=0;
for(i=0;【6】str[i];i++)
for(【7】j=i,k=0;substr[k]==str[j];k++,j++)
if(substr[【8】k+1]==’\0’)
{num++;break;}
return(num);
}
4下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填空使程序完整。
voidconvert(char*a,intn)
{inti;
if((i=n/10)!
=0)convert(【9】a+1,i);
else*(a+1)=0;
*a=【10】n%10+'0’;
}
结构体文件
单项选择题(1~8题每题5分,9~18题每题6分,共100分)
1有以下说明语句,对结构变量中成员age的正确引用是__A_。
structstudent
{intage;intsex;}stud1,*p;
2说明语句如下,则正确的叙述是_D__。
uniondata{intx;chary;floatz;}a;
Adata和a均是共用体类型变量
Ba所占内存长度等于其成员x、y、z各在内存所占长度之和
C任何情况下,均不能对a作整体赋值
Da的地址和它的各成员地址都是同一地址
3共用体成员的数据类型_B__。
A相同B可以不同也可以相同
C长度一样D是结构体变量
4由系统分配和控制的标准输出文件为__D_。
A键盘B磁盘C打印机D显示器
5下列关于C语言数据文件的叙述中正确的是C。
AC语言只能读写文本文件
BC语言只能读写二进制文件
C文件由字符序列组成,可按数据的存放形式分为二进制文件和文本文件
D文件由二进制数据序列组成
6若要用fopen函数建一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该为_B__。
A"ab+"B"wb+"C"rb+"D"ab"
7下列程序运行后的输出结果是__A_。
structs{intn;char*c;}*p;
chard[]={'a','b','c','d','e'};
structsa[]={10,&d[0],20,&d[1],30,&d[2],40,&d[3],50,&d[4]};
#include
main()
{p=a;
printf("%d\n",++p->n);
printf("%d\n",(++p)->n);
printf("%c\n",++(*p->c));
}
A11B11C10D10
20202020
cbcb
8已知
structstudent
{char*name;intstudent_no;chargrade;};
structstudenttemp,*p=&temp;
temp.name="chou";
则下面不正确的是_B__。
表达式值
Ap->namechou
B(*p)->name+2h
C*p->name+2e
D*(p->name+2)o
9下面程序运行后,其输出结果是_B__。
#include
structtree
{intx;char*s;}t;
func(structtreet)
{t.x=10;t.s="computer";return0;}
main()
{t.x=1;t.s="minicomputer";
func(t);printf("%d,%s\n",t.x,t.s);
}
A10,computerB1,minicomputerC1,computerD10,minicomputer
10下列程序的输出结果是__B_。
#include
main()
{union
{inti[2];
longk;
charc[4];
}t,*s=&t;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%lx",s->k);
printf("%c\n",s->c[0]);
}
A39003839B3800399C393838D38398
11若已定义了如下的共用体类型变量x,则x所占用的内存字节数为__C_。
uniondata{inti;charcha;doublef;}x;
A7B11C8D10
12如下说明语句:
enumA{A0=1,A1=3,A2,A3,A4,A5};
enumAB;
执行B=A3;printf("%d\n",B);输出是_A__。
A5B3C2D编译时出错
13有以下说明语句,则结构变量s的成员num的不正确引用是_B__。
structstudent
{intnum;
intage;
}s,*p;
As.numB*p.numCp->numD(*p).num
14以下各选项试图说明一种新的类型名,其中正确的是C。
Atypedefintegerint;Btypedefinteger=int;
Ctypedefintinteger;Dtypedefint=integer;
15运行下面程序,其输出结果是__C_。
#include
structsample
{inta,b;char*ch;};
main()
{structsamplearg;
arg.a=1000;arg.b=100;arg.ch="abcd";
f1(arg);
}
f1(structsampleparam)
{param.a+=param.b;
param.ch[2]='x';
printf("%d\n",param.a);
printf("%s\n",param.ch);
}
A1000B1100C1100D100
abcdabcdabxdabcd
16fwrite函数的一般调用形式是_D__。
Afwrite(buffer,count,size,fp);Bfwrite(fp,size,count,buffer);
Cfwrite(fp,count,size,buffer);Dfwrite(buffer,size,count,fp);
17C语言文件操作函数fread(buffer,size,n,fp)的功能是_B__。
A从文件fp中读n个字节存入buffer
B从文件fp中读n个大小为size字节的数据项存入buffer中
C从文件fp中读入n个字节放入大小为size字节的缓冲区buffer中
D从文件fp中读入n个字符数据放入buffer中
18若有如下定义:
structdata
{inti;charch;floatf;}b;
则结构体变量b占用内存的字节数是A。
A7B4C1D2
指针
一单项选择题(每题2分,共40分)
1-56-10
11-1516-20
二填空题(每空3分,共30分)
1①
2
5⑥
2
1②
2468
6⑦
12
2③
25
6⑧
12
3④
4
7⑨
a0]
4⑤
55
7⑩
a[3]
三程序填空题(每空3分,共30分)
【1】str[0]【6】str[i]
【2】*sp=str[i]【7】j=i
【3】*p【8】k+1
【4】*p-'0'【9】a+1
【5】j--【10】n%10+'0'
结构体文件
单项选择题(1~8题每题5分,9~18题每题6分,共100分)
1-56-10
11-1516-18