2011 年云南昆明理工大学 C 程序设计考研真题 A 卷
一、填空题(共 30 小题,每空 1 分)
1.C 语言中的实型变量分为两种类型,它们是 【1】 和【2】。
2.C 语言中的标识符只能由三种字符组成,它们是【3】、【4】和【5】。
3.若有定义:char c=‘\010’;则变量 c 中包含的字符个数是【6】。
4.C 语言提供的三种逻辑运算符是【7】、【8】、【9】。
5.设 y 为 int 型变量,请写出描述“y 是奇数”的表达式【10】。
6.设 x,y,z 均为 int 型变量,请写出描述“x 或 y 中有一个小于 z”的表达式【11】。
7.在 C 语言中,二维数组元素在内存中的存放顺序是【12】。
8.若有定义:double x[3][5];则 x 数组中行下标的下限为【13】,列小标的
上限为【14】。
9.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1]
[2]得到的初值是【15】,a[2][2]得到的初值是【16】。
10.若自定义函数要求返回一个值,则应在该函数体中有一条【17】语句,若自定义
函数要求不返回一个值,则应在该函数说明时加一个类型说明符【18】。
11.函数中的形参和调用时的实参都是数组名时,传递方式为【19】,都是变量时,
传递方式为【20】。
12.在内存中存储“A”要占用【21】个字节,存储‘A’要占用【22】字节。
13.符号常量的定义方法是【23】。
14.结构化程序设计方法规定程序或程序段的结构有三种:顺序结构、【24】和【25】。
15 用{}把一些语句括起来称为【26】语句
16.“*”称为【27】运算符,“&”称为【28】运算符。
17.赋值表达式和赋值语句的区别在于有无【29】号。
18.C 语言编绎系统在判断一个量是否为“真”时,以 0 代表“假”,以【30】代表“真”
二、单选题(共 50 分,每题一分)
(1)以下叙述中错误的是
A)用户所定义的标识符允许使用关键字
B)用户所定义的标识符应尽量做到“见名知意”
C)用户所定义的标识符必须以字母或下划线开头
D)用户定义的标识符中,大、小写字母代表不同标识
(2)以下叙述中错误的是
A)C 语句必须以分号结束
C)空语句出现在任何位置都不会影响程序运行
D)赋值表达式末尾加分号就构成赋值语句
B)复合语句在语法上被看作一条语句
(3)以下叙述中正确的是
A)调用 printf 函数时,必须要有输出项
B)使用 putchar 函数时,必须在之前包含头文件 stdio.h
C)在 C 语言中,整数可以以十二进制、八进制或十六进制的形式输出
D)调用 getchar 函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码
(4)以下关于函数的叙述中正确的是
A)每个函数都可以被其它函数调用(包括 main 函数)
B)每个函数都可以被单独编译 C)每个函数都可以单独运行
D)在一个函数内部可以定义另一个函数
(5)若有语句:char *line[5];,以下叙述中正确的是
A)定义 line 是一个数组,每个数组元素是一个基类型为 char 的指针变量
B)定义 line 是一个指针变量,该变量可以指向一个长度为 5 的字符型数组
C)定义 line 是一个指针数组,语句中的*号称为间址运算符
D)定义 line 是一个指向字符型函数的指针
(6)有以下程序段
typedef struct NODE { int num; struct NODE *next; } OLD;
以下叙述中正确的是
A)以上的说明形式非法
C)OLD 是一个结构体类型
(7)以下叙述中错误的是
B)NODE 是一个结构体类型
D)OLD 是一个结构体变量
A)C 语言中对二进制文件的访问速度比文本文件快
B)C 语言中,随机文件以二进制代码形式存储数据
C)语句 FILE fp; 定义了一个名为 fp 的文件指针
D)C 语言中的文本文件以 ASCII 码形式存储数据
(8)当把以下四个表达式用作 if 语句的控制表达式时,有一个选项与其它三个选项含义
不同,这个选项是
A)k%2
B)k%2==1
C)(k%2)!=0
D)!k%2==1
(9)以下不能正确计算代数式 值的 C 语言表达式是
A)1/3*sin(1/2)*sin(1/2)
C)pow(sin(0.5),2)/3
B)sin(0.5)*sin(0.5)/3
D)1/3.0*pow(sin(1.0/2),2)
(10)以下能正确定义且赋初值的语句是
A)int n1=n2=10;
C)float f=f+1.1;
B)char c=32;
D)double x=12.3E2.5;
(11)算法具有五个特性,以下选项中不属于算法特性的是______。
A)有穷性
(12)以下选项中可作为 C 语言合法常量的是______。
B)简洁性
C)可行性
D)确定性
A)-80.
B) -080
C)-8e1.0
D)-80.0e
(13)以下叙述中正确的是______。
A)用 C 程序实现的算法必须要有输入和输出操作
B)用 C 程序实现的算法可以没有输出但必须要输入
C)用 C 程序实现的算法可以没有输入但必须要有输出
D)用 C 程序实现的算法可以既没有输入也没有输出
(14)以下不能定义为用户标识符的是______。
A)Main
B)_0
C)_int
D)sizeof
(15)以下选项中不能作为合法常量的是______。
A)1.234e04 B)1.234e0.4
C)1.234e+4
D)1.234e0
(16) 下列叙述中正确的是______。
A) C 语言编译时不检查语法
C) C 语言的函数可以嵌套定义
B) C 语言的子程序有过程和函数两种
D) C 语言所有函数都是外部函数
(17) 以下所列的 C 语言常量中,错误的是______。
A) 0xFF
B) 1.2e0.5
C) 2L
D) '\72'
(18) 下列选项中,合法的 C 语言关键字是______。
A) VAR
B) cher
C) integer
D) default
(19) 以下变量 x.、y、z 均为 double 类型且已正确赋值,不能正确表示数学式子
x
*
zy
的
C 语言表达式是______。
A) x/y*z
B) x*(1/(y*z))
C) x/y*1/z
D) x/y/z
(20) 若 a 为 int 类型,且其值为 3,则执行完表达式 a+=a-=a*a 后,a 的值是______。
A) -3
B) 9
C) -12
D) 6
(21) 设 x、y、t 均为 int 型变量,则执行语句:x=y=3;t=++x||++y;后,y 的值为______。
A) 不定值 B) 4
C) 3
D) 1
(22) 若变量已正确说明为 float 类型,要通过语句给 a 赋于 10.0,b 赋予 22.0,c 赋予
33.0,不正确的输入形式是______。
A) 10<回车>
22<回车>
33<回车>
B) 10.0,22.0,33.0<回车>
C) 10.0<回车>
22.0 33.0<回车>
D) 10 22<回车>
33<回车>
(23) 若执行以下程序时从键盘上输入 9,则输出结果是______。
A) 11
B) 10
C) 9
D) 8
main()
{ int n;
if(n++<10) printf("%d\n",n);
scanf("%d",&n);
else printf("%d\n",n--); }
(24)要求以下程序的功能是计算:s=
1+1/2+1/3+…+1/10
main()
float
{
int
for(n=10;n>1;n--)
n;
s;s=1.0;
s=s+1/n;
printf("%6.4f\n",s);
}
程序运行后输出结果错误,导致错误结果的程序行是______。
A)s=1.0;
B)for(n=10;n>1;n--)
C)s=s+1/n;
D)printf("%6.4f\n",
s);
(25) 有以下程序段
int k=0
while(k=1)k++;
while 循环执行的次数是______。
A) 无限次
B) 有语法错,不能执行 C) 一次也不执行 D) 执行 1 次
(26) 以下程序执行后 sum 的值是______。
C) 不确定
D)0
B)14
A)15
min()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf("%d\n",sum);
}
(27) 有以下程序段
int x=3
do{ printf("%d",x-=2); }while (!(--x));
其输出结果是______。
A) 1
B) 3 0
C) 1 -2
D) 死循环
(28) 若变量 c 为 char 类型,能正确判断出 c 为小写字母的表达式是______。
A) 'a'<=c<= 'z'
B) (c>= 'a')||(c<= 'z')
C) ('a'<=c)and ('z'>=c)
D) (c>=
'a')&&(c<= 'z')
(29) 以下所列的各函数首部中,正确的是______。
A) void play(var :Integer,var b:Integer)
C) void play(int a,int b)
B) void play(int a,b)
D) Sub play(a as integer,b as
C) 31
D) 无定值
integer)
(30) 以下程序的输出结果是______。
B) 29
A) 0
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
fun(5,2,a);
printf("%d",a);
}
(31) 下列程序段的输出结果是______。
C) 1 2 3 4
B) 1 2 1 2
A) 2 1 4 3
void fun(int *x, int *y)
{ printf("%d %d", *x, *y); *x=3; *y=4;}
main()
{ int x=1,y=2;
fun(&y,&x);
printf("%d %d",x, y);
}
(32) 下列程序的输出结果是______。
C)5
B)a[4]的地址
A) 非法
main()
{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
D) 2 1 1 2
D)3
(33) 下列程序的运行结果是______。
A) 6 3
B) 3 6
C) 编译出错
D) 0 0
void fun(int *a, int *b)
{ int *k;
k=a; a=b; b=k;
}
main()
{ int a=3, b=6, *x=&a, *y=&b;
fun(x,y);
printf("%d %d", a, b);
}
(34)) 下面程序的输出结果是______。
B) 1
C) 10
A) 0
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;
p=a;
printf("%d\n",*p+9);
}
D) 9
(35) 当调用函数时,实参是一个数组名,则向函数传送的是______。
A) 数组的长度
C) 数组每一个元素的地址
B) 数组的首地址
D) 数组每个元素中的值
(36) 设有以下说明语句
struct ex
{ int x ; float y; char z ;} example;
则下面的叙述中不正确的是______。
A) struct 结构体类型的关键字 B) example 是结构体类型名
C) x,y,z 都是结构体成员名
D) struct ex 是结构体类型
(37) 以下只有在使用时才为该类型变量分配内存的存储类说明是______。
A) auto 和 static
C) register 和 static
B) auto 和 register
D) extern 和 register
(38) 若 fp 是指向某文件的指针,且已读到文件末尾,则库函数 feof(fp)的返回值是
______。
A) EOF
B) -1
C) 非零值
D) NULL
(39) 以下程序的输出结果是______。
A) 20
B) 21
C) 22
D)23
main()
{ int i, k, a[10], p[3]; k=5;
for (i=0;i<10;i++) a[i ]=i;
for (i=0;i<3;i++) p[i ]=a[i *(i+1)];
for (i=0;i<3;i++) k+=p[i] *2; printf("%d\n",k);
}
(40) 以下程序的输出结果是______。
B) 1,4,7
A) 1,5,9
main()
{ int i, x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++) printf("%d,",x[i][2-i]);
C) 3,5,7
D)3,6,9
}
(41)有以下程序
main()
{
int a=1,b;
for(b=1;b<=10;b++)
if(a>=8)break;
{
if(a%2==1){a+=5;continue;}
a-=3;
}
printf("%d\n",b);
}
程序运行后的输出结果是______。
C)5
B) 4
A)3
(42)有以下程序
D)6
main()
{
char s[]="159",*p;
p=s;
printf("%c",*p++);printf("%c",*p++);
}
程序运行后的输出结果是______。
A)15
B)16
C)12
D)59
(43)有以下函数
fun(char *a,char *b)
{
while((*a!='\0')&&(*b!='\0')&&(*a==*b))
{
}
return(*a-*b);
a++;b++;
}
该函数的功能是______。
A)计算 a 和 b 所指字符串的长度之差
B)将 b 所指字符串连接到 a 所指字符串
中
C)将 b 所指字符串连接到 a 所指字符串后面 D)比较 a 和 b 所指字符串的大小
(44)有以下程序
main()
{
int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i++)
{
printf("%4c",'
');
for(j=0;j<=i;j++)
for(j=_____;j<4;j++)
printf("%4d",num[i][j]); printf("\n"); }
} 若要按以下形式输出数组右上半三角
1
2
6
3
7
11
4
8
12
16
则在程序下划线处应填入的是______。
A)i-1
B)i
C)i+1
D)4-i
(45)有以下程序
point(char *p){p+=3;}
main()
{
char b[4]={'a','b','c','d'},*p=b;
point(p);printf("%c\n",*p);
}
程序运行后的输出结果是______。
C)c
B)b
A)a
D)d
(46)程序中若有如下说明和定义语句
char fun(char *);
main()
{char *s="one",a[5]={0},(*f1)()=fun,ch;
......
}
以下选项中对函数 fun 的正确调用语句是______。
A)(*f1)(a);
B)*f1(*s);
C)fun(&a);
D)ch=*f1(s);
(47)有以下结构体说明和变量定义,如图所示:
struct node
{int
data;
struct
node *next;} *p,*q,*r;
data next
data next
data next
p
q
r
现要将 q 所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作
的语句是______。
A)p->next=q->next; B)p->next=p->next->next; C)p->next=r; D)p=q->next;
(48)以下对结构体类型变量 td 的定义中,错误的是______。
B)struct aa
{ int n; float m; }td;
A)typedef struct aa
{ int n; float m; }AA;
AA td;
struct aa td;
C)struct
{ int n; float m; }aa;
D)struct
{ int n; float
m; }
struct aa td;
(49)以下与函数 fseek(fp,0L,SEEK_SET)有相同作用的是______。
A)feof(fp)
B)ftell(fp)
C)fgetc(fp)
D)rewind(fp)
(50)有以下程序
FILE *fp; fp=fopen(fn,"w");fputs(str,fp);fclose(fp); }
void WriteStr(char *fn,char *str)
{
main()
{ WriteStr("t1.dat","start"); WriteStr("t1.dat","end"); }
程序运行后,文件 t1.dat 中的内容是______。
A)start
C)startend
D)endrt
B)end
三、写出程序的运行结果(共 15 分,每小题 3 分)
(1)以 下程 序运 行时 ,若 从键 盘输 入: 10 20 30<回车 >,输 出的 结果 是 【 1】 。
#include
main()
{
int i=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);
printf("%d%d%d\n",i,j,k);
}
(2)以下程序运行后的输出结果是 【2】 。
main()
{
int a=3,b=4,c=5,t=99;
if(b
,则
输出结果是 【3】 。
#include
main()
{
char a,b;
a=getchar();scanf("%d",&b);
printf("%c %c\n",a,b);
}
a=a-'A'+'0';b=b*2;
(4)以下程序运行后的输出结果是___【4】_____。
#include
main()
{ int k=1,s=0;
do{ if((k%2)!=0)continue;
s+=k;k++; }while(k>10);
printf("s=%d\n",s);
}
(5)有以下程序,程序执行后,输出结果是___【5】___。
#include
void fun(int *a) { a[0]=a[1]; }
main()
{ int a[10]={10,9,8,7,6,5,4,3,2,1},i;
for(i=2;i>=0;i--)fun(&a[i]);
for(i=0;i<10;i++)printf("%d",a[i]);
printf("\n");
}
四、程序填空题(共 20,每小题 4 分)
1.下面是实现打印九九乘法表的程序,请在画线的位置填上适当的语句,使程序(段)
完整。
main()
{ int i , j , k;
for(i=1;____ 【1】______; i++)
{ for(j=1;j〈=9; j++)
printf(“%d*%d=%d”,__【2】_____);
printf(____【3】_____);}
}
2.该程序完成的功能是求 1+2+3+…+10 的累加和,并进行累加和的输出打印。变量
sum 是存放累加值的。
#include “stdio.h”
main()
{ ____【4】_____
i=1,sum=0;
for(; i〈=10;)