本文主要是介绍C语言—每日选择题—Day49,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一题
3. 假定有语句“ int b[10], *pb; ”,则不正确的赋值为 ( )
A:pb=b
B:pb=b[5]
C:pb=b+2
D:pb=&b[0]
答案及解析 B
本题考查的是指针类型对数组的引用;
A:b是数组名,是首元素地址,数据类型是int *,数据类型匹配,赋值正确;
B:b[5]是数组的一个元素,数据类型是int,数据类型不匹配,赋值错误;
C:b是数组名,首元素的地址,b + 2;就是往后移动2个int类型的大小,也就是8字节,到达的是第三个元素的地址,相当于&b[3],所以数据类型是int*,正确;
D:&b[0],数据类型是int*,数据类型匹配,正确;
第二题
2. 运行时的C程序,下列哪些变量在内存中的stack(栈)区域的有()
int a = 0;
char *p1;
int main()
{int b;char s[] = "abc";char *p2;char *p3 = "123456";static int c =0;p1 = (char *)malloc(10);free(p1);return 0;
}
A:a
B:b
C:c
D:s
E:p1
F:p2
答案及解析 BDF
stack是栈空间的意思,我们学习数据结构就知道了;而这里考察的是内存中栈中存放的是哪些数据?栈中存放的是局部变量的空间;
a 和p1 :这是一个全局变量,存放在静态区;
b,s,p2,p3:这些都是局部定义的变量,存放的就是栈区
static的变量:是静态变量,存在静态区;
由malloc开辟的空间:存放的是堆区;
第三题
3. 以下程序的运行结果是()
#include <stdio.h>
int main()
{ int m = 12,n = 34; printf("%d %d ", m++, ++n); printf("%d %d\n", n++, ++m);
}
A:12 35 35 14
B:12 35 35 13
C:12 34 35 14
D:12 34 35 13
答案及解析 A
本题依旧考察的是前置++和后置++;
记住前置++的表达式,表达式的值是++之后的值;
后置++的表达式,表达式的值是++之前的值;
--也是一个道理
第四题
4. 若有以下程序
#include <stdio.h>
int main()
{int s = 0, n;for (n = 0; n < 4; n++) {switch (n) {default:s += 4;case 1:s += 1;case 2:s += 2;case 3:s += 3;}}printf("%d\n", s);return 0;
}
则程序的输出结果是?
A:6
B:18
C:10
D:24
答案及解析 D
本题考查的是switch语句,只要case和default语句后面没有break,就会依次执行下面每一个case或default的语句;
比如第一次循环,n=0,只满足default,而他们都没有break,所以依次执行下面的语句
s += 4,s += 1,s += 2,s += 3;
剩下的循环以此类推;
第五题
5. 下面函数输出结果是()
#include <stdio.h>
int main()
{int k = 12345;printf("%2d\n", k);return 0;
}
A:12
B:45
C:12345
D:无法通过编译
答案及解析 C
本题考查的是格式化打印
直接看这篇博客:%md在printf语句和scanf语句中的区别-CSDN博客
这篇关于C语言—每日选择题—Day49的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!