一、C程序的基本数据类型、基本算术运算、简单程序的设计
-
题目: 若有条件表达式
(exp)?a++:b++;
,则以下表达式中能完全等价于表达式(exp)的是( )。- 选项:
- A.
exp == 0
- B.
exp != 0
- C.
exp == 1
- D.
exp != 1
- A.
- 答案: D
- 解释: 条件表达式
(exp)?a++:b++;
意味着如果exp
为真(非0),则执行a++
,否则执行b++
。因此,等价于exp != 0
。
- 选项:
-
题目: 效率最高的计算
2*8
的方法是( )。- 选项:
- A.
2*2*2*2
- B.
2*2*4
- C.
2<<3
- D.
2+2+2+2+2+2+2+2+2+2+2+2+2+2+2
- A.
- 答案: C
- 解释:
2<<3
是位运算中的左移操作,相当于2*2^3
,即2*8
,这是最高效的计算方法。
- 选项:
-
题目:
a=1, b=22,
则表达式a|b
和a||b
的值分别为( )。- 选项:
- A.
1 3
- B.
3 1
- C.
1 2
- D.
2 1
- A.
- 答案: A
- 解释:
a|b
是按位或运算,1|22
的二进制表示为1010|00010110
,结果为10001
,即十进制的17。a||b
是逻辑或运算,因为a
为真,所以结果为真,即1。
- 选项:
-
题目:
sizeof(float)
是( )。- 选项:
- A. 一种函数调用
- B. 一个不合法的表达式
- C. 一个整型表达式
- D. 一个浮点型表达式
- 答案: C
- 解释:
sizeof
是一个编译时运算符,用于计算数据类型或数据结构在内存中的大小,结果是一个整型值。
- 选项:
-
题目: 若有定义
int a[5], *p=a;
则对a
数组元素地址的正确引用是( )。- 选项:
- A.
p+5
- B.
*a+1
- C.
&a+1
- D.
&a[0]
- A.
- 答案: D
- 解释:
&a[0]
是取数组第一个元素的地址,这是正确的引用方式。
- 选项:
-
题目: 若有定义
int a[2][3], (*p)[3]; p=a;
则对a
数组元素地址的正确引用是( )。- 选项:
- A.
*(p+2)
- B.
p[2]
- C.
p[1]+1
- D.
(p+1)+2
- A.
- 答案: A
- 解释:
*(p+2)
实际上是p[2]
,即第二个子数组的首地址,这是正确的引用方式。
- 选项:
-
题目: 已有定义
int k = 2; int *ptr1, *ptr2;
且ptr1
和ptr2
均已指向变量k
,下面不能正确执行的赋值语句是( )。- 选项:
- A.
k = *ptr1 + *ptr2
- B.
ptr2 = k
- C.
ptr1 = ptr2
- D.
k = *ptr1*(*ptr2);
- A.
- 答案: B
- 解释:
ptr2 = k
试图将一个整型值赋给一个指向整型的指针,这是不合法的。
- 选项:
-
题目: 当有如下定义
char *p = (char*)malloc(100);
则p
被分配到( )中。- 选项:
- A. 栈
- B. 堆
- C. 全局初始化区
- D. 以上说法均不对
- 答案: B
- 解释:
malloc
函数用于在堆上动态分配内存。
- 选项:
-
题目: 输入三个数,并从大到小输出。
- 代码:
#include<stdio.h> void swap(int* x,int* y) { int tmp = *x; *x = *y; *y = tmp; } int main() { int a, b, c; printf("请输入三个数:>\n"); scanf("%d %d %d", &a, &b, &c); if (a < b) swap(&a, &b); if (a < c) swap(&a, &c); if (c > b) swap(&b, &c); printf("%d %d %d", a, b, c); return 0; }
- 解释: 该程序通过比较和交换确保
a
是最大的,c
是最小的,然后按从大到小的顺序输出。
- 代码:
-
题目: 打印100~200的素数(质数)。
- 代码:
#include <stdio.h> #include <math.h> int main() { int i, j; for (i = 101; i <= 200; i += 2) { // 从101开始,每次i+2,只考虑奇数 int isPrime = 1; for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) { isPrime = 0; break; } } if (isPrime) printf("%d ", i); } printf("\n"); return 0; }
- 解释: 该程序使用试除法来判断素数,只考虑奇数,并且只试除到
sqrt(i)
,提高了效率。
- 代码:
二、条件选择语句if和switch的语法及其应用
-
题目: 下面代码的执行结果是什么?
#include <stdio.h> int main() { int x = 3; int y = 3; switch (x % 2) { case 1: switch (y) { case 0: printf("first"); case 1: printf("second"); break; default: printf("hello"); } case 2: printf("third"); } return 0; }
答案: 输出为 “hellosecondthird”。
解释: 由于switch
语句中case
后面没有break
,所以会执行到switch
结束。 -
题目:
switch(c)
语句中,c
不可以是什么类型?- 选项:
- A.
int
- B.
long
- C.
char
- D.
float
答案: D
解释:switch
选择语句中,switch(整型表达式/枚举类型)
,case
整型常量表达式/枚举常量;字符类型char
本质上也属于整型家族,因为char
类型在内存中以ASCII码进行存储,ASCII码本质上是一组整数。
- A.
- 选项:
-
题目: 则
func(1) =
( )int func(int a) { int b; switch (a) { case 1: b = 30; case 2: b = 20; case 3: b = 16; default: b = 0; } return b; }
- 选项:
- A. 30
- B. 20
- C. 16
- D. 0
答案: D
解释: 由于case
或default
后没有跟break
,不会跳出switch
语句,会顺延执行下去,直到switch
语句结束。
- 选项:
-
题目: 关于
switch
说法不正确的是:- 选项:
- A.
switch
语句中的default
子句可以放在任意位置 - B.
switch
语句中case
后的表达式只能是整形常量表达式 - C.
switch
语句中case
子句必须在default
子句之前 - D.
switch
语句中case
表达式不要求顺序
答案: C
解释:switch
语句中对于case
子句与default
子句摆放位置是不要求的,因为switch
语句是根据switch()
中()里的为准,进行选择,并不是顺序执行。
- A.
- 选项:
-
题目: 程序的输出结果是?( )
#include <stdio.h> int main() { int a = 0, b = 0; for (a = 1, b = 1; a <= 100; a++) { if (b >= 20) break; if (b % 3 == 1) { b = b + 3; continue; } b = b - 5; } printf("%d\n", a); return 0; }
- 选项:
- A. 10
- B. 9
- C. 8
- D. 7
答案: C
解释: 由于continue
语句的存在,当b % 3 == 1
时,b
增加3并继续循环,不执行b = b - 5;
。因此,b
的值在达到20之前,a
的值会先达到8。
- 选项:
-
题目: 下列哪一项不是C语言的特点?
- 选项:
- A. 运算符丰富,是完全模块化和结构化的语言
- B. 语言简洁、紧凑,使用方便、灵活
- C. 生成的目标代码质量高,程序执行效率高
- D. 允许直接访问物理地址,可以用来编写系统软件,但该语言与硬件相关,编写的程序很难移植到不同系统上运行
答案: D
解释: C语言与硬件无关,编写的程序可以移植到不同系统上运行。
- 选项:
-
题目: 下面哪一条语句是定义一个常变量(其值为255,存在期间不能改变)的正确语句?
- 选项:
- A.
#define MASK 255
- B.
const int mask = 255;
- C.
#define MASK 255;
- D.
const int mask 255;
答案: B
解释:const
关键字用于定义常量,其值在定义后不能改变。
- A.
- 选项:
-
题目: 在C语言程序中,表达式
356%8
的值是?- 选项:
- A. 44.5
- B. 44
- C. 4
- D. 0
答案: C
解释:%
是取模运算符,356%8
的结果是4。
- 选项:
-
题目: 下面哪一语句与“
if(x<=y)r=1;else r=0;
”等价?- 选项:
- A.
r= (x<=y);
- B.
r = (x>y)?1:0;
- C.
r = (x<=y)?0:1;
答案: A
解释:if
语句可以转换为三元运算符的形式,但在这里r
的值应该是1或0,而不是根据条件直接为真或假,因此选项A是正确的。
- A.
- 选项:
-
题目: 已知学生成绩(100分为满分)与等级的对应关系,编写一个程序,要求输入学生成绩,输出学生成绩对应的等级。
int main(int argc, const char *argv[]) { int grade; scanf("%d",&grade); grade = grade / 10; switch(grade){ case 10:case 9: printf("A");break; case 8: printf("B");break; case 7: printf("C");break; case 6: printf("D");break; default: printf("E");break; } return 0; }
答案: 程序正确地根据输入的成绩输出对应的等级。
解释: 程序使用switch
语句根据成绩的十分之一来确定等级,这是一种简单且有效的方法来处理成绩等级的判断。
三、for、while、do-while三种循环控制语句的语法特点和应用
1. for
循环的语法和应用
题目: 写出一个for
循环,计算并打印1到100的和。
答案:
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
printf("Sum = %d\n", sum);
return 0;
}
解释: for
循环由三部分组成:初始化表达式、条件表达式和更新表达式。在本例中,初始化表达式int i = 1
初始化循环变量i
,条件表达式i <= 100
控制循环直到i
超过100,更新表达式i++
在每次循环后递增i
的值。循环体内计算累计和并最终打印结果。
2. while
循环的语法和应用
题目: 使用while
循环打印字母表中的所有大写字母。
答案:
#include <stdio.h>
int main() {
char c = 'A';
while (c <= 'Z') {
printf("%c ", c);
c++;
}
return 0;
}
解释: while
循环在执行循环体之前会先评估条件。只有当条件为真时,才会执行循环主体。在本例中,只要c
的值小于等于'Z'
,循环就会继续执行,打印从'A'
到'Z'
的所有大写字母。
3. do-while
循环的语法和应用
题目: 用do-while
循环实现一个程序,至少执行一次循环体,并在用户输入非’y’字符时结束循环。
答案:
#include <stdio.h>
int main() {
char input;
do {
printf("请输入(输入y结束):");
scanf(" %c", &input);
} while (input == 'y');
return 0;
}
解释: do-while
循环在执行循环体之后才检查条件,因此循环体至少执行一次。在本例中,循环会一直执行直到用户输入'y'
字符,循环体至少执行一次,即使第一次输入的就是'y'
。
4. for
循环与数组
题目: 给定一个整型数组int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
,使用for
循环打印数组的所有元素。
答案:
#include <stdio.h>
int main() {
int arr[10] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i
标签:case,题型,题目,int,语句,switch,printf,必刷,考研
From: https://blog.csdn.net/qq_55615339/article/details/143469455