一、单选 ??共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 <stdio.h>
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 <stdio.h>
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 ?<stdio.h>
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列开始,<CR>代表回车,注意:回车也是一个字符)
12<CR>
34<CR>
则输出结果是().
A:12
34
B:12
C:1234
D:12
3
答案:D
第11题 (1.0分) ???????题号:6404 ???????难度:中 ???????第4章
有以下程序
????#include <stdio.h>
????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 ??<stdio.h>
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 <stdio.h >
????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 <stdio.h>
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 ?<stdio.h>
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 ?<stdio.h>
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 ?<stdio.h>
#include ?<string.h>
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 <stdio.h>
?????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 ?<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])/2];
???w[5]= '\0';
???puts(w);
}
程序的运行结果是
A:djoty
B:agmrw
C:flqv
D:cimsx
答案:A
第25题 (1.0分) ???????题号:6755 ???????难度:中 ???????第7章
有以下程序
????#include <stdio.h>
????#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 <stdio.h>
?????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 <stdio.h>
????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 <stdio.h>
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 <stdio.h>
??????#include <string.h>
??????#include <stdlib.h>
??????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 <stdio.h>
?????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 <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
答案:A
第35题 (1.0分) ???????题号:6515 ???????难度:难 ???????第8章
有下列程序
#include <stdio.h >
#include <string.h >
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 <stdio.h>
#include <string.h>
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 ?<stdio.h>
#include ?<string.h>
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<n; 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 <stdio.h>
#include<string.h>
#include<stdlib.h>
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 <stdio.h>
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<n;i++)
av=av+a[i];
return(av/n);