一、单选 ??共40题 (共计40分)
第1题 (1.0分) ???????题号:6198 ???????难度:易 ???????第1章
以下说法正确的是 ().
A:C语言被称为"高级语言"是因为它用接近人们习惯的自然语言和数学语言作为表达形式,使人们学习和操作起来感到十分方便
B:C语言被称为"高级语言"是因为它能接受和处理由0和1的代码构成的二进制指令或数据
C:C语言被称为"高级语言"是因为计算机能直接识别并执行由这种语言编写的程序
D:C语言被称为"高级语言"是因为它既符合人们的习惯易于使用,又能由计算机直接识别并执行由这种语言编写的程序
答案:A
第2题 (1.0分) ???????题号:7028 ???????难度:中 ???????第2章
以下关于字符串的叙述中正确的是
A:空串比空格打头的字符串小
B:两个字符串中的字符个数相同时才能进行字符串大小的比较
C:可以用关系运算符对字符串的大小进行比较
D:C语言中有字符串类型的常量和变量
答案:A
第3题 (1.0分) ???????题号:7036 ???????难度:较易 ???????第2章
有以下程序
#include <stdio.h>
main()
{
????int a=5,b=1,t;
????t=(a<<2)|b; ?
????printf("%d\n",t);
}
程序运行后的输出结果是
A:1
B:11
C:6
D:21
答案:D
第4题 (1.0分) ???????题号:6319 ???????难度:易 ???????第2章
以下说法正确的是().
A:C语言标识符中字母、数字和下划线字符必须同时出现
B:C语言标识符中仅出现下划线字符是不允许的
C:C语言标识符中可以出现多个字母、数字和下划线字符
D:C语言标识符中字母、数字和下划线字符不能同时出现
答案:C
第5题 (1.0分) ???????题号:6558 ???????难度:易 ???????第2章
以下选项中不属于C语言字符常量的是().
A:'\xah'
B:'\n'
C:'a'
D:'\007'
答案:A
第6题 (1.0分) ???????题号:7136 ???????难度:较易 ???????第3章
若有定义
????int a;
????float b;
????double c;
程序运行时输入:
????3 ?4 ?5<回车>
能把值3输入给变量a、4输入给变量b、5输入给变量c的语句是
A:scanf("%d%f%lf", &a,&b,&c);
B:scanf("%d%lf%lf", &a,&b,&c);
C:scanf("%d%f%f", &a,&b,&c);
D:scanf("%lf%lf%lf", &a,&b,&c);
答案:A
第7题 (1.0分) ???????题号:6494 ???????难度:易 ???????第3章
以下说法正确的是().
A:C语言程序运行时可以从键盘上读入用户输入的C源程序并附加到本程序的尾部一并执行
B:C语言程序运行时可以从键盘上读入用户以二进制输入的指令,并执行这些指令
C:C语言程序运行时可以从键盘上读入用户输入的C源程序并逐行执行
D:C语言程序运行时可以从键盘上读入用户输入的字符或数据,并依此改变程序的运行步骤
答案:D
第8题 (1.0分) ???????题号:6902 ???????难度:中 ???????第3章
设有定义:
????int ?a=1,b=2,c=3;
以下语句中执行效果与其它三个不同的是
A:if(a>b) {c=b,b=a,a=c;}
B:if(a>b) {c=a,a=b,b=c;}
C:if(a>b) c=a;a=b;b=c;
D:if(a>b) {c=a;a=b;b=c;}
答案:C
第9题 (1.0分) ???????题号:6234 ???????难度:中 ???????第4章
有如下程序
#include ?<stdio.h>
main()
{
????int a, b;
????a = 0, b = 1;
????if (a++ && b++)
????????printf(">");
????else
????????printf("<");
????printf("a=%d,b=%d\n", a, b);
}
程序运行后的输出结果是().
A:>a=1,b=2
B:<a=0,b=2
C:<a=1,b=1
D:>a=0,b=1
答案:C
第10题 (1.0分) ???????题号:6815 ???????难度:较难 ???????第4章
有以下程序:
#include ?<stdio.h>
main()
{int ??x=1, y=0, a=0, b=0;
?switch (x)
?{case ??1:
switch(y)
{case ??0: ?a++; ?break;
?case ??1: ?b++; ?break;
}
?case 2: ?a++; ?b++; ?break;
?case 3: ?a++; ?b++;
}
printf("a=%d, b=%d\n", a, b);
}
程序的运行结果是().
A:a=2,b=2
B:a=2,b=1
C:a=1,b=1
D:a=1,b=0
答案:B
第11题 (1.0分) ???????题号:5961 ???????难度:较易 ???????第4章
有以下程序
#include ??<stdio.h>
main( )
{
????if ('\0' == 0) putchar('1');
????if ('0' == 0) ?putchar('2');
????if ('a' > 'b') putchar('3');
}
程序运行后的输出结果是
A:1
B:123
C:23 ?
D:3
答案:A
第12题 (1.0分) ???????题号:6626 ???????难度:较易 ???????第4章
以下程序的功能是判断输入的一个整数是否能被3或7整除,若能整除,输出YES,否则输出NO.在下划线处应填入的选项是
#include <stdio.h>
main()
{ ?int ?k;
???printf("Enter a int number : "); scanf("%d", &k );
???if ?________ ?printf("YES\n");
???else ?????????printf("NO\n");
???printf("%d\n",k%3);
}
A:( (k%3==0) || (k%7==0) )
B:(k/3==0) || (k/7==0)
C:( (k%3=0) || (k%7=0) )
D:( (k%3==0)&& (k%7==0) )
答案:A
第13题 (1.0分) ???????题号:5959 ???????难度:较易 ???????第5章
有如下程序
#include ??<stdio.h>
main( )
{
????int ?i, data;
????scanf("%d", &data);
????for (i=0; i<10; i++)
????{
????????if (i > data) break;
????????printf("%d,", i);
????}
}
程序运行时,从键盘输入:3<回车>后,程序输出结果为
A:3,4,5,
B:1,2,3,
C:2,3,4,
D:0,1,2,3,
答案:D
第14题 (1.0分) ???????题号:6296 ???????难度:较易 ???????第5章
对于循环语句:for(i=0;i<=10;i++) { ; } 下面各选项的叙述中错误的是 ().
A:省略i++,可引起无限循环
B:省略i<=10,可引起无限循环
C:省略i=0,可引起无限循环
D:圆括号( )内三个表达式都省略,可引起无限循环
答案:C
第15题 (1.0分) ???????题号:6107 ???????难度:中 ???????第5章
以下程序段中的变量已正确定义
????for( i=0; i<4; i++,i++ )
????for( k=1; k<3; k++ ); printf("*" );
该程序段的输出结果是
A:*
B:****
C:**
D:********
答案:A
第16题 (1.0分) ???????题号:6654 ???????难度:中 ???????第5章
有如下程序
#include <stdio.h>
main()
{
????char a = '3', b = 'A';
????int i;
????for (i=0; i<6; i++)
????{
????????if (i % 3) putchar(a + i);
????????else putchar(b + i);
????}
????printf("\n");
}
程序运行后的输出结果是
A:A45D78
B:ABC678
C:34CD78
D:34AB78
答案:A
第17题 (1.0分) ???????题号:6150 ???????难度:较难 ???????第5章
以下程序拟实现计算s=1 + 2*2 + 3*3 + … + n*n +…,直到s>1000为止.
#include ??<stdio.h>
main( )
{ ?int ?s,n;
???s=1;
???n=1;
???do
???{ n=n+1; ???s=s+n*n; ?}
???while(s>1000);
???printf("s=%d\n",s);
}
程序运行后,不能得到正确结果,以下修改方案正确的是().
A:把 n=1; 改为 n=0;
B:把 s=1; 改为 s=0;
C:把while(s>1000); ?改为 while(s<=1000);
D:把 n=n+1; 改为 n=n*n;
答案:C
第18题 (1.0分) ???????题号:6798 ???????难度:中 ???????第5章
有以下程序
#include <stdio.h>
main( )
{ ?int a=0, b=0;
???for(; a<5; a++)
???{ ?if (a%2==0) continue;
??????b += a;
??????break;
???}
???printf("%d \n", b);
}
程序运行后的输出结果是
A:1
B:4
C:0
D:10
答案:A
第19题 (1.0分) ???????题号:6274 ???????难度:中 ???????第6章
设有如下程序段
????int a[2] = {0};
????int b[] = {0};
????char c[2] = "ABC";
????char d = "ABC";
则以下叙述正确的是().
A:只有a, b的定义是合法的
B:a,b,c,d的定义都是合法的
C:只有c,d的定义是合法的
D:只有c的定义是合法的
答案:A
第20题 (1.0分) ???????题号:6580 ???????难度:较难 ???????第6章
有以下程序
#include <stdio.h>
#include <string.h>
main()
{ ?char w[20], a[5][10]={"abcdef", "ghijkl", "mnopq", "rstuv", "wxyz."};
???int ?i;
???for (i=0; i<5; i++)
??????w[i]=a[i][ strlen(a[i]) - 1];
???w[5]= '\0';
???puts(w);
}
程序的运行结果是
A:flqv.
B:agmrw
C:ekpuy
D:flqvz
答案:A
第21题 (1.0分) ???????题号:6703 ???????难度:较难 ???????第6章
有如下程序
#include <stdio.h>
main()
{
????int i, array[5] = {3, 5, 10, 4};
????for (i=0; i<5; i++)
????????printf("%d,", array[i] & 3);
????printf("\n");
}
程序运行后的输出结果是
A:3,1,2,0,0,
B:3,5,10,4,0,
C:3,3,3,3,0,
D:3,2,2,2,0,
答案:A
第22题 (1.0分) ???????题号:6634 ???????难度:中 ???????第6章
以下语句的输出结果是
printf("%d\n", strlen("\t\"\065\xff\n"));
A:5
B:8
C:14
D:输出项不合法,无正常输出
答案:A
第23题 (1.0分) ???????题号:6971 ???????难度:较易 ???????第6章
有以下程序
#include <stdio.h>
main()
{ ?
????char s[]={"012xy"};
????int i,n=0;
????for(i=0;s[i]!=0;i++)
????????if(s[i]>='a'&&s[i]<='z')
????????????n++;
????printf("%d\n",n);
}
程序运行后的输出结果是
A:0
B:2
C:3
D:5
答案:B
第24题 (1.0分) ???????题号:5998 ???????难度:较难 ???????第6章
有以下程序
#include <stdio.h>
main( )
{ ?int i,j = 0;
???char a[] = "How are you!", b[10] = {0};
???for (i=0; a[i]; i++)
??????if (a[i] == ' ')
??????????b[j++] = a[i-1];
???printf("%s\n", b);
}
程序运行后的输出结果是
A:we ?
B:Howareyou!
C:ay ?
D:we!
答案:A
第25题 (1.0分) ???????题号:6417 ???????难度:中 ???????第7章
有以下程序
?????#include <stdio.h>
?????int ?fun()
?????{ ?static ?int ?x=1;
????????x*=2;
????????return ?x;
?????}
?????main()
?????{ ?int ?i, s=1;
????????for( i=1; i<=3; i++ ) ???s*=fun( );
????????printf("%d\n", s);
?????}
程序运行后的输出结果是( ).
A:30
B:10
C:0
D:64
答案:D
第26题 (1.0分) ???????题号:6620 ???????难度:较易 ???????第7章
以下选项中叙述正确的是
A:函数体必须由 { 开始
B:C程序必须由main语句开始
C:C程序中的注释可以嵌套
D:C程序中的注释必须在一行完成
答案:A
第27题 (1.0分) ???????题号:6667 ???????难度:较易 ???????第7章
有如下程序
#include <stdio.h>
void get_put()
{
????char ch;
????ch = getchar();
????if (ch != '\n') get_put();
????putchar(ch);
}
main()
{
????get_put(); ?printf("\n");
}
程序运行时,输入1234<回车>,则输出结果是
A:1234
B:4321
C:4444
D:1111
答案:B
第28题 (1.0分) ???????题号:6943 ???????难度:中 ???????第7章
有以下程序
#include <stdio.h>
int f(int x)
{ ?
????int y;
????if (x == 0 || x== 1) ?return (3);
????y = x*x - f(x-2);
????return ?y;
}
main()
{ ?
????int z;
????z = f(3);
????printf("%d\n", z);
}
程序的运行结果是
A:0
B:9
C:6
D:8
答案:C
第29题 (1.0分) ???????题号:6190 ???????难度:中 ???????第7章
有以下程序
????#include <stdio.h>
????int fun(int x)
????{ ??int y;
????????if(x==0 || x== 1) return 4;
????????y=x-fun(x-2);
????????return y;
????}
????main()
????{ ??printf("%d\n", fun(9));
????}
程序运行后的输出结果是().
A:5
B:4
C:9
D:8
答案:D
第30题 (1.0分) ???????题号:5976 ???????难度:易 ???????第7章
以下关于编译预处理的叙述中错误的是
A:预处理命令行必须位于源程序的开始
B:源程序中凡是以#开始的控制行都是预处理命令行
C:一行上只能有一条有效的预处理命令
D:预处理命令是在程序正式编译之前被处理的
答案:A
第31题 (1.0分) ???????题号:6825 ???????难度:较易 ???????第8章
设有定义:char ?p[]={'1', '2', '3'},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是().
A:sizeof(p)
B:sizeof(char)
C:sizeof(*q)
D:sizeof(p[0])
答案:A
第32题 (1.0分) ???????题号:6883 ???????难度:中 ???????第8章
下列语句组中,正确的是().
A:char *s;s="Olympic";
B:char s[7];s="Olympic";
C:char *s;s={"Olympic"};
D:char s[7];s={"Olympic"};
答案:A
第33题 (1.0分) ???????题号:6313 ???????难度:中 ???????第8章
有以下程序
????#include <stdio.h>
????void main()
????{ ??char ch[7] = {"43ab21"};
????????int i, s = 0;
????????for (i = 0; ch[i] >='0' && ch[i] <= '9'; i += 2)
????????????s = 10 * s + ch[i] - '0';
????????printf("%d\n", s);
????}
程序运行后的输出结果是().
A:48
B:12ba34
C:4321
D:4
答案:D
第34题 (1.0分) ???????题号:6535 ???????难度:难 ???????第8章
有以下程序
????#include ?<stdio.h>
????int *f(int *s)
????{ ?s+=2;
???????s[1] +=6;
???????*s=7;
???????return s;
????}
???main( )
????{ ?int ?a[5]={1,2,3,4,5}, *p=a; ??????p= f(p); ?
???????printf("%d,%d,%d,%d", a[0], a[1], *p,p[1]);
????}程序执行后的输出结果是().
A:1,2,7,10
B:7,8,7,8
C:1,2,1,2
D:7,10,7,10
答案:A
第35题 (1.0分) ???????题号:7091 ???????难度:较难 ???????第8章
有以下程序
?????#include <stdio.h>
?????int ?b=2;
?????int fun(int *k )
?????{ ?b=*k+b; return (b); }
?????main()
?????{ ?int a[10]={1,2,3,4,5,6,7,8}, i;
????????for(i=2;i<4;i++) {b=fun(&a[i])+b; printf("%d ",b);}
????????printf("\n");
?????}
程序运行后的输出结果是
A:8 ?10
B:10 ?28
C:10 ?12
D:10 ?16
答案:B
第36题 (1.0分) ???????题号:7292 ???????难度:较难 ???????第8章
有以下程序
?????#include <stdio.h>
?????main()
?????{ ?int ?a[ ]={ 2,4,6,8,10 }, x, *p, y=1;
????????p = &a[1];
????????for( x=0; x<3; x++ ) ?y += *(p+x);
????????printf( "%d\n",y );
?????}
程序的输出结果是
A:13
B:19
C:11
D:15
答案:B
第37题 (1.0分) ???????题号:7034 ???????难度:中 ???????第9章
有以下程序
#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:1002, ZhangDa,1202.0
B:1002,ChangRong,1202.0
C:1001, ChangRong,1098.0
D:1001,ZhangDa,1098.0
答案:D
第38题 (1.0分) ???????题号:6453 ???????难度:中 ???????第9章
程序中若有以下的说明定义和语句
????#include ??<stdio.h>
????#include ??<string.h>
????struct ?STR
????{ ?char ?num[10]; ?int ?s; };
????main()
????{ ?struct ?STR ?t, *p;
???????p=&t;
???????┇
????}
则不能给变量t的s成员赋整数99,给num成员赋空串的语句组是( ).
A:(*p).s=99; (*p).num="";
B:p->s=99; ?p->num[0]=0;
C:(*p).s=99; p->num[0]= '\0';
D:p->s=99; ?strcpy((*p).num,
答案:A
第39题 (1.0分) ???????题号:6225 ???????难度:难 ???????第9章
有下列程序
#include <stdio.h>
#include <string.h>
typedef struct stu {
????char name[9];
????char gender;
????int score;
struct stu *next;
} STU;
void f(STU a)
{ ??STU c = {"Sun", 'f', 90}, d = {"Li", 'm', 100};
????strcpy(a.name, c.name);
a.gender = c.gender;
????a.score = c.score;
????*a.next = d;
}
main( )
{ ?STU a = {"Zhao", 'm', 85}, b = {"Qian", 'f', 95};
???a.next = &b;
???f(a);
???????printf("%s,%c,%d,%s,%c,%d", a.name, a.gender, a.score, a.next->name, a.next->gender, a.next->score);
}
程序执行后的输出结果是().
A:Sun,f,90,Qian,f,95
B:Zhao,m,85,Qian,f,95
C:Sun,f,90,Li,m,100
D:Zhao,m,85,Li,m,100
答案:D
第40题 (1.0分) ???????题号:6426 ???????难度:中 ???????第10章
以下关于C语言文件的叙述中正确的是( ).
A:文件由数据序列组成,其类型可以为二进制文件或文本文件
B:文件由记录序列组成,其类型可以为二进制文件或文本文件
C:文件由字符序列组成,其类型可以为二进制文件或文本文件
D:文件由数据序列组成,其类型只能是二进制文件
答案:A
二、程序填空 ??共1题 (共计18分)
第1题 (18.0分) ???????题号:199 ???????难度:易 ???????第7章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:删除字符串中的指定字符,字符串和要删除的字符均由键盘
??????输入。
-------------------------------------------------------*/
#include <stdio.h>
main()
{
??char str[80],ch;
??int i,k=0;
??/***********SPACE***********/
??gets(【?】);
??ch=getchar();
??/***********SPACE***********/
??for(i=0;【?】;i++)
????if(str[i]!=ch)
????{
???????/***********SPACE***********/
???????【?】;
????????k++;
????}
??/***********SPACE***********/
??【?】;
??puts(str);
?}
答案:
=======(答案1)=======
str
=======(答案2)=======
str[i]!='\0'
=========或=========
str[i]!=NULL
=========或=========
str[i]!=0
=========或=========
str[i]
=========或=========
str[i] != '\0'
=========或=========
str[i] != NULL
=========或=========
str[i] != 0
=======(答案3)=======
str[k]=str[i]
=========或=========
*(str+k)=*(str+i)
=========或=========
str[k]=*(str+i)
=========或=========
*(str+k)=str[i]
=======(答案4)=======
str[k]='\0'
=========或=========
*(str+k)='\0'
=========或=========
str[k]=NULL
=========或=========
str[k]=0
=========或=========
*(str+k)=0
=========或=========
*(str+k)=NULL
三、程序改错 ??共1题 (共计18分)
第1题 (18.0分) ???????题号:146 ???????难度:中 ???????第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列给定程序中函数fun的功能是:把从主函数中输入的3个数,最大的数放
??????在a中,中间的数放在b中,最小的数放在c中。
例如:若输入的数为:55 12 34,输出的结果应当是:a=55.0,b=34.0,c=12.0。
-------------------------------------------------------*/
#include <stdio.h>
void ?fun(float *a,float *b,float *c)
{
/***********FOUND***********/
????????float ??*k;
????????if( *a<*b )
????????{ ??
????????????????k=*a;
????????????????*a=*b;
????????????????*b=k;
????????}
/***********FOUND***********/
????????if( *a>*c )
????????{ ?
????????????????k=*c;
????????????????*c=*a;
????????????????*a=k;
????????}
????????if( *b<*c )
????????{ ??
????????????????k=*b;
????????????????*b=*c;
????????????????*c=k;
????????}
}
main()
{ ?
????????float ??a,b,c;
????????printf("Input ?a ?b ?c: ?");
????????scanf("%f%f%f",&a,&b,&c);
????????printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
????????fun(&a,&b,&c);
????????printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
}
答案:
=======(答案1)=======
float k;
=======(答案2)=======
if(*a< *c)
=========或=========
if(*c>*a)
四、程序设计 ??共1题 (共计24分)
第1题 (24.0分) ???????题号:118 ???????难度:中 ???????第8章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:函数fun的功能是:将a、b的两个两位正整数合并成一个新的整数放在c中。
??????合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中
??????的十位和个位数依次放在变量c的千位和十位上。
例如:当a=45,b=12,调用该函数后c=1425。
注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
??????你编写的若干语句。
-------------------------------------------------------*/
#include <stdio.h>
void fun(int a, int b, long *c)
{
/**********Program**********/
????????
/********** ?End ?**********/
}
void main() ??/* 主函数 */
{ ?
????????int a,b; long c;
????????printf("Input a, b:");
????????scanf("%d%d", &a, &b);
????????fun(a, b, &c);
????????printf("The result is: %ld\n", c);
}
答案: ???????*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;