C语言常见考试题型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见考试题型
选择题(13年20题,每题1分,共20分)
填空题(13年20分,基本概念、写程序运行结果、完善程序)
判断题(13年10题、每题1分,共10分)
编程题(13年4题,共40分)
其他题型
练习题选讲
选择题
(1)一个C程序的执行是从。
A)本程序的main函数开始,本程序的main函数结束
B)本程序的第一个函数开始,本程序的最后一个函数结束
C)本程序的main函数开始,本程序的最后一个函数结束
D)本程序的第一个函数开始,本程序的main函数结束
(2)C语言源程序名的后缀是。
A).exe B).c C).obj D).cpp
(3)以下不能用作C语言中的标识符的是。
A)_ab12cd B)ab12cd_ C)12abcd D)ab12_cd
(4)下面关于字符常量的说法错误的是。
A)一个字符常量代表ASCII字符集中的一个字符
B)单引号中的大写字母和小写字母代表不同的字符常量
C)字符常量只能包含一个字符
D)字符常量可以用单引号或双引号括起来
(5)以下程序运行后的输出结果是。
#include <stdio.h>
main()
{
int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d\n”,a=2*b);
}
A)0,0 B)1,0 C)3,2 D)1,2
(6)以下关于C语言中初始化的说法中正确的是。
A)若整型变量在定义时没有初始化,则此时变量的值为0
B)若整型变量在定义时没有初始化,则变量的值是空值
C)若整型数组在定义时做了不完全初始化,则无法确定未指定值的数组元素的取值
D)变量定义时如果没有初始化,则无法确定该变量的值
(7)已知字符A的ASCII码值是65,以下程序。
#include <stdio.h>
void main( )
{
char a='A';
int b=20;
printf("%d,%o",(a=a+1),b );
}
A)表达式非法,输出零或不确定值B)因输出项过多,无输出或输出不确定值
C)输出结果为20,142 D)输出结果为66,24
(8)下列说法中错误的是。
A)只能在循环体内使用break语句
B)在循环体内使用break语句可以使流程跳出本层循环体,从而提前结束本层循环
C)在while和do-while循环中,continue语句并没有使整个循环终止
D)continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,继续执行下次循环
(9)若变量已正确定义并赋值,不符合C
A)a=a+7 B)a=7+b+c,8 C)
(10)设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是。
A)0至255 B)0至65535 C)0至32767 D)-32768至32767
(11)以下程序的输出结果是。
main()
{
int x=10,y=10;
printf(“%d %d\n”,x--,--y);
}
A)10 9 B)9 9 C)9 10 D)10 10
(12)若以下选项中的变量已正确定义,则正确的赋值语句是。
A)x1=26.8%3 B)x3=0x12
C)1+2=x2 D)x4=1+2=3;
(13)以下表示数学式子“a<b<c”的逻辑表达式中错误的是。
A)a<b<c B)a<b && b<c
C)!(a>=b) && !(b>=c) D)!(a>=b || b>=c)
(14)已知字符A的ASCII码值是65,以下程序。
#include <stdio.h>
void main( )
{
char a='A';
int b=20;
printf("%d,%o",(a=a+1),b );
}
A)表达式非法,输出零或不确定值B)因输出项过多,无输出或输出不确定值
C)输出结果为20,142 D)输出结果为66,24
(15)在下面的条件语句中(其中s1和s2代表C语言的语句),只有一个在功能上与其它三个语句不等价,它是【13】。
A.if(a) s1 ; else s2; B.if(a==0) s2 ; else s1;
C.if(a!=0) s1 ; else s2; D.if(a==0) s1 ; else s2;
(16)当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是。
A)k%2 B)k%2==1 C)(k%2)!=0 D)!k%2==1
(17)已知x=3,y=2,则表达式x*=y+8
A)3 B)2 D)10
(18)读下列程序:
#include <stdio.h>
main( )
{float a,b,t;
scanf("%f,%f",&a,&b);
if ( a>b) {t=a;a=b;b=t;}
printf ("%5.2f,%5.2f",a,b );
}
运行时从键盘输入3.8和–3.4,则正确的输出结果是。
A)–3.40,–3.80 B)–3.40,3.80
C)–3.4,3.8 D)3.80,–3.40
(19)运行以下程序,输入6以后的输出结果是。
#include <stdio.h>
void main()
{
int x,y;
scanf("%d",&x);
y=0;
if(x>=0)
{if(x>0)y=1;}
else
y=-1;
printf("%d\n",y);
}
A)0 B)1 C)-1 D)不确定
(20)已知:int x,a,b;下列选项中错误的if语句是。
A)if (a=b) x++;B)if (a =<b) x++;
C)if (x) x++; D)if (a-b) x++;
(21)两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是。
#include "stdio.h"
void main()
{
int x;
scanf("%d",&x);
if(x++>5) printf("%d",x);
else printf("%d\n",x--);
}
A)7和5 B)6和3 C)7和4 D)6和4 (22)以下程序运行后的输出结果是。
#include "stdio.h"
void main()
{
int a;
scanf(“%d”,&a);
if (a>100)
printf("%d\n",a>100);
else
printf("%d\n",a<=100);
}
A)100 B)1 C)0 D)不确定(23)若变量已正确定义,则以下程序段的输出结果是:。
x=0; y=2; z=3;
switch(x)
{
case 0:
switch(y==2)
{
case 1:printf("*");break;
case 2:printf("%");break;
}
case 1:
switch(z)
{
case 1:printf("$");
case 2:printf("*");break;
default:printf("#");
}
}
A)* B)*# C)*%# D)*%$*
(24)设有程序段
int k=10;
while (k=0)
k=k-1;
则下面描述中正确的是。
A)while循环执行10次
B)循环时无限循环
C)循环体语句一次也不执行
D)循环体语句执行一次
(25)有以下程序
main()
{ int s,i=0,x=0;
for (;;)
{
if(i==3||i==5) continue;
if (i==6) break;
i++;
s+=i;
};
printf("%d\n",s);
}
程序运行后的输出结果是。
A.10 B.13 C.21 D.程序进入死循环(26)运行以下程序,输入ADescriptor<CR>(<CR>表示回车),则输出结果是。
#include <stdio.h>
main()
{
char c;
int v1=0,v2=0;
do{
switch(c=getchar())
{
case 'A':
case 'e':
case 'i':
case 'o':
default:v1=v1+1;v2+=1;
}
}while(c!='\n');
printf("v1=%d,v2=%d\n",v1,v2);
}
A)v1=0,v2=0 B)v1=4,v2=4
C)v1=11,v2=11 D)v1=12,v2=12
(27)若a 、b均为int型变量且a=100,则对以下for循环语句的正确判断是。
for (b=100 ; a!= b; ++a,b++) printf ( "-----\n");
A)循环体只执行一次B)是死循环
C)循环体一次也不执行D)以上说法都不对
(28)以下程序运行后的输出结果是。
#include <stdio.h>
void main()
{ int n=2,k=0;
while(k++&&n++>2);
printf(“%d %d\n”,k,n);
}
A)1 2 B)1 3 C)5 7 D)0 2
(29)判断字符串s1是否大于字符串s2,应当使用【10】。
A)if(s1>s2) B)if(strcmp(s1,s2))
C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)
(30)若有以下语句,则正确的描述是。
char x[ ]= " 12345";
char y[ ]={'1','2','3','4','5'};
A)x数组和y数组的长度相同B)x数组长度大于y数组的长度
C)x数组长度小于y数组的长度D)x数组等价于y数组
(31)下列选项中,能正确定义数组的语句是。
A)int num[0..2008];
B)int num[];
C)int N=2008;
int num[N];
D)#define N 2008
int num[N];
(32)下列关于输出函数的说法中,不正确的。
A)putchar()函数只能输出一个字符
B)printf()函数在输出整数时,使用"%f "格式控制符
C)scanf()函数既可以输入数值,也可以输入字符串
D)strcpy()函数可以实现字符串拷贝
(33)若有以下定义
int x[10], *pt=x;
则对x数组元素的正确引用是。
A)*&x[10] B)*(x+3) C)*(pt+10) D)pt+3 (34)为了判断两个字符串s1和s2是否相等,应当使用。
A)if (s1= =s2) B)if (s1=s2)
C)if ( strcpy (s1,s2) ) D)if ( strcmp( s1,s2)= =0 )
(35)现有如下定义语句
int *p,s[20],i;
p=s;
表示数组元素s[i]的表达式不正确的是。
A)*(s+i) B)*(p+i) C)*(s=s+i) D)*(p=p+i) (36)设有定义double a[10],*s=a;,以下能够代表数组元素a[3]的是。
A)(*s)[3] B)*(s+3) C)*s[3] D)*s+3
(37)以下程序的运行结果是。
#include <stdio.h>
struct st
{ int x, y;} data[2]={1,10,2,20};
main()
{ struct st *p=data;
printf("%d,", p->y); printf("%d\n",(++p)->x);
}
A)10,1 B)20,1 C)10,2 D)20,2
有以下程序运行后的输出结果是。
#include <stdio.h>
void fun(char *c,int d)
{
*c=*c+1;
d=d+1;
printf("%c,%c,",*c,d);
}
main()
{
char b='a',a='A';
fun(&b,a);
printf("%c,%c\n",b,a);
}
A)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B (38)有以下程序
#include <stdio.h>
#include <string.h>
struct A
{
int a;
char b[10];
double c;
};
void f(struct A t);
main()
{
struct A a={1001,"ZhangDa",1098.0};
f(a);
printf("%d,%s,%6.1f\n",a.a,a.b,a.c);
}
void f(struct A t)
{
t.a=1002;
strcpy(t.b,"ChangRong");
t.c=1202.0;
}
A)1001,zhangDa,1098.0 B)1002,changRong,1202.0
C)1001,ehangRong,1098.0 D)1002,ZhangDa,1202.0 (39)以下程序的输出结果是。
#include "stdio.h"
void fun(int x)
{ printf("%d\n",++x);}
void main()
{ fun(12+5);}
A)12
B)13
C)17
D)18
(40)以下叙述中不正确的是。
A)在不同的函数中可以使用相同的名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内的复合语句中定义的变量在本函数范围内有效
D)在一个函数内定义的变量只在本函数范围内有效
填空题
(1)C语言中最重要的一个函数是main ,缺少该函数程序就无法运行。
(2)若有代数式:
2(35)
x x y
÷-,则正确的C语言表达式为:x*x/(3*x-5*y) 。
(3)设a=2,b=3,x=3.5,y=2.5;算术表达式(float)(a+b)/2+(int)x%(int)y的值是 3.5 。
(4)若定义了一个指针变量int a=90,*p,假设p=&a ,则执行*p的值为90 。
(5)在逻辑运算符!、&&、||中,运算优先级别最高的是!。
(6)表示年份y是闰年(能被4整除但不能被100整除或者能被400整除为闰年)的逻辑表达式为y%4==0 && y%100!=0 || y%400==0 。
(7)C语言中数组的起始下标默认为0 。
(8) 若x,y 是int 型变量,x=100,y=200 ,则程序段printf("%d",(x,y));的输出是 200 。
(9) break 语句可以用在循环语句和 语句中。
(10)定义数组int a[10],则从键盘读入数组a 的最后一个元素的语句是 scanf(“%d ”,&a[9] ); 。
(11)若有声明”int i=7;float x=3.1416;double y=3;”,则表达式i+’a ’*x+i/y 值的类型是 double 型。
(12)与数学算式)
(3||b a b a +-等价的C 语言表达式是 sqrt(abs(a-b))/(3*(a+b)) 。
(13)设x 为int 型变量,请写出一个关系表达式 (x%3==0) &&(x%7==0) ,用以判断x 同时为3
和7的倍数时,关系表达式的值为真。
(14)设x,y,z,k 都是int 型变量,当执行表达式x=(y=4,z=16,k=32)之后x 的值为 32 。
(15)设char 类型的数据长度为1个字节,则unsigned char 类型数据的取值范围是 0~255 。
(16)以下程序段的输出结果是: 1 0 。
int a=-1,b=1;
if ((++a<0) && !(b--<=0))
printf("%d %d",a,b);
else
printf("%d %d",b,a);
(17
#include<stdio.h>
void main()
{ int k=5,n=0;
while(k>0)
{ switch(k)
{ case 1:
case 3:n+=1;k--;break;
default:n=0;k--;
case 2:
case 4: n+=2;k--;break;
}
}
printf("%3d",n);
}
(18
#include<stdio.h>
void main()
{
int i,j,m=1;
for(i=1;i<3;i++)
{
for(j=3;j>0;j--)
{
if ((i*j)>3)
break;
m=i*j;
}
}
printf("m=%d\n",m);
}
(19)运行下列程序,若输入are(回车),则输出结果为Compare 。
#include <stdio.h>
void main()
{ char str[100]="Computer";
char *p=str;
scanf("%s",p+4);
puts(str);
}
(20*运算优先级高于条件运算
#include<stdio.h>
#define MIN(x,y) (x)<(y)? (x):(y)
void main()
{ int i,j,k;
i=10; j=15;
k=10*MIN(i,j);
printf("%d\n",k);
}
(21)完善下列程序,计算sum=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。
#include <stdio.h>
main()
{
int n,s,sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
s=0 ;
for(int j=1;j<=i; j++ )
s+=j ;
sum+=s;
}
printf("%d",sum);
}
(22)完善下列程序,要求完成输入一个长度小于100的字符串,统计该字符串中大写字母、小写字母、数字及其他字符的个数。
#include "stdio.h"
void main()
{
char str[100];
int i,big=0,small= 0,num= 0,other=0;
printf("please input string:");
gets(str);
for(i= 0;str[i];i++)
if(str[i]>='A'&&str[i]<='Z')
big++;
else
if(str[i]>='a' && str[i]<='z')
small++;
else
if( str[i]>='0' && str[i]<='9' )
num++;
else
other++;
printf("big= %d, small=%d,num=%d,other= %d\n", big, small, num, other);
}
(23)完善下列程序,要求从键盘输入10个整数,使用冒泡法升序排序后输出该数组。
#include "stdio.h"
void main()
{
int a[10];
int i,j,t;
printf("请输入10个数:");
for(i= 0;i<10;i++)
scanf("%d",&a[i]);
for(i= 0;i<9;i++)
for(j=0; j<9-i ;j++)
if( a[j]>a[j+1] )
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序后:\n");
for(i= 0;i<10;i++)
for(j=0;j<4;j++)
printf("%d",a[i][j]);
}
(24)完善下列程序,将一个数组中的数据奇数放在前面,偶数放在后面。
#include <stdio.h>
#define N 10
void main()
{
int i,left,right,a[N],b[N];
printf("处理前的数组:");
for (i=0;i<N;i++)
scanf("%d ",&a[i]);
}
left=0; right=N-1 ;
for (i=0;i<N;i++)
{
if (a[i]%2!=0)
b[left++]=a[i];
else
b[right--]=a[i] ;
}
printf("\n处理后的数组:");
for (i=0;i<N;i++)
printf("%d ", b[i] );
printf("\n");
}
编程题
选择程序设计1-2题
(1)编写程序,从键盘输入三个数,输出其中最大的数。
(2)编写程序,要求从键盘输入x的值,然后输出y的结果。
(3)又如,商场促销打折,教材p72例4.11,个人所得税计算等。
(4)从键盘输入一个百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
成绩与等级的对照情
循环程序设计1题
(5)用循环结构编程,计算1-1/2+1/3-1/4+1/5。
(6)2013年美国GDP约15万亿美元,中国GDP约6万亿美元,假设未来一段时间内,两国GDP
分别以%2和8%速度增长,问中国GDP可以在哪一年赶上美国。
(7)读入一个整型数,将该数各位上出现的奇数依次取出,并构成一个新数返回。
例如:程序运行时输入12436579,输出97531。
(8)编写程序找出所有既是素数又是回文数的三位数。
所谓回文数是指其正序和逆序相同的数,例如,101,121,353,383,929,…
(9)输出200~300之间的所有素数。
有关数组的题目1题
(10)编写程序,计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。
(11)编写程序,初始化二维数组后,找出其中最大元素的值。
(12)一维数组排序
(13)字符数组p122例5.28、5.29、5.30等
有关函数的题目(有时考概念,无编程题)。