南京邮电大学通达学院《高级语言程序设计》测试题库参考答案
答案更新时间:2024.01.05
注:由于作者解答能力有限,所以答案仅供参考,难免有瑕疵错误之处,还请多多海涵!
题型
选择题(94道)
1、以下关于源程序与目标程序的关系,不正确的是( D )。
A、用机器语言编写的源程序就是目标程序
B、用汇编语言编写的源程序需要经过汇编程序汇编为目标程序
C、用C语言编写的源程序需要经过编译程序编译为目标程序
D、C语言与Pascal等其他高级语言的编译器是完全一样的
2、以下叙述不正确的是_____D_____。
A、一个 C 源程序可由一个或多个函数组成
B、一个 C 源程序必须包含一个 main 函数
C、C 程序的基本组成单位是函数
D、在 C 程序中,自定义函数的定义需要在主函数 main 体内定义
3、”程序存储思想“的提出者是( C )。
A、Dennis M. Ritchie B、Alan Turing
C、John Von Neumann D、Ken Thompson
4、 计算机直接能识别的是( A )的代码。
A、二进制 B、八进制 C、十进制 D、十六进制
5、 计算机存储的都是二进制信息,信息存储的最小单位是( B )。
A、字节(byte) B、二进制位(bit)
C、字(word) D、双字
6、若计算机有 32 根地址总线,则其存储器的最大存储容量可达( C )。
A、32MB B、32GB C、4GB D、8GB
7、下列数据表达的数值与十进制 77 不相等的是( B )。
A、0x4D B、0x4B C、0115 D、1001101
8、以下选项中不属于字符常量的是( B )。
A、’C’ B、”C” C、’\x0C’ D、’\072’
9、在 C 语言中,不同数据类型占用内存的字节长度是( D )。
A、相同的 B、由用户自己定义的 C、任意的 D、与编译环境有关的
10、C 语言中,”\x5d”在内存中占用的字节数是( A )。
A、2 B、5 C、4 D、1
11、C 语言 short 型数据占 2 个字节,则 unsigned short 型数据的取值范围是( B )。
A、2~255 B、0~65535 C、-256~255 D、-32768~32767
12、下列哪个选项属于 C 语言中的合法字符串常量( B )。
A、how are you B、”china” C、’hello’ D、
a
b
c
abc
abc
13、以下哪一个可以作为正确的变量名( B )。
A、3*X B、_filename C、for D、 $X
14、有如下输入语句:scanf(“x=%d,y=%d”,&x,&y);为使变量 x 的值为 10,y 的值为 20,
从键盘输入数据的正确形式是( C )。
A、10 20<回车> B、10,20<回车> C、x=10,y=20<回车> D、x=10 y=20<回车>
15、如有下列程序,输入数据:12345 678< CR>后,程序输出的结果是( C )。
#include<stdio.h>
int main( )
{
int x;
double y;
scanf(“%3d%f”,&x,&y);
printf(“%d,%f\n”,x,y);
return 0;
}
A、12345,678.000000 B、123,45.000000
C、123,不确定的随机数 D、345,678.000000
注:第15题,若scanf语句里是%lf,则答案选B
16、下列关于外部变量的说法,正确的是( C )。
A、外部变量是在函数外定义的变量,其作用域是整个程序
B、全局外部变量可以用于多个模块,但需用 extern 重新在各模块中再定义一次
C、全局外部变量可以用于多个模块,extern 只是声明而不是重新定义
D、静态外部变量只能作用于本模块,因此它没有什么实用价值
17、下列 4 组数据类型中,C 语言允许的一组是( B )。
A、整型、实型、逻辑型、双精度型
B、整型、实型、字符型、空类型
C、整型、双精度型、集合型、指针类型
D、整型、实型、复数型、结构体类型
18、下列哪一个是合法的实型常量( C)。
A、 8E3.1 B、E5 C、234. D、234
19、设有说明;char z;int w;float y;double x;则表达式 w-x+z-y 值的数据
类型为 __D __。
A、 float B、char C、 int D、 double
20、下列运算符中,优先级最高的是__A__。
A、() B、* C、== D、+=
21、设 a、b、c 都是 int 型变量,且 a=3,b=4,c=5,则下列表达式中值为 0 的是( D )。
A、 ‘a’&&‘b’ B、a<b C、a||b+c&&b-c D、!(a<b&&!c||1)
22、表达式(int)((double)7/2)-7%2 的值是( C )。
A、1 B、1.0 C、2 D、2.0
23、若 d 是 double 型变量,表达式”d=1,d=5,d++”的值是( C )。
A、1.0 B、2.0 C、5.0 D、6.0
24、以下程序的运行结果是__D__。
void main()
{int k=4,a=3,b=2,c=1;
printf(“\n%d\n”,k<a?k:c<b?c:a);}
A、4 B、3 C、2 D、1
25、表达式 !(m>0&&n>0) 等价于__A__。
A、!(m>0)||!(n>0) B、!m>0||!n>0 C、!m>0&&!n>0 D、!(m>0)&&!(n>0)
26、语句 while(!E);中的表达式 !E 等价于____A_____。
A、E= =0 B、E!=1 C、E!=0 D、E= =1
27、关于 switch 语句,下列说法中不正确的是( A )。
A、case 语句必须以 break 结束 B、default 分支可以没有
C、switch 后面的表达式可以是整型或字符型 D、case 后面的常量值必须唯一
28、若要求在 if 后一对圆括号中表示 a 不等于 0 的关系,则能正确表示这一关系的表达式为
___D ___.
A、 a<>0 B、 !a C、 a=0 D、 a
29、以下程序的输出结果是____D____.
#include<stdio.h>
void main()
{ int x=10,y=10;
printf("%d %d\n",x--,--y);
}
A、10 10 B、 9 9 C、9 10 D、 10 9
30、设有如下定义:
int x=10,y=3,z;
则语句
printf(“%d\n”,z=(x%y,x/y));
的输出结果是____D____.
A、 1 B、 0 C、4 D、 3
31、为表示关系 x≥y≥z,应使用 C 语言表达式___A___.
A、 (x>=y)&&(y>=z) B、 (x>=y)AND(y>=z)
C、(x>=y>=z) D、 (x>=y) & (y>=z)
32、C 语言中非空的基本数据类型包括____B____.
A、 整型,实型,逻辑型 B、 整型,实型,字符型
C、 整型,字符型,逻辑型 D、 整型,实型,逻辑型,字符型
33、若 x 和 y 都是 int 型变量,x=100,y=200,且有下面的程序片段: printf(“%d”,(x,y));
上面程序片段的输出结果是___A___.
A、200 B、100
C、 100 200 D、 输出格式符不够,输出不确定的值
34、阅读下面的程序
#include<stdio.h>
void main()
{
char ch;
scanf("%3c",&ch);
printf("%c",ch);
}
如果从键盘上输入
abc<回车>
则程序的运行结果是___A___.
A) a B) b C) c D) 程序语法出错
35、阅读下面的程序
#include<stdio.h>
void main()
{
int i,j;
i=010;
j=9;
printf("%d,%d",i-j,i+j);
}
则程序的运行结果是____D____.
A、 1,19 B、 -1,19 C、 1,17 D、 -1,17
36、阅读下面的程序
#include<stdio.h>
void main()
{
int i,j,m,n;
i=8;j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
程序的运行结果是____C_____.
A、 8,10,8,10 B、 9,11,8,10
C、 9,11,9,10 D、 9,10,9,11
37、若已定义 int a,则表达式 a=10,a+10,a++的值是____B____.
A、 20 B、10 C、 21 D、 11
38、阅读下面的程序
#include<stdio.h>
void main()
{
int i,j;
scanf("%3d%2d",&i,&j);
printf("i=%d,j=%d\n",i,j);
}
如果从键盘上输入 1234567<回车>,则程序的运行结果是____D____ .
A、 i=123,j=4567 B、 i=1234,j=567
C、 i=1,j=2 D、 i=123,j=45
39、下面程序的输出结果是___D__.
#include<stdio.h>
void main()
{
int a=-1, b=4, k;
k=(++a<=0)&&(b--<=0);
printf("%d,%d,%d\n",k,a,b);
}
A、 1,1,2 B、 1,0,3 C、 0,1,2 D、 0,0,3
40、C 语言中规定函数的返回值的类型是由_____D_____。
A、return 语句中的表达式类型所决定的
B、调用该函数时的主调用函数类型所决定的
C、调用该函数时系统临时决定的
D、在定义该函数时函数首部所指定的函数返回类型所决定的
41、对于 C 语言的函数,下列叙述中正确的是____A____。
A、函数的定义不能嵌套,但函数调用可以嵌套
B、函数的定义和调用都不能嵌套
C、函数的定义可以嵌套,但函数调用不能嵌套
D、函数的定义和调用都可以嵌套
42、若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是____C____。
A、函数的实参和其对应的形参共占用同一存储单元
B、形参只是形式上的存在,不占用具体存储单元
C、函数的形参和实参分别占用不同的存储单元
D、同名的实参和形参占用同一存储单元
43、下面关于静态局部变量的描述,不正确的是____B____。
A、静态局部变量只被初始化一次
B、静态局部变量作用域为整个程序
C、静态局部变量生命期为整个程序
D、静态局部变量作用域为当前函数或语句块
44、若主函数有变量定义:int x=1; double y=2.3; 且有合法的函数调用语句 f (y, x); 则下列
关于函数 f 的原型声明中一定错误的是____D____。
A、void f(double, int);
B、int f(int, int);
C、int f(double, double);
D、void f(double, int, int);
45、关于作用域的描述,下列哪一种说法是正确的____A____。
A、形式参数的作用域一定是它所在的整个函数
B、全局变量的作用域一定是整个程序
C、局部变量的作用域一定是整个函数
D、静态局部变量的作用域不仅限于本函数
46、以下一维数组定义语句中,错误的是_____D_____。
A、int a[]={1,2,3,4} ;
B、char a[5];
C、char str[6]= “test”;
D、int n=5,a[n];
47、若有说明:int a[10];则对 a 数组元素的正确引用是____D____。
A、a[10]
B、a[3.5]
C、a(5)
D、a[10-10]
48、以下不能对二维数组 a 进行正确初始化的语句是____C____。
A、int a[2][3]={0};
B、int a[][3]={{1,2}, {0}};
C、int a[2][3]={{1,2}, {3,4}, {5,6}};
D、int a[][3]={1,2,3,4,5,6};
49、以下对二维数组 a 定义正确的是____C____。
A、int a[3][];
B、float a(3,4);
C、double a[1][4];
D、float a(3)(4);
50、如下程序执行后输出为____B____。
#include<stdio.h>
int main( )
{
static int a[3][3];
int i, j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=a[j][i]+i*j;
printf("%d, %d", a[1][2], a[2][1]);
return 0;
}
A、2,2 B、2,4 C、4,2 D、不确定, 不确定
51、以下程序给数组所有元素输入数据,填入____A_____能完成该功能。
#include<stdio.h>
int main ( )
{
int array [5], i=0;
while (i<5)
scanf("%d", __________ ) ;
return 0;
}
A、&array[i++] B、&array[i+1] C、array+i D、&array[++i]
52、若有函数原型:double f(int, double);,主函数中有变量定义:int x=1; double m=11.6,n;下
列主函数中对 f 函数的调用错误的是( D )。
A、n=f(x, m+2); B、printf(“%lf”,f(x+2, 23.4));
C、f(x,m); D、m=f(x);
53、表达式__C__的值不是 1。
A、4<0?0:1 B、5>=1
C、!EOF D、!NULL
54、有如下函数调用语句 func(rec1,rec2+rec3,(rec4, rec5));该函数调用语句中,含有的实参
个数是( A )。
A、3 B、4 C、 5 D、有语法错误
55、以下有关函数的形参和实参的说法中正确的是_____C_____。
A、实参和与其对应的形参各占用一个字节存储单元
B、只有当实参和与其对应的形参同名时才占用一个存储单元
C、形参是虚拟的,不占用存储单元
D、实参和与其对应的形参各占用独立的存储单元
56、能正确表示“当 x 取值在[5,99]和[130,180]范围内为真,否则为假”的表达式是__B__。
A、(x>=5)&&(x<=99)&&(x>=130)&&(x<=180)
B、(x>=5)&&(x<=99)||(x>=130)&&(x<=180)
C、(x>=5)||(x<=99)||(x>=130)||(x<=180)
D、(x>=5)&&(x<=99)||(x>=130)||(x<=180)
57、以下错误的定义语句是( D )。
A、int x[][3]={{0},{1},{1,2,3}}; B、int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C、int x[][3]={1,2,3,4}; D、int x[4][]= {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
58、设有语句 int a[2][3],下面哪一种不能表示元素 a[i][j]( C )。
A、*(a[i]+j) B、*(*(a+i)+j) C、*(a+i*3+j) D、*(*a+i*3+j)
59、假设已定义 char a[10], *p; 下面的赋值语句中,正确的是( A )。
A、p=a; B、a=”abcdef”; C、*p=”abcdef”; D、p=*a
60、下面判断正确的是___C___。
A、char *a=“programming”;等价于 char *a;*a=“programming”;
B、char str[10]={“programming”};等价于 char str[10]; str[]={“programming”};
C、char *s=“programming”;等价于 char *s; s=“programming”;
D、char *s=“programming”;等价于 char s[10];*s=“programming”;
61、判断字符串 str1 是否大于字符串 str2,应当使用____D____。
A、if(str1>str2) B、if(str1>=str2)
C、if(strcpy(str2,str1)>0) D、if(stcmp(str1,str2)>0)
62、设 p1 和 p2 是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行赋值
语句的是___B___。
A、c=*p1+*p2 B、p2=c-5
C、p1=p2 D、c=*p1*(*p2)
63、设变量定义为 int x, *p=&x, 则&*p 相当于( A )
A.、&x B.、*p C.、x D.、*&x
64、若有语句 int *point, i=4; 和 point=&i,下面均代表地址的是( D )
A、 i, point,*&i B、&*i,&i,*point
C.、*&point,*point,&i D、 &i ,&*point,point
65、已知 a 是 int 型变量,则( C )是对指针变量的正确定义和初始化。
A、int *p=a B.、int *p=*a C、 int *p=&a D.、int p=&a
66、执行下面的程序段后,变量 ab 的值是( A )
int *var,ab=100;
var=&ab; *var+=10; var+=10;
A、110 B.、100 C.、0 D.、120
67、设有定义和赋值:int a[10]={0,1,2,3,4,5,6,7,8,9}, *p; p=a+1; 则能表示数组 a 中值为 5 的元素的表示式为( B )
A、a[4] B.、*(p+4) C.、a+5 D.、*p[5]
68、 int a[5][4], 对于第 i 行 j 列元素值引用正确的是( A )
A、*(*(a+i)+j) B、 (a+i)[j] C、 *(a+i+j) D、*(a+i)+j
69、int a[5][4], 对于第 i 行 j 列元素值引用正确的是( A )
A、*(*(a+i)+j) B、(a+i)[j] C、*(a+i+j) D、\ *(a+i)+j
70、若有定义 int (*p)[4], 则标识符 p 表示( C )
A.、是一个指向整型变量的指针 B、 是一个指针数组名
C.、是一个行指针,指向一个含有 4 个整型元素的一维数组 D.、定义不合法
71、下列程序段的输出结果为( D )
void fun(int *x, int *y)
{
printf("%d %d", *x, *y); *x=3; *y=4;
}
void main()
{
int x=1,y=2;
fun(&y,&x);
printf("%d %d",x,y);
}
A.、2 1 1 2 B.、1 2 1 2 C.、1 2 3 4 D、 2 1 4 3
72、若有定义和语句:char s[10]; s=“abcd”; printf(“%s\n”,s); 则结果是___D___:
A.、输出 abcd B、 输出 a C、输出 abcd (有空格) D.、编译不通过
73、当用户输入的字符串中含有空格时,应使用( B )函数读入字符串。
A.、scanf B.、gets C.、getchar D.、getc
74、将两个字符串 s1 和 s2 连接起来,正确的函数是( B )
A.、strcpy(s1,s2) B.、strcat(s1,s2) C.、strcmp(s1,s2) D.、strlen(s1,s2)
75、设有如下程序段:char s[20]=“beijing”,*p; p=s; ,则以下叙述正确的是( A )
A、可以用*p 表示 s[0] B、s 数组中元素的个数和 p 所指字符串长度相等
C、s 和 p 都是指针变量 D、数组 s 中的内容和指针变量 p 中的内容相等
76、有以下函数
#include<stdio.h>
int main( )
{
char a[20],b[20],c[20];
scanf("%s%s",a,b);
gets(c);
printf("%s%s%s\n",a,b,c);
return 0;}
程序运行时输入 this is a cat!<回车>,则输出结果是( C )
A、thisisacat!; B、this is a C. thisis a cat! D、thisisa cat!
77、以下不能正确对字符串初始化的语句是( C )
A、char str[]={“good!”}; B、char *str=“good”;
C、char str[5]=“good!”; D、char str[6]={‘g’,‘o’,‘o’,‘d’,‘!’,‘\0’};
78、以下叙述正确的是( C )
A、C 语言允许 main 函数带参数,且参数的个数和形参名均可由用户任意指定
B、C 语言允许 main 函数带参数,形参名只能是 argc 和 argv
C、当 main 函数带有形参时,传给形参的值一般从命令行得到
D、若有说明:int main(int argc, char *argv), 则形参 argc 的值必须大于 1
79、对于一个联合类型的变量,系统分配的存储空间是( C )。
A、第一个成员所需的存储空间 B、最后一个成员所需的存储空间
C、占用空间最大的成员所需的存储空间 D、所有成员存储空间的总和
80、以下有关宏替换的叙述不正确的是___D___。
A、宏替换不占用运行时间 B、宏名无类型
C、宏替换只是字符替换 D、宏名不能用小写字母表示
81、函数 f 定义如下,执行语句“sum=f(5)+f(3);”后,sum 的值应为___C___。
int f(int m)
{
static int i=0; int s=0;
for(;i<=m;i++) s+=i; return s;
}
A、 21 B、 16 C、 15 D、 8
82、声明语句为“int a[3][4];”,下列表达式中与数组元素 a[2][1]等价的是___A___。
A、*(a[2]+1) B、a[9]
C、*(a[1]+2) D、*(*(a+2))+1
83、宏定义#define G 9.8 中的宏名 G 表示___C___。
A、一个单精度实数 B、一个双精度实数
C、一个字符串 D、不确定类型的数
84、在定义一个结构体变量时,系统分配给它的内存是___D___.
A、结构体中第一个成员所需内存量
B、结构体中最后一个成员所需内存量
C、成员中占内存量最大者所需内存量
D、各成员所需内存量的总和
85、根据下面的定义,能打印出字母“M”的语句是___D___。
struct person
{
char name[9];
int age;
};
struct person class[10]={{"John",17},
{"Paul",19},{"Mary",18},{"Adam",16 }};
A、printf(“%c\n”,class[3].name );
B、printf(“%c\n”,class[3].name[l]);
C、Printf(“%c\n”,class[2].name[l]);
D、printf(“%c\n”,class[2].name[0]);
86、设有以下结构体定义:
struct emproyer
{
char name[8];
int age;
char sex;
}staff;
则下面的叙述不正确的是___C___。
A、struct 是结构体类型的关键字
B、struct emproyer 是用户定义的结构体类型
C、staff 是用户定义的结构体类型名
D、nameage 和 sex 都是结构体成员名
87、下面程序的输出结果是____B____。
#include<stdio.h>
#define P 2
#define POWER(x) P*x*x
void main()
{
int x=1,y=2;
printf("%d,%d",POWER(x+y),
POWER(y+x));
}
A、18,18 B、6,7
C、6,6 D、7,7
88、若有以下定义和语句:
struct student
{
int num ;
int age;
};
struct student stu[3]={{l001,20},{1002,19},{1003,2l}};
void main()
{
struct student *p;p=stu;
...
}
则下列引用中不正确的是___D____。
A、 (p++)→num B、 p++
C、 (*p).num D、 p=&stu.age
89、下面程序的输出结果是____A___。
#include<stdio.h>
#define P 2
#define POWER(x) P*(x)*(x)
void main()
{
int x=l,y=2;
printf("%d,%d",POWER(x+y),
POWER(y+x));
}
A、18,18 B、6,7
C、6,6 D、7,7
90、下面程序的输出结果是____D____。
#include<stdio.h>
#define SUB(X,Y) (X)*Y
void main()
{
int a=3,b=4;
printf("%d\n",SUB(a+b,b++));
}
A、12 B、15 C、16 D、28
91、下面程序的输出结果是___B___。
#include<stdio.h>
#define FUN(x,y) x*y
void main()
{
int a=1,b=2;
printf("%d",FUN(a+b,a-b));
}
A、 -3 B、1 C、 -1 D、0
92、下面程序的输出结果是____C____。
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{
int a=1,b=2,c;
c=10*MIN(a,b);
printf("%d",c);
}
A、1 B、10 C、 2 D、20
93、下面程序的输出结果是____C____。
struct st
{
int x; int *y;
};
int dt[4]={10,20,30,40};
struct st *p,aa[4]={50,&dt[0],
60,&dt[1],
70,&dt[2],
80,&dt[3]};
void main()
{
p=aa;
printf("%d\n",++p→x);
printf("%d\n",(++p)→x);
printf("%d\n",++(*p→y));
}
A、10 B、50 C、51 D、60
20 60 60 70
20 21 21 31
94、以下程序的运行结果为____D____。
#include<stdio.h>
void main()
{
struct date
{
int year,month,day;
}today;
printf("%d\n",sizeof(struct date))
}
A、6 B、8 C、10 D、12
填空题(41道)
读程序题(30道)
程序填空(17道)
此题s[j]=s[i]处有bug,程序会崩溃,暂时无法解决!
此题s[j]=s[i]处有bug,程序会崩溃有bug,暂时无法解决!
此题s[j]=s[i]处有bug,程序会崩溃有bug,暂时无法解决!
编程题(6道)