大一C语言程序设计题库哪里找?

99ANYc3cd6
预计阅读时长 28 分钟
位置: 首页 C语言 正文

C语言程序设计题库 (大一版)

第一部分:基础语法与数据类型

这个部分是C语言的基石,主要考察对基本数据类型、变量、常量、运算符和表达式的理解。

大一c语言程序设计题库
(图片来源网络,侵删)

知识点:

  • 变量定义与初始化
  • 基本数据类型 (int, float, double, char)
  • 常量与符号常量 (#define, const)
  • 算术运算符 (, , , , )
  • 赋值运算符与复合赋值运算符
  • 自增自减运算符 (, )
  • 类型转换

1:温度转换描述: 编写一个程序,将摄氏温度转换为华氏温度,转换公式为:F = C * 9 / 5 + 32,用户输入一个摄氏温度,程序输出对应的华氏温度。

代码示例:

#include <stdio.h>
int main() {
    float celsius, fahrenheit;
    printf("请输入摄氏温度: ");
    scanf("%f", &celsius);
    fahrenheit = celsius * 9.0f / 5.0f + 32.0f;
    printf("华氏温度为: %.2f\n", fahrenheit);
    return 0;
}

解析:

  • 使用 float 类型存储温度,因为温度可能是小数。
  • scanf 用于从键盘读取用户输入的浮点数。
  • %.2f 是格式化输出,表示保留两位小数,使结果更美观。
  • 在计算时,使用 0f0f 可以确保进行浮点数除法,而不是整数除法。

2:计算圆的周长和面积描述: 从键盘输入一个圆的半径,计算并输出其周长和面积,使用 #define 定义圆周率 PI14159

代码示例:

#include <stdio.h>
#define PI 3.14159
int main() {
    float radius, circumference, area;
    printf("请输入圆的半径: ");
    scanf("%f", &radius);
    circumference = 2 * PI * radius;
    area = PI * radius * radius;
    printf("周长为: %.2f\n", circumference);
    printf("面积为: %.2f\n", area);
    return 0;
}

解析:

  • 使用 #define 定义常量 PI,这是一个良好的编程习惯,方便统一修改和管理。
  • 分别计算周长和面积,并输出结果。

第二部分:流程控制语句

这个部分是程序逻辑的核心,考察分支和循环结构的使用。

知识点:

  • if-else 条件语句
  • switch 多分支语句
  • for 循环
  • while 循环
  • do-while 循环
  • breakcontinue 语句
  • 循环嵌套

3:判断奇偶数描述: 输入一个整数,判断它是奇数还是偶数。

代码示例:

#include <stdio.h>
int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    if (num % 2 == 0) {
        printf("%d 是偶数,\n", num);
    } else {
        printf("%d 是奇数,\n", num);
    }
    return 0;
}

解析:

  • 使用 (取模) 运算符来判断一个数是否能被2整除。
  • if-else 结构用于根据条件执行不同的代码块。

4:打印九九乘法表描述: 使用循环嵌套打印标准的九九乘法表。

代码示例:

#include <stdio.h>
int main() {
    int i, j;
    for (i = 1; i <= 9; i++) {
        for (j = 1; j <= i; j++) {
            printf("%d*%d=%-2d ", j, i, i * j); // %-2d 表示左对齐,占2位
        }
        printf("\n"); // 每行结束后换行
    }
    return 0;
}

解析:

  • 外层循环 for (i = 1; i <= 9; i++) 控制行数。
  • 内层循环 for (j = 1; j <= i; j++) 控制每行的列数,列数等于当前的行数 i
  • printf("\n"); 用于在每一行打印完毕后换行。
  • %-2d 是一个格式化技巧, 表示左对齐,2 表示该整数占2个字符宽度,可以使输出更整齐。

5:猜数字游戏描述: 程序随机生成一个1到100之间的整数,用户输入猜测的数字,程序提示“猜大了”、“猜小了”或“猜对了”,直到用户猜中为止。

代码示例:

#include <stdio.h>
#include <stdlib.h> // 用于 rand() 和 srand()
#include <time.h>   // 用于 time()
int main() {
    int secret, guess;
    // 使用当前时间作为随机数种子,确保每次运行结果不同
    srand((unsigned)time(NULL));
    secret = rand() % 100 + 1; // 生成1-100的随机数
    printf("我已经想好了一个1到100之间的整数,请你来猜,\n");
    do {
        printf("请输入你的猜测: ");
        scanf("%d", &guess);
        if (guess > secret) {
            printf("猜大了!\n");
        } else if (guess < secret) {
            printf("猜小了!\n");
        } else {
            printf("恭喜你,猜对了!\n");
        }
    } while (guess != secret); // 当猜错时,循环继续
    return 0;
}

解析:

  • srand((unsigned)time(NULL)) 是初始化随机数种子的标准做法,否则每次程序运行生成的随机数序列都是一样的。
  • rand() % 100 + 1 是生成1到100随机数的常用方法。
  • do-while 循环非常适合这种“至少执行一次,直到满足条件才退出”的场景。

第三部分:数组

数组是相同类型数据的集合,是处理批量数据的基础。

知识点:

  • 一维数组的定义、初始化和引用
  • 数组的遍历
  • 求数组最大值、最小值、平均值
  • 数组元素的排序 (冒泡排序)
  • 二维数组的定义和遍历

6:数组元素求和与平均值描述: 定义一个包含10个整数的数组,计算并输出所有元素的和以及平均值。

代码示例:

#include <stdio.h>
int main() {
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int sum = 0;
    float average;
    int i;
    // 计算总和
    for (i = 0; i < 10; i++) {
        sum += arr[i];
    }
    average = (float)sum / 10; // 注意类型转换,确保得到浮点数结果
    printf("数组元素的和为: %d\n", sum);
    printf("数组元素的平均值为: %.2f\n", average);
    return 0;
}

解析:

  • int arr[10] 定义了一个可以存放10个整数的数组。
  • sum += arr[i] 是累加的简洁写法。
  • (float)sum 是强制类型转换,将 sumint 转换为 float,以保证除法运算得到的是浮点数。

7:数组排序 (冒泡排序)描述: 对一个包含5个整数的数组进行升序排序,并输出排序后的结果。

代码示例:

#include <stdio.h>
int main() {
    int arr[5] = {64, 34, 25, 12, 22};
    int i, j, temp;
    int n = 5;
    // 冒泡排序
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换元素
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    printf("排序后的数组: ");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

解析:

  • 冒泡排序的核心思想是:每次比较相邻的两个元素,如果它们的顺序错误,就交换它们。
  • 外层循环控制排序的轮数,共需要 n-1 轮。
  • 内层循环负责每轮中的具体比较和交换,每轮后最大的元素会“冒泡”到最后,所以内层循环的范围可以减少。

第四部分:函数

函数是模块化编程的基础,用于封装代码,提高代码的复用性和可读性。

知识点:

  • 函数的定义、声明和调用
  • 函数参数 (值传递)
  • 函数返回值
  • 递归函数

8:使用函数判断素数描述: 编写一个函数 isPrime(int num),用于判断一个整数是否为素数,在 main 函数中调用该函数,并输出结果。

代码示例:

#include <stdio.h>
#include <stdbool.h> // 使用 bool 类型
// 函数声明
bool isPrime(int num);
int main() {
    int number;
    printf("请输入一个正整数: ");
    scanf("%d", &number);
    if (isPrime(number)) {
        printf("%d 是一个素数,\n", number);
    } else {
        printf("%d 不是一个素数,\n", number);
    }
    return 0;
}
// 函数定义:判断素数
bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i * i <= num; i++) { // 优化:只需判断到 sqrt(num)
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

解析:

  • bool 是C99标准引入的类型,需要包含 <stdbool.h> 头文件。
  • 函数声明放在 main 函数之前,告诉编译器这个函数的存在。
  • 函数定义实现了具体的逻辑,判断素数时,只需从2遍历到 sqrt(num) 即可,这里用 i * i <= num 来避免调用开方函数,效率更高。
  • return falsereturn true 一旦执行,函数立即结束。

第五部分:指针

指针是C语言的灵魂和难点,它存储的是变量的内存地址。

知识点:

  • 指针变量的定义和初始化 (, &)
  • 指针与数组的关系
  • 使用指针作为函数参数 (实现值传递的模拟,即地址传递)
  • const 与指针

9:使用指针交换两个变量的值描述: 编写一个函数 swap,通过指针参数交换两个整数的值。

代码示例:

#include <stdio.h>
// 函数声明
void swap(int *ptr1, int *ptr2);
int main() {
    int a = 10, b = 20;
    printf("交换前: a = %d, b = %d\n", a, b);
    swap(&a, &b); // 传递变量的地址
    printf("交换后: a = %d, b = %d\n", a, b);
    return 0;
}
// 函数定义:通过指针交换值
void swap(int *ptr1, int *ptr2) {
    int temp;
    temp = *ptr1;    // 解引用ptr1,获取a的值
    *ptr1 = *ptr2;   // 将b的值赋给a
    *ptr2 = temp;    // 将temp的值(原来的a的值)赋给b
}

解析:

  • int *ptr1 定义了一个指向整型的指针变量 ptr1
  • &a 是取地址运算符,获取变量 a 的内存地址。
  • swap 函数内部,*ptr1 是解引用(或称间接寻址)操作,它获取指针 ptr1 所指向地址的值(即 a 的值)。
  • 通过传递地址,函数可以直接修改 main 函数中变量的值,这是C语言中实现“引用传递”效果的标准方式。

第六部分:结构体

结构体允许将不同类型的数据组合成一个有机的整体。

知识点:

  • 结构体类型的定义
  • 结构体变量的声明和初始化
  • 结构体成员的访问 ( 和 ->)

10:学生信息管理描述: 定义一个结构体 Student,包含学号 (id)、姓名 (name) 和成绩 (score),创建一个 Student 类型的变量,并为其赋值,然后打印出来。

代码示例:

#include <stdio.h>
#include <string.h>
// 定义结构体类型
struct Student {
    int id;
    char name[50];
    float score;
};
int main() {
    // 声明并初始化结构体变量
    struct Student stu1 = {101, "张三", 95.5};
    // 打印结构体信息
    printf("学号: %d\n", stu1.id);
    printf("姓名: %s\n", stu1.name);
    printf("成绩: %.1f\n", stu1.score);
    // 修改成员值
    stu1.score = 98.0;
    printf("修改后的成绩: %.1f\n", stu1.score);
    return 0;
}

解析:

  • struct Student 是一个自定义的数据类型。
  • struct Student stu1; 声明了一个 Student 类型的变量 stu1
  • stu1.id 使用点号 来访问结构体变量的成员。

备考与学习建议

  1. 先理解,后敲代码: 看懂题目逻辑和解析,理解每一步代码为什么这么写,不要直接复制粘贴。
  2. 多动手实践: C语言是实践性极强的学科,只看不练等于白学,把上面的题目亲手敲一遍,并尝试修改,观察结果变化。
  3. 调试能力: 学会使用编译器的错误提示信息,当程序出错时,仔细阅读错误信息,定位问题所在,这是程序员的核心技能之一。
  4. 善用资源:
    • 书籍: 《C Primer Plus》、《C程序设计语言》 经典必读。
    • 在线教程: 菜鸟教程、W3School、Runoob 等都有很好的入门教程。
    • IDE: 推荐使用 Visual Studio Code (配合C/C++插件) 或 Dev-C++。
  5. 从模仿到创造: 在掌握基础后,尝试自己出题,或者找一些更复杂的项目(如简单的计算器、学生管理系统、贪吃蛇游戏等)来挑战自己。

希望这份题库能对你的C语言学习有所帮助!祝你学业有成!

-- 展开阅读全文 --
头像
dede网站模板替换,如何操作?
« 上一篇 昨天
C语言如何打印斐波那契数列?
下一篇 » 昨天

相关文章

取消
微信二维码
支付宝二维码

目录[+]