2012 年云南昆明理工大学 C 程序设计考研真题 A 卷
一、填空题(30 分,每题 2 分)
1.设 float x=2.5,y=4.7; int a=7;,则表达式 x+a%3*(int)(x+y)%2/4 的值为
2.设 int a=3,b=5,c=7;,则表达式 a>c||c>b!=0&&c==b+a 的值为
。
3.已知方程 ax2+bx+c=0 系数 a、b、c 且存在两个实根,计算其中一个实根的算术表达式
为
4.判断变量 a、b 是否是数值相等而符号相反的逻辑表达式为
。
。
。
5.m 是值为两位数的整型变量,判断其个位数是奇数而十位数是偶数的逻辑表达式为
。
6.若 a=13、b=25、c=-17,条件表达式 ((y=(a
#include
main()
{
printf("%d\n", strlen("IBM\n012\t\"\\"));
}
则程序运行后的输出结果是( )。
A.
10
B.
11
C.
16
D.
12
4.有如下程序片段:
int i = 0;
while(i++ <= 2);
printf("%d", i);
则正确的执行结果是:( )
A.
2
B.
3
C.
4
D. 程序陷入死循环
5.下面哪个定义是合法的( )。
A. char a[8] = "language";
B. int a[5] = {0,1,2,3,4,5};
C. char *a = "string";
D. int a[][] = {0,1,2,3,4,5,6};
6.一个 C 程序的执行是从( )。
A.本程序的 main 函数开始,到 main 函数结柬
B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C.本程序的 main 函数开始,到本程序文件的最后一个函数结束
D.本程序文件的第一个函数开始,到本程序 main 函数结束
7.以下叙述不正确的是( )。
A.一个 C 源程序可由一个或多个函数组成
B.一个 C 源程序必须包含一个 main 函数
C.C 程序的基本组成单位是函数
D.在 C 程序中,注释说明只能位于一条语句的后面
8.一个 C 程序是由( )。
A.一个主程序和若干子程序组成
C.若干过程组成
B.函数组成
D.若干子程序组成
9.若 x.i.j 和 k 都是 int 型变量,则计算下面表达式后,x 的值为( )。
x=(i=4,j=16,k=32)
A. 4
B. 16
C. 32
D. 52
10.在 C 语言中,char 型数据在内存中的存储形式是( )。
A.补码
B.反码
C.原码
D. ASCll 码
11.设有程序段
int k=10;
while(k=0) k=k-1;
则下面描述中正确的是( )。
A. while 循环 10 次
C.循环体一次也不执行
B.循环是无限循环
D.循环体只执行一次
12..下面 for 循环的正确描述是( )。
A.for 循环只能用于循环次数已经确定的情况
B.for 循环是先执行循环体语句后判断表达式
C.在 for 循环中,不能用 break 语句结束循环
D.for 循环体语句中,可以包含多条语句,但必须用花括号括起来
13.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是()。
A.整型常量
C.整型常量或整型表达式
B.整型表达式
D.任何类型表达式
14.以下正确的函数首部定义是( )。
A.double fun(int x,int y)
C.double fun(int x,int y);
B.double fun(int x;int y)
D.double fun(int x,y);
15.C 语言中,函数返回值的类型是由( )。
A.return 语句中的表达式类型所决定
B.调用该函数时的主调函数类型所决定
C.调用该函数时系统临时决定
D.在定义该函数时所指的函数类型所决定
16.若用数组名作为函数调用的实参,传递给形参的是( )。
A.数组的首地址
C.数组中全部元素的值
B.数给的第一个元数
D.数组元素的个数
17.以下有关宏替换的叙述不正确的是( )。
A.宏替换不占用运行时间
C.宏替换只是字符替换
B.宏名无类型
D.宏名必须用大写字母表示
18.用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( )。
A.生成可执行目标文件
C.输出运行结果
B.生成目标文件
D.自动保存源文件
19.下列各个错误中,属于编译错误的是( )。
B.“==”误写为“!=”
A.数组下标超界
20. 若 int 类型数据字长为 4,其最大值为( )。
C.死循环
D.括号不配对
A.231
B.231-1
C.232-1
D.232
21.常数的书写格式决定了常数的类型和值,03322 是( )。
A.16 进制 int 类型常数
C.10 进制 int 类型常数
B.8 进制 int 类型常数
D.10 进制 long int 类型常数
22.下列各语句序列中,能够将变量 u 和 s 中最大值赋值到变量 t 中的是()。
A.if(u>s)t=u; t=s;
C.if(u>s)t=s; else t=u;
B.t=s; if(u>s)t=u;
D.t=u; if(u>s)t=s;
23.下列各语句中,能够输出整型变量 a 和 b 中最大值的是()。
A.printf("%d\n",(a>b)?a,b);
C.printf("%d",if(a>b)a else b);
B.(a>b)? printf("%d",a):printf("%d",b);
D.printf("%d\n",(a>b)?a:b);
24.定义如下变量和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是()。
for(i=0;i<3;i++) printf("%d",x[i][2-i]);
A.1 5 9
B.1 4 7
C.3 5 7
D.3 6 9
25.不能把字符串:Hello!赋给数组 b 的语句是()。
A.char b[10]={'H','e','l','l','o','!'};
C.char b[10];strcpy(b,"Hello!");
D.char b[10]="Hello!";
B.char b[10];b="Hello!";
三、写出下列程序的运行结果。(15 分,每题 3 分)
1.
#include
main( )
{
int
a = 5, b = 4, x, y;
x = 2 * a ;
printf("a=%d, x=%d\n", a, x);
y = b * 2;
printf("b=%d, y=%d\n", b, y);
}
则程序运行结果是:
2.
#include
void fun1(int x)
{
x=20;
}
void fun2(int b[4])
{
int j;
for(j=0; j<4; j++)
b[j]=j;
{
}
}
main()
{
int x = 10;
int a[4] = {1,2,3,4}, k;
fun1(x);
printf("x = %d\n", x);
fun2(a);
for(k=0; k<4; k++)
{
printf("%d\n", a[k]);
}
}
运行结果是:
3.#include
{
void main( )
int k=0;
char c='A';
do {
switch (c)
case 'A': k++; break;
case 'B': k--;
case 'C': k+=2; break;
case 'D': k=k%2; break;
case 'E': k=k*10; break;
default: k=k/3;
{
}
c++;
} while(c<'G');
printf("k=%d\n", k);
}
输出结果:
4.
#include
void fun1(int n,int a[][3])
{
for(int i=0;i
long fib(int n)
{
if(n>2)
return(fib(n-1)+fib(n-2));
else
return (2);
}
main()
{printf(“%ld\n”,fib(6));
}
运行结果
四、程序填空题(共 20 分,每空 2 分)
1.下面这个程序的功能是对含有 n 个元素(最多 10 个)的一维数组按升序进行排序。
#include
#define ARRAY_SIZE 10
void Sort(int a[], int n);
void InputArray(int a[],int n);
void PrintArray(int a[],int n);
main()
{
int
a[ARRAY_SIZE], n;
printf("Input array lenth n<=10: ");
scanf("%d", &n);
printf("输入数组 a:\n");
InputArray(a, n);
Sort(a, n);
printf("打印排序后的数组 a:\n");
PrintArray(a, n);
}
void Sort(int a[], int n)
{int i, j, p, temp;
for(i = 0; i <
(1)
; i++)
{
p = i;
for(j =
(2)
; j < n; j++)
{
}
if(
{
}
if(
(3)
) p = j;
(4)
)
temp = a[p];
a[p] = a[i];
a[i] = temp;
}
}
void InputArray(int a[], int n)
{
int i;
for (i = 0; i < n; i++)
{
}
(5)
;
}
void PrintArray(int a[], int n)
{
int i;
for (i = 0; i < n; i++)
{
}
printf("%d ", a[i]);
printf("\n");
}
2.下面程序的功能是从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分
开。[提示:判断是否有新单词出现的方法是------当前被检验的字符不是空格,而前一被
检验字符是空格,则表示有新单词出现。]
#include
main()
{char str[80];
int i, num;
gets(str);
if(str[0]!= '
')
{
}
else
{
}
num = 1;
num = 0;
for(i = 1; str[i]
(6)
; i++)
if(str[i]
(7)
&& str[i-1]
(8)
)
num++;
{
}
{
}
printf("num=%d\n", num);
}
3. 输入一行字符,统计其中的英文字符、数字字符及其它字符的个数。
#include
#include
#define ARR_SIZE 80
main()
{
char str[ARR_SIZE];
int
len, i, letter=0, digit=0, others=0;
gets(str);
for (i=0;
{
(9)
; i++)
if (
)
(10)
letter ++;
else if (str[i]>=’0’&& str[i]<=’9’)
digit ++;
else
others ++;
}
printf("English character:
printf("digit character:
printf("other character:
%d\n", letter);
%d\n", digit);
%d\n", others);
}
五、编程(35 分)
1. 编程计算 1!+2!+3!+……+10!的值。(12 分)
2. 从键盘任意输入某班 20 个学生的成绩,打印最高分,并统计不及格学生的人数。(12
分)
要求按如下函数原型进行编程,分别计算最高分和统计不及格学生的人数:
int FindMax(int score[], int n);
int CountFail(int score[], int n);
3. 从键盘任意输入一个 4 位数 x,编程计算 x 的每一位数字相加之和(忽略整数前的正负
号)。例如,输入 x 为 1234,则由 1234 分离出其千位 1、百位 2、十位 3、个位 4,然后计
算 1+2+3+4=10,并输出 10。(11 分)