C复习资料.docx
《C复习资料.docx》由会员分享,可在线阅读,更多相关《C复习资料.docx(15页珍藏版)》请在冰豆网上搜索。
![C复习资料.docx](https://file1.bdocx.com/fileroot1/2023-1/1/2576d555-b0df-4329-8781-a939ee0cd21d/2576d555-b0df-4329-8781-a939ee0cd21d1.gif)
C复习资料
一、选择题
1.以下叙述错误的是。
A.C程序在书写时,有严格的缩进要求,否则不能编译通过
B.一个C程序只能有一个主函数
C.一个C程序可以包含多个不同名的函数
D.C程序的主函数必须用main作为函数名
2.下列程序段的输出结果是4321。
voidfun(int*x,int*y)
{printf("%d%d",*x,*y);*x=1;*y=2;}
main()
{intx=3,y=4;
fun(&y,&x);
printf("%d%d",x,y);}
3.若有定义语句:
intx=3,y=2,z;在其后执行语句z=0.9+x/y;则z的值为1。
4.有以下程序
#include
main()
{inta;
scanf("%d",&a);
if(a++<8)printf("%d\n",a);
elseprintf("%d\n",a--);}
程序运行时键盘输入8<回车>,则输出的结果是9。
5.以下定义整型3行4列的二维数组a并初始化不正确的是。
A.inta[3][4]={0}B.inta[][4]={0,1,2,3,4,5,6,7,8,9,10,11,12}
C.inta[3][]={0,1,2,3,4,5,6,7,8,9,10,11,12}D.inta[3][4]={{1,2},{1,2,3},{1,2,3,4}}
6.有以下程序
#include
main()
{intc=0,k;
for(k=1;k<3;k++)
switch(k)
{default:
c+=k;
case2:
c++;break;
case4:
c+=2;break;
}
printf(“%d\n”,c);}
程序运行后的输出结果是3。
7.已知如下定义(设long型变量占4个字节,float型占4个字节,char型占1个字节)
unionstudent
{longnum;
charname[20];
floatscore[4];
};
unionstudentstu;
则变量stu所分配的存储空间是字节。
A.4B.16C.20D.32
8.设有以下语句
charch1,ch2,scanf(”%c%c”,&ch1,&ch2);
若要为变量ch1和ch2分别输入字符A和B,正确的输入形式应该是AB。
9.有以下函数
#include
voidf(charc)
{if(c>'x')f(c-1);
printf("%c",c);}
main()
{f('z');}
程序运行输出结果是XYZ。
11.有以下程序
#include
#include
main()
{chara[5][10]={"china","beijing","you","tiananmen","welcome"};
inti,j;chart[10];
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(a[i],a[j])>0)
{strcpy(t,a[i]);strcpy(a[i],a[j]);strcpy(a[j],t);}
puts(a[2]);}
程序运行后的输出结果是tiananmen。
12.有以下程序
#include
intf(intm)
{staticintn=1;
n+=m;
returnn;}
main()
{intn=2;printf("%d,",f(++n));printf("%d\n",f(n++));}
程序运行后的输出结果是4,7。
13.在程序中可以用来作为变量名的合法的标识符是。
A.staticB.23_b1C.stu_1tD.#33
14.有以下程序
#include
#include
voidfun(char*w,intm)
{chars,*p1,*p2;
p1=w;p2=w+m-1;
while(p1}
main()
{chara[]="abcdefghi";
fun(a,strlen(a));puts(a);}
程序运行后的输出结果是ihgfedcba。
15.有以下程序
main()
{inta[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)p[i]=i+2;
printf("%d\n",a[0][2]);}
程序运行后的输出结果是4。
16.有以下程序
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;
printf("%d\n",*p+*q);}
程序运行后的输出结果是。
A.6B.8C.10D.16
17.有以下程序
#include
intf(intx,inty)
{return((y-x)*x);}
main()
{inta=1,b=2,c=3,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);}
程序运行后的输出结果是。
1.对于一个正常运行的C程序,以下叙述中正确的是。
A.程序的执行总是从main函数开始,在main函数结束
B.C语言程序总是从第一个定义的函数开始执行
C.C语言程序中的main()函数必须放在程序的开始部分
D.程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束
18.以下选项中非法的字符常量是。
A.’\102’B.’\65’C.’\xff’D.’\019’
19.假设所有变量均为整型,则表达式(a=2,b=5,a+b++,a+b)的值是。
A.7B.8C.5D.2
20.以下对一维数组a的正确说明是。
A.intn;scanf("%d",&n);inta[n];B.intn=10,a[n];
C.#defineSIZE10D.inta(10);
inta[SIZE];
21.若有以下定义和语句:
charc1='b',c2='e';
printf("%d,%c\n",c2-c1,c2-'a'+'A');
则输出结果是。
A.2,MB.3,E
C.2,ED.输出项与对应的格式控制不一致,输出结果不确定
22.对下述程序,是正确的判断。
main()
{intx,y;scanf(“%d,%d”,&x,&y);
if(x>y)
x=y;y=x;
else
x++;y++;
printf(“%d,%d”,x,y); }
A.有语法错误,不能通过编译B.若输入3和4,则输出4和5
C.若输入4和3,则输出3和4D.若输入4和3,则输出4和5
23.fun函数的功能是:
通过键盘输入给x所指的整型数组所有元素赋值。
在下列划线处应该填写的是。
#include
#defineN5
voidfun(intx[N])
{intm;
for(m=N-1;m>0;m--)scanf(“%d”,);}
A.&x[++m]B.&x[m+1]C.x+(m++)D.x+m
24.有以下程序(注:
字符a的ASCIl码值为97)
#include
main()
{char*s={"abc"};
do
{printf("%d",*s%10);++s;}
while(*s);}
程序运行后的输出结果是789。
25.有以下函数
#include
voidfun(int*s)
{staticintj=0;
do{s[j]=s[j]+s[j+1];}while(++j<2);}
main()
{intk,a[10]={1,2,3,4,5};
for(k=1;k<3;k++)fun(a);
for(k=0;k<5;k++)printf("%d",a[k]);
printf("\n");}
程序运行输出结果是35745。
26.程序中定义以下宏#defineM(x,y)(x*y)
若定义inta;且令a=M(1+3,5);则变量a的值为。
A.16B.20C.9 D.以上均不是
27.以下程序运行后的输出结果是abedcfg。
#include
voidf(char*s,char*t)
{chark;k=*s;*s=*t;*t=k;}
main()
{charstr[10]="abcdefg",*p;
p=str+strlen(str)/2+1;
f(p,p-2);printf("%s\n",str);}
28.若有定义:
intaa[8];则以下表达式中不能代表数组元素aa[2]的地址的是。
A.&aa[2]+1B.&aa[1]C.aa+2D.&aa[1]++
29.以下程序的输出结果是1。
longfun(intn)
{longs;
if(n==1||n==2)s=2;
elses=n-fun(n-1);
returns;}
main()
{printf(“%ld\n”,fun(3));}
30.在if(x)语句中的x与下面条件表达式等价的是。
A.x==0B.x==1C.x!
=1D.x!
=0
31.以下对C语言函数的有关描述中,正确的是。
A.在调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
32.设有如下程序段
chars[20]=“Bejing”,*p;p=s;
则执行p=s;语句后,以下叙述正确的是。
A.可以用*p表示s[0]B.s数组中元素的个数和p所指字符串长度相等
C.s和p都是指针变量D.数组s中的内容和指针变量p中的内容相等
33.已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是。
if(x>y)
z=x;x=y;y=z;
A.10,20,30B.20,30,30C.20,30,10D.20,30,20
34.若希望当num的值为奇数时,表达式的值为“真”,num的值为偶数时,表达式的值为“假”。
则以下不能满足要求的表达式是。
A.num%2==1B.!
(num%2==0)C.!
(num%2)D.num%2
35.若有定义语句:
intyear=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是。
A.*p+=1; B.(*p)++; C.++(*p); D.*p++
36.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'-i*f值的数据类型为双精度型。
37.执行下列语句中,sum变量的值是15。
intsum=0;
for(inti=0;i<5;i++,sum+=i);
38.以下不正确的说法为。
A.在函数内的复合语句中定义的变量在本函数范围内有效
B.形式参数是局部变量
C.在函数内定义的变量只在本函数范围内有效
D.在不同函数中可以使用相同名字的变量
39.有以下函数
#include
#include
main()
{printf(“%d\n”,strlen(”ATS\n012\\”));}
程序运行后的输出结果是8。
40.有以下函数
#include
voidfun(int*s)
{staticintj=0;
do{s[j]=s[j]+s[j+1];}while(++j<2);}
main()
{intk,a[10]={1,2,3,4,5};
for(k=1;k<3;k++)fun(a);
for(k=0;k<5;k++)printf("%d",a[k]);
printf("\n");}
程序运行输出结果是35745。
41.以下错误的定义语句是。
A.intx[][3]={{0},{1},{1,2,3}};
B.intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C.intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
D.intx[][3]={1,2,3,4};
42.凡在函数中未指明存储类别的变量,其隐含的存储类别为auto。
43.若有以下定义及语句:
structs1
{chara[3];
intnum;
}t={‘a’,’b’,’c’},*p;
p=&t;
则输出值为c的语句是。
A.printf(“%c\n”,p->t.a[2]);B.printf(“%c\n”,(*p).a[2]);
C.printf(“%c\n”,p->a[3]);D.printf(“%c\n”,(*p).t.a[2]);
二、程序填空题
1.设变量a和b已定义为int类型,若要通过scanf(”a=%d,b=%d”,&a,&b);语句分别给a和b输入1和2,则正确的数据输入内容是1,2。
2.若有定义:
inta[]={1,3,5,7,9,11},*p=a;则*(p+2)的值和*(a+5)的值分别是412。
3.有以下程序段
s=1.0;
for(k=1,k<=n;k++)s=s+1.0(k*(k+1));
printf(“%f\n”,s);
请填空,使以下程序段的功能与上面的程序段完全相同。
s=1.0;k=1;
whilek<=n
{s=s+1.0(k*(k+1));k=k+1;}
printf(“%f\n”,s);
4.下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数。
hcf(intm,intn)
{intr;
if(m r=m%n;
while(r!
=0)、
{m=n;n=r;r=m%n;}
returnn;}
5.有一个3*4矩阵,求其中的最大元素。
max_value(intarray[][4])
{inti,j,max;
max=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)max=array[i][j];
returnmax;}
main()
{inta[3][4],i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)scanf("%d",&a[i][j]);
printf(“maxvalueis%d\n”,max_value(a));}
6.下面程序通过指向整型的指针将数组a[3][4]的内容按3行×4列的格式输出,请给printf()填入适当的参数,使之通过指针p将数组元素按要求输出。
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p=a;
main()
{inti,j;
for(i=0;i<3;i++)
{for(j=0;j<4;j++)printf("%4d",*(*(p+i)+j));
}}
7.以下程序段的输出结果是4。
inta=47;
a+=a%=9;printf(“%d\n”,a);
8.下面程序段是从键盘输入的字符中统计数字字符的个数,当输入换行符时结束循环。
请分析程序填空。
intn=0,c;
c=getchar();
while(c!
='\n')
{if
(1)n++;
c=getchar();}
9.下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数。
main()
{inti,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(i==j)continue;
elsefor(k=0;k<=9;k++){if(j!
=k&&i!
=k)count++;}
printf("%d",count);}
10.有以下程序
#include
main()
{chara[20]=”Thisisaprogram!
”,b[20];
scanf(“%s”,b);printf(“%s%s\n”,a,b);
}
程序运行时从键盘输入:
Thisisaprogram!
<回车>
则输出结果为Thisisaproblem!
This。
11.设a、b、c都是整型变量,如果a的值为2,b的值为3,则执行c=a++||b++;语句后,变量b的值是3。
12.下面这个程序的功能是将字符串s中所有的字符b删除。
main()
{chars[80];inti,j;
printf("Pleaseenterstrings:
");gets(s);
for(i=j=0;i<80;i++)
{if(s[i]!
=’b’)s[j++]=s[i];}
s[j]=’\0’;
puts(s);
}
13.下面函数的功能是判断一个数是不是素数。
intprime(intm)
{inti;
for(i=2;i<=sqrt(m);i++)
if(a%i==0)return0;
return1;}
14.有一个3*4矩阵,求其中的最大元素。
max_value(intarray[][4])
{inti,j,max;
max=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)max=array[i][j];
returnmax;}
main()
{inta[3][4],i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)scanf("%d",&a[i][j]);
printf(“maxvalueis%d\n”,max_value(a));}
三、编程题
1.任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。
2.编程检查用户输入的字符是数字、字母、空白还是其它字符,直到用户输入'q'为止。
3.打印出如下图案(菱形)
*
***
******
********
******
***
*
4.输入n值,输出如图所示高和上底均为n的等腰梯形。
当n=5时
5.编写程序,将两个字符串连接起来,不要使用strcat函数。
6.有一分数序列:
,求出这个数列的前20项之和。
#include
voidmain()
{
floatm=1,n=2,sum=0,b,i;
for(i=1;i<21;i++)
{
sum=sum+n/m;
b=n+m;
m=n;
n=b;
}
printf("%2f\n",sum);
}
7.写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。
#include
voidmain()
{
voidcopy(charstr[100]);
chars1[100];
printf("输入一个字符串:
");
gets(s1);
copy(s1);
}
voidcopy(charstr[100])
{
inti,j;
chars[100];
for(i=0,j=0;str[i]!
='\0';i++)
if((str[i]=='a')||(str[i]=='e')||(str[i]=='i')||(str[i]=='o')||(str[i]=='u')
||(str[i]=='A')||(str[i]=='E')||(str[i]=='I')||(str[i]=='O')||(str[i]=='U'))
{s[j]=str[i];j++;}
s[j]='\0';
puts(s);
}
8.自键盘读入由小到大的10个整数,然后再读入一个数,要求按原来的规律将它插入数组中。
#include
voidmain()
{
inta[11],i,j,temp;
printf("按由小到大输入十个数:
");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
printf("插入一个新数:
");
scanf("%d",&a[10]);
for(i=0;i<10;i++)
for(j=0;j<10-i;j++)
{if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("重新排列的数:
");
for(i=0;i<11;i++)
printf("%3d",a[i]);
printf("\n");
}