C语言小练习(六)
? 人生这条路很长,未来星辰大海般璀璨,不必踌躇于过去的半亩方塘,那些所谓的遗憾,可能是一种成长,那些曾受过的伤,终会化作前路的光,总有一天你会明白,真正能治愈你的从来不是时间,而是你内心那段释怀和格局,只要你的内心不慌乱,连世界都难影响你,我们唯一应该厌倦的是那些暗淡无光的日子,改变自己的内心,把思想化作行动,拥有独立的人格,提升自己,幸福会如阳光一样出现在黎明破晓时刻,艰难困苦,玉汝于成。
Day06
?一.选择题
?1.下列程序执行后,输出的结果为()
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int cnt = 0;
int fib(int n)
{
cnt++;
if (n == 0)
return 1;
else if (n == 1)
return 2;
else
return fib(n - 1) + fib(n - 2);
}
void main()
{
fib(8);
printf("%d", cnt);
}
A: 41 B: 67 C: 109 D: 177
?答案:D
?答题思路:只要当n的值不为0和1,那么就需要调用一次函数:
✅运行结果如下:
?2.在上下文和头文件均正确的情况下,以下程序的输出结果是()
#include <stdio.h>
int main()
{
int x = 1;
do
{
printf("%2dn", x++);
} while (x--);
return 0;
}
A: 1 B: 无任何输出 C: 2 D: 陷入死循环
?答案:D
?答题思路:我们会发现程序进入到了死循环:
?3.下面的代码,执行之后i和j的值是什么()
int i = 1;
int j;
j = i++;
A: 1,1 B: 1,2 C: 2,1 D: 2,2
?答案:C
?答题思路:本题需要了解到前置++
和后置++
,前置++使用规则是先+1,后使用,后置++的规则是先使用,后+1。
?4.以下程序k的最终值是()
int i = 10;
int j = 20;
int k = 3;
k *= i + j;
A: 90 B: 50 C: 70 D: 30
?答案:A
?答题思路:本题需要弄清楚操作符的优先级。k *= 30; k = 30*3 = 90;
?5.以下C程序的输出结果是()
#include <stdio.h>
#include <stdlib.h>
int a = 1;
void test()
{
int a = 2;
a += 1;
}
int main()
{
test();
printf("%dn", a);
return 0;
}
A: 1 B: 2 C: 3 D: 4
?答案:A
?答题思路:如果函数中的局部变量和全局变量同名,那么在函数内部局部变量会屏蔽全局变量,使用的是局部变量。因此本题中test函数
内全局变量a被局部变量a屏蔽,对a的修改不会对全局变量a带来任何影响。
✅运行结果如下:
?6.下列描述中正确的是()
A :表示m>n为true或者m<n为true的表达式为m>n&&m<n
B :switch语句结构中必须有default语句
C :如果至少有一个操作数为true,则包含“||”运算符的表达式true
D :if语句结构中必须有else语句
?答案:C
?答题思路:表示m>n为
true或者m<n为true的表达式为m>n||m<n
.
switch
语句结构中不一定要有default
语句.if语句
结构中不一定要有else
语句.
?7.C 语言规定,在一个源程序中,main函数的位置()
A :必须在最开始
B :必须在系统调用的库函数的后面
C: 可以任意
D :必须在最后
?答案:C
?8.以下叙述不正确的是()
A: 一个C源程序可由一个或多个函数组成
B:一个C源程序必须包含一个main函数
C:C程序的基本组成单位是函数
D:在C程序中,注释说明只能位于一条语句的后面
?答案:D
?答题思路:C语言
风格的注释:/* xxxxxxxxxxxxxxxxxx */
C++
风格的注释:// xxxxxxxxxxx
?9.以下叙述正确的是()
A :在C程序中,main函数必须位于程序的最前面
B :C程序的每行中只能写一条语句
C :C语言本身没有输入输出语句
D :在对一个C程序进行编译的过程中,可发现注释中的拼写错误
?答案:C
?答题思路:main函数
可以放在任何位置。C语言
可以一行多语句,也可以一条语句写多行。C语言
是给定了语法,输入输出是库函数
提供的。注释中的错误是发现不了的。
?10.在上下文及头文件均正常的情况下,执行如下代码, c 的值是()
int a = 0, c = 0;
do{
--c;
a = a-1;
}while(a > 0);
A:0 B:1 C:-1 D:死循环
?答案:C
?答题思路:由--c
得到c=-1
,由a = a-1
得到a=-1
,又a=-1
跳出循环所以c=-1
.
?11.假定 x 和 y 为 double 型,则执行 x=2; y=x+3/2; 后y的值为()
A: 3.500000
B: 3
C: 2.000000
D: 3.000000
?答案:D
?答题思路:整数相除结果还为整数,因此,3/2
的结果为1
,y=x+1=2+1=3
,又y
是double
类型的,所以,y
的值为3.000000
.
?12.以下for循环的执行次数是()
for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
A: 是无限循环
B: 循环次数不定
C: 4次
D: 3次
?答案:C
?答题思路:
?13.若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()
A: *p+=1;
B: (*p)++;
C: ++(*p)
D: *p++
?答案:D
?答题思路:A、B、C三个选项中都是*p
通过指针访问到year
,然后对它的值进行了修改。D选项中对指针p
先进行自增操作,这会将p
指向下一个地址,但不会修改year
的值。*p++;
相当于*p;和p++;
两步操作。
✅运行结果如下:
?14.选择表达式 11|10 的结果(本题数值均为十进制)()
A: 11
B: 10
C: 8
D: 2
?答案:A
?答题思路:对于两个数a和b
,用按位或运算符求c = a|b;
,需要先写出a和b
的二进制位的补码形式,然后一一对比,只要当两个数a和b的对应的补码有一个为1的时候,按位或的结果就是1,否则为0。
? 所以,按位或之后的结果为11
.
?15.char a; int b; float c; double d;则表达式 a*b+d-c 值的类型为()
A float
B int
C char
D double
?答案:D
?答题思路:在四则混合运算中,数据类型不同时会遵守一定的转换规则先进行数据类型的自动转换再进行运算。转换规则如下:
好啦,第六天的练习到这里就结束啦!后期会继续更新C语言的小练笔,欢迎大家持续关注、点赞和评论!❤️❤️❤️