当前位置: 首页 > news >正文

考研复试C语言基础

前言

复试考C语言的时候通过院校公布的考试大纲用deepseek生成下面的题目,并且对不理解的知识点进行了深入学习,现将记录如下,若有错误还希望各位大佬能够给予批评指正

程序设计和 C 语言、算法

计算机语言的发展阶段顺序是(A

A. 机器语言汇编语言高级语言        B. 高级语言汇编语言机器语言

C. 汇编语言机器语言高级语言        D. 以上都不对         

以下哪项是 C 语言的特点?(B

A. 面向对象             B. 可移植性             C. 动态类型             D. 解释执行           

面向过程以“步骤”为核心,将问题分解成一系列的函数,顺序执行。“怎么做”

面向对象以“对象”为核心,将问题抽象为具有属性和行为的对象。“谁来做”

动态类型:程序运行时进行类型检查。

静态类型:编译期或解释期进行类型检查。(变量使用前必须声明其数据类型)

解释型语言:程序运行时,解释器会逐行读取源代码将其转换为机器代码并立即执行。动态不会生成独立的可执行文件。

编译型语言:程序运行前,编译器会将整个源代码一次性编译成机器代码,并生成一个可执行文件。静态

可移植性:很少修改或不经修改就可以在其他系统上运行。

C 语言程序的基本结构中必须包含(B

A. 预处理指令       B. 主函数 main()              C. 类定义                    D. 以上都是          

运行 C 程序的正确步骤是(A

A. 编写编译链接执行                  B. 编写执行编译链接               

C. 编译链接编写                     D. 执行编写链接编译            

算法的特性不包括(C

A. 有穷性                B. 确定性                C. 随机性                D. 可行性              

C 语言最初由 丹尼斯·里奇(Dennis Ritchie 1972 年开发。

预处理指令 #include <stdio.h> 的作用是 包含标准输入输出库头文件

算法的五个特性是 有穷性、确定性、可行性、输入、输出

这个我当时想到随机数的生成是否违反算法的确定性。

简述 C 语言程序的结构。

语言程序由预处理指令(如 #include)、主函数 main()、函数定义和语句组成。主函数是程序执行的入口,函数用于模块化代码。

请写出运行 C 程序的具体步骤。

答案:编写源代码编译生成目标文件(.obj链接生成可执行文件(.exe执行程序。

什么是算法?列举算法的特性。

答案:算法是解决问题的明确步骤描述。特性包括:有穷性(步骤有限)、确定性(无歧义)、可行性(可执行)、有输入(0 或多个输入)、有输出(至少一个输出)。

C 语言与汇编语言的主要区别是什么?

答案:C 语言是高级语言,可移植性强,代码更易读写;汇编语言是低级语言,直接操作硬件,执行效率高但可读性差。

四、判断题(每题 2 分,共 10 分)

C 语言程序可以没有 main() 函数。( ×   

算法的有穷性指算法必须在有限时间内结束。(

printf("Hello"); C 程序中的一条预处理指令。(×  

编译是将源代码直接转换为可执行文件的过程。(×        (需先编译后链接)

C 语言支持面向对象编程。(×          C 语言是结构化语言)

最简单的 C 程序设计

以下哪个是合法的整型常量?(B

A. 12.3                                  B. 0x1A                             C. '7'               D. "100"          

转义字符 \n 的作用是(B

A. 退格  '\b'                  B. 换行                    C. 回车 '\r'                   D. 响铃 '\a'                              

以下变量名合法的是(C

A. 3var                     B. float                     C. _score                  D. a-b           

符号常量 #define MAX 100 与常变量 const int MAX = 100; 的主要区别是(A

A. 前者在编译时替换,后者占用内存            B. 后者可以修改         C. 前者支持类型检查             D. 无区别              

 int 类型变量在32位系统中占用的存储空间是(C

A. 1字节                 B. 2字节                  C. 4字节                 D. 8字节                

表达式 (double)(5 / 2) 的结果是(B

A. 2                B. 2.0             C. 2.5             D. 3.0            

以下运算符优先级最高的是(C

A. +                B. *                C. ()                D. =         

C语言运算符,运算符优先级(超详细运算符详解)_c语言运算符优先级-CSDN博客

主要是运算>关系>逻辑,还要注意运算符的结合性,区分指针数组和数组指针。

以下代码的输出是(A)             printf("%d", 10 + 3 * 2); 

A. 16              B. 26              C. 32              D. 13            

使用 scanf 输入一个字符时,正确的格式字符是(B

A. %d            B. %c             C. %s            D. %f            

printf("%5.2f", 3.14159); 的输出结果是(B

A. 3.14                      B. 3.14                      C. 3.14159               D. 3.142                   

字符串 "Hello\nC" 中包含 8 个字符(含结束符)。

表达式 (int)3.8 + 2.5 的结果是 5.5(类型为 double)。

printf 函数中,输出十六进制整数的格式字符是 %x八进制%o,十进制%d。

赋值语句 a = (b > 0) ? b : 0; 的功能是 b的值赋给a(若b>0),否则赋0

int a = 5;,则执行 a += a -= 2; 后,a 的值是 6

以下代码的输出是什么?

#include <stdio.h> int main() { int a = 10, b = 3; printf("%d", a / b + a % b); return 0; }     

答案: 4(计算:10/3=310%3=1,总和为4

以下代码有何错误?请修正。

int x;                       scanf("请输入x%d", x);       

答案: 错误:缺少 & 和多余提示文本。修正为 scanf("%d", &x);

分析以下代码的输出:

printf("%d", 5 + 'A' - 2);          

答案: 68'A'ASCII码为65,计算:5 + 65 - 2 = 68

以下代码的功能是什么?

char ch = getchar();                     putchar(ch + 1); 

答案: 输入一个字符,输出其ASCII码值加1后的字符(如输入A,输出B)。

编写程序,输入两个整数,输出它们的和、差、积、商(整数除法)。

#include <stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); printf("和:%d\n差:%d\n积:%d\n商:%d\n", a + b, a - b, a * b, a / b); return 0; }     

编写程序,输入一个浮点数,输出其四舍五入保留两位小数的结果。

#include <stdio.h> int main() { float num; scanf("%f", &num); printf("%.2f", num); return 0; } 

编写程序,输入一个字符,将其转换为大写字母后输出(若本身是大写则不变)。

#include <stdio.h> int main() { char ch; scanf("%c", &ch); if (ch >= 'a' && ch <= 'z') ch -= 32; printf("%c", ch); return 0; } 

编写程序,输入三个整数,找出最大值并输出。

#include <stdio.h> int main() { int a, b, c, max; scanf("%d%d%d", &a, &b, &c); max = a; if (b > max) max = b; if (c > max) max = c; printf("最大值:%d", max); return 0; } 

选择结构程序设计

以下关于if语句的描述,错误的是(C

A. if语句的条件表达式必须用括号包裹                     B. if语句可以没有else分支

C. if语句的条件表达式结果可以是任意类型             D. if语句可以嵌套使用              

关系运算符 >= == 的优先级顺序是(A

A. >= 高于 ==                    B. == 高于 >=            C. 两者优先级相同               D. 无法比较    

赋值表达式+=、-=、*=是一样的。        

以下逻辑运算符优先级最高的是(C

A. &&                       B. ||                C. !                 D. 优先级相同                              

条件表达式 a > b ? a : b 的功能是(B

A. 返回ab的和                                 B. 返回ab的较大值             

C. 返回ab的较小值                         D. 判断a是否等于b                  

以下代码的输出是(B

int x = 5; if (x = 0) printf("A"); else printf("B"); 

A. A               B. B                C. 编译错误            D. 无输出               

switch语句的case标签中,不能是以下哪种类型?(C

A. 整型常量            B. 字符常量            C. 浮点型常量                   D. 宏定义的常量             

允许(整型、字符、枚举、宏定义)常量。

不允许浮点数、字符串/数组,结构体/共用体,非整型指针,变量或非常量表达式。

以下代码的输出是(B

int a = 3, b = 5; if (a > 2 && b < 4) printf("A"); else printf("B"); 

A. A               B. B               

以下关于switch语句的描述,正确的是(D

A. default分支必须放在最后                            B. case分支必须用break结束

C. switch表达式可以是浮点类型                     D. case分支的值必须唯一         

以下代码的输出是(C

int x = 2; switch (x) { case 1: printf("A"); case 2: printf("B"); case 3: printf("C"); default: printf("D"); } 

A. B               B. BC            C. BCD                     D. D              

以下代码的功能是(B

int score = 85; if (score >= 90) printf("A"); else if (score >= 80) printf("B"); else printf("C"); 

A. 判断成绩是否及格         B. 根据成绩输出等级      C. 计算总分                  D. 输出固定值             

关系表达式 5 != 3 的结果是 1(真)

逻辑表达式 !(3 > 5) 的结果是 1(真)

条件表达式的一般形式是 条件 ? 表达式1 : 表达式2

switch语句中,若所有case都不匹配,则执行 default 分支

int a = 10;,则 if (a % 2 == 0) 的条件结果为

以下代码的输出是 B

int x = 15; if (x > 20) printf("A"); else if (x > 10) printf("B"); else printf("C"); 

表达式 (5 > 3) && (2 < 4) 的结果是 1)。

以下代码的输出是什么?

int a = 7, b = 3; if (a > 5) { if (b < 5) printf("A"); else printf("B"); } else printf("C");     

答案:A

以下代码的输出是什么?

int x = 4; switch (x) { case 1: printf("A"); break; case 4: printf("B"); case 5: printf("C"); break; default: printf("D"); }      

 答案:BC

以下代码是否存在错误?若有,请修正。

int num = 2.5;                   if (num = 2) printf("Yes"); 

答案:错误:赋值运算符=误用为==num类型不匹配。修正:int num = 2;           if (num == 2) printf("Yes"); 

以下代码的功能是什么?

int a = 10, b = 20;             int max = (a > b) ? a : b;            

答案:求ab中的较大值并赋值给max

编写程序,输入一个整数,判断其是否为偶数。

#include <stdio.h> int main() { int num; scanf("%d", &num); if (num % 2 == 0) printf("偶数"); else printf("奇数"); return 0; } 

编写程序,输入一个字符,判断它是大写字母、小写字母还是数字。

#include <stdio.h> int main() { char ch; scanf("%c", &ch); if (ch >= 'A' && ch <= 'Z') printf("大写字母"); else if (ch >= 'a' && ch <= 'z') printf("小写字母"); else if (ch >= '0' && ch <= '9') printf("数字"); else printf("其他字符"); return 0; } 

使用switch语句编写程序,根据输入的月份(1-12),输出该月份的天数(假设2月有28天)。

#include <stdio.h> int main() { int month; scanf("%d", &month); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("31天"); break; case 4: case 6: case 9: case 11: printf("30天"); break; case 2: printf("28天"); break; default: printf("输入错误"); } return 0; } 

不能case 1,3,5:,一个case对应一个值 

编写程序,输入三个整数,按从小到大的顺序输出。

#include <stdio.h> int main() { int a, b, c, t; scanf("%d%d%d", &a, &b, &c); if (a > b) { t = a; a = b; b = t; } if (a > c) { t = a; a = c; c = t; } if (b > c) { t = b; b = c; c = t; } printf("%d %d %d", a, b, c); return 0; } 

循环结构程序设计

while循环的特点是(B

A. 先执行循环体,再判断条件              B. 先判断条件,再执行循环体

C. 至少执行一次循环体                         D. 无条件执行循环体                 

以下代码的执行结果是(B

int i = 5; 

while (i--) printf("%d ", i); 

A. 5 4 3 2 1         B. 4 3 2 1 0               C. 5 4 3 2              D. 4 3 2 1       

do while循环的结束条件是(C

A. 条件为真时继续执行                         B. 条件为假时继续执行

C. 无论条件如何,至少执行一次        D. 条件为真时结束循环            

以下代码的输出是(A

for (int i = 0; i < 3; i++) { 

    if (i == 1) break; 

    printf("%d ", i); 

A. 0                B. 0 1             C. 0 1 2                     D. 1 2            

以下关于for循环的描述,错误的是(C

A. for(;;) 是死循环            B. 循环变量可在循环体内修改

C. 初始化部分只能定义循环变量        D. 循环体可以为空                     

以下代码的输出是(B

int i = 0; 

do { 

    printf("%d ", i); 

    i++; 

} while (i <= 2); 

A. 0 1             B. 0 1 2                      C. 1 2             D. 0               

以下代码的输出是(A

for (int i = 1; i <= 3; i++) { 

    if (i % 2 == 0) continue; 

    printf("%d ", i); 

A. 1 3             B. 2                C. 1 2 3                     D. 2 3           

以下代码中,break的作用是(A

while (1) { 

    if (x == 0) break; 

    x--; 

A. 结束当前循环       B. 跳过本次循环剩余语句       C. 结束整个程序      D. 无作用                          

以下代码的功能是(B

for (int i = 0; i < 5; i += 2) printf("%d ", i); 

A. 输出 0 1 2 3 4               B. 输出 0 2 4                      C. 输出 1 3 5                     D. 死循环    

以下代码的输出是(A

int x = 3; 

do { 

    x--; 

} while (x > 0); 

printf("%d", x); 

A. 0                B. 1                C. 2                D. 3               

while循环的一般形式是:while (条件) { 循环体 }

do while循环的结束条件是:循环体执行后,条件为

for循环的三个表达式分别是:初始化、条件判断、更新循环变量

以下代码的输出是:1 3 5

for (int i = 1; i <= 5; i += 2) printf("%d ", i); 

break语句的作用是:终止当前循环或switch语句。

以下代码的输出是:0 1 2

int i = 0; while (i < 3) { printf("%d ", i); i++; } 

continue语句的作用是:跳过本次循环剩余代码,进入下一次循环

以下代码的输出是什么?

int i = 1; while (i <= 4) { if (i == 3) break; printf("%d ", i); i++; }        

答案:1 2

以下代码的输出是什么?

int x = 5; do { x -= 2; printf("%d ", x); } while (x > 0); 

答案:3 1 -1

以下代码是否存在错误?若有,请修正。

for (int i = 0; i < 5; i++); 

    printf("%d ", i); 

答案:错误:for循环后多加分号,导致循环体为空。修正:

for (int i = 0; i < 5; i++) { 

    printf("%d ", i); 

以下代码的功能是什么?

int sum = 0, n = 10; for (int i = 1; i <= n; i++) { sum += i; } printf("%d", sum); 

答案:计算110的整数和,结果为55

编写程序,使用while循环计算1100的偶数和。

#include <stdio.h> int main() { int i = 1, sum = 0; while (i <= 100) { if (i % 2 == 0) sum += i; i++; } printf("偶数和:%d", sum); return 0; } 

使用do while循环编写程序,输入一个正整数,逆序输出其各位数字。

#include <stdio.h> int main() { int num, digit; scanf("%d", &num); do { digit = num % 10; printf("%d ", digit); num /= 10; } while (num > 0); return 0; } 

编写程序,使用for循环输出所有3位水仙花数(各位数字立方和等于该数本身)。

#include <stdio.h> int main() { for (int i = 100; i <= 999; i++) { int a = i / 100, b = (i / 10) % 10, c = i % 10; if (a*a*a + b*b*b + c*c*c == i) printf("%d ", i); } return 0; } 

编写程序,使用嵌套循环输出如下图形:

** 

*** 

**** 

#include <stdio.h> int main() { for (int i = 1; i <= 4; i++) { for (int j = 1; j <= i; j++) { printf("*"); } printf("\n"); } return 0; } 

利用数组处理批量数据

以下一维数组定义正确的是(C

A. int a[];                  B. int a[5] = {1,2,3,4,5,6};             C. int a[3] = {0};                 D. int a(5);              

二维数组 int b[2][3]; 的元素个数是(D

A. 2                B. 3                C. 5                D. 6               

以下字符数组初始化正确的是(B

A. char str[5] = "Hello";  B. char str[] = {'H','e','l','l','o'};

C. char str[5] = {'H','e','l','l','o','\0'};    D. char str = "Hello";

字符串的结束标志是(B

A. \n               B. \0               C. \t    D.                  

以下代码的输出是(A

int a[3] = {1, 2};                printf("%d", a[2]); 

A. 0                B. 1                C. 2                D. 随机值       

显示初始化元素个数少于数组长度,剩余未显示初始化的元素会被自动补0。        

二维数组 int arr[2][3] = {{1,2}, {3}}; 中,arr[1][2] 的值是(A

A. 0                B. 3                C. 1                D. 随机值              

以下代码的输出是(A

char str[] = "abc";                       printf("%d", strlen(str)); 

A. 3                B. 4                C. 编译错误            D. 随机值              

以下代码的功能是(A

char s[10];  scanf("%s", s); 

A. 输入一个字符串,最多包含9个字符                   B. 输入一个字符串,最多包含10个字符

C. 输入一个整数              D. 输入一个字符             

以下代码的输出是(A

int a[5] = {10, 20, 30};      printf("%d", a[3]); 

A. 0                B. 10              C. 30              D. 随机值              

以下二维数组定义中,错误的是(B

A. int a[][3] = {{1,2}, {3,4}};                  B. int a[2][] = {{1,2}, {3,4}}; 

C. int a[2][3] = {0};                               D. int a[][3] = {1,2,3,4};

二维数组的列数必须显示声明。

一维数组 int arr[5]; 的下标范围是 04

二维数组 int a[3][4]; 共有 3 行,4 列。

初始化字符数组为字符串 "Hello" 的两种方式:

char s[] = "Hello";            char s[6] = {'H','e','l','l','o','\0'};

printf("%s", str); 中,str 必须是 \0结尾的字符数组。

char str[10];,则 scanf("%s", str); 最多能输入 9 个字符(不含结束符)。

以下代码的输出是什么?

int a[4] = {5, 4, 3, 2}; for (int i = 3; i >= 0; i--) printf("%d ", a[i]);

答案:2 3 4 5

以下代码的输出是什么?

char s[] = "Hello"; 

s[2] = '\0'; 

printf("%s", s);                          

答案:He

以下代码是否存在错误?若有,请修正。

int a[2][3] = {{1,2}, {3,4,5}}; 

printf("%d", a[1][2]);                           

答案:无错误,输出5

以下代码的功能是什么?

char str[100]; gets(str); int len = 0; while (str[len] != '\0') len++; printf("%d", len); 

答案:计算输入字符串的长度(不包含结束符)

编写程序,输入5个整数存入一维数组,输出最大值和最小值。

#include <stdio.h> int main() { int a[5], max, min; for (int i = 0; i < 5; i++) scanf("%d", &a[i]); max = min = a[0]; for (int i = 1; i < 5; i++) { if (a[i] > max) max = a[i]; if (a[i] < min) min = a[i]; } printf("最大值:%d,最小值:%d", max, min); return 0; }                   

编写程序,计算二维数组(3x3)对角线元素之和。

#include <stdio.h> int main() { int a[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}; int sum = 0; for (int i = 0; i < 3; i++) sum += a[i][i] + a[i][2-i]; if (3 % 2 != 0) sum -= a[1][1]; // 避免中心元素重复相加 printf("和为:%d", sum); return 0; } 

编写程序,输入一个字符串,统计其中大写字母的个数。

#include <stdio.h> int main() { char s[100]; int count = 0; gets(s); for (int i = 0; s[i] != '\0'; i++) { if (s[i] >= 'A' && s[i] <= 'Z') count++; } printf("大写字母个数:%d", count); return 0; } 

编写程序,将两个字符数组拼接为一个字符串(不得使用库函数)。

#include <stdio.h> int main() { char s1[100], s2[100], result[200]; int i = 0, j = 0; gets(s1); gets(s2); while (s1[i] != '\0') { result[i] = s1[i]; i++; } while (s2[j] != '\0') { result[i + j] = s2[j]; j++; } result[i + j] = '\0'; printf("拼接结果:%s", result); return 0; } 

用函数实现模块化程序设计

以下关于无参函数定义正确的是(A

A. void func() {}             B. int func {}           C. func() {}         D. void func(int) {}                        

函数调用时,形参和实参的关系是(C

A. 形参是实参的别名                             B. 形参和实参共享内存

C. 形参是实参的临时拷贝                     D. 形参必须在函数调用前初始化       

以下函数原型的声明正确的是(B

A. func(int a, b);                 B. void func(int, int);        

C. int func(a, b);                 D. void func(int a; int b);             

以下代码的输出是(A

void func(int x) { x = 10; } int main() { int a = 5; func(a); printf("%d", a); return 0; } 

A. 5                B. 10              C. 编译错误            D. 随机值              

以下关于递归函数的描述,错误的是(C

A. 必须包含终止条件                  B. 每次递归会创建新的栈帧

C. 递归可以替代所有循环         D. 递归可能导致栈溢出           

以下代码的输出是(C

int func(int arr[]) { return sizeof(arr); } int main() { int a[5]; printf("%d", func(a)); return 0; } 

A. 5                B. 20              C. 4(指针大小)             D. 编译错误           

以下变量的作用域是全局的是(B

A. 函数内定义的static变量      B. 函数外定义的int变量           

C. 函数内定义的auto变量        D. 函数参数           

static关键字修饰局部变量时,变量的生命周期是(B

A. 函数调用期间              B. 程序运行期间   C. 文件作用域内            D. 代码块内           

以下代码的输出是(A

int x = 5; void func() { static int x = 1; x++; printf("%d ", x); } int main() { func(); func(); return 0; } 

A. 2 3             B. 2 2             C. 6 7             D. 1 2            

以下关于外部函数的描述,正确的是(

A. 只能在定义的文件中使用                           B. 使用extern声明         

C. 默认作用域为当前文件                                 D. 不可被其他文件调用  答案:B

函数原型声明的作用是 告知编译器函数的存在及其参数类型

函数调用方式包括:传值调用,引用调用,传地址调用。

局部变量的默认存储类别是 auto

若函数返回类型为void,则表示 函数不返回任何值。

递归函数计算阶乘的终止条件是 n == 0 || n == 1

在函数中修改全局变量会 直接影响全局作用域中的变量值

使用register关键字声明的变量建议存储在 寄存器 中。

以下代码的输出是什么?

void swap(int a, int b) { int t = a; a = b; b = t; } int main() { int x = 3, y = 5; swap(x, y); printf("%d %d", x, y); return 0; } 

答案:3 5(形参是实参的拷贝,交换不影响实参)

以下代码的输出是什么?

int func(int n) { if (n <= 1) return 1; return n * func(n - 1); } int main() { printf("%d", func(4)); return 0; } 

答案:24(计算4的阶乘)

以下代码是否存在错误?若有,请修正。

extern void print(); int main() { print(); return 0; } void print() { printf("Hello"); }       

答案:无错误。extern声明允许跨文件调用,此处函数定义在调用之后,需提前声明。

以下代码的功能是什么?

void reverse(int arr[], int n) { for (int i = 0; i < n/2; i++) { int temp = arr[i]; arr[i] = arr[n-i-1]; arr[n-i-1] = temp; } }   

答案:将数组元素逆序存放。

编写函数isPrime,判断一个整数是否为素数。

#include <stdio.h> int isPrime(int n) { if (n <= 1) return 0; for (int i = 2; i*i <= n; i++) if (n % i == 0) return 0; return 1; } int main() { int num; scanf("%d", &num); printf(isPrime(num) ? "是素数" : "不是素数"); return 0; } 

编写递归函数计算斐波那契数列第n项。

#include <stdio.h> int fib(int n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); } int main() { int n; scanf("%d", &n); printf("第%d项:%d", n, fib(n)); return 0; } 

编写函数,将一维数组的所有元素加倍(数组作为参数传递)。

#include <stdio.h> void doubleArray(int arr[], int n) { for (int i = 0; i < n; i++) arr[i] *= 2; } int main() { int a[] = {1, 2, 3, 4, 5}; int len = sizeof(a)/sizeof(a[0]); doubleArray(a, len); for (int i = 0; i < len; i++) printf("%d ", a[i]); return 0; } 

编写程序,使用静态局部变量统计函数被调用的次数。

#include <stdio.h> void func() { static int count = 0; count++; printf("调用次数:%d\n", count); } int main() { func(); func(); func(); return 0; } 

善于利用指针

以下关于指针的描述,正确的是(B

A.指针变量存储的是变量的值               B.指针变量存储的是变量的地址

C.指针变量的类型必须与指向的变量类型一致        

D.指针变量可以直接进行加法运算                 

只能与整型数据加减,两个指针可以进行减法运算。

以下代码的输出是(A

int a = 10; 

int *p = &a; 

printf("%d", *p); 

A. 10              B. a的地址             C. 随机值               D. 编译错误          

以下指针变量定义正确的是(B

A. int p;                    B. int *p;                   C. int &p;                 D. *int p;                 

int arr[5] = {1,2,3,4,5};,则*(arr + 2)的值是(C

A. 1                B. 2                C. 3                D. 4               

以下关于字符指针和字符数组的区别,错误的是(C

A. 字符指针可以指向字符串字面量                B. 字符数组名是常量指针

C. 字符指针可以直接赋值字符串        D. 字符数组需要分配固定内存

以下代码的输出是(C

char str[] = "Hello"; 

char *p = str; 

printf("%c", *(p + 3)); 

A. H               B. e                C. l                 D. l                

函数指针的定义形式是(A 

A. int (*p)(int, int);               B. int *p(int, int);        

C. int (p)(int, int);                 D. int *p(int, int);             

以下代码的输出是(B

int a = 5, b = 10; 

int *p1 = &a, *p2 = &b; 

*p1 = *p2; 

printf("%d", a); 

A. 5                B. 10              C. a的地址             D. 编译错误           

以下关于指针数组的描述,正确的是(A

A. int *arr[5]; 是包含5个整型指针的数组

B. int (*arr)[5]; 是包含5个整型指针的数组

C. 指针数组的每个元素必须是同一类型

D. 指针数组名是常量指针             

每个元素必须具有相同的指针类型,但可以指向不同类型的数据。

void*可以指向任意类型的数据。       

以下代码的输出是(A

int x = 5;     int *p = &x;           int **pp = &p;      printf("%d", **pp); 

A. 5                B. p的地址             C. x的地址             D. 随机值              

指针变量的定义形式为 类型 *变量名;

取地址运算符是 &,指针运算符是 *

int a[3][4];,则a[1][2]的地址可以通过 *(a + 1) + 2 表示。

字符串的引用方式包括 字符数组 字符指针

函数指针调用函数的语法是 (*指针变量)(参数列表)

返回指针值的函数定义形式为 类型 *函数名(参数列表) { ... }

以下代码的输出是什么?

int a = 5, b = 10; void swap(int *x, int *y) { int t = *x; *x = *y; *y = t; } int main() { swap(&a, &b); printf("%d %d", a, b); return 0; } 

答案:10 5

以下代码的输出是什么?

char *str = "Hello"; 

printf("%c", str[2]); 

答案:l

以下代码是否存在错误?若有,请修正。

int *p; 

*p = 10; 

答案:错误:未初始化的指针解引用。修正为:

int a; 

int *p = &a; 

*p = 10; 

以下代码的功能是什么?       

int sum(int *arr, int n) { int s = 0; for (int i = 0; i < n; i++) s += arr[i]; return s; }   

答案:计算一维数组所有元素的和。

编写函数,通过指针交换两个整数的值。

#include <stdio.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 3, y = 5; swap(&x, &y); printf("x=%d, y=%d", x, y); return 0; } 

编写程序,使用指针遍历一维数组并输出所有元素。

#include <stdio.h> int main() { int arr[] = {1, 2, 3, 4, 5}; int *p = arr; for (int i = 0; i < 5; i++) printf("%d ", *(p + i)); return 0; } 

编写函数,返回两个整数中的较大值地址。

#include <stdio.h> int *max(int *a, int *b) { return (*a > *b) ? a : b; } int main() { int x = 10, y = 20; int *result = max(&x, &y); printf("较大值:%d", *result); return 0; } 

编写程序,使用指针数组存储多个字符串并输出。

#include <stdio.h> int main() { char *strs[] = {"Apple", "Banana", "Cherry"}; for (int i = 0; i < 3; i++) printf("%s\n", strs[i]); return 0; } 

用户自己建立数据类型

以下结构体声明正确的是(D

A. struct Student { int id; char name[20]; };             B. struct { int id; } Student;        

C. Student struct { int id; };                                        D. struct Student { int id; };                    

结构体变量的初始化方式正确的是(A

A. struct Point { int x, y; } p = {1, 2};     B. struct Point p = {1, 2}; 

C. Point p = {1, 2};                                   D. struct p = {1, 2};         

以下共用体的定义正确的是(A

A. union Data { int a; float b; char c; };            B. struct Data { int a; float b; };             

C. union { int a; };                                               D. union Data = { int a; };            

共用体的特点是(A

A. 所有成员共享同一内存空间                  B. 成员内存空间独立   

C. 可以同时存储多个成员的值                  D. 成员类型必须相同 

枚举类型默认从哪个值开始递增?(A

A. 0                B. 1                C. 随机值               D. 必须显式指定            

以下枚举定义正确的是(A

A. enum Week { Mon, Tue, Wed };                     B. enum { Mon, Tue, Wed } Week;

C. enum Week = { Mon, Tue, Wed };                D. Week enum { Mon, Tue, Wed };       

以下关于typedef的描述,正确的是(B

A. 用于定义新变量                      B. 可以简化复杂类型的声明  

C. 不能用于结构体                      D. 会分配额外内存         

以下代码的输出是(A

union Data { 

    int a; 

    char b; 

} d; 

d.a = 65; 

printf("%c", d.b); 

A. A                B. 65              C. 随机字符            D. 编译错误           

结构体成员的访问方式是(A

A. 结构体变量.成员名                         B. 结构体变量->成员名 

C. 成员名.结构体变量                        D. *结构体变量.成员名               

以下代码中,typedef的作用是(B

typedef struct Node { 

    int data; 

    struct Node *next; 

} ListNode; 

A. 定义一个新结构体类型                 B. struct Node重命名为ListNode 

C. 声明一个全局变量                        D. 定义联合体  

结构体声明的基本形式是 struct 结构体名 { 成员列表 };

共用体的所有成员共享 同一块内存空间

枚举常量默认从 0 开始递增。

使用typedefint重命名为Integer的语句是 typedef int Integer;

结构体数组的初始化示例:

struct Student { 

    int id; 

    char name[20]; 

} students[2] = { {1, "Alice"}, {2, "Bob"} }; 

共用体变量的成员赋值会 覆盖之前的值

以下代码的输出是什么?

#include <stdio.h> struct Point { int x; int y; }; int main() { struct Point p = {3, 4}; printf("坐标:(%d, %d)", p.x, p.y); return 0; }   

答案:坐标:(3, 4)

以下代码的输出是什么?

#include <stdio.h> union Data { int a; float b; }; int main() { union Data d; d.a = 10; d.b = 3.14; printf("%d", d.a); return 0; }   

答案:输出不确定(共用体成员覆盖导致数据损坏)

以下代码是否存在错误?若有,请修正。

typedef struct { int id; char name[20]; } Student; Student s = {101, "Tom"};     

答案:无错误。

以下代码的功能是什么?

enum Color { RED, GREEN, BLUE }; 

int main() { 

    enum Color c = GREEN; 

    printf("%d", c); 

    return 0; 

}                    答案:输出枚举常量GREEN的值,结果为1

定义一个结构体Book,包含书名(字符串)和价格(浮点数),并初始化两本书。

#include <stdio.h> struct Book { char title[50]; float price; }; int main() { struct Book books[2] = { {"C Programming", 99.5}, {"Data Structures", 120.0} }; for (int i = 0; i < 2; i++) printf("书名:%s,价格:%.2f\n", books[i].title, books[i].price); return 0; } 

使用共用体实现一个变量既能存储整数,又能存储字符。

#include <stdio.h> union Data { int num; char ch; }; int main() { union Data d; d.num = 65; printf("字符:%c\n", d.ch); return 0; } 

定义枚举类型Week,包含星期一到星期日,并输出星期三的值。

#include <stdio.h> enum Week { Mon, Tue, Wed, Thu, Fri, Sat, Sun }; int main() { printf("星期三的值:%d", Wed); return 0; } 

使用typedef简化结构体声明,并定义一个链表节点。

#include <stdio.h> typedef struct Node { int data; struct Node *next; } ListNode; int main() { ListNode node1 = {10, NULL}; ListNode node2 = {20, &node1}; printf("节点2的值:%d", node2.data); return 0; }

总结

复试考试一般不会考太难的题目,把下面这些题目都搞懂就差不多了,可以通过在做题的过程中回顾知识点

我当时在考试的过程中还以为题目出错了,回去发现小丑竟是我自己(我以为这个二维数组等价成int arr[4][4]={{1,2,3},{4,5,6},{7},{8},{9}};,然而并不是),所以虽然在复习前有很多不会的,但是只要认真修正还是可以取得不错从成绩。

#include<stdio.h>int main(){int arr[4][4]={{1,2,3},{4,5,6},7,8,9};printf("%d",arr[2][1]);return 0;
}

C语言复习题_c语言已知整型数组a长度为15,其中保存了10个数,并且这些数 在数组中是有序存放的-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130682554?spm=1001.2014.3001.5502

相关文章:

  • 常见的UDS服务标识符与UDS刷写流程
  • 指针01 day13
  • mapstruct中的@Mapper注解详解
  • Linux检验库是否安装成功
  • 【Linux手册】从「程序」到「进程」:计算机世界的运行机制
  • vue中的doSave()方法
  • sherpa-onnx开源语音处理框架研究报告:从技术解析到应用实践
  • 134. Gas Station
  • 泛微OAe9-自定义资源看板
  • HALCON第一讲->数据结构、语法规则与思路
  • 算法学习笔记:2.大根堆算法——数据流的中位数​​or最后一块石头的重量
  • [Java恶补day23] 35. 搜索插入位置
  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现服务安排?
  • ICMP协议深度解析
  • 安装 LibreOffice
  • 《一本书看透A股》速读笔记
  • 第三十八课:实战案例-飞鸟和飞机的识别
  • 《性能之巅》第三章 操作系统
  • AI时代,学习力进化指南:如何成为知识的主人?
  • Java(网络编程)
  • 免费 网站 手机/宁宁网seo
  • 番禺南村网站建设/做网页的网站
  • 网站开发计算机配置/宁波最好的推广平台
  • 绵阳城乡住房建设厅网站/搜索词
  • 动漫制作与设计专业/seo排名点击器
  • 汕头网站seo外包/百度的企业网站