一、单选 共40题 (共计40分)
第1题 (1.0分) 题号:6168 难度:易 第1章
以下叙述中错误的是().
A:.OBJ文件和.EXE文件都是可直接执行的二进制文件
B:用户按规定语法编写的C程序不是二进制文件
C:C源程序经编译无误后将生成一个 .OBJ的二进制文件
D:.OBJ文件经"连接程序"生成的.EXE文件是二进制文件
答案:A
第2题 (1.0分) 题号:6587 难度:中 第2章
有以下程序
#include
main()
{ int c,d;
c= 13&5; d=10&&5;
printf("%d,%d\n", c, d);
}
程序的运行结果是
A:5,1
B:1,1
C:18,1
D:13,1
答案:A
第3题 (1.0分) 题号:7045 难度:较易 第2章
以下选项中,当x为大于1的奇数时,值为0的表达式是
A:x/2
B:x%2==0
C:x%2!=0
D:x%2==1
答案:B
第4题 (1.0分) 题号:6013 难度:易 第2章
以下选项中,合法的实数是
A:1.5E2
B:E1.1
C:2.10E
D:1.9E1.4
答案:A
第5题 (1.0分) 题号:6614 难度:中 第2章
有以下程序
#include
main()
{ char c='A';
int x=36, b;
b= (x>>2) && ( c<'a' );
printf("%d\n", b );
}
程序运行后的输出结果是
A:1
B:0
C:2
D:4
答案:A
第6题 (1.0分) 题号:6495 难度:易 第3章
若有程序段
char c;
double d;
scanf("%lf%c", &d, &c);
如果想把2.3输入给变量d,字符'f'输入给变量c,程序运行时正确的输入是().
A:2.3 f
B:2.3f
C:2.3'f'
D:2.3 'f'
答案:B
第7题 (1.0分) 题号:6741 难度:较易 第3章
以下不能输出小写字母a的选项是
A:printf("%c\n","a");
B:printf("%c\n",'A'+32);
C:putchar(97);
D:putchar('a');
答案:A
第8题 (1.0分) 题号:7313 难度:易 第3章
若有定义和语句:
int a, b;
scanf("%d,%d,",&a,&b);
以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是
A:3,5,4
B:3,5
C:3,5,
D:3 ,5
答案:D
第9题 (1.0分) 题号:6929 难度:易 第4章
if语句的基本形式是:if (表达式) 语句,以下关于"表达式"值的叙述中正确的是
A:必须是逻辑值
B:必须是整数值
C:必须是正数
D:可以是任意合法的数值
答案:D
第10题 (1.0分) 题号:6385 难度:中 第4章
有以下程序:
#include
main()
{ char a,b,c,d;
scanf("%c%c",&a, &b);
c=getchar(); d=getchar();
printf("%c%c%c%c\n",a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第1列开始,
12
34
则输出结果是().
A:12
34
B:12
C:1234
D:12
3
答案:D
第11题 (1.0分) 题号:6404 难度:中 第4章
有以下程序
#include
main()
{ int x=1, y=0;
if (!x) y++;
else if (x==0)
if (x) y+=2;
else y+=3;
printf("%d\n", y);
}
程序运行后的输出结果是( ).
A:1
B:2
C:0
D:3
答案:C
第12题 (1.0分) 题号:5928 难度:较易 第4章
有以下程序
#include
main( )
{
int x = 0x13;
if (x = 0x12) printf("True");
printf("False\n");
}
程序运行后的输出结果是
A:True
B:TrueFalse
C:False
D:TrueFalseTrue
答案:B
第13题 (1.0分) 题号:6506 难度:难 第5章
有以下程序
#include
main()
{
char i,j,n;
for(i='1';i<='9';i++)
{
if(i<'3') continue;
for(j='0';j<='9';j++)
{
if(j<'2'||j >='4') continue;
n=(i-'0')*10+j-'0';
printf("%d ",n);
}
if(i=='4') break;
}
printf("\n");
}
程序运行后的输出结果是().
A:32 33 42 43
B:30 31 40 41
C:34 35 44 45
D:35 36 45 46
答案:A
第14题 (1.0分) 题号:6653 难度:中 第5章
有如下程序
#include
main()
{
int i, data;
scanf("%d", &data);
for (i=0; i<5; i++)
{
if (i > data) break;
printf("%d,", i);
}
printf("\n");
}
程序运行时,从键盘输入:3<回车>后,程序输出结果为
A:3,4,
B:0,1,
C:3,4,5,
D:0,1,2,3
答案:D
第15题 (1.0分) 题号:6817 难度:中 第5章
有以下程序段:
#include
int i, n;
for( i=0; i<8; i++ )
{n = rand() % 5;
switch (n)
{case 1:
case 3: printf("%d \n", n); break;
case 2:
case 4: printf("%d \n", n); continue;
case 0: exit(0);
}
printf("%d \n",n);
}
以下关于程序段执行情况的叙述,正确的是().
A:for循环语句固定执行8次
B:当产生的随机数n为4时结束循环操作
C:当产生的随机数n为1和2时不做任何操作
D:当产生的随机数n为0时结束程序运行
答案:D
第16题 (1.0分) 题号:6594 难度:中 第5章
若变量已正确定义,则以下for循环
for ( x=0,y=0; ( y!=123 ) && ( x<4 ); x++ );
A:执行4次
B:执行3次
C:执行次数不确定
D:执行123次
答案:A
第17题 (1.0分) 题号:5989 难度:中 第5章
以下程序段中,与其他三个功能不同的程序段是
A:s=0;i=1;
for( ; ; ) {s+=i; i++; if(i<=10) break;}
B:s=0,i=1;
for( ; i<=10; ) {s+=i,i++;}
C:s=0;
for(i=1; i<=10; i++) {s+=i;}
D:for(s=0,i=1; i<=10; s+=i,i++) ;
答案:A
第18题 (1.0分) 题号:6268 难度:中 第5章
有下列程序
#include
main( )
{ int a=-1, b=2;
for(; a++ && b--;)
printf("%d,%d,", a,b);
printf("%d,%d", a,b);
}
程序执行后的输出结果是().
A:0,1,1,0,1,0
B:0,1,1,0
C:0,1,1,1
D:0,1,1,1,1,1
答案:C
第19题 (1.0分) 题号:6241 难度:中 第6章
以下叙述中正确的是().
A:char c1, c2, *c3[4]; 是合法的定义语句
B:数组说明符的一对方括号中只能使用常量,不能使用常量表达式
C:数组下标可以使用实数
D:若有数组定义 float array[1]; 则语句 printf("%f", array[0.1]);是合法的
答案:A
第20题 (1.0分) 题号:6189 难度:较易 第6章
若有定义: char c="hello!";,则以下说法正确的是().
A:c占用7字节内存
B:c是一个字符串变量
C:定义中有语法错误
D:c的有效字符个数是6
答案:C
第21题 (1.0分) 题号:6362 难度:易 第6章
有以下程序
#include
#include
main()
{ char ss[10]="12345";
strcat( ss, "6789" );
gets( ss );
printf("%s\n", ss );
}
执行时输入:ABC<回车>,则输出结果是
A:123456ABC
B:ABC9
C:ABC
D:ABC456789
答案:C
第22题 (1.0分) 题号:6964 难度:较易 第6章
下列选项中,能正确定义数组的语句是
A:int num[0...2008];
B:int num[];
C:int N=2008;
int num[N];
D:#define N 2008
int num[N];
答案:D
第23题 (1.0分) 题号:7152 难度:中 第6章
若有以下程序
#include
main()
{ char w[20]="dogs",
a[5][10]={"abcdef", "ghijkl", "mnopq", "rstuv", "wxyz ."};
int i, j, k;
for (i=0; w[i]; i++)
{ for (j=0; j<5; j++)
{ for (k=0; a[j][k]; k++)
if (w[i]==a[j][k]) break;
if (w[i]==a[j][k]) break;
}
printf("%d,%d,", j,k);
}
}
则程序的输出结果是
A:0,3,2,2,1,0,3,1,
B:1,4,3,3,2,1,4,2,
C:5,6,5,6,5,6,5,6,
D:6,7,6,7,6,7,6,7,
答案:A
第24题 (1.0分) 题号:7357 难度:难 第6章
有以下程序
#include
#include
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])/2];
w[5]= '\0';
puts(w);
}
程序的运行结果是
A:djoty
B:agmrw
C:flqv
D:cimsx
答案:A
第25题 (1.0分) 题号:6755 难度:中 第7章
有以下程序
#include
#define FNA(x) x*x
#define FNB(x) x+x
main()
{ int a=2,b=4;
printf("%d,%d\n",FNA(FNB(a)),FNB(FNA(b)));
}
程序运行后的输出结果是
A:8,16
B:16,32
C:8,32
D:16,16
答案:C
第26题 (1.0分) 题号:7121 难度:中 第7章
若有以下程序
#include
void f(int x)
{ if (x >= 10)
{ printf("%d-", x%10); f(x/10); }
else
printf("%d", x);
}
main()
{ int z = 123456;
f(z);
}
则程序的输出结果是
A:6-5-4-3-2-1-
B:6-5-4-3-2-1
C:1-2-3-4-5-6
D:1-2-3-4-5-6-
答案:B
第27题 (1.0分) 题号:7095 难度:中 第7章
若程序中有宏定义行:
#define N 100
则以下叙述中正确的是
A:宏定义行中定义了标识符N的值为整数100
B:在编译程序对C源程序进行预处理时用100替换标识符N
C:上述宏定义行实现将100赋给标示符N
D:在运行时用100替换标识符N
答案:B
第28题 (1.0分) 题号:6109 难度:中 第7章
有以下程序
#include
int f(int x);
main()
{
int n=1,m;
m=f(f(f(n)));
printf("%d\n",m);
}
int f(int x)
{ return x*2; }
程序运行后的输出结果是
A:4
B:2
C:8
D:1
答案:C
第29题 (1.0分) 题号:6252 难度:中 第7章
有如下程序
#include
void get_put()
{
char ch;
ch = getchar();
putchar(ch);
if (ch != '\n') get_put();
putchar('.');
}
main()
{
get_put();
}
程序运行时,输入1234<回车>,则输出结果是().
A:1234
.....
B:4321.....
C:4444
.....
D:1234.....
答案:A
第30题 (1.0分) 题号:6333 难度:中 第7章
以下关于函数参数的叙述中,错误的是().
A:实参应与其对应的形参类型一致
B:形参可以是常量、变量或表达式
C:实参可以是常量、变量或表达式
D:形参可以是任意合法数据类型
答案:B
第31题 (1.0分) 题号:6028 难度:较易 第8章
若有定义:
char *ps[ ] = {"aa", "bb", "cc", "dd"};,
则以下叙述正确的是
A:*ps[0]是字符'a'
B:*ps[0]是字符串"aa"
C:ps[0]是字符'a'
D:ps是字符串"aa"
答案:A
第32题 (1.0分) 题号:6727 难度:较难 第8章
有以下程序
#include
#include
#include
main()
{ char *p1,*p2;
p1=p2=(char *)malloc(sizeof(char)*10);
strcpy(p1,"malloc");
strcpy(p2,p1+1);
printf("%c%c\n",p1[0],p2[0]);
}
程序的运行结果是
A:aa
B:ma
C:am
D:mm
答案:A
第33题 (1.0分) 题号:7202 难度:难 第8章
有以下程序
#include
main()
{ int a[5]={2,4,6,8,10}, *p,**k;
p = a; k = &p;
printf("%d ", *( p++ ) );
printf("%d\n", **k );
}
程序运行后的输出结果是
A:4 6
B:4 4
C:2 2
D:2 4
答案:D
第34题 (1.0分) 题号:6963 难度:较难 第8章
有以下程序
#include
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
答案:A
第35题 (1.0分) 题号:6515 难度:难 第8章
有下列程序
#include
#include
main( )
{ char v[4][10]={"efg","abcd","mnopq","hijkl"},*p[4],*t;
int i,j;
for (i=0; i<4; i++)
p[i] = v[i];
for (i=0; i<3; i++)
for (j=i+1; j<4; j++)
if (strcmp(p[i], p[j]) > 0)
{ t = p[i]; p[i] = p[j]; p[j] = t; }
for (i=0; i<4; i++)
printf("%s " , p[i]);
}
程序执行后的输出结果是().
A:efg abcd hijkl mnopq
B:abcd efg hijkl mnopq
C:mnopq hijkl efg abcd
D:efg abcd mnopq hijkl
答案:B
第36题 (1.0分) 题号:5999 难度:中 第8章
以下涉及字符串数组、字符指针的程序段,没有编译错误的是
A:char* str, name[5];
str = "C/C++";
B:char* str, name[6];
name = "Hello";
C:char str1[7] = "prog.c", str2[8];
str2 = str1;
D:char line[];
line = "//";
答案:A
第37题 (1.0分) 题号:6008 难度:易 第9章
有如下定义:
struct
{ int num;
char name[10];
struct
{ int y; int m; int d;} birth;
} s,*ps=&s;
以下对内嵌结构体成员的引用形式错误的是
A:ps.birth.y
B:s.birth.y
C:ps->birth.y
D:(*ps).birth.y
答案:A
第38题 (1.0分) 题号:6702 难度:中 第9章
有如下程序
#include
#include
struct S
{
char name[10];
};
main()
{
struct S s1, s2;
strcpy(s1.name, "12345");
strcpy(s2.name, "ABC");
s1 = s2;
printf("%s\n", s1.name);
}
程序运行后的输出结果是
A:ABC12
B:ABC45
C:12345
D:ABC
答案:D
第39题 (1.0分) 题号:5946 难度:较易 第9章
有如下定义
struct st
{ char name[12]; int age; char sex; } std[10],*p=std;
以下语句错误的是
A:scanf("%d",p->age);
B:scanf("%s",std[0].name);
C:scanf("%d",&std[1].age)
D:scanf("%c",&(p->sex));
答案:A
第40题 (1.0分) 题号:6159 难度:中 第10章
以下叙述中正确的是().
A:文件指针是一种特殊的指针类型变量
B:文件指针的值等于文件当前读写位置,以字节为单位
C:文件指针的值等于文件在计算机硬盘中的存储位置
D:调用fscanf函数只能向文本文件中写入任意字符
答案:A
二、程序填空 共1题 (共计18分)
第1题 (18.0分) 题号:303 难度:中 第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:程序通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。函数
fun的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。
-------------------------------------------------------*/
#include
#include
struct student
{
long sno;
char name[10];
float score[3];
};
void fun(struct student a[], int n)
{
/***********SPACE***********/
【?】 t;
int i, j;
/***********SPACE***********/
for (i=0; i<【?】; i++)
for (j=i+1; j /***********SPACE***********/ if (strcmp(【?】) > 0) { t = a[i]; a[i] = a[j]; a[j] = t; } } main() { struct student s[4]={{10001,"ZhangSan", 95, 80, 88},{10002,"LiSi", 85, 70, 78}, {10003,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87}}; int i, j; printf("\n\nThe original data :\n\n"); for (j=0; j<4; j++) { printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name); for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); printf("\n"); } fun(s, 4); printf("\n\nThe data after sorting :\n\n"); for (j=0; j<4; j++) { printf("\nNo: %ld Name: %-8s Scores: ",s[j].sno, s[j].name); for (i=0; i<3; i++) printf("%6.2f ", s[j].score[i]); printf("\n"); } } 答案: =======(答案1)======= struct student =======(答案2)======= n - 1 =======(答案3)======= a[i].name,a[j].name 三、程序改错 共1题 (共计18分) 第1题 (18.0分) 题号:151 难度:中 第1章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目:下列给定程序中函数fun的功能是:将一个由八进制数字字符组成的字符串转 换成十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。 例如:若输入77777,则输出32767。 -------------------------------------------------------*/ #include #include #include int fun( char *p ) { int n; /***********FOUND***********/ n= *p-'o'; p++; while( *p!=0 ) { /***********FOUND***********/ n=n*8+*p-'o'; p++; } return n; } main() { char s[6]; int i; int n; printf("Enter a string (Ocatal digits): "); gets(s); if(strlen(s)>5) { printf("Error: String too longer !\n\n"); exit(0); } for(i=0; s[i]; i++) if(s[i]<'0'||s[i]>'7') { printf("Error: %c not is ocatal digits!\n\n",s[i]); exit(0); } printf("The original string: "); puts(s); n=fun(s); printf("\n%s is convered to integer number: %d\n\n",s,n); } 答案: =======(答案1)======= n= *p-'0'; =======(答案2)======= n=n*8+*p-'0'; 四、程序设计 共1题 (共计24分) 第1题 (24.0分) 题号:95 难度:中 第8章 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 题目:编写函数fun,其功能是:计算n门课程的平均分,结果作为函数值返回。 例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为:71.80。 注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中的填入 你编写的若干语句。 -------------------------------------------------------*/ #include float fun ( float *a , int n ) { /**********Program**********/ /********** End **********/ } main() { float score[30]={90.5, 72, 80, 61.5, 55}, aver; aver = fun( score, 5 ); printf( "\nAverage score is: %5.2f\n", aver); } 答案: int i; float av=0.0; for(i=0; i av=av+a[i]; return(av/n);