程序设计基础(山东工商学院) 知到智慧树答案2024 z24697


第一章 单元测试

1、
一个C程序可能出现的错误有

A:

语法错误

B:

逻辑错误

C:

运行错误

D:

语法错误、逻辑错误、运行错误

答案:

语法错误、逻辑错误、运行错误

2、
C程序中一般可以包含几个函数

A:0个
B:1个
C:至少1个
D:必须多于2个
答案: 至少1个

3、
关于C语言,以下描述中错误的是

A:一个C程序总是从main函数开始执行
B:每个语句的最后必须有一个分号
C:一个C程序可以包含多个main函数
D:C语言的注释符是以”/*”开始并以”*/”结束
答案: 一个C程序可以包含多个main函数

4、
逻辑错误是指

A:程序的运行结果不正确
B:所书写的语句,不符合C的语法
C:在exe文件的执行过程中,产生运行异常
D:在从obj生成exe文件的过程中,如果函数名书写错误,可能产生的错误
答案: 程序的运行结果不正确

5、
计算机能直接执行的文件是

A:扩展名为c的文件
B:扩展名为obj的文件
C:扩展名为txt的文件
D:扩展名为exe的文件
答案: 扩展名为exe的文件

6、
程序的运行结果不正确,这种错误属于

A:语法错误
B:连接错误
C:逻辑错误
D:编译错误
答案: 逻辑错误

7、
在函数体中,关于数据定义语句和非数据定义语句(即执行语句)的位置,下面说法正确的是

A:C89标准:所有数据定义语句必须在任何非数据定义语句的前面
B:C89标准:有些必须放在前面,有些可以放在后面
C:C89标准:没有要求
D:C99标准:所有数据定义语句必须在任何非数据定义语句的前面
答案: C89标准:所有数据定义语句必须在任何非数据定义语句的前面

8、
在C语言程序中

A:main函数必须放在程序的开始位置
B:main函数可以放在其它函数的前面、后面或中间
C:main函数必须放在程序的最后
D:main函数只能出现在库函数中
答案: main函数可以放在其它函数的前面、后面或中间

9、
C语言属于程序设计语言的哪个类别?

A:机器语言
B:高级语言
C:汇编语言
D:面向对象语言
答案: 高级语言

10、
下列选项中,属于多行注释的是

A:\\
B:/**/
C:/*
D://
答案: /**/

11、
以下四个程序中,完全正确的是

A:
#include
int main()
{
/* programming */
printf(“programming!\n”);
return 0;
}

B:
#include
int main()
{
/*/* programming */*/
printf(“programming!\n”);
return 0;
}

C:include
int main()
{
/* programming */
printf(“programming!\n”);
return 0;
}

D:#include
int main();
{
/*/ programming /*/
printf(“programming!\n”);
return 0;
}

答案:
#include
int main()
{
/* programming */
printf(“programming!\n”);
return 0;
}

第二章 单元测试

1、
以下哪个选项是合法的用户自定义标识符

A:b-b
B:123asd
C:float
D:_isw
答案: _isw

2、
下面选项中,属于合法的字符常量的是

A:”\084″
B:”\x43″
C:”ab”
D:”\0″
答案: “\x43”

3、
下面几组代码正确的是

A:const int a;
B:const int a; a=1;
C:const int a=1;
D:int const a=1;
答案: const int a=1;

4、
正确定义3个变量并为它们赋初值5的是

A:int x=y=z=5;
B:int x,y,z=5;
C:int x=5,y=5,z=5;
D:x=y=z=5;
答案: int x=5,y=5,z=5;

5、
下面4个选项中,能使符号常量代表3的定义是

A:define N 3
B:#define N=3
C:#define N 3;
D:#define N 3
答案: #define N 3

6、
设整数和实数的大小都不超过各自变量的存储范围,下面4种说法中,正确的是

A:整数和实数的存储都不是精确的
B:整数的存储都是精确的,实数的存储都不是精确的
C:整数的存储不都是精确的,实数的存储都不是精确的
D:整数的存储都是精确的,实数的存储不都是精确的
答案: 整数的存储都是精确的,实数的存储不都是精确的

7、
下面4个选项中,全部都是合法整型常量的是

A:160,-0xffff,011
B:-0xcdf,01A,0xe
C:-01,012,0668
D:-0x48A,2e5,0x
答案: 160,-0xffff,011

8、
下面4个选项中,均不是合法浮点数的选项是

A:160.,0.12,e3
B:123,2e4.2,e5
C:-.18,123e4,0.0
D:-e3,.234,1e3
答案: 123,2e4.2,e5

9、
c是字符变量,关于语句“c=”A”+”6″-3;”,下面说法正确的是

A:执行后c的值是”D”
B:执行后c的值是68
C:执行后c的值是”t”
D:无法执行
答案: 执行后c的值是”t”

10、
设有定义
char c=’CHINA’;
则下面说法正确的是

A:

c是一个字符串变量

B:

c占用6个字节的内存

C:

c的有效字符个数是5

D:

其他说法都不正确

答案:

其他说法都不正确

11、
参与运算的对象必须是整数的运算符是

A:%
B:/
C:%和/
D:*
答案: %

12、
int x=10,y=3;
printf(“%d,%d\n”,x–,–y);
上面程序段的运行结果是

A:10 2
B:10,3
C:9,3
D:10,2
答案: 10,2

13、
char a=”1″,b=”2″;
printf(“%c,”,b++);
printf(“%d\n”,b-a);
数字0的ASCII码是48,上面程序段的运行结果是

A:3,2
B:50,2
C:2,2
D:2,50
答案: 2,2

14、
字符串”ab\108g”在内存中占的字节数是

A:8
B:7
C:6
D:5
答案: 6

15、
表达式a*=b+c与下列哪个表达式等价

A:

a=a*b+c

B:

a=a*(b+c)

C:

a=a*b=b+c

D:

其余都不对

答案:

a=a*(b+c)

16、
若有定义
int a=10,c=2; const int b=5;
则以下赋值表达式正确的是

A:a=(b+c)*6
B:(a+b)=c*8
C:6=a
D:b=10
答案: a=(b+c)*6

17、
设a、b都是int型变量,则表达式(a=1,a+=1,b=a,b*2,a+b)的值是

A:

6

B:

4

C:

2

D:

其余都不对

答案:

4

18、
表达式(“A”+0.32f)计算结果的类型是

A:char
B:int
C:float
D:double
答案: double

19、
设有数据定义
char c1=65,c2=66;
int a1=1,a2=2;
float x1=1.1, x2=2.2;
则下面四个选项中,系统不进行类型转换就能直接运算的是

A:c1+c2
B:a1+a2
C:x1+x2
D:c1+a1
答案: a1+a2

第三章 单元测试

1、
char x=0xffff;
printf(“%d\n”,x–);
上面程序段的运行结果是

A:-32767
B:fffe
C:-1
D:-32768
答案: -1

2、
double d;
float f;
long l;
int i;
i=f=l=d=20/3;
printf(“%d,%1d,%.1f,%.1f,”,i,l,f,d);
上面程序段的运行结果是

A:6,6,6.0,6.0
B:6,6,6.7,6.7
C:6,6,6.0,6.7
D:6,6,6.7,6.0
答案: 6,6,6.0,6.0

3、
unsigned a=65535;
printf(“%d,%o,%x”,a,a,a);
TC中整型变量占2个字节,则上面程序段的运行结果是

A:-1,177777,ffff
B:65535,65535,65535
C:-1,65535,ffff
D:65535,177777,ffff
答案: -1,177777,ffff

4、
关于putchar()的说法正确的是

A:其作用由用户向计算机输出一个字符
B:putchar()函数括号中可以写字符变量或常量,也可以写整型变量或常量
C:putchar()可用于输出字符串
D:putchar()不能对转义字符进行操作
答案: putchar()函数括号中可以写字符变量或常量,也可以写整型变量或常量

5、
要从键盘给两个整型变量a、b输入数据,输入格式是1,2,能完成此任务的代码是

A:getchar(a,b);
B:scanf(“%d%d”,a,b);
C:scanf(“%d,%d”,&a,&b);
D:scanf(“%d%d”,&a,&b);
答案: scanf(“%d,%d”,&a,&b);

6、
想通过代码“scanf(“%d%d,%d”,&a,&b,&c);”把1、2、3分别存入3个整型变量a、b、c,则正确的键盘输入应该是

A:1,2,3
B:12,3
C:1 23
D:123
答案: 12,3

7、
关于格式控制字符串%-m.ns,正确的说法是

A:m表示输出的字符串最少占m列,n为小数精度
B:如果n>m,则只截取m个字符,其余的舍弃
C:如果n>m,则截取n个字符输出,突破m的限制
D:如果n<m< span=””>,则字符串向右靠拢,左端补0</m<>
答案: 如果n>m,则截取n个字符输出,突破m的限制

8、
以下不属于格式控制字符的是

A:%f
B:%D
C:%E
D:%X
答案: %D

9、
a、b、c都是整型变量,用“scanf(“%d %2d %*2d %d”,&a,&b,&c);”给3个变量输入数据,设输入格式是12 34 56 78,则3个变量的值分别是

A:12,34,56
B:12,34,78
C:1,34,78
D:1,34,7
答案: 12,34,78

10、
char c1=”1″,c2=”2″;
c1=getchar();
c2=getchar();
上面的程序段运行时从键盘输入a,则正确的叙述是

A:c1被赋予字符a,c2被赋予换行符
B:程序将等待输入第二个字符
C:c1被赋予字符a,c2维持原值
D:c1被赋予字符a,c2无确定值
答案: c1被赋予字符a,c2被赋予换行符

11、
int i;
float f;
scanf(“i=%d,f=%f”,&a,&f);
上面程序段准备把10和5.12分别存给i和f,正确的输入是()。

A:10<空格>5.12
B:i=10,f=5.12
C:105.12
D:i=10f=5.12
答案: i=10,f=5.12

12、
int a;
char b;
float c;
scanf(“%d%c%f”,&a,&b,&c);
若上面程序段运行时键盘输入的字符序列为2223a123o.12,则a、b、c的值分别是

A:原值不变
B:2223,a,123o.12
C:2223,a,原值
D:2223,a,123
答案: 2223,a,123

第四章 单元测试

1、
int a=3,b=2,c=1,f;
f=a>b>c;
上面程序段执行后,f的值是

A:1
B:0
C:2
D:不确定
答案: 0

2、
#include
void main ( )
{
int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);
 printf (“%d,%d”,k,m);
}
</b);
上面程序的运行结果是

A:0,0
B:0,1
C:1,0
D:1,1
答案: 1,0

3、
以下四个选项中,执行完程序段后y的值不为3的是

A:int x=5,y=2; if(x) y=3;
B:int x=5,y=2; if(2) y=3;
C:int x=0,y=2; if(x=y) y=3;
D:int x=0,y=0; if(x=y) y=3;
答案: int x=0,y=0; if(x=y) y=3;

4、
int a=2,b=-1,c=2;
if(a<b)
if(b<0)
c=0;
else c++;
</b)
上面的程序段执行后,c的值是

A:0
B:1
C:2
D:3
答案: 2

5、
int x=10,y=20,z=30;
if(x>y)
z=x;x=y;y=z;
上面代码段执行后,x,y,z的值是

A:20,30,30
B:20,30,10
C:20,10,10
D:10,20,30
答案: 20,30,30

6、
逻辑运算符中,运算优先级按从高到低正确排序的是

A:&& ! ||
B:|| && !
C:! || &&
D:! && ||
答案: ! && ||

7、
以下是if语句的基本形式:

if(表达式)语句

其中“表达式”

A:必须是逻辑表达式
B:必须是关系表达式
C:必须是逻辑表达式或关系表达式
D:可以是任意合法的表达式
答案: 可以是任意合法的表达式

8、
若有表达式(!w)?(–x):(++y),则下列选项中与其等价的表达式是

A:(w==1)?(–x):(++y)
B:(w==0)?(–x):(++y)
C:(w!=1)?(–x):(++y)
D:(w!=0)?(–x):(++y)
答案: (w==0)?(–x):(++y)

9、
int w=”b”,x=14,y=15;
w=((x||y)&&(w<“a”));
执行上面程序段后,w的值为

A:-1
B:NULL
C:1
D:0
答案: 0

10、
if((x=y=2)>=x&&x=5)
y*=x;
上面程序段执行后,整型变量x、y的值分别是

A:2、4
B:5、2
C:5、10
D:存在语法错误
答案: 存在语法错误

11、
int x,y;
scanf(“%d%d”,&x,&y);
if(x>y)
x=y;y=x;
else
x++;y++;
printf(“%d,%d”,x,y);
关于上面程序段,下列说法正确的是

A:有语法错误
B:若输入“3 4”,输出“4,5”
C:若输入“4 3”,输出“3,4”
D:若输入“4 3”,输出“4,4”
答案: 有语法错误

12、
1. #include
2. int main()
3. {
4. int m;
5. printf(“Input m: “);
6. scanf(“%d”, &m); //输入一个整数
7. if (m > 0) //是否为正数
8. {
9. if (m % 2 == 0) //是正数,且能被2整除,则是正偶数
10. {
11. printf(“%d is a positive even\n”, m);
12. }
13. else //不能被2整除,则是正奇数
14. {
15. printf(“%d is a positive odd\n”, m);
16. }
17. }
18.
19. _______________ //判断是否为负数
20.
21. {
22. _______________
23.
24. {
25. printf(“%d is a negative even\n”, m); //是负偶数
26. }
27. else
28. {
29. printf(“%d is a negative odd\n”, m); //是负奇数
30. }
31. }
32. else
33. {
34. printf(“%d is zero.It is an even\n”, m);
35. }
36. return 0;
37. }
上面程序代码的功能是判断输入整数的正负性和奇偶性,请将第19行和22行标号处缺少的代码填写完整

A:第19行代码: else if(m < 0)

第22行代码: if (m % 2 == 0)
B:第19行代码: else if(m < 0)

第22行代码: if (m % 2 != 0)
C:第19行代码: if(m < 0)

第22行代码: if (m % 2 != 0)

D:第19行代码: if(m < 0) 第22行代码: if (m % 2 == 0)

答案: 第19行代码: else if(m < 0)

第22行代码: if (m % 2 != 0)

13、
以下程序段中,与语句: k=a>b?(b>c?1:0):0;功能相同的是

A:if((a>b)&&(b>c)) k=1; else k=0;
B:if((a>b)||(b>c)) k=1; else k=0;
C:if(a<=b) k=0; else if(b<=c) k=1;
D:if(a>b) k=1; else if(b>c) k=1; else k=0;
答案: if((a>b)&&(b>c)) k=1; else k=0;

14、
int x=1,a=0,b=0;
switch(x)
{
case 0:b++;
case 1:a++;
case 2:a++;b++;
}
上面程序段执行后,a,b的值分别是

A:2,1
B:1,1
C:1,0
D:2,2
答案: 2,1

15、
int x=1,y=2,z=3;
switch(x=1){
case 1:
switch(y==2){
case 1:printf(“*”);break;
case 2:printf(“%”);break;
}
case 0:
switch(z){
case 1:printf(“$”);break;
case 2:printf(“&”);break;
default:printf(“#”);
}
}
上面程序段的运行结果是

A:*#
B:$
C:%#
D:*$
答案: *#

第五章 单元测试

1、
对于while语句,错误的说法是

A:可以用条件控制循环体的执行次数
B:循环体至少要执行一次
C:循环体有可能一次也不执行
D:循环体可以是包含若干条语句的复合语句
答案: 循环体至少要执行一次

2、
对于整型变量x,与while(!x)等价的是

A:while(x!=0)
B:while(x!=1)
C:while(x==0)
D:while(x==1)
答案: while(x==0)

3、
以下描述正确的是

A:由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B:do-while循环由do开始,用while结束,在while(表达式)后面必须写分号
C:在do-while循环体中,一定要有能使while后面表达式的值变成零(“假”)的操作
D:do-while循环中,根据情况可以省略while
答案: do-while循环由do开始,用while结束,在while(表达式)后面必须写分号

4、
#include
int main()
{
int x,i;
for(x=3;x<=100;x++){
if(x%2==0) _____;
for(i=2;i<=x-1;i++)
if(x%i==0) _____;
if(i==x) printf(“%d”,x);
}
return 0;
}
上面程序的功能是找出3~100间的素数,程序中所缺的两处应为

A:break break
B:continue continue
C:continue break
D:break continue
答案: continue break

5、
设变量已正确定义,下面程序中能计算f=n!的是

A:f=0;for(i=1;i<=n;i++) f*=i;
B:f=1;for(i=1;i<n;i++) f*=”i;</span”>
C:f=1;for(i=n;i>1;i++) f*=i;
D:f=1;for(i=n;i>=2;i–) f*=i;
答案: f=1;for(i=n;i>=2;i–) f*=i;</n;i++)>

6、
#include
int main()
{
int x,s=0;
for(x=1;x<=5;x++){
switch(x%3){
case 0:
default:s+=3;
case 1:s+=1;break;
case 2:s+=2;
}
}
printf(“%d”,s);
return 0;
}
上面程序的运行结果是

A:6
B:7
C:10
D:13
答案: 10

7、
#include
int main()
{
int i,j;
for(i=3;i>=1;i–)
{
for(j=1;j<=2;j++)
printf(“%d”,i+j);
printf(” “);
}
return 0;
}
上面程序的运行结果是

A:23 43 45
B:43 25 43
C:23 34 45
D:45 34 23
答案: 45 34 23

8、
#include
int main()
{
int i=10,x=0;
for( ;i<10;i++)
x=x+i;
printf(“%d”,x);
return 0;
}
上面程序运行后,循环体运行的次数为

A:10
B:0
C:1
D:无限
答案: 0

9、
以下不是死循环的是

A:for(;;x+=k);
B:for (;(c=getchar())!=”\n”;) printf(“%c”,c);
C:for (k=10;;k–) sum=sum+k;
D:while(1){x++;}
答案: for (;(c=getchar())!=”\n”;) printf(“%c”,c);

10、
以下正确的说法是

A:continue 语句的作用是结束整个循环的执行
B:只能在循环体内和switch语句内使用break语句
C:在循环体内使用break和continue的作用相同
D:从多层循环嵌套内退出时,只能使用goto语句
答案: 只能在循环体内和switch语句内使用break语句

11、
有关for语句正确的是

A:只用于循环次数已经确定的情况
B:for循环是先执行循环体语句,后判断表达式
C:for循环中,不能用break跳出循环体
D:for语句的循环体只能是一条语句
答案: for语句的循环体只能是一条语句

12、
#include
int main()
{
int i=1,n=1;
for( ;i<3;i++)
{
continue;
n=n+i;
}
printf(“%d”,n);
return 0;
}
上面程序运行后,变量n的值为

A:4
B:3
C:2
D:1
答案: 1

13、
#include
int main()
{
int x,s;
for(x=0,s=0;x<=10;x++)
{
if(x%3==0)
continue;
else
{
if(x%4==0)
continue;
else s+=x;
if(s%5==0) break;

}
}
printf(“%d”,s);
return 0;
}
上面程序的运行结果是

A:35
B:25
C:15
D:5
答案: 15

14、
#include
int main()
{
int x=012;
do
printf(“%d”,x–);
while(–x);
return 0;
}
上面程序的运行结果是

A:86420
B:108642
C:10864
D:8642
答案: 108642

15、
#include
int main()
{
int s=0,i=5;
while(s+=i,i-=2)
printf(“%d”,s);
return 0;
}
上面程序的运行后,循环的执行次数是

A:5
B:9
C:15
D:死循环
答案: 死循环

第六章 单元测试

1、
fun(float x)
{
float y;
long z;
y=x*x;
z=(long)y;
return(z);
}
上面fun函数的类型是

A:void
B:int
C:long
D:float
答案: int

2、
以下正确的函数声明形式是

A:double fun(x,y);
B:double fun(int x; int y);
C:double fun(int x, y);
D:double fun(int x, int y);
答案: double fun(int x, int y);

3、
有以下函数定义:void fun(int n,double x) {…} ,若以下选项中的变量都已经正确定义且赋值,则对函数fun的正确调用语句是

A:fun(int y,double m);
B:k=fun(10,12.5);
C:fun(10,12.5);
D:void fun(n,x);
答案: fun(10,12.5);

4、
#include
int a, b;
void swap( )
{
int t;
t=a; a=b; b=t;
}
int main()
{
scanf(“%d,%d”, &a, &b);
swap( );
printf (“a=%d,b=%d\n”,a,b);
return 0;
}
假设用户输入5,3,上面程序的运行结果是

A:a=5,b=3
B:a=3,b=5
C:5,3
D:3,5
答案: a=3,b=5

5、
#include
void fun (int a,int b,int c)
{
a=456;
b=567;
c=678;
}
int main()
{
int x=10, y=20,z=30;
fun (x,y,z);
printf(“%d,%d,%d\n”,x,y,z);
return 0;
}
上面程序的运行结果是

A:30,20,10
B:10,20,30
C:456567678
D:678567456
答案: 10,20,30

6、
#include
void f(int x)
{ }
int main()
{
int a=1;
f(a);
return 0;
}
若有上面的程序,其中正确的是

A:x是形参,a是形参
B:x是形参,a是实参
C:x是实参,a是形参
D:x是实参,a是实参
答案: x是形参,a是实参

7、
以下不正确的说法是,C语言规定

A:实参可以是常量、变量或表达式
B:形参可以是常量、变量或表达式
C:实参个数与其对应的形参个数必须相等
D:实参应与其对应的形参类型一致或者兼容
答案: 形参可以是常量、变量或表达式

8、
#include
long fib(int g)
{
switch(g)
{
case 0:return 0;
case 1:
case 2:return 1;
}
return ;
}
int main()
{
long k;
k=fib(7);
printf(“k=%ld\n”,k);
}
上面的程序用递归定义的方法实现求菲波拉契数列1、1、2、3、5、8……第7项的值为fib(7),请将程序补充完整.

A:fib(7)
B:fib(g)+fib(g-1)
C:fib(g)+fib(g)
D:fib(g-1)+fib(g-2)
答案: fib(g-1)+fib(g-2)

9、
以下对函数的描述中正确的是

A:调用函数时,只能把实参值传给形参,形参值不能传给实参
B:函数既可以嵌套定义又可以嵌套调用
C:函数必须有返回值,否则不能使用函数
D:自定义函数不可以去调用主函数
答案: 调用函数时,只能把实参值传给形参,形参值不能传给实参

10、
若调用一个函数,且此函数中没有return语句,则正确的说法是该函数

A:没有返回值
B:返回若干个系统默认值
C:返回一个用户所希望的函数值
D:返回一个不确定的值
答案: 返回一个不确定的值

11、
#include
int fun(int n)
{
if(n==1)
return 1;
else
return(n+fun(n-1));

}
int main(){
int x;
scanf(“%d”,&x);
x=fun(x);
printf(“%d”,x);
return 0;
}
若输入10,上面的程序运行结果是

A:55
B:54
C:65
D:45
答案: 55

12、
函数调用时,若实参是变量,则实参和它对应的形参之间的传递方式是

A:双向传递
B:单向传递
C:由实参传给形参,再由形参传回给实参
D:由用户指定的传递方式
答案: 单向传递

13、
C语言允许函数值类型缺省定义,此时该函数值隐含的类型是

A:float型
B:int型
C:long型
D:double 型
答案: int型

14、
关于C语言函数的描述中,正确的是

A:函数的定义可以嵌套,但函数的调用不可以嵌套
B:函数的定义不可以嵌套,但函数的调用可以嵌套
C:函数的定义和函数的调用都可以嵌套
D:函数的定义和函数的调用都不可以嵌套
答案: 函数的定义不可以嵌套,但函数的调用可以嵌套

第七章 单元测试

1、
若在一个函数的复合语句中定义了一个变量,则该变量

A:只在该复合语句中有效
B:在该函数中有效
C:在本源文件范围内有效
D:定义非法
答案: 只在该复合语句中有效

2、
某源文件中定义了一个全局变量,其作用范围是

A:整个源文件的范围
B:所有源文件
C:从定义处到本源文件结束
D:不知道有无声明,所以不确定
答案: 不知道有无声明,所以不确定

3、
在函数体中定义的局部变量,其作用范围是

A:定义它的函数内
B:定义它的大括号内
C:定义它的源文件内
D:所有源文件
答案: 定义它的大括号内

4、
函数形参的声明不在任何大括号内,关于形参,下列说法正确的是

A:形参是全局变量
B:形参只是一个符号,不表示变量
C:形参是动态局部变量
D:形参是静态局部变量
答案: 形参是动态局部变量

5、
函数中未指定存储类型的局部变量,其存储类型是

A:static
B:extern
C:auto
D:register
答案: auto

6、
关于静态局部变量,正确的说法是

A:

程序装载时分配空间,程序结束时才释放空间

B:

执行到它的作用域时分配空间,离开它的作用域时释放空间

C:

从分配空间到程序结束,它一直存在,期间在任何地方都可以使用它

D:

其他几种说法都不对

答案:

程序装载时分配空间,程序结束时才释放空间

7、
定义了一个变量但未赋初值,关于它的初值,下面说法正确的是

A:若是static型的全局变量,为0;若是extern型的全局变量,则不确定
B:若是全局变量,则为0;若是局部变量,则不确定
C:若是静态局部变量,则为0;若是自动变量或寄存器变量,则不确定
D:若是动态存储,则为0;若是静态存储,则不确定
答案: 若是静态局部变量,则为0;若是自动变量或寄存器变量,则不确定

8、
关于全局变量的生存期,下面说法正确的是

A:从程序装载到程序运行结束

B:取决于它定义的位置
C:取决于它所在的函数
D:从源文件开始执行到源文件执行结束
答案: 从程序装载到程序运行结束

9、
若全局变量定义时未规定属性,则它的属性是

A:static
B:extern
C:auto
D:register
答案: extern

10、
#include
int a=2,b=3;
int max(int a,int b)
{
int c;
c=a>b?a:b;
printf(“%d”,c);
return c;
}
int main()
{
int a=4;
max(a,b);
printf(“%d”,max(a,b));
return 0;
}
上面程序的运行结果是

A:24
B:4
C:34
D:444
答案: 444

11、
int fac (int n)
{
static int f=1;
f*=n;
return f;
}
int main()
{
int i,n;
for(i=1;i<=5;i++)
n=fac(i);
printf(“%d”,n);
return 0;
}
上面程序的运行结果是

A:5
B:24
C:100
D:120
答案: 120

12、
根据变量的作用域将变量分为

A:全局变量和局部变量
B:静态变量和动态变量
C:自动变量和临时变量
D:自动变量和寄存器变量
答案: 全局变量和局部变量

13、
全局变量和局部静态变量分配空间的时机是

A:主函数结束时
B:执行到作用域的时候
C:装载exe文件时
D:主函数执行时
答案: 装载exe文件时

14、
下列变量在程序运行过程中不占内存空间的是

A:全局变量
B:自动局部变量
C:寄存器变量
D:静态局部变量
答案: 寄存器变量

15、
下面哪种类别的变量允许在其它源文件中使用?

A:auto
B:register
C:extern
D:static
答案: extern

第八章 单元测试

1、
下面说法错误的是

A:宏展开只是简单地文字替换
B:宏展开能发现宏定义中的错误
C:宏展开不会出现编译错误
D:宏展开不会进行数据类型的判别
答案: 宏展开能发现宏定义中的错误

2、
设有宏定义
#define PI 3.14159
在宏展开时,3.14159会被认为是

A:单精度实数
B:双精度实数
C:字符串
D:7个文字符号
答案: 7个文字符号

3、
文件包含时,可以用<>也可以用””将被包含文件括起来,下面说法正确的是

A:两者作用相同
B:能用””的一般也可以用<>
C:能用<>的一般也可以用””
D:能用<>的不能用””,反之亦然
答案: 能用<>的一般也可以用””

4、
文件包含命令中若用<>包括被包含的文件,表示

A:要到本源文件所在的目录中查找它
B:到系统设定的包含目录中查找它
C:既到系统设定的目录中查找,又到本源文件所在目录查找
D:其他几种说法都不对
答案: 到系统设定的包含目录中查找它

5、
若有宏定义
#define N 2+1
则printf(“%d”,N*(N+1))的输出结果是

A:6
B:12
C:8
D:5
答案: 6

6、
有一种方法可以避免一个文件的内容被包含两次或以上,该方法除了文件包含命令外,还需要使用

A:宏定义
B:条件编译
C:宏定义和条件编译
D:宏定义和分支结构
答案: 宏定义和条件编译

7、
下面关于条件编译的说法,正确的是

A:条件编译就是在程序执行时,根据条件选择一部分代码执行
B:条件编译就是在正式编译时,根据条件选择一部分代码留下参与编译,另一部分舍弃
C:条件编译两个分支中若都有代码,则这两部分代码都要参加编译
D:若一个程序既能写成条件编译,又能写成分支结构,则用条件编译写成的源程序比用分支结构写成的源程序将来生成的可执行文件更短
答案: 若一个程序既能写成条件编译,又能写成分支结构,则用条件编译写成的源程序比用分支结构写成的源程序将来生成的可执行文件更短

8、
若有定义
#define M(n) a=n*2
int a;
则printf(‘%d’,M(5+1)*3)的输出结果是

A:11
B:36
C:21
D:其他答案都不对
答案: 11

第九章 单元测试

1、
下面四段程序中,能正确输出变量a的值的是

A:int a=1,*p;
*p=a;
printf(“%d”,*p);
B:int a=1,*p=a; printf(“%d”,*p);
C:int a=1, *p=&a; printf(“%d”,*p);
D:int a=1, *p; *p=&a; printf(“%d”,*p);
答案: int a=1, *p=&a; printf(“%d”,*p);

2、
要定义两个指针变量,下面代码正确的是

A:int *p1,*p2;
B:int *p1, int *p2;
C:int* p1,p2;
D:int *(p1,p2);
答案: int *p1,*p2;

3、
若有定义:
int *p;
则以下说法正确的是

A:变量名为*p
B:变量类型为int
C:变量名为p
D:变量基类型为int*
答案: 变量名为p

4、
若有定义
int x,*p;
则能使p指向x的表达式是

A:p=x
B:p=&x
C:*p=x
D:p=*x
答案: p=&x

5、
若有定义:
int *p, a=1, b;
则以下正确的程序段是

A:p=&b;
scanf(”%d”,&p);
B:scanf(“%d”, &b);
*p=b;
C:p=&b;
scanf(“%d”,*p);
D:p=&b;
scanf(“%d”,p);
答案: p=&b;
scanf(“%d”,p);

6、
若有定义:
int a=511, *b=&a;
则printf(“%d\n”, *b)的输出结果为

A:不确定值
B:a的地址
C:b的地址
D:511
答案: 511

第十章 单元测试

1、
以下对一维数组a的定义中正确的是

A:char a(10);
B:int a[0..100];
C:int a[5];
D:int k=10;int a[k];
答案: int a[5];

2、
以下对一维数组的定义中不正确的是

A:double x[5]={2.0,4.0,6.0,8.0,10.0};
B:int y[5]={0,1,3,5,7,9};
C:char ch1[ ]={“1”, “2”, “3”, “4”, “5”};
D:char ch2[ ]={“\x10”, “\xa”, “\x8”};
答案: int y[5]={0,1,3,5,7,9};

3、
以下对二维数组的定义中正确的是

A:int a[4][]={1,2,3,4,5,6};
B:int a[][3];
C:int a[][3]= {1,2,3,4,5,6};
D:int a[][]={{1,2,3},{4,5,6}}
答案: int a[][3]= {1,2,3,4,5,6};

4、
假定一个int型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是

A:3
B:6
C:10
D:20
答案: 20

5、
#include
int main()
{
int a[4][4]= {{1,3,5},{2,4,6},{3,5,7}};
printf(“%d%d%d%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]);
}
上面程序的运行结果是

A:0650
B:1470
C:5430
D:输出值不定
答案: 0650

6、
#include
int main()
{
int m[][3]= {1,4,7,2,5,8,3,6,9};
int i,j,k=2;
for(i=0; i<3; i++) {
printf(“%d “,m[k]);
}
return 0;
}
上面程序的运行结果是

A:4 5 6
B:2 5 8
C:3 6 9
D:7 8 9
答案: 3 6 9

7、
#include
int main()
{
int b[3][3]= {0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0; i<3; i++)
for(j=i; j<=i; j++)
t=t+b[b[j][j]];
printf(“%d\n”,t);
return 0;
}
上面程序的输出结果是

A:3
B:4
C:1
D:9
答案: 3

8、
若有定义:int a[2][4];,则引用下标变量正确的是

A:a[0][3]
B:a[0][4]
C:a[2][2]
D:a[2][2+1]
答案: a[0][3]

9、
若有定义:int aa[8];,则不能代表数组元素aa[1]地址的是

A:&aa[0]+1
B:&aa[1]
C:&aa[0]++
D:aa+1
答案: &aa[0]++

10、
若二维数组y有m列,则排在y[j]前的元素个数为

A:j*m+i 
B:i*m+j
C:i*m+j-1 
D:i*m+j+1
答案: i*m+j

11、
若定义一个名为s且初值为”123″的字符数组,则下列定义错误的是

A:char s[]={’1″,”2″,”3″,”[ck8_view=5]

第三章 单元测试

1、
char x=0xffff;
printf(“%d\n”,x–);
上面程序段的运行结果是

A:-32767
B:fffe
C:-1
D:-32768
答案: -1

2、
double d;
float f;
long l;
int i;
i=f=l=d=20/3;
printf(“%d,%1d,%.1f,%.1f,”,i,l,f,d);
上面程序段的运行结果是

A:6,6,6.0,6.0
B:6,6,6.7,6.7
C:6,6,6.0,6.7
D:6,6,6.7,6.0
答案: 6,6,6.0,6.0

3、
unsigned a=65535;
printf(“%d,%o,%x”,a,a,a);
TC中整型变量占2个字节,则上面程序段的运行结果是

A:-1,177777,ffff
B:65535,65535,65535
C:-1,65535,ffff
D:65535,177777,ffff
答案: -1,177777,ffff

4、
关于putchar()的说法正确的是

A:其作用由用户向计算机输出一个字符
B:putchar()函数括号中可以写字符变量或常量,也可以写整型变量或常量
C:putchar()可用于输出字符串
D:putchar()不能对转义字符进行操作
答案: putchar()函数括号中可以写字符变量或常量,也可以写整型变量或常量

5、
要从键盘给两个整型变量a、b输入数据,输入格式是1,2,能完成此任务的代码是

A:getchar(a,b);
B:scanf(“%d%d”,a,b);
C:scanf(“%d,%d”,&a,&b);
D:scanf(“%d%d”,&a,&b);
答案: scanf(“%d,%d”,&a,&b);

6、
想通过代码“scanf(“%d%d,%d”,&a,&b,&c);”把1、2、3分别存入3个整型变量a、b、c,则正确的键盘输入应该是

A:1,2,3
B:12,3
C:1 23
D:123
答案: 12,3

7、
关于格式控制字符串%-m.ns,正确的说法是

A:m表示输出的字符串最少占m列,n为小数精度
B:如果n>m,则只截取m个字符,其余的舍弃
C:如果n>m,则截取n个字符输出,突破m的限制
D:如果n<m< span=””>,则字符串向右靠拢,左端补0</m<>
答案: 如果n>m,则截取n个字符输出,突破m的限制

8、
以下不属于格式控制字符的是

A:%f
B:%D
C:%E
D:%X
答案: %D

9、
a、b、c都是整型变量,用“scanf(“%d %2d %*2d %d”,&a,&b,&c);”给3个变量输入数据,设输入格式是12 34 56 78,则3个变量的值分别是

A:12,34,56
B:12,34,78
C:1,34,78
D:1,34,7
答案: 12,34,78

10、
char c1=”1″,c2=”2″;
c1=getchar();
c2=getchar();
上面的程序段运行时从键盘输入a,则正确的叙述是

A:c1被赋予字符a,c2被赋予换行符
B:程序将等待输入第二个字符
C:c1被赋予字符a,c2维持原值
D:c1被赋予字符a,c2无确定值
答案: c1被赋予字符a,c2被赋予换行符

11、
int i;
float f;
scanf(“i=%d,f=%f”,&a,&f);
上面程序段准备把10和5.12分别存给i和f,正确的输入是()。

A:10<空格>5.12
B:i=10,f=5.12
C:105.12
D:i=10f=5.12
答案: i=10,f=5.12

12、
int a;
char b;
float c;
scanf(“%d%c%f”,&a,&b,&c);
若上面程序段运行时键盘输入的字符序列为2223a123o.12,则a、b、c的值分别是

A:原值不变
B:2223,a,123o.12
C:2223,a,原值
D:2223,a,123
答案: 2223,a,123

第四章 单元测试

1、
int a=3,b=2,c=1,f;
f=a>b>c;
上面程序段执行后,f的值是

A:1
B:0
C:2
D:不确定
答案: 0

2、
#include
void main ( )
{
int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);
 printf (“%d,%d”,k,m);
}
</b);
上面程序的运行结果是

A:0,0
B:0,1
C:1,0
D:1,1
答案: 1,0

3、
以下四个选项中,执行完程序段后y的值不为3的是

A:int x=5,y=2; if(x) y=3;
B:int x=5,y=2; if(2) y=3;
C:int x=0,y=2; if(x=y) y=3;
D:int x=0,y=0; if(x=y) y=3;
答案: int x=0,y=0; if(x=y) y=3;

4、
int a=2,b=-1,c=2;
if(a<b)
if(b<0)
c=0;
else c++;
</b)
上面的程序段执行后,c的值是

A:0
B:1
C:2
D:3
答案: 2

5、
int x=10,y=20,z=30;
if(x>y)
z=x;x=y;y=z;
上面代码段执行后,x,y,z的值是

A:20,30,30
B:20,30,10
C:20,10,10
D:10,20,30
答案: 20,30,30

6、
逻辑运算符中,运算优先级按从高到低正确排序的是

A:&& ! ||
B:|| && !
C:! || &&
D:! && ||
答案: ! && ||

7、
以下是if语句的基本形式:

if(表达式)语句

其中“表达式”

A:必须是逻辑表达式
B:必须是关系表达式
C:必须是逻辑表达式或关系表达式
D:可以是任意合法的表达式
答案: 可以是任意合法的表达式

8、
若有表达式(!w)?(–x):(++y),则下列选项中与其等价的表达式是

A:(w==1)?(–x):(++y)
B:(w==0)?(–x):(++y)
C:(w!=1)?(–x):(++y)
D:(w!=0)?(–x):(++y)
答案: (w==0)?(–x):(++y)

9、
int w=”b”,x=14,y=15;
w=((x||y)&&(w<“a”));
执行上面程序段后,w的值为

A:-1
B:NULL
C:1
D:0
答案: 0

10、
if((x=y=2)>=x&&x=5)
y*=x;
上面程序段执行后,整型变量x、y的值分别是

A:2、4
B:5、2
C:5、10
D:存在语法错误
答案: 存在语法错误

11、
int x,y;
scanf(“%d%d”,&x,&y);
if(x>y)
x=y;y=x;
else
x++;y++;
printf(“%d,%d”,x,y);
关于上面程序段,下列说法正确的是

A:有语法错误
B:若输入“3 4”,输出“4,5”
C:若输入“4 3”,输出“3,4”
D:若输入“4 3”,输出“4,4”
答案: 有语法错误

12、
1. #include
2. int main()
3. {
4. int m;
5. printf(“Input m: “);
6. scanf(“%d”, &m); //输入一个整数
7. if (m > 0) //是否为正数
8. {
9. if (m % 2 == 0) //是正数,且能被2整除,则是正偶数
10. {
11. printf(“%d is a positive even\n”, m);
12. }
13. else //不能被2整除,则是正奇数
14. {
15. printf(“%d is a positive odd\n”, m);
16. }
17. }
18.
19. _______________ //判断是否为负数
20.
21. {
22. _______________
23.
24. {
25. printf(“%d is a negative even\n”, m); //是负偶数
26. }
27. else
28. {
29. printf(“%d is a negative odd\n”, m); //是负奇数
30. }
31. }
32. else
33. {
34. printf(“%d is zero.It is an even\n”, m);
35. }
36. return 0;
37. }
上面程序代码的功能是判断输入整数的正负性和奇偶性,请将第19行和22行标号处缺少的代码填写完整

A:第19行代码: else if(m < 0)

第22行代码: if (m % 2 == 0)
B:第19行代码: else if(m < 0)

第22行代码: if (m % 2 != 0)
C:第19行代码: if(m < 0)

第22行代码: if (m % 2 != 0)

D:第19行代码: if(m < 0) 第22行代码: if (m % 2 == 0)

答案: 第19行代码: else if(m < 0)

第22行代码: if (m % 2 != 0)

13、
以下程序段中,与语句: k=a>b?(b>c?1:0):0;功能相同的是

A:if((a>b)&&(b>c)) k=1; else k=0;
B:if((a>b)||(b>c)) k=1; else k=0;
C:if(a<=b) k=0; else if(b<=c) k=1;
D:if(a>b) k=1; else if(b>c) k=1; else k=0;
答案: if((a>b)&&(b>c)) k=1; else k=0;

14、
int x=1,a=0,b=0;
switch(x)
{
case 0:b++;
case 1:a++;
case 2:a++;b++;
}
上面程序段执行后,a,b的值分别是

A:2,1
B:1,1
C:1,0
D:2,2
答案: 2,1

15、
int x=1,y=2,z=3;
switch(x=1){
case 1:
switch(y==2){
case 1:printf(“*”);break;
case 2:printf(“%”);break;
}
case 0:
switch(z){
case 1:printf(“$”);break;
case 2:printf(“&”);break;
default:printf(“#”);
}
}
上面程序段的运行结果是

A:*#
B:$
C:%#
D:*$
答案: *#

第五章 单元测试

1、
对于while语句,错误的说法是

A:可以用条件控制循环体的执行次数
B:循环体至少要执行一次
C:循环体有可能一次也不执行
D:循环体可以是包含若干条语句的复合语句
答案: 循环体至少要执行一次

2、
对于整型变量x,与while(!x)等价的是

A:while(x!=0)
B:while(x!=1)
C:while(x==0)
D:while(x==1)
答案: while(x==0)

3、
以下描述正确的是

A:由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B:do-while循环由do开始,用while结束,在while(表达式)后面必须写分号
C:在do-while循环体中,一定要有能使while后面表达式的值变成零(“假”)的操作
D:do-while循环中,根据情况可以省略while
答案: do-while循环由do开始,用while结束,在while(表达式)后面必须写分号

4、
#include
int main()
{
int x,i;
for(x=3;x<=100;x++){
if(x%2==0) _____;
for(i=2;i<=x-1;i++)
if(x%i==0) _____;
if(i==x) printf(“%d”,x);
}
return 0;
}
上面程序的功能是找出3~100间的素数,程序中所缺的两处应为

A:break break
B:continue continue
C:continue break
D:break continue
答案: continue break

5、
设变量已正确定义,下面程序中能计算f=n!的是

A:f=0;for(i=1;i<=n;i++) f*=i;
B:f=1;for(i=1;i<n;i++) f*=”i;</span”>
C:f=1;for(i=n;i>1;i++) f*=i;
D:f=1;for(i=n;i>=2;i–) f*=i;
答案: f=1;for(i=n;i>=2;i–) f*=i;</n;i++)>

6、
#include
int main()
{
int x,s=0;
for(x=1;x<=5;x++){
switch(x%3){
case 0:
default:s+=3;
case 1:s+=1;break;
case 2:s+=2;
}
}
printf(“%d”,s);
return 0;
}
上面程序的运行结果是

A:6
B:7
C:10
D:13
答案: 10

7、
#include
int main()
{
int i,j;
for(i=3;i>=1;i–)
{
for(j=1;j<=2;j++)
printf(“%d”,i+j);
printf(” “);
}
return 0;
}
上面程序的运行结果是

A:23 43 45
B:43 25 43
C:23 34 45
D:45 34 23
答案: 45 34 23

8、
#include
int main()
{
int i=10,x=0;
for( ;i<10;i++)
x=x+i;
printf(“%d”,x);
return 0;
}
上面程序运行后,循环体运行的次数为

A:10
B:0
C:1
D:无限
答案: 0

9、
以下不是死循环的是

A:for(;;x+=k);
B:for (;(c=getchar())!=”\n”;) printf(“%c”,c);
C:for (k=10;;k–) sum=sum+k;
D:while(1){x++;}
答案: for (;(c=getchar())!=”\n”;) printf(“%c”,c);

10、
以下正确的说法是

A:continue 语句的作用是结束整个循环的执行
B:只能在循环体内和switch语句内使用break语句
C:在循环体内使用break和continue的作用相同
D:从多层循环嵌套内退出时,只能使用goto语句
答案: 只能在循环体内和switch语句内使用break语句

11、
有关for语句正确的是

A:只用于循环次数已经确定的情况
B:for循环是先执行循环体语句,后判断表达式
C:for循环中,不能用break跳出循环体
D:for语句的循环体只能是一条语句
答案: for语句的循环体只能是一条语句

12、
#include
int main()
{
int i=1,n=1;
for( ;i<3;i++)
{
continue;
n=n+i;
}
printf(“%d”,n);
return 0;
}
上面程序运行后,变量n的值为

A:4
B:3
C:2
D:1
答案: 1

13、
#include
int main()
{
int x,s;
for(x=0,s=0;x<=10;x++)
{
if(x%3==0)
continue;
else
{
if(x%4==0)
continue;
else s+=x;
if(s%5==0) break;

}
}
printf(“%d”,s);
return 0;
}
上面程序的运行结果是

A:35
B:25
C:15
D:5
答案: 15

14、
#include
int main()
{
int x=012;
do
printf(“%d”,x–);
while(–x);
return 0;
}
上面程序的运行结果是

A:86420
B:108642
C:10864
D:8642
答案: 108642

15、
#include
int main()
{
int s=0,i=5;
while(s+=i,i-=2)
printf(“%d”,s);
return 0;
}
上面程序的运行后,循环的执行次数是

A:5
B:9
C:15
D:死循环
答案: 死循环

第六章 单元测试

1、
fun(float x)
{
float y;
long z;
y=x*x;
z=(long)y;
return(z);
}
上面fun函数的类型是

A:void
B:int
C:long
D:float
答案: int

2、
以下正确的函数声明形式是

A:double fun(x,y);
B:double fun(int x; int y);
C:double fun(int x, y);
D:double fun(int x, int y);
答案: double fun(int x, int y);

3、
有以下函数定义:void fun(int n,double x) {…} ,若以下选项中的变量都已经正确定义且赋值,则对函数fun的正确调用语句是

A:fun(int y,double m);
B:k=fun(10,12.5);
C:fun(10,12.5);
D:void fun(n,x);
答案: fun(10,12.5);

4、
#include
int a, b;
void swap( )
{
int t;
t=a; a=b; b=t;
}
int main()
{
scanf(“%d,%d”, &a, &b);
swap( );
printf (“a=%d,b=%d\n”,a,b);
return 0;
}
假设用户输入5,3,上面程序的运行结果是

A:a=5,b=3
B:a=3,b=5
C:5,3
D:3,5
答案: a=3,b=5

5、
#include
void fun (int a,int b,int c)
{
a=456;
b=567;
c=678;
}
int main()
{
int x=10, y=20,z=30;
fun (x,y,z);
printf(“%d,%d,%d\n”,x,y,z);
return 0;
}
上面程序的运行结果是

A:30,20,10
B:10,20,30
C:456567678
D:678567456
答案: 10,20,30

6、
#include
void f(int x)
{ }
int main()
{
int a=1;
f(a);
return 0;
}
若有上面的程序,其中正确的是

A:x是形参,a是形参
B:x是形参,a是实参
C:x是实参,a是形参
D:x是实参,a是实参
答案: x是形参,a是实参

7、
以下不正确的说法是,C语言规定

A:实参可以是常量、变量或表达式
B:形参可以是常量、变量或表达式
C:实参个数与其对应的形参个数必须相等
D:实参应与其对应的形参类型一致或者兼容
答案: 形参可以是常量、变量或表达式

8、
#include
long fib(int g)
{
switch(g)
{
case 0:return 0;
case 1:
case 2:return 1;
}
return ;
}
int main()
{
long k;
k=fib(7);
printf(“k=%ld\n”,k);
}
上面的程序用递归定义的方法实现求菲波拉契数列1、1、2、3、5、8……第7项的值为fib(7),请将程序补充完整.

A:fib(7)
B:fib(g)+fib(g-1)
C:fib(g)+fib(g)
D:fib(g-1)+fib(g-2)
答案: fib(g-1)+fib(g-2)

9、
以下对函数的描述中正确的是

A:调用函数时,只能把实参值传给形参,形参值不能传给实参
B:函数既可以嵌套定义又可以嵌套调用
C:函数必须有返回值,否则不能使用函数
D:自定义函数不可以去调用主函数
答案: 调用函数时,只能把实参值传给形参,形参值不能传给实参

10、
若调用一个函数,且此函数中没有return语句,则正确的说法是该函数

A:没有返回值
B:返回若干个系统默认值
C:返回一个用户所希望的函数值
D:返回一个不确定的值
答案: 返回一个不确定的值

11、
#include
int fun(int n)
{
if(n==1)
return 1;
else
return(n+fun(n-1));

}
int main(){
int x;
scanf(“%d”,&x);
x=fun(x);
printf(“%d”,x);
return 0;
}
若输入10,上面的程序运行结果是

A:55
B:54
C:65
D:45
答案: 55

12、
函数调用时,若实参是变量,则实参和它对应的形参之间的传递方式是

A:双向传递
B:单向传递
C:由实参传给形参,再由形参传回给实参
D:由用户指定的传递方式
答案: 单向传递

13、
C语言允许函数值类型缺省定义,此时该函数值隐含的类型是

A:float型
B:int型
C:long型
D:double 型
答案: int型

14、
关于C语言函数的描述中,正确的是

A:函数的定义可以嵌套,但函数的调用不可以嵌套
B:函数的定义不可以嵌套,但函数的调用可以嵌套
C:函数的定义和函数的调用都可以嵌套
D:函数的定义和函数的调用都不可以嵌套
答案: 函数的定义不可以嵌套,但函数的调用可以嵌套

第七章 单元测试

1、
若在一个函数的复合语句中定义了一个变量,则该变量

A:只在该复合语句中有效
B:在该函数中有效
C:在本源文件范围内有效
D:定义非法
答案: 只在该复合语句中有效

2、
某源文件中定义了一个全局变量,其作用范围是

A:整个源文件的范围
B:所有源文件
C:从定义处到本源文件结束
D:不知道有无声明,所以不确定
答案: 不知道有无声明,所以不确定

3、
在函数体中定义的局部变量,其作用范围是

A:定义它的函数内
B:定义它的大括号内
C:定义它的源文件内
D:所有源文件
答案: 定义它的大括号内

4、
函数形参的声明不在任何大括号内,关于形参,下列说法正确的是

A:形参是全局变量
B:形参只是一个符号,不表示变量
C:形参是动态局部变量
D:形参是静态局部变量
答案: 形参是动态局部变量

5、
函数中未指定存储类型的局部变量,其存储类型是

A:static
B:extern
C:auto
D:register
答案: auto

6、
关于静态局部变量,正确的说法是

A:

程序装载时分配空间,程序结束时才释放空间

B:

执行到它的作用域时分配空间,离开它的作用域时释放空间

C:

从分配空间到程序结束,它一直存在,期间在任何地方都可以使用它

D:

其他几种说法都不对

答案:

程序装载时分配空间,程序结束时才释放空间

7、
定义了一个变量但未赋初值,关于它的初值,下面说法正确的是

A:若是static型的全局变量,为0;若是extern型的全局变量,则不确定
B:若是全局变量,则为0;若是局部变量,则不确定
C:若是静态局部变量,则为0;若是自动变量或寄存器变量,则不确定
D:若是动态存储,则为0;若是静态存储,则不确定
答案: 若是静态局部变量,则为0;若是自动变量或寄存器变量,则不确定

8、
关于全局变量的生存期,下面说法正确的是

A:从程序装载到程序运行结束

B:取决于它定义的位置
C:取决于它所在的函数
D:从源文件开始执行到源文件执行结束
答案: 从程序装载到程序运行结束

9、
若全局变量定义时未规定属性,则它的属性是

A:static
B:extern
C:auto
D:register
答案: extern

10、
#include
int a=2,b=3;
int max(int a,int b)
{
int c;
c=a>b?a:b;
printf(“%d”,c);
return c;
}
int main()
{
int a=4;
max(a,b);
printf(“%d”,max(a,b));
return 0;
}
上面程序的运行结果是

A:24
B:4
C:34
D:444
答案: 444

11、
int fac (int n)
{
static int f=1;
f*=n;
return f;
}
int main()
{
int i,n;
for(i=1;i<=5;i++)
n=fac(i);
printf(“%d”,n);
return 0;
}
上面程序的运行结果是

A:5
B:24
C:100
D:120
答案: 120

12、
根据变量的作用域将变量分为

A:全局变量和局部变量
B:静态变量和动态变量
C:自动变量和临时变量
D:自动变量和寄存器变量
答案: 全局变量和局部变量

13、
全局变量和局部静态变量分配空间的时机是

A:主函数结束时
B:执行到作用域的时候
C:装载exe文件时
D:主函数执行时
答案: 装载exe文件时

14、
下列变量在程序运行过程中不占内存空间的是

A:全局变量
B:自动局部变量
C:寄存器变量
D:静态局部变量
答案: 寄存器变量

15、
下面哪种类别的变量允许在其它源文件中使用?

A:auto
B:register
C:extern
D:static
答案: extern

第八章 单元测试

1、
下面说法错误的是

A:宏展开只是简单地文字替换
B:宏展开能发现宏定义中的错误
C:宏展开不会出现编译错误
D:宏展开不会进行数据类型的判别
答案: 宏展开能发现宏定义中的错误

2、
设有宏定义
#define PI 3.14159
在宏展开时,3.14159会被认为是

A:单精度实数
B:双精度实数
C:字符串
D:7个文字符号
答案: 7个文字符号

3、
文件包含时,可以用<>也可以用””将被包含文件括起来,下面说法正确的是

A:两者作用相同
B:能用””的一般也可以用<>
C:能用<>的一般也可以用””
D:能用<>的不能用””,反之亦然
答案: 能用<>的一般也可以用””

4、
文件包含命令中若用<>包括被包含的文件,表示

A:要到本源文件所在的目录中查找它
B:到系统设定的包含目录中查找它
C:既到系统设定的目录中查找,又到本源文件所在目录查找
D:其他几种说法都不对
答案: 到系统设定的包含目录中查找它

5、
若有宏定义
#define N 2+1
则printf(“%d”,N*(N+1))的输出结果是

A:6
B:12
C:8
D:5
答案: 6

6、
有一种方法可以避免一个文件的内容被包含两次或以上,该方法除了文件包含命令外,还需要使用

A:宏定义
B:条件编译
C:宏定义和条件编译
D:宏定义和分支结构
答案: 宏定义和条件编译

7、
下面关于条件编译的说法,正确的是

A:条件编译就是在程序执行时,根据条件选择一部分代码执行
B:条件编译就是在正式编译时,根据条件选择一部分代码留下参与编译,另一部分舍弃
C:条件编译两个分支中若都有代码,则这两部分代码都要参加编译
D:若一个程序既能写成条件编译,又能写成分支结构,则用条件编译写成的源程序比用分支结构写成的源程序将来生成的可执行文件更短
答案: 若一个程序既能写成条件编译,又能写成分支结构,则用条件编译写成的源程序比用分支结构写成的源程序将来生成的可执行文件更短

8、
若有定义
#define M(n) a=n*2
int a;
则printf(‘%d’,M(5+1)*3)的输出结果是

A:11
B:36
C:21
D:其他答案都不对
答案: 11

第九章 单元测试

1、
下面四段程序中,能正确输出变量a的值的是

A:int a=1,*p;
*p=a;
printf(“%d”,*p);
B:int a=1,*p=a; printf(“%d”,*p);
C:int a=1, *p=&a; printf(“%d”,*p);
D:int a=1, *p; *p=&a; printf(“%d”,*p);
答案: int a=1, *p=&a; printf(“%d”,*p);

2、
要定义两个指针变量,下面代码正确的是

A:int *p1,*p2;
B:int *p1, int *p2;
C:int* p1,p2;
D:int *(p1,p2);
答案: int *p1,*p2;

3、
若有定义:
int *p;
则以下说法正确的是

A:变量名为*p
B:变量类型为int
C:变量名为p
D:变量基类型为int*
答案: 变量名为p

4、
若有定义
int x,*p;
则能使p指向x的表达式是

A:p=x
B:p=&x
C:*p=x
D:p=*x
答案: p=&x

5、
若有定义:
int *p, a=1, b;
则以下正确的程序段是

A:p=&b;
scanf(”%d”,&p);
B:scanf(“%d”, &b);
*p=b;
C:p=&b;
scanf(“%d”,*p);
D:p=&b;
scanf(“%d”,p);
答案: p=&b;
scanf(“%d”,p);

6、
若有定义:
int a=511, *b=&a;
则printf(“%d\n”, *b)的输出结果为

A:不确定值
B:a的地址
C:b的地址
D:511
答案: 511

第十章 单元测试

1、
以下对一维数组a的定义中正确的是

A:char a(10);
B:int a[0..100];
C:int a[5];
D:int k=10;int a[k];
答案: int a[5];

2、
以下对一维数组的定义中不正确的是

A:double x[5]={2.0,4.0,6.0,8.0,10.0};
B:int y[5]={0,1,3,5,7,9};
C:char ch1[ ]={“1”, “2”, “3”, “4”, “5”};
D:char ch2[ ]={“\x10”, “\xa”, “\x8”};
答案: int y[5]={0,1,3,5,7,9};

3、
以下对二维数组的定义中正确的是

A:int a[4][]={1,2,3,4,5,6};
B:int a[][3];
C:int a[][3]= {1,2,3,4,5,6};
D:int a[][]={{1,2,3},{4,5,6}}
答案: int a[][3]= {1,2,3,4,5,6};

4、
假定一个int型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是

A:3
B:6
C:10
D:20
答案: 20

5、
#include
int main()
{
int a[4][4]= {{1,3,5},{2,4,6},{3,5,7}};
printf(“%d%d%d%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]);
}
上面程序的运行结果是

A:0650
B:1470
C:5430
D:输出值不定
答案: 0650

6、
#include
int main()
{
int m[][3]= {1,4,7,2,5,8,3,6,9};
int i,j,k=2;
for(i=0; i<3; i++) {
printf(“%d “,m[k]);
}
return 0;
}
上面程序的运行结果是

A:4 5 6
B:2 5 8
C:3 6 9
D:7 8 9
答案: 3 6 9

7、
#include
int main()
{
int b[3][3]= {0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0; i<3; i++)
for(j=i; j<=i; j++)
t=t+b[b[j][j]];
printf(“%d\n”,t);
return 0;
}
上面程序的输出结果是

A:3
B:4
C:1
D:9
答案: 3

8、
若有定义:int a[2][4];,则引用下标变量正确的是

A:a[0][3]
B:a[0][4]
C:a[2][2]
D:a[2][2+1]
答案: a[0][3]

9、
若有定义:int aa[8];,则不能代表数组元素aa[1]地址的是

A:&aa[0]+1
B:&aa[1]
C:&aa[0]++
D:aa+1
答案: &aa[0]++

10、
若二维数组y有m列,则排在y[j]前的元素个数为

A:j*m+i 
B:i*m+j
C:i*m+j-1 
D:i*m+j+1
答案: i*m+j

11、
若定义一个名为s且初值为”123″的字符数组,则下列定义错误的是

A:char s[]={’1″,”2″,”3″,”\0 “}
B:char s[]={“123”};
C:char s[]={“123\n”};
D:char s[4]={“1″,”2″,”3”}
答案: char s[]={“123\n”};

12、
下列描述中不正确的是

A:字符型数组中可以存放字符串
B:可以对字符串进行整体输入、输出
C:可以对整型数组进行整体输入、输出
D:不能在赋值语句中通过赋值运算符”=”对字符型数组进行整体赋值
答案: 可以对整型数组进行整体输入、输出

13、
printf(“%d\n”, strlen(“school”)); 以上printf语句的输出结果是

A:7
B:6
C:存在语法错误
D:不定值
答案: 6

14、
若有语句:char s1[10], s2[10]=”books”;,则能将字符串books存入数组s1的语句是

A:s1=”books”
B:strcpy(s1, s2);
C:s1=s2
D:strcpy(s2, s1)
答案: strcpy(s1, s2);

15、
若有定义int a[3][4];,则能输入其第3行第2列元素的正确语句为

A:scanf(“%d”,a[3,2])
B:scanf(“%d”,*(*(a+2)+1))
C:scanf(“%d”,*(a+2)+1)
D:scanf(“%d”,*(a[2]+1))
答案: scanf(“%d”,*(a+2)+1)

16、
设有定义:char s[12]=”string”;则printf(“%d”,strlen(s));的输出结果是

A:6
B:7
C:11
D:12
答案: 6

17、
语句printf(“%d”,strlen(“abs\no12\1\\”));的输出结果是

A:11
B:10
C:9
D:8
答案: 9

18、
语句strcat(strcpy(str1,str2),str3);的功能是

A:将字符串str1复制到字符串str2中后再连接到字符串str3之后
B:将字符串str1连接到字符串str2中后再复制到字符串str3之后
C:将字符串str2复制到字符串str1后再将字符串str3连接到字符串str1之后
D:将字符串str2连接到字符串str1后再将字符串str1复制到字符串str3中。
答案: 将字符串str2复制到字符串str1后再将字符串str3连接到字符串str1之后

19、
若有如下定义:char x[]=”abcdefg”; char y[]={“a”, “b”, “c”, “d”, “e”,”f”, “g”};,则正确的叙述为:

A:数组x和数组y等价
B:数组x和数组y的长度相同
C:数组x的长度大于数组y的长度
D:数组y的长度大于数组x的长度
答案: 数组x的长度大于数组y的长度

第十一章 单元测试

1、
若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是

A:a,point,*&a
B:&*a,&a,*point
C:*&point,*point,&a
D:&a,&*point ,point
答案: &a,&*point ,point

2、
有以下程序段
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
执行后b中的值是

A:5
B:6
C:8
D:9
答案: 9

3、
int a[7],*p=a;若有以上定义,则p+5表示

A:元素a[5]的地址
B:元素a[5]的值
C:元素a[6]的地址
D:元素a[6]的值
答案: 元素a[5]的地址

4、
设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 则下列语句中正确的是

A:for(p=a;a<(p+10);a++);
B:for(p=a;p<(a+10);p++);
C:for(p=a,a=a+10;p<a;p++);< span=””>
D:for(p=a;a<p+10; ++a);<=”” span=””>
答案: for(p=a;p<(a+10);p++);</p+10;></a;p++);<>

5、
#include
int main()
{
int x[] = {10, 20, 30};
int *px = x;
printf(“%d,”, ++*px); printf(“%d,”, *px);
px = x;
printf(“%d,”, (*px)++); printf(“%d,”, *px);
px = x;
printf(“%d,”, *px++); printf(“%d,”, *px);
px = x;
printf(“%d,”, *++px); printf(“%d\n”, *px);
return 0;
}
上面程序运行后的输出结果是

A:11,11,11,12,12,20,20,20
B:20,10,11,10,11,10,11,10
C:11,11,11,12,12,13,20,20
D:20,10,11,20,11,12,20,20
答案: 11,11,11,12,12,20,20,20

6、
#include
int main()
{
int arr[]= {6,7,8,9,10};
int *ptr;
ptr=arr;
*(ptr+2)+=2;
printf (“%d,%d\n”,*ptr,*(ptr+2));
return 0;
}
上面程序的运行结果为

A:8,10
B:6,8
C:7,9
D:6,10
答案: 6,10

7、
#include
#include
int main()
{
char *s1=”AbDeG”;
char *s2=”AbdEg”;
s1+=2;
s2+=2;
printf(“%d\n”,strcmp(s1,s2));
return 0;
}

上面程序的运行结果是

A:正数
B:负数
C:零
D:不确定的值
答案: 负数

8、
有以下定义
char a[10],*b=a;
不能给数组a输入字符串的语句是

A:gets(a)
B:gets(a[0])
C:gets(&a[0])
D:gets(b)
答案: gets(a[0])

9、
char *s=”abcde”;
s+=2;printf(“%d”,s);
上面程序段的运行结果是

A:cde
B:字符”c”
C:字符”c”的地址
D:无确定的输出结果
答案: 字符”c”的地址 

10、
#include
int main()
{
char a[]=”programming”,b[]=”language”;
char *p1,*p2;
int i;
p1=a;
p2=b;
for(i=0; i<7; i++)
if(*(p1+i)==*(p2+i))
printf(“%c”,*(p1+i));
return 0;
}

上面程序输出结果是

A:gm
B:rg
C:or
D:ga
答案: ga

11、
若有说明语句
char a[]=”It is mine”;
char *p=”It is mine”;
则以下不正确的叙述是

A:a+1表示的是字符t的地址
B:p指向另外的字符串时,字符串的长度不受限制
C:p变量中存放的地址值可以改变
D:a中只能存放10个字符
答案: a中只能存放10个字符


下方是付费阅读内容:本平台商品均为虚拟商品,无法用作二次销售,不支持退换货,请在购买前确认您需要购买的资料准确无误后再购买,望知悉!

暂无优惠



完整答案需点击上方按钮支付5元购买,所有答案均为章节测试答案,无期末答案。购买后上方矩形框将出现已付费的隐藏内容。



不知道怎么购买?点此查看购买教程!


点关注,不迷路,微信扫一扫下方二维码

关注我们的公众号:阿布查查  随时查看答案,网课轻松过


为了方便下次阅读,建议在浏览器添加书签收藏本网页

电脑浏览器添加/查看书签方法

1.按键盘的ctrl键+D键,收藏本页面

2.下次如何查看收藏的网页?

点击浏览器右上角-【工具】或者【收藏夹】查看收藏的网页


手机浏览器添加/查看书签方法

一、百度APP添加/查看书签方法

1.点击底部五角星收藏本网页

2.下次如何查看收藏的网页?

点击右上角【┇】-再点击【收藏中心】查看

二、其他手机浏览器添加/查看书签方法

1.点击【设置】-【添加书签】收藏本网页

2.下次如何查看收藏的网页?

点击【设置】-【书签/历史】查看收藏的网页

阿布查查 » 程序设计基础(山东工商学院) 知到智慧树答案2024 z24697
+
账户
更新
搜索
帮助
主页