C语言复习题

MapleLeaf Lv1

C语言复习题

第一部分 基础与数据类型

一、单项选择题

  1. 以下哪个是C语言的合法标识符?( C
    A. 2a B. -123 C. _sum D. float
  2. 以下哪个是C语言的合法标识符?( C
    A. 3a_b B. a-b C. _student D. int
  3. 以下哪个不是C语言的关键字?( B
    A. float B. printf C. if D. void
  4. 以下哪种数据类型的占用字节数最小?( B
    A. int B. char C. float D. double
  5. 字符型变量 char c='A'; 则c在内存中存储的是( B
    A. “A” B. 65 C. ‘65’ D. A
  6. 若定义 int a=5; 则执行 a += 3;后,a的值为( B
    A. 5 B. 8 C. 3 D. 15
  7. 若定义 int a=3,b=4; 则表达式 a*b-6的值为( A
    A. 6 B. 7 C. 8 D. 9
  8. 若定义 int a = 5, b = 3;则表达式 a % b + (a / b)的值是( A
    A. 3 B. 4 C. 5 D. 6
  9. 若有 int x=3,y=4; 则表达式 x>y?x:y 的结果是( B
    A. 3 B. 4 C. 0 D. 1
  10. 若有 int a=5,b=3; 则表达式 a>b?a:b 的值是( B
    A. 3 B. 5 C. 0 D. 1
  11. 若有 int x=5; 则执行 x--;后,x的值为( A
    A. 4 B. 5 C. 6 D. 不确定
  12. 若有 int a=6; 则表达式 a++ 的值是( B
    A. 5 B. 6 C. 7 D. 不确定

二、填空题

  1. C语言程序的入口函数是 main()
  2. C语言中,单行注释的符号是 //
  3. 定义一个整型变量a并赋值为10,语句为 int a = 10;
  4. 定义一个单精度浮点型变量x并赋值为3.14,语句为 float x = 3.14;
  5. 逻辑与运算符是 &&,逻辑或运算符是 ||
  6. 逻辑非运算符是 !,赋值运算符是 =
  7. 若定义 float x = 3.14159; 要输出x的前3位小数,格式化输出语句应为 printf("%.3f", x);

三、程序结果题

  1. 下列程序段的输出结果是 x=20 y=10
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main() {
int x = 10, y = 20;
int temp = x;
x = y;
y = temp;
printf("x=%d y=%d", x, y);
return 0;
}

第二部分 选择和循环结构

一、单项选择题

  1. 以下关于if-else语句的说法,错误的是( D
    A. if语句后面的条件表达式必须用括号括起来
    B. else语句必须与最近的未配对if配对
    C. if-else语句中,else后面可以是空语句
    D. if-else语句中,else后面要有条件表达式
  2. 以下关于if-else语句的说法正确的是( C
    A. else必须与最近的if配对
    B. else可以单独使用
    C. if后面的条件必须加括号
    D. 多个if-else不能嵌套
  3. switch语句中,每个case分支结束后,若想跳出switch,需使用( A
    A. break B. continue C. return D. goto
  4. 以下循环语句中,循环体执行次数为3次的是( A
    A. for(int i=1;i<=3;i++) B. for(int i=0;i<3;i--)
    C. while(3>5) D. do{ }while(1>2);
  5. 以下循环语句中,循环体执行次数为5次的是( A
    A. for(int i=0;i<5;i++) B. for(int i=1;i<=4;i++)
    C. while(5>10) D. do{ }while(0);
  6. 循环语句 for(int i=0; i<5; i++)i++ 执行的次数是( B
    A. 4次 B. 5次 C. 6次 D. 无限次

二、填空题

  1. 循环结构中,continue 语句用于结束本次循环,开始下一次循环。
  2. 循环结构中,break 语句用于跳出整个循环,不再执行后续循环。
  3. 循环语句 while(1)无限 循环(填”无限”或”有限”),若要退出该循环,需在循环体内使用 break 语句。
  4. 若要计算1+2+3+…+10的和,使用for循环时,循环变量的初始值可以设为i=1,判断条件(表达式2)为 i <= 10
  5. 若要计算10-9-8-…-1的差,使用while循环时,循环变量初始值可设为i=9,判断条件(表达式2)为 i>0,循环体中执行 i--; sum-=i;。(需先定义sum=10

三、程序结果题

  1. 下列程序段的输出结果是 10,30,30
1
2
3
int a=10,b=50,c=30;
if(a>b) a=b; b=c;
printf("%d,%d,%d\n",a,b,c);
  1. 下列程序段的输出结果是 1,0
1
2
3
4
5
6
7
int x=1,a=0,b=0;
switch(x) {
case 0: b++;break;
case 1: a++;break;
case 2: a++;b++;
}
printf("%d,%d\n",a,b);
  1. 下列程序段的输出结果是 a=3,b=12
1
2
3
4
5
6
int a=1, b=2;
for (; a<5; a++) {
b*=a;
if(b>10) break;
}
printf("a=%d,b=%d\n", a, b);
  1. 下列程序输出结果是 sum=6
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main() {
int i, sum = 0;
for (i = 1; i <= 5; i++) {
if (i % 2 == 0) continue;
sum += i;
}
printf("sum=%d", sum);
return 0;
}

第三部分 数组、指针和结构体

一、单项选择题

  1. 数组 int arr[5]的下标范围是( C
    A. 1-5 B. 0-5 C. 0-4 D. 1-4
  2. 数组 int arr[]={1,2,3,4,5}; 的长度是( B
    A. 4 B. 5 C. 6 D. 不确定
  3. 以下数组定义正确的是( B
    A. int arr[5] = {1,2,3,4,5,6}; B. int arr[] = {1,2,3};
    C. int arr[5] = {1,,3}; D. int arr[] = { };
  4. 若定义 int a[3][4];,则数组 a 的元素个数是( B
    A. 7 B. 12 C. 20 D. 不确定
  5. 以下关于指针的说法正确的是( D
    A. 指针变量存储的是变量的值
    B. 指针变量可以直接赋值整数
    C. &符号用于获取变量
    D. *符号可以用于定义指针变量
  6. 以下关于指针的说法,正确的是( B
    A. 指针变量存储的是变量的值
    B. int *p; 定义了一个指向整型变量的指针
    C. p = &a; 表示将变量 a 的值赋给指针 p
    D. 指针变量可以直接进行算术运算,与普通变量相同
  7. 指针变量的定义格式正确的是( D
    A. int p; B. float p; C. int &p; D. int *p;
  8. 以下哪个是输入函数?( B
    A. printf() B. scanf() C. putchar() D. puts()
  9. 以下哪个是输出单个字符的函数?( C
    A. scanf() B. puts() C. putchar() D. fgets()

二、填空题

  1. 数组名代表数组的 地址,是一个常量,不能被赋值。
  2. 数组 int num[3]={10,20,30}; 中,num[2]的值是 30
  3. 定义char ar[]="Hello";则数组ar所占存储空间为 6 个字节。
  4. 指针变量 p 指向整型变量 a,则通过指针访问变量 a 的值的表达式是 \*p
  5. 若要将字符串 s1 复制到字符串 s2 中,可使用C语言标准库函数 strcpy(s2, s1)
  6. 定义一个结构体 student,包含姓名(字符数组)和年龄(整型)两个成员,结构体定义语句为:
    struct student { char name[20]; int age; };

三、程序结果题

  1. 下列程序段的输出结果是 abXde
1
2
3
4
5
6
char str[]="abcde";
int i;
for (i=0; str[i]!='\0';i++) {
if (str[i]=='c') str[i]='X';
}
printf("%s\n", str);
  1. 下列程序输出结果是 1 2 3
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int i, *p = arr;
for (i = 0; i < 3; i++) {
printf("%d ", *(p + i));
}
return 0;
}

第四部分 函数

一、单项选择题

  1. 函数调用时,实参的值复制给形参,对形参修改不会影响实参的传递方式是( B
    A. 地址传递 B. 值传递 C. 引用传递 D. 随机传递
  2. 以下关于函数的说法错误的是( A
    A. 函数必须有返回值
    B. 函数可以没有参数
    C. 主函数main()是程序入口
    D. 函数声明需与定义一致

二、填空题

  1. 函数的声明部分通常放在程序的 开头(开头/结尾)。
  2. 函数调用时,实参与形参的 类型和数量 必须一致。

三、程序结果题

  1. 下列程序输出结果是 a=10
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
void fun(int x) {
x += 5;
}
int main() {
int a = 10;
fun(a);
printf("a=%d", a);
return 0;
}

第五部分 文件操作

一、单项选择题

  1. 以下关于文件操作的函数,用于打开文件的是( C
    A. fclose() B. fscanf() C. fopen() D. fprintf()
  2. 以下哪个关键字用于定义常量?( A
    A. const B. static C. volatile D. auto

第六部分 程序填空题

  1. 以下程序的功能是计算1到10的累加和,请补充完整。
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main() {
int i, sum = 0; // 初始化累加和
for(i = 1; i <= 10; i++) // 循环条件
{
sum = sum + i; // 累加操作
}
printf("1到10的累加和为:%d\n", sum);
return 0;
}
  1. 以下程序的功能是计算两个整数的和并输出,请补充完整。
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main() {
int a, b, sum;
printf("请输入两个整数:");
scanf("%d%d", &a, &b); // 输入两个整数给a和b
sum = a + b; //计算a和b的和
printf("它们的和是:%d\n", sum);
return 0;
}
  1. 以下程序的功能是调用函数 max 求两个整数的最大值,请补充完整。
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int max(int a, int b); // 函数声明
int main() {
int x = 5, y = 8, result;
result = max(x, y); // 函数调用
printf("最大值为:%d\n", result);
return 0;
}
int max(int a, int b) {
return (a > b) ? a : b; // 三目运算符判断最大值
}
  1. 以下程序的功能是输出1到10之间的偶数,请补充完整。
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main() {
int i;
for(i = 1; i <= 10; i++) {
if(i % 2 == 0)
printf("%d ", i);
}
return 0;
}
  1. 以下程序的功能是输入一个整数,输出其绝对值,请补充完整。
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main() {
int num, abs_num;
printf("请输入一个整数:");
scanf("%d", &num); // 输入整数给num
if(num < 0) {
abs_num = -num; // 计算负数的绝对值
} else {
abs_num = num;
}
printf("该数的绝对值是:%d\n", abs_num);
return 0;
}

第七部分 编程题

  1. 编写一个C语言程序,使用循环计算1到10的阶乘(10! = 1×2×3×…×10),并输出结果。
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main() {
long long result = 1; // 使用long long避免溢出
for (int i = 1; i <= 10; i++) {
result *= i;
}
printf("10! = %lld\n", result);
return 0;
}
  1. 编写一个C语言程序,从键盘输入一个正整数 n,计算并输出 n 的阶乘(n! = 1×2×3×…×n)。要求:输入不合法时(如负数),提示”输入错误,请输入正整数”。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main() {
int n;
long long factorial = 1;

printf("请输入一个正整数: ");
scanf("%d", &n);

if (n < 0) {
printf("输入错误,请输入正整数\n");
return 1;
}

for (int i = 1; i <= n; i++) {
factorial *= i;
}

printf("%d! = %lld\n", n, factorial);
return 0;
}
  1. 编写一个C语言程序,使用循环输出1到10之间的奇数(要求输出格式:1 3 5 7 9)。
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
  1. 编写一个C语言程序,输入两个整数a和b,输出其中较大的数(使用if-else语句)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main() {
int a, b;

printf("请输入两个整数: ");
scanf("%d %d", &a, &b);

if (a > b) {
printf("较大的数是: %d\n", a);
} else {
printf("较大的数是: %d\n", b);
}

return 0;
}
  • Title: C语言复习题
  • Author: MapleLeaf
  • Created at : 2025-12-28 14:35:47
  • Updated at : 2025-12-28 15:12:06
  • Link: https://blog.141941.xyz/2025/12/28/20251228/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments