中国计量大学C语言程序设计考题

本试卷为中国计量大学C语言程序设计考题,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,程序题,结构体,文件。

C语言程序设计考题

一、单项选择题 (共20题,每题2分,共计40分)

(  D  )
1、下面是有关c语言字符数组的描述,其中错误的是________。
A、不可以用赋值语句给字符数组名赋字符串
B、可以用输入语句把字符串整体输入给字符数组
C、字符数组中的内容不一定是字符串
D、字符数组只能存放字符串
(  D  )
2、有以下程序(说明:字母a的ascil码值是65):
void fun(char*s)
{
while(*s)
{
if(*s%2)printf("%c",*s);
s++;
}
}
main()
{
char a[]="byte";
fun(a);
printf("\n");
}
程序运行后的输出结果是________。
A、BY
B、BT
C、YT
D、YE
(  C  )
3、为了避免嵌套的条件分支语句if-else的二义性,c语言规定:c程序中的else总是与( )组成配对关系。
A、缩排位置相同的if
B、在其之前未配对的if
C、在其之前未配对的最近的if
D、同一行上的if
(  D  )
4、若变量c为char类型,能正确判断出c为小写字母的表达式是________。
A、’a’<=c<=’z’
B、(c>=’a’) || (c<=’z’)
C、(‘a’<=c) and (‘z’>=c)
D、(c>=’a’) && (c<=’z’)
(  D  )
5、下列选项中不是字符常量的是________。
A、'\v'
B、'\x2a'
C、'a'
D、"\0"
(  C  )
6、以下对二维数组a的正确说明是________。
A、int a[3][]
B、float a(3,4)
C、double a[1][4]
D、float a(3)(4)
(  D  )
7、若int i=10;
执行下列程序后,变量i的正确结果是________。 switch (i)
{
case 0: i+=1;
case 10: i+=1;
case 11: i+=1;
default: i+=1;
}
A、10
B、11
C、12
D、13
(  B  )
8、以下数组定义中错误的是________。
A、int x[][3]={0};
B、int x[2][3]={{l,2},{3,4},{5,6}};
C、int x[][3]={{l,2,3},{4,5,6}};
D、int x[2][3]={l,2,3,4,5,6};
(  D  )
9、char *s="\t\\name\\address\n"; 指针 s 所指字符串的长度为: 。
A、说明不合法
B、19
C、18
D、15
(  D  )
10、假定等级和分数有以下对应关系: 等级: a 分数: 85 ~ 100 等级: b 分数: 60 ~ 84 等级: c 分数: 60 以下 对于等级 grade 输出相应的分数区间,能够完成该功能的程序段是 __________.
A、switch (grade)
{
case 'A':printf("85--100\n");
case 'B':printf("60--84\n");
case 'C':printf("60 以下 \n");
default:printf(" 等级错误 !\n");
}
B、switch (grade)
{
case 'A':printf("85--100\n");break;
case 'B':printf("60--84\n");
case 'C':printf("60 以下 \n");
default:printf(" 等级错误 !\n");
}
C、switch (grade)
{
case 'A':printf("85--100\n");break;
case 'B':printf("60--84\n");break;
case 'C':printf("60 以下 \n");
default:printf(" 等级错误 !\n");
}
D、switch (grade)
{
case 'A':printf("85--100\n");break;
case 'B':printf("60--84\n");break;
case 'C':printf("60 以下 \n");break;
default:printf(" 等级错误 !\n");}
(  D  )
11、下列对程序解决问题的过程描述中,哪项是正确的( )
A、编写程序→设计算法→分析问题→调适运行与检测结果
B、设计算法→分析问题→编写程序→调适运行与检测结果
C、设计算法→分析问题→调试运行与检测结果→编写程序
D、分析问题→设计算法→编写程序→调试运行与检测结果
(  A  )
12、在数制的转换中,正确的叙述是______。
A、对于相同的十进制整数(>1),其转换结果的位数的变化趋势随着基数E的增大而减少
B、对于相同的十进制整数(<1),其转换结果的位数的变化趋势随着基数E的增大而增加
C、不同数制的数字符是各不相同的,没有一个数字符是一样的
D、对于同一个整数值的二进制数表示的位数一定大于十进制数字的位数
(  B  )
13、请选出可以作为c语言用户标识符的一组标识符号
A、void define WORD
B、a3_b3 _123 1F
C、for ―abc case
D、2a D0 sizeof
(  A  )
14、设有定义:char*c; 以下选项中能够使字符型指针c正确指向一个字符串的是________。
A、charstr[]="string";c=str;
B、scanf("%s",c);
C、c=getchar();
D、char str[]="string";strcpy("C,str")
(  A  )
15、若x、y均是int型变量,则执行以下语句后的结果是________
for(x=1;x<5;x+=2)
for(y=1;y<5;y++)
{
printf("%2d",x*y);
if(y==4)printf("\n");
}
A、1 2 3 4 3 6 9 12
B、2 3 4 5 3 4 5 6
C、1 2 3 4 5 6 9
D、2 3 4 3 6 9 6 9 12
(  C  )
16、若有"double a; ",则正确的输入语句是________。
A、scanf("%lf",a);
B、scanf("%f",&a);
C、scanf("%lf",&a)
D、scanf("%le",a);
(  D  )
17、设有以下语句
typedef struct tt
{
char c;
int a[4];
}
cin;
则下面叙述中正确的是______。
A、可以用TT定义结构体变量
B、TT是struct类型的变量
C、可以用CIN定义结构体变量
D、CIN是struct TT类型的变量
(  C  )
18、下列语句输出结果是________。
long a=0xffff;
int b=a;
printf( "%d",b);
A、65535
B、65536
C、-1
D、1
(  B  )
19、下列表达式中,可作为c合法表达式的是________。
A、[3,2,1,0]
B、(3,2,1,0)
C、3=2=1=0
D、3/2/1/0
(  B  )
20、有以下程序
struct stu
{
char num[10];
float score[3];
};
main( )
{
struct stu s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p;
int i;
float sum=0;
p=s;
for(i=0;i<3;i++)sum=sum+p->score[i];
printf("%.2f\n",sum);
}
程序运行后的输出结果是________。
A、270
B、270.00
C、285.00
D、285

二、判断题 (共10题,每题2分,共计20分)

(   T  )
1、数组名作为函数参数,传送的是地址. 
(   T  )
2、putchar函数可以向终端输出一个字符或字符型变量值。 
(   T  )
3、对于已正确定义的二维数组a, *(a[i]+j)与a[i][j]的含义相同。 
(   F  )
4、若变量定义为int x, y;,则x + y = 22是符合c语言语法的表达式。 
(   T  )
5、对于如下的switch语句(使用break)的一般形式,其执行流程是:首先求解表达式,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的相应语句段;
如果表达式的值与任何一个常量表达式的值都不相等,则执行 default 后的语句段,最后执行break语句,跳出switch语句。switch (表达式)
{
case 常量表达式1: 语句段1;
break;
case 常量表达式2: 语句段2;
break;
… case 常量表达式n: 语句段n;
break;
default: 语句段n+1;
break;
} 
(   T  )
6、若变量已正确定义,执行以下程序段,输入0或者负数时,循环结束。
total = 0;
scanf ("%d", &score);
while(score > 0)
{
total = total + score;
scanf ("%d", &score);
} 
(   F  )
7、c语言中,数字字符 '0' , '1' , '2' ,…, '9' 的ascii码按降序连续排列。 
(   F  )
8、递归调用函数可以没有终止递归的条件。 
(   T  )
9、字符串在内存中的起始地址称为字符串的指针,可以定义一个字符指针变量指向一个字符串 
(   F  )
10、c语言程序只能有一个文件。 

三、填空题 (共5题,每题4分,共计20分)

1、字符读写函数____________是用于从磁盘文件中读出一个字符。
2、局部变量的作用域是从______的位置起,到函数结束止。
3、语句主要是实现次数循环结构,while语句主要是实现当型循环结构。
4、双精度型数据有效位为______位
5、有如下函数头: int max(int i,int j),则此函数有______个参数。

四、程序分析题 (共4题,每题5分,共计20分)

1、写出下列程序的运行结果。
#include "stdio.h"
main()
{
int a[]={1,2,3,-4,5};
int m,n,*p;
p=&a[0];
m=*(p+1);
n=*(p+4);
printf("%d %d %d ",*p,m,n);
}
2、有1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请分析程序填空。
#include <stdio.h>
main()
{
int day, x1, x2;
day = 0;
x1 = 1020;
while (____1____)
{
x2 = ____2____;
x1 = x2;
day++;
}
printf("day=%d\n", day);
}
3、下面程序的功能是求1000 以内的所有完全数。说明:一个数如果恰好等于它的因子之和(除自身外) ,则称该数为完全数。例如: 6=1+2+3 。
#include<stdio.h>
main()
{
int a,i,m;
for(a=1;a<=1000;a++)
{
for( 【1】________;i<=a/2;i++)
if(!(a%i)) 【2】________;
if(m==a) printf("%4d",a);
}
}
4、以下程序输出的结果是 ________。
int ff(int n)
{
static int f=l;
f=f*n;
return f;
}
main()
{
int i;
for(i=1;i<=5;i++) printf("%d\n",ff(i));
}

五、编程题 (共3题,每题0分,共计50分)

1、编写程序:字符串排序。如下:
请输入3个字符串,每个字符串以回车结束!:
b
a
t
排序后的结果为:
a
b
t
2、给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
输入格式:
输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。
输出格式:
在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。
输入样例:
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
输出样例:
25.00, Programming in Delphi
18.50, Programming in VB
3、输入5个数,求和并输出。要求编写求和的函数。