C语言模拟复习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题
1. 以下叙述错误的是 A 。
A.C程序在书写时,有严格的缩进要求,否则不能编译通过B.一个C程序只能有一个主函数
C.一个C程序可以包含多个不同名的函数
D.C程序的主函数必须用main作为函数名
2. 下列程序段的输出结果是 4 3 2 1 。
void fun(int *x, int *y)
{ printf("%d %d ", *x, *y); *x=1; *y=2;}
main()
{ int x=3,y=4;
fun(&y,&x);
printf("%d %d",x, y); }
3. 若有定义语句:int x=3,y=2,z;在其后执行语句z=0.9+x/y;则z 的值为 1 。
4. 有以下程序
#include <stdio.h>
main()
{ int a;
scanf("%d",&a);
if(a++<8) printf("%d\n",a);
else printf("%d\n",a--); }
程序运行时键盘输入8<回车>,则输出的结果是9 。
5. 以下定义整型3行4列的二维数组a并初始化不正确的是
C 。
A.int a[3][4]={0} B.int a[][4]={0,1,2,3,4,5,6,7,8,9,10,11,12}
C.int a[3][]={0,1,2,3,4,5,6,7,8,9,10,11,12} D.int a[3][4]={{1,2},{1,2,3},{1,2,3,4}}
6. 有以下程序
#include <stdio.h>
main()
{ int c=0,k;
for (k=1;k<3;k++)
switch (k)
{ default: c+=k;
case 2: c++;break;
case 4: c+=2;break;
}
printf(“%d\n”,c); }
程序运行后的输出结果是 3 。
7. 已知如下定义(设long型变量占4个字节,float型占4个字节,char型占1个字节)
union student
{ long num;
char name[20];
float score[4];
};
union student stu;
则变量stu所分配的存储空间是 C 字节。
A.4 B.16 C.20 D.32
8. 设有以下语句
char ch1,ch2, scanf(”%c%c”,&ch1,&ch2);
若要为变量ch1和ch2分别输入字符A和B,正确的输入形式应该是AB 。
9. 有以下函数
#include <stdio.h>
void f (char c)
{if(c>'x') f(c-1);
printf ("%c",c); }
main()
{f('z');}
程序运行输出结果是xyz 。
10. 在程序中可以用来作为变量名的合法的标识符是 C 。
A.static B.23_b1 C.stu_1t D.#33
11. 有以下程序
main()
{ int a[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 。
12. 有以下程序
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;
printf("%d\n", *p + *q); }
程序运行后的输出结果是 C 。
A.6 B.8 C.10 D.16
13. 有以下程序
#include <stdio.h>
int f(int x,int y)
{ return ((y-x)*x); }
main()
{ int a=1,b=2,c=3,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d); }
程序运行后的输出结果是 1 。
14. 以下选项中非法的字符常量是 D 。
A.’\102’ B.’\65’ C.’\xff’ D.’\019’15. 假设所有变量均为整型,则表达式(a=2,b=5,a+b++,a+b)的值是 B 。
A.7 B.8 C.5 D.2
16. 以下对一维数组a的正确说明是 C 。
A.int n; scanf("%d",&n); int a[n]; B.int n=10,a[n]; C.#define SIZE 10 D.int a(10);
int a[SIZE];
17. 若有以下定义和语句:
char c1='b',c2='e';
printf("%d,%c\n",c2-c1,c2-'a'+'A');
则输出结果是 B 。
A.2,M B.3,E
C.2,E D.输出项与对应的格式控制不一致,输出结果不确定
18. 对下述程序, A 是正确的判断。
main ( )
{ int x,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和4 D.若输入4和3,则输出4和5
19. fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。
在下列划线处应该填写的是。
#include <stdio.h>
#define N 5
void fun(int x[N])
{ int m;
for(m=N-1;m>0;m--) scanf(“%d”, D ); }
A.&x[++m] B.&x[m+1] C.x+(m++) D.x+m 20. 有以下程序(注:字符a的ASCIl码值为97)
#include<stdio.h>
main()
{ char *s={"abc"};
do
{ printf("%d",*s%10); ++s; }
while(*s); }
程序运行后的输出结果是789 。
21. 有以下函数
#include <stdio.h>
void fun(int *s)
{ static int j=0;
do
{s[j]=s[j]+s[j+1];}
while(++j<2); }
main()
{int k,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 。
922. 程序中定义以下宏#define M(x, y) (x*y)
若定义int a; 且令a= M (1+3,5); 则变量a的值为 A 。
A.16 B.20 C.9 D.以上均不是23. 以下程序运行后的输出结果是abedcfg 。
# include <string.h>
void f(char *s, char *t)
{ char k; k=*s; *s=*t; *t=k; }
main()
{ char str[10]="abcdefg", *p ;
p=str+strlen(str)/2+1;
f(p, p-2); printf("%s\n",str); }
24. 以下程序的输出结果是 1 。
long fun( int n)
{ long s;
if(n= =1 || n= =2) s=2;
else s=n-fun(n-1);
return s; }
main()
{ printf(“%ld\n”, fun(3)); }
25. 在if(x)语句中的x与下面条件表达式等价的是 D 。
A.x= =0 B.x= =1 C.x!=1 D.x!=0 26.以下对C语言函数的有关描述中,正确的是 A 。
A.在调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
27. 设有如下程序段
char s[20]= “Bejing”,*p; p=s;
则执行p=s;语句后,以下叙述正确的是 A 。
A.可以用*p表示s[0] B.s数组中元素的个数和p所指字符
串长度相等
C.s和p都是指针变量D.数组s中的内容和指针变量p中的内容相等
28. 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是
B 。
if(x>y)
z=x;x=y;y=z;
A.10,20,30 B.20,30,30 C.20,30,10 D.20,30,20 29. 若希望当num的值为奇数时,表达式的值为“真”,num的值为偶数时,表达式的值为“假”。
则以下不能满足要求的表达式是 C 。
A.num%2==1 B.!(num%2==0) C.!(num%2) D.num%2
30.若有定义语句:int year=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是 D 。
A.*p+=1; B.( *p)++; C.++(*p); D.*p++
31. 设变量a是整型,f是实型,i是双精度型,则表达式10+'a'-i*f 值的数据类型为double。
32. 执行下列语句中,sum变量的值是15 。
int sum=0;
for(int i=0;i<5;i++,sum+=i);
33. 以下不正确的说法为 A 。
A.在函数内的复合语句中定义的变量在本函数范围内有效B.形式参数是局部变量
C.在函数内定义的变量只在本函数范围内有效
D.在不同函数中可以使用相同名字的变量
34. 有以下函数
#include <sthio.h>
#include <string.h>
main()
{ printf(“%d\n”, strlen(”ATS\n012\\”) );}
程序运行后的输出结果是8 。
35. 有以下函数
void fun(int *s)
{ static int j=0;
do {s[j]=s[j]+s[j+1];} while(++j<2); }
main()
{ int k,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 。
36. 以下错误的定义语句是C 。
A.int x[][3]={{0},{1},{1,2,3}};
B.int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C.int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
D.int x[][3]={1,2,3,4};
37.凡在函数中未指明存储类别的变量,其隐含的存储类别为auto 。
二、程序填空题
1. 设变量a和b已定义为int类型,若要通过scanf (”a=%d,b=%d”,&a,&b);语句分别给a和b输入1和2,则正确的数据输入内容是a=1,b=2 。
2. 若有定义:int a[]={1,3,5,7,9,11},*p=a;则*(p+2)的值和*(a+5)的
值分别是5和11 。
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;
while k<=n
{ s=s+1.0(k*(k+1)); k=k+1;}
printf(“%f\n”,s);
4. 下面程序的功能是用辗转相除法求两个正整数m和n的最大
公约数。
hcf(int m,int n)
{ int r;
if(m<n) { r=m; m=n ;n=r;} r=m%n;
while( r!=0 )
{ m=n; n=r; r=m%n; }
return r ; }
5. 有一个3*4矩阵,求其中的最大元素。
max_value( int array[3][4] ) { int i,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];
return (max); }
main( )
{ int a[3][4], i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf(“%d”,a[j][i]); ;
printf(“max value is %d\n”,max_value(a)); }
6. 下面程序通过指向整型的指针将数组a[3][4]的内容按3行×4列的格式输出,请给printf( )填入适当的参数,使之通过指针p将数组元素按要求输出。
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p=a;
main()
{ int i,j;
for(i=0;i<3;i++ )
{ for(j=0;j<4;j++ ) printf("%4d ", *(*(p+i)+j ) );
}}
7. 以下程序段的输出结果是 4 。
int a=47;
a+=a%=9; printf(“%d\n”,a);
8. 下面程序段是从键盘输入的字符中统计数字字符的个数,当输入换行符时结束循环。
请分析程序填空。
int n=0,c;
c=getchar();
while( c!=’\n’)
{if( c>=’0’&&c<=’9’) n++;
c=getchar(); }
9. 下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数。
main()
{ int i,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if( i==j ) continue;
else for(k=0;k<=9;k++) { if( k!=j&&k!=i ) count++; }
printf("%d",count); }
10. 有以下程序
#include <stdio.h>
main()
{ cha r a[20]=”This is a program!”,b[20];
scanf(“%s”,b);printf(“%s %s\n”,a,b);
}
程序运行时从键盘输入:This is a program!<回车>
则输出结果为This is a program! This 。
11. 设a、b、c都是整型变量,如果a的值为2,b的值为3,则执行c=a++||b++;语句后,变量b的值是 3 。
12. 下面这个程序的功能是将字符串s中所有的字符b删除。
main()
{ char s[80]; int i,j ;
printf("Please enter string s:"); gets(s) ;
for (i=j=0; s[i]!=’\0’; i++)
{ if(s[i]!=’b’) s[j++]=s[i] }
s[j]=’\0’;
puts(s);
}
13. 下面函数的功能是判断一个数是不是素数。
int prime (int m)
{int i ;
for (i=2; i<=sqrt(m); i++)
if ( m%i = =0 ) return 0;
return 1 ; }
14.有一个3*4矩阵,求其中的最大元素。
max_value( int a[3][4] )
{ int i,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];
return (max); }
main( )
{ int a[3][4], i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf(“%d”,a[i][j]); ;
printf(“max value is %d\n”,max_value(a)); }
三、编程题
1.任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。
#include<stdio.h>
int main()
{
int i,a[10],j,n=9,temp;
printf("请输入十个数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<9;i++)
for(j=0;j<9-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<10;i++)
printf("%3d",a[i]);
return 0;
}
2.编程检查用户输入的字符是数字、字母、空白还是其它字符,直到用户输入'q'为止。
#include<stdio.h>
int main()
{
char ch;
int i=0,j=0,l=0,m=0;
printf("请输入字符: ");
for(ch=getchar();ch!='q';)
{
if(((ch>='a') && (ch<='z'))||((ch>='A') && (ch<='Z')))
{printf("字母");
i++;}
else
if(ch==' ')
{printf("空格");
j++;}
else if(ch>='0' && ch<='9')
{ printf("数字");
l++;}
else if(ch=='\n')
;
else
{printf("其他字符");
m++;}
ch=getchar();
}
printf("字母=%d\n空格=%d\n数字=%d\n其他字符=%d\n",i,j,l,m);
return 0;
}
3.打印出如下图案(菱形)
*
***
******
********
******
***
*
#include<stdio.h>
int main()
{
int i,j,k;
for(i=1;i<5;i++)
{
for(k=7;k>2*i-1;k--)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
for(i=1;i<4;i++)
{
for(k=1;k<=2*i;k++)
printf(" ");
for(j=5;j>=2*i-1;j--)
printf("*");
printf("\n");
}
return 0;
4.输入n值,输出如图所示高和上底均为n的等腰梯形。
当n=5时
#include<stdio.h>
int main()
{
int i,j,k,n;
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{
for(k=5;k>i;k--)
printf(" ");
for(j=1;j<=2*(i+2)-1;j++)
printf("*");
printf("\n");
}
return 0;
}
5.编写程序,将两个字符串连接起来,不要使用strcat函数。
#include<stdio.h>
int main()
{
int i=0,j=0;
char a[120];
char b[20]; printf("输入第一个字符串");
gets(a);
printf("\n");
printf("输入第二个字符串");
gets(b); printf("将两个字符串连接起来");
while(a[i]!='\0')
i++; while(b[j]!='\0')
a[i++]=b[j++];
a[i]='\0';
printf("新字符串:%s",a);
return 0;
}
6.有一分数序列:
......1321,813,58,35,23,12
,求出这个数列的前20项之和。
#include<stdio.h>
int main()
{
float m=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",sum);
return 0;
}
7.写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。
#include<stdio.h>
int main()
void copy(char str[100]);
char s1[100];
printf("输入一个字符串:");
gets(s1);
copy(s1);
return 0;
}
void copy(char str[100])
{
int i,j;
char s[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<stdio.h>
int main()
{
int a[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]);
return 0;
}。