C语言程序设计习题集3Word下载.docx
《C语言程序设计习题集3Word下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题集3Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
![C语言程序设计习题集3Word下载.docx](https://file1.bdocx.com/fileroot1/2022-10/11/ee069069-b865-40f0-83ca-793ced8a8ac6/ee069069-b865-40f0-83ca-793ced8a8ac61.gif)
A12B15C16D20
5以下程序运行后的输出结果是_C__。
#definef(x)(x*x)
{inti1,i2;
i1=f(8)/f(4);
i2=f(4+4)/f(2+2);
%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=&
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=&
,其中指针变量的名字应该__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;
i<
n;
i++)循环中,下列语句用以实现将s2所指字符串中前n个字符复制到s1所指字符串中,其中代码正确的是_A__。
A*s1++=*s2++;
Bs1[n-1]=s2[n-1];
C*(s1+n-1)=*(s2+n-1);
D*(++s1)=*(++s2);
16给出下列程序的运行结果_B__。
#include<
stdio.h>
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;
while(*q!
='
\0'
){(*q)++;
q++;
}
{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;
{char*s1="
abc"
*s2="
123"
swap(s1,s2);
%s,%s\n"
s1,s2);
A123,abcBabc,123C1bc,a23D321,cba
19以下程序执行后的输出结果是__C_。
{char*p[]={"
3697"
"
2584"
};
inti,j;
longnum=0;
for(i=0;
2;
i++)
{j=0;
while(p[i][j]!
)
{if((p[i][j]-'
0'
)%2)num=10*num+p[i][j]-'
j+=2;
num);
A35B37C39D3975
20下列程序运行后的输出结果是_A__。
{charstr[]="
The_Microsoft"
intn=4;
sub(str,0,n-1);
sub(str,0,strlen(str)-1);
str);
sub(str,n1,n2)
char*str;
intn1,n2;
{charc,*p;
p=str+n2;
str=str+n1;
while(str<
p)
{c=*str;
*str=*p;
*p=c;
str++;
p--;
AtfosorciMThe_B.ehT_MicrosoftCtfosorciM_ehTD.Microsoft_The
二填空题(每空3分,共30分)
1以下程序的定义语句中,x[1]的初值是2,程序运行后输出的内容是2468。
{intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;
i<
4;
i++)
{p[i]=&
x[2*i+1];
%d"
p[i][0]);
\n"
);
2以下程序的输出结果是25。
voidswap(int*a,int*b)
{int*t;
t=a;
a=b;
b=t;
{inti=2,j=5,*p=&
i,*q=&
j;
swap(p,q);
%d%d\n"
*p,*q)
3以下程序的输出结果是4。
{inta[5]={2,4,6,8,10},*p;
p=a;
p++;
*p);
4以下程序的输出结果是__55__。
#defineM5
#defineNM+M
{intk;
k=N*N*5;
k);
5若有定义语句:
inta[4]={0,1,2,3},*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;
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;
10;
if(strlen(*sp)<
strlen(str[i]))【2】*sp=str[i];
2下面函数的功能是将一个整数字符串转换为一个整数,例如:
"
1234"
转换为1234,请填空使程序完整。
intchnum(char*p)
{intnum=0,k,len,j;
len=strlen(p);
for(;
【3】*p;
p++)
{k=【4】*p-'
;
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;
【6】str[i];
for(【7】j=i,k=0;
substr[k]==str[j];
k++,j++)
if(substr[【8】k+1]==’\0’)
{num++;
break;
4下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填空使程序完整。
voidconvert(char*a,intn)
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;
Ap->
ageBstudent.ageC*p.ageDstud1.student.age
2说明语句如下,则正确的叙述是_D__。
uniondata{intx;
chary;
floatz;
}a;
Adata和a均是共用体类型变量
Ba所占内存长度等于其成员x、y、z各在内存所占长度之和
C