else printf("no");
D . if(c!=a+b)printf("yes\n");
else printf("no");
9 . 以下程序的输出结果是()。
main( )
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
t+=b[i][b[i][i]];
printf("%d\n",t);
}
A . 4
B . 3
C . 0
D . 6
10 . 如在运行以下程序时,分别输入a和h,则输出结果为()。
#include
void main( )
{
int a=0;
char ch;
scanf("%c",&ch);
switch(ch)
{
case 'a':a++;break;
case 'h':
default:a++;
case 0:a--;
}
printf("%d\n",a);
}
A . 1和0
B . 2和0
C . 2和1
D . 1和1
11 . 以下四个程序中,运行结果与其他三个不同的是()。
A . for(s=0,i=0;i<=100;i++)
s+=i;
printf("%d",s);
B . for(s=0,i=0;i<=100;)
s+=i++;
printf("%d",s);
C . s=0;i=0;
while(i<=100)
{i++;
s+=i;
}
printf("%d",s);
D . s=0;i=0;
do{i++;
s+=i;
}while(i<100);
printf("%d",s);
12 . 以下叙述中不正确的是()。
A . 一个变量的作用域完全取决于变量说明语句的位置
B . 外部变量可以在函数以外的任何位置定义
C . 内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至下一次调用
D . 用static说明一个外部变量是为了限制其他编译单位的引用
13 . 以下关于复合语句中变量的说法正确的是()。
A . 复合语句中隐式说明的变量的存储类别应是自动型,它的作用范围仅在本
复合语句中有效
B . 复合语句中隐式说明的变量的存储类别应是静态型,它的作用范围仅在本复合语句中有效
C . 复合语句中隐式说明的变量的存储类别应是自动型,它的作用范围在本函数中有效
D . 复合语句中隐式说明的变量的存储类别不确定,它的作用范围仅在本函数中有效
14 . 以下程序的运行结果是()。
main( )
{
char arr[2][4];
strcpy(arr[0],"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr[0]);
}
A . you&me
B . you
C . me
D . youme
15 . 以下程序体的执行结果为()。
#include
main()
{int k=4;
while(k--)
{ printf("%d",k);
}
printf("%d",k);
}
A . 3210
B . 3210-1
C . 321
D . 43210
16 . 下面程序的运行结果是()。
#include
main()
{int k=5;
do{
printf("*");
}while(--k);
}
A . ****
B . *****
C . ******
D . *******
17 . 若有定义:“char s[5];ch;”,则调用函数scnaf的正确语句是()。
A . scanf("%s%c",s,ch);
B . scanf("%s%c",&s,&ch);
C . scanf("%s%c",&s,ch);
D . scanf("%s%c",s,&ch);
18 . 有程序
#include
main( )
{ char c;
while((c=getchar( ))!='Q')
{if(c<='Z'&&c>='G') putchar(c+=2);
else putchar(++c);
}
}
如输入“SKDJAQFR(回车)”则结果为()。
A . UMEL
B B . UMELBSGS
C . TLEKB
D . TLEKBRGS
19 . 对for(i=0; ; i++) printf("*"); 可理解为()。
A . 条件恒为真
B . 条件恒为假
C . 一种错误的表达式
D . 该循环不会被执行
20 . 已知定义:“int a=2,b=3,c=4,*p=&a,*q=&b,*r=&c; a++; ++b;”,则*p+*q -*r的值是()。
A . 2
B . 3
C . 4
D . 5
21. 下面关于switch语句的描述中,正确的是()。
A . switch语句中default子句可以没有,也可有一个
B . switch语句中每个case后面的语句序列必须有break语句
C . switch语句中default子句只能放在最后
D . switch语句中每个case子句后面的表达式可以是整型表达式
22 . 下面关于break语句描述正确的是()。
A . 只能用在循环体内或switch语句中
B . 用在循环体中时功能与continue语句一致
C . 只能用在循环体内
D . 用在能出现语句的任何地方
23 . 如果想调用strcpy( )和strlen( )等函数用来对字符指针进行操作,则需要包括的头文件是()。
A . string.h
B . stdio.h
C . stdlib.h
D . math.h
24 . 若有定义语句:“int x=20;”,则执行下列程序片断后,输出结果不为ok的是()。
A . if(x>0)
if(x>50)printf("ok\n");
else printf("not ok\n");
B . if(x>0)
{ if(x<50)printf("ok\n");}
else printf("not ok\n");
C . if(x<0)
{ if(x>50)printf("not ok\n");}
else printf("ok\n");
D . if(x>0)
if(x<50)printf("ok\n");}
else printf("not ok\n")
25 . 下列关于递归函数的形式参数的正确说法()。
A . 是静态变量
B . 是自动变量
C . 是外部变量
D . 根据用户定义存储类型
26 . 请选择下面程序的运行结果()。
float fun(int x,int y)
{ return(x+y); }
main( )
{ int x=2,y=5,z=8;
printf("%3f\n",fun((int)fun(x+z,y),x-z)};
}
A . 9
B . 21
C . 9.0
D . 编译出错
27 . 下列说法错误的是()。
A . 数组名是该数组所在的地址,该地址是一种常量,但当数组作为参数传递时,该数组名就是普通的指针,并丢失了数组大小信息
B . 字符串常量本质上也是地址,该地址指向字符串的第一个字符所在处
C . int 型指针(即int *)可以赋值给void型指针(即void *)
D . int型指针(即int *)可以赋值给double型指针(即double *)
28 . 循环语句
for(a=1,b=0;b!=3||a<4;a++) scanf("%d",&b);
执行第一次循环时,输入“3”则()。
A . 继续循环
B . 循环停止
C . 无穷循环
D . 无法判断
29 . 以下程序的输出结果是()。
main()
{ int a, b=1;
for(a=1; ; a++)
{ if(a>=6) break;
if (a%2)
b+=3;
}
printf("%d\n",b);
}
A . 19
B . 16
C . 10
D . 7
30 . 请选择下面程序的运行结果()。
#define mult(x) 2*x
#define mulplus(x,y) 2*mult(x)+y
main( )
{ int m=2,n=3;
printf("%d\n",mulplus(m,mult(n)));
}
A . 14
B . 16
C . 18
D . 20
31 . 在C语言中,引用数组元素时,其数组下标的数据允许是()。
A . 任何类型的表达式
B . 整型常量
C . 整型表达式
D . 整型常量或整型表达式
32 . 有如下程序
#define A 2
#define B A+1
#define C 2*B+1
#main( )
{ int i;
for(i=1;i<=C;i++)printf("%d\n",i);
}
该程序中for循环执行的次数是()。
A . 5
B . 7
C . 6
D . 8
33 . 在实现文件包含功能中,尖括号中的文件引起的执行效果是()。
A . 系统先在引用被包含文件的C源程序所在的文件目录中寻找,
若找不到,再按系统指定的标准方式寻找其他目录
B . 仅查找按系统标准方式指定的目录
C . 直接查找指定的目录
D . 仅查找文件所在目录
34 . 执行赋值语句“a=5>=4!= 1;”后,a等于()。
A . 0
B . 1
C . 4
D . 5
35 . 已知定义:“int a=2,b=3,c=4,*p=&a,*q=&b,*r=&c; a++; ++b;”,
则*p+*q-*r的值是()。
A . 2
B . 3
C . 4
D . 5
36 . 设x和y均为int型变量,则执行以下语句后的输出值为()。
x=15;
y=5;
printf("%d",x%=(y/=2));
A . 0
B . 1
C . 2
D . 3
37 . 已知定义:“long (*p)( );”,则下列说法正确的是()。
A . p是一个指向函数的指针,该函数的返回值是long型
B . p是指针变量,指向一个long型数据
C . p是指向一个一维long型数组的指针变量
D . p是一个指针函数,该函数返回一个指向long型变量的指针
38 . 下面能正确定义数组,并正确赋值的语句是()。
A . int N=5,b[N][N]
B . int a[2][3]={{1},{3},{2}}
C . int d[4][3]={{1,2},{3,4}}
D . int c[][2]={{1,2,3},{3,4,5},{7,8,9}}
39 . 有以下程序,程序的运行结果是()。
main( )
{
int a[5]={1,2,3,4,5},i;
for(i=4;i>=1;i--) a[i]=a[i-1];
for(i=0;i<5;i++) printf("%d ",a[i]);
}
A . 1 2 3 4 5
B . 2 3 4 5 1
C . 1 1 2 3 4
D . 5 1 2 3 4
40 . 下列说法错误的是()。
A . 数组名是该数组所在的地址,该地址是一种常量,但当数组作为参数传递时,该数组名就是普通的指针,并丢失了数组大小信息
B . 字符串常量本质上也是地址,该地址指向字符串的第一个字符所在处
C . int 型指针(即int *)可以赋值给void型指针(即void *)
D . int型指针(即int *)可以赋值给double型指针(即double *)
41 . 请选择下面程序的运行结果()。
float fun(int x,int y)
{ return(x+y); }
main( )
{ int x=2,y=5,z=8;
printf("%3f\n",fun((int)fun(x+z,y),x-z)};
}
A . 9
B . 21
C . 9.0
D . 编译出错
42 . 有以下程序
main()
{ int s=1, j=0, n;
scanf("%d",&n);
for(;j!=n;j++)
{s+=j; }
printf("%d\n",s);
}
若要使程序的输出值为7,则应该从键盘给n输入的值是()。
A . 3
B . 4
C . 5
D . 6
43 . 已知定义:“int a[]={1,3,5,7,9},*p=a+1,*q=&a[4];”,则*q-*p+1的值是()。
A . 5
B . 6
C . 7
D . 8
44 . 已知定义:“void *p;int a=3,*q=&a;double b=3.0,*r=&b;”,则下列语句错误的是()。
A . *p=3
B . *q=4
C . *r=5.0
D . p=q
45 . 请选择下面程序的运行结果()。
int f(int n)
{ if (n==1) return 1;
else return f(n-1)+1;
}
main( )
{ int i,j=0;
for(i=1;i<=3;i++) j+=f(i);
printf("%d\n",j);
}
A . 4
B . 3
C . 6
D . 9
46 . 已知定义:“int a=4,*p=&a,*q;”,要使q也指向a,则下列语句正确的是()。
A . p=q
B . q=p
C . q=*p
D . q=&p
47 . C语言带参数的main 函数的形式是()。
A . main(int argc,char **argv)
B . main(int *argc,char *argv)
C . main(int argc,char argv[])
D . main(int argc,int argv[])
48 . 已知定义:“int a=9,*p=&a;”,则**&p和*&a的值分别是()。
A . 9 9
B . 8 8
C . 7 7
D . 这两种写法都是错的
49 . 关于for ,do-while,while循环语句不正确的说法是()。
A . 三种循环都能用break结束循环,用continue开始下一次循环
B . for(表达式1;表达式2;表达式3)语句中的三个表达式均可以省略
C . while和do-while语句的区别不仅仅在于位置不一样
D . 循环条件为假时三种循环均为一次都不执行
50 . 以下程序的输出结果是()。
main( )
{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0;
for(i=1;i<3;i++)
for(j=i;j>=0;j--)
s+=a[i][j];
printf("%d\n",s);
}
A . 18
B . 19
C . 20
D . 21
51 . 说明语句extern int x=5;中x=5的作用是()。
A . 将变量x的值赋值为5
B . 将变量x初始化为5
C . 说明一个变量为外部变量
D . 以上说法均有误
52 . 对下面三条语句(其中s1和s2为内嵌语句),正确的叙述是()。
(1)if(!a>0)s1;else s2;
(2)if(a!=0)s1;else s2;
(3)if(a>0)s1;else s2;
A . 三者相互等价
B . 三者互不等价
C . (1)和(2)等价,但与(3)不等价
D . (1)和(3)等价,但与(2)不等价
53. 判断字符串s1是否大于字符串s2,应当使用()。
A . if(s1>s2)
B . if(strcmp(s1,s2))
C . if(strcmp(s1,s2)>0)
D . if(strcmp(s2,s1)>0)
54 . 若有定义:“float x;int a,b;”,则正确的switch语句是()。
A . switch(x)
{ case 1.0:printf("#\n");
case 2.0:printf("##\n");
}
B . switch(x)
{ case 1,2:printf("#\n");
case 3:printf("##\n");
}
C . switch(a+b)
{ case 1:printf("#\n");
case 1+2:printf("##\n");
}
D . switch(a+b);
{ case 1:printf("#\n");
case 2:printf("##\n");
}
55 . 有以下程序,程序运行后的输出结果是()。
main( )
{
int a[3][3],i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=((i+1)/(j+1))*((j+1)/(i+1));
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
A . 1 2 3
B . 1 0 0
4 5 6 0 1 0
7 8 9 0 0 1
C . 1 1 1
D . 0 0 0
1 1 1 0 0 0
1 1 1 0 0 0
56 . 以下程序体的执行结果为()。
main()
{ int i,j;
for(i=0,j=1; i<=j+1; i++, j--)
printf("*");
}
A . *
B . **
C . ***
D . ****
57 . 以下叙述中不正确的是()。
A . 一个变量的作用域完全取决于变量说明语句的位置
B . 外部变量可以在函数以外的任何位置定义
C . 内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至下一次调用
D . 用static说明一个外部变量是为了限制其他编译单位的引用
58 . 已知定义:“int a[]={1,3,5,7,9},*p=a+1,*q=&a[4];”,则*q-*p+1的值是()。
A . 5
B . 6
C . 7
D . 8
59 . 与“x>0?x++:y>0?y++:y--;”语句的功能不相同的if语句是()。
A . if(x>0)x++;
else if(y>0)y++;
else y--;
B . if(y>0)y++;
else y--;
if(x>0)x++;
C . if(x||!x)
if(x>0)x++;
else if(y>0)y++;
else y--;
D . if(x<=0)
if(y>0)y++;
else y--;
else x++;
60 . 以下程序的结果为()。
int x=49,y=15;
for( ;x!=y; )
{ while(x>y)x-=y;
do{y-=x;}while(x}
printf("%d",y);
A . 0
B . 1
C . 3
D . 4
61 . 已知定义:“float *p;”,并且p的指针值为8000,则p+2的值是()。
A . 8002
B . 8004
C . 8008
D . 无法判断
62 . 函数strlen("abcd\0efg")的值为()。
A . 9
B . 4
C . 8
D . 10
63 . 已知一个正常运行的程序中有以下2个语句: “int x,*p=&x,*q=a;”和“*q=b;”,则变量a和b的类型分别是()。
A . int *和int *
B . int 和int
C . int * 和int
D . int 和int *
64 . 以下程序的输出结果是()。
main( )
{
int x=0,a[]={1,2,3,4,5,6,7,8,9};
for(int i=1;i<=3;i++)
x+=a[i];
printf("%d\n",x);
}
A . 6
B . 9
C . 26
D . 45
65 . 下述关于break语句的描述中,错误的是()。
A . break语句可用于if语句语句中,它将退出if语句
B . break语句可用于switch语句中,它将退出switch语句
C . break语句可用于循环体内,它将退出该重循环
D . break语句在一个循环体内可以出现多次
66 . 以下说法正确的是()。
A . 在循环语句中break和continue的用法完全一致
B . 在多层循环中,一个break语句只能外跳一层
C . 在多层循环中,一个goto语句只能外跳一层
D . break语句可以用于循环和switch语句外的其他语句
67 . 以下程序的输出结果是()。
main( )
{ int x=8,y=8;
printf("%d %d\n",x--,--y);
}
A . 8 7
B . 7 7
C . 7 8
D . 8 7
68 . 为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成
配对关系。
A . 同一行上的if
B . 在其之前未配对的if
C . 在其之前未配对的最近的if
D . 缩排位置相同的if
69 . 以下程序的输出结果是()。
main()
{ int a, b=1;
for(a=1; ; a++)
{ if(a>=6) break;
if (a%2)
b+=3;
}
printf("%d\n",b);
}
A . 19
B . 16
C . 10
D . 7
70 . 能正确表示逻辑关系“a≥10或a≤0”的C语言表达式是()。
A . a>=10 or a<=0
B . a>=0|a<=10
C . a>=10 &&a<=0
D . a>=10‖a<=0
71 . 已知'A'的ASCII码是65,并有语句”char s[]="ACEG",*p=s;”,则“printf("%c",*p+3);”的输出结果是()。
A . G
B . D
C . 68
D . E
72 . 有以下程序,程序的运行结果是()。
main( )
{ int a[5]={1,2,3,4,5},i;
for(i=4;i>=1;i--) a[i]=a[i-1];
for(i=0;i<5;i++) printf("%d ",a[i]);
}
A . 1 2 3 4 5
B . 2 3 4 5 1
C . 1 1 2 3 4
D . 5 1 2 3 4
73 . 以下程序的运行结果是()。
main( )
{
char arr[2][4];
strcpy(arr[0],"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr[0]);
}
A . you&me
B . you
C . me
D . youme
74 . 有以下程序
main( )
{int i,j,k=19;
i=k/10%9;
j=i&&(-1);
printf("%d,%d\n",i,j);
}
程序运行后的输出结果是()。
A . 0,1
B . 1,1
C . 0,0
D . 1,0
75 . 下面四个选项中,均是不合法的用户标识符的选项是()。
A . A P_0 do
B . float 1a0 _A
C . b-a goto int
D . _123 temp INT
二、填空题
1 . 下列程序的功能是将字符串t复制到字符串s中,并将s显示出来,请在横线上填写适当的内容。
#include
void mystrcpy(char *str1,char *str2)
{
(_____________)
while ( _________ )
i++;
}
main( )
{
char s[20],t[20];
printf("Enter a string:");
scanf("%s",t);
(________________)
printf("(___________)",s);
}
2 . 以下程序求出数组a中的偶数个数和偶数的平均值,请在横线上填写适当内容。
#include
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int count,sum,i;
float average;
count=sum=0;
for(i=0;i<10;i++)
{
if(a[i]%2!=0) _______ ;
sum+= _______ ;
count++;
}
if( ______ )
{
average= ______ ;
printf("偶数的个数是%d,偶数的平均值是%f\n",count,average);
}
}
3 . 完成下列程序,根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。
#include
#include
main()
{
float a,b,c;
float s,area;
scanf("%f%f%f",&a,&b,&c);
if( _______ )
{
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f",area);
if( ________ )
printf("等边三角形\n");
else if( _______ )
printf("等腰三角形\n");
else if( ________ )
printf("直角三角形\n");
else printf("一般三角形\n");
}
else printf("不能组成三角形\n");
}
4 . 要求反序输出一个正整数,即如输入“123”则输出“321”。
#include
main( )
{ int n,m;
scanf("%d",&n);
do{
m=__________
printf("%d",m);
n=________
}while( ________ );
printf("\n");
}
5 . 要求根据n值输出一个菱形,即如n=4则图形为:
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
#include
main( )
{int i,j,n;
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{for(j=1;j<=n-i;j++)
printf("%c",' ');
for(j=1;_________;j++)
printf("%c", ______ );
printf("\n");
}
for(i=1;i{for(j=1;j
printf("%c",' ');
for(j=1;____________;j++)
printf("%c",_______________);
printf("\n");
}}
6 . 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include
main( )
{ char c;
int letters=0,space=0,digit=0,other=0;
while ( _______ )
if ( _________ )
letters++;
else if(c==' ')
_________
else if(c>='0'&&c<='9')
digit++;
else
________
printf("%d %d %d %d\n",letters,space,digit,other);
}
7 . 完成下列程序,输入出生日期(year1,month1,day1)和当前日期(year2,month2,day2),计算出实际年龄。
#include
void main()
{
int year1,month1,day1,year2,month2,day2,age;
scanf("%d.%d.%d%d.%d.%d",&year1,&month1,&day1,&year2,&month2,&day2); age=year2-year1;
if(month2____month1)age--;
else
if(month2_____month1&&day2___ __day1)
age--;
printf("age=%d\n",age);
}
8 . 有10个字符串,编写程序实现找出每个字符串的最大字符,按顺序放入一维数组a中,即第i个字符串的最大字符放入a[i]中,最后输出每个字符串中的最大字符,请在横线上填写适当的内容。
#include
main( )
{
char s[10][20];
char a[10],i,j;
for(i=0;i<10;i++)
gets(s[i]);
for(i=0;i<10;i++)
{
_________ ];
for(j=1;____ ;j++)
if(a[i]
}
for(i=0;i<10;i++)
printf("%c",a[i]);
9 .
10 . 下面是用两路合并法把两个已按升序排列的数组合并成一个数组的程序,请在横线上填写适当的内容。
#include
void main()
{ int a[4]={3,4,6,8};
int b[8]={2,5,7,12,16,18,19,20};
int c[12];int i,j,k;i=j=k=0;
while(i<4 && j<8)
if( _____ )
{_______}
else
{______}
while( ____ )
{c[k]=a[i];i++;k++;}
while( _____ )
{c[k]=b[j];k++;j++;}
for(i=0;iprintf("%4d",c[i]);
}
11 . 完成下列程序,功能是由键盘输入x,计算级数1+x+ + +…+ 的值,当通项的绝对值小于eps时计算停止。
#include
main()
{ int n=1,x;float s,t;
scanf(“%d”, _____ );
s=1;t=1;
{ t=t*________
s=s+t;
_________
}while(__________>eps);
printf(“%f”,s);
}
12 . 下列函数计算n!。
#include
int factor(int n)
{int i=1,result=1;
for (;i<=n;)
{
_______ ;
______;
}
return(result);
}
main( )
{ int n=10;
printf("The n! is %d", factor____);
}
13 . 下列程序是改正后的冒泡排序程序,即在新一轮的比较中,若没有发生元素交换,则认为已排序完毕。请将该程序填完整。
main()
{
int a[]={7,4,2,8,1,3,5,0,9,1,12,5};
int len= _______ ;
int i,t;
int changed;
for(int pass=1;pass{
_________ ;
for(i=0;i< ______ ;i++)
if(a[i]>a[i+1])
{
________ ;
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}