C 语言学习之路:练习题实战记录(上)

​C 语言学习之路:练习题实战记录

在 C 语言的学习过程中,练习是巩固知识、提升编程能力的关键。下面是我在学习 C 语言时完成的一些练习题,涵盖了数据定义、基本运算、流程控制、函数使用等多个重要知识点,每一道题都承载着我对 C 语言理解的深入和编程技巧的提升。

练习题 1:数据定义与输出

题目描述

使用全局#define定义gender为’男’。使用局部定义name(长度为 12)为张三,age为 22,height为 1.78,并按格式name gender age height输出完整结果。

代码实现

#include <stdio.h>
#define gender "男"

int main() {
    char name[12] = "张三";
    int age = 22;
    float height = 1.78;

    printf("%s  %s  %d  %.2f\n", name, gender, age, height);
    return 0;
}

代码分析

  1. #define宏定义:通过#define gender "男",定义了一个全局的宏gender,在后续代码中,所有出现gender的地方都会被替换为"男"
  2. 局部变量定义:在main函数中,定义了字符数组name来存储姓名,整型变量age存储年龄,浮点型变量height存储身高。
  3. 输出函数:使用printf函数按照指定格式输出各个变量的值,%.2f表示将浮点数height保留两位小数输出。

练习题 2:计算圆的周长

题目描述

要求用户输入圆的半径,根据公式计算圆的周长并输出。

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define PI 3.14159

int main() {
    float radius;
    printf("请输入圆的半径: ");
    scanf("%f", &radius);

    float circumference = 2 * PI * radius;
    printf("圆的周长是: %.2f\n", circumference);
    return 0;
}

代码分析

  1. 宏定义常量#define PI 3.14159定义了圆周率PI,方便在代码中使用,避免了硬编码带来的维护问题。
  2. 用户输入:使用printf提示用户输入半径,然后通过scanf("%f", &radius)读取用户输入的浮点数并存储到radius变量中。
  3. 计算与输出:根据圆的周长公式2 * PI * radius计算周长,并使用printf函数输出结果,同样保留两位小数。

练习题 3:条件判断与分支结构

题目描述

  1. 使用if - else结构判断用户是否中奖,中奖号码随机生成。
  2. 使用switch - case结构根据用户输入对电脑进行操作(0 - 关机;1 - 重启;2 - 睡眠)。

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main() {
    srand(time(0));
    int luckyNumber = rand() % 10;
    int userInput;
    printf("请输入一个数字:");
    scanf("%d", &userInput);
    if (userInput == luckyNumber) {
        printf("你中奖了!\n");
    }
    else {
        printf("你未中奖!\n");
    }

    // switch - 用户对电脑指令操作
    int operation;
    printf("请输入操作指令 (0 - 关机; 1 - 重启; 2 - 睡眠):");
    scanf("%d", &operation);
    switch (operation)
    {
    case 0:
        printf("正在关机...\n");
        break;
    case 1:
        printf("正在重启...\n");
        break;
    case 2:
        printf("正在睡眠...\n");
        break;
    default:
        printf("无效操作!\n");
        break;
    }
    return 0;
}

代码分析

  1. 随机数生成与中奖判断: srand(time(0))用于初始化随机数种子,使每次程序运行时生成的随机数不同。rand() % 10生成一个 0 到 9 之间的随机数作为中奖号码。通过if - else结构判断用户输入的数字与中奖号码是否一致,给出相应提示。
  2. switch - case结构:根据用户输入的操作指令,使用switch - case结构执行不同的操作,default分支处理无效输入。

练习题 4:循环与条件判断

题目描述

使用for循环打印【1 - 100】内的能被 3 和 7 整除的数,并输出满足条件的个数。

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int count = 0;
    for (int i = 1; i <= 100; i++) {
        if (i % 3 == 0 && i % 7 == 0) {
            printf("%d\n", i);
            count++;
        }
    }
    printf("count=%d\n", count);
    return 0;
}

代码分析

  1. 循环遍历for循环从 1 到 100 遍历每个整数。
  2. 条件判断:使用if语句判断当前整数是否能同时被 3 和 7 整除,即i % 3 == 0 && i % 7 == 0
  3. 计数与输出:满足条件的数被打印出来,同时计数器count加 1,最后输出满足条件的数的个数。

练习题 5:嵌套循环应用 - 打印 99 乘法表

题目描述

打印 99 乘法表。

​编辑

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    for (int i = 1; i < 10; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d*%d=%d\t", i, j, i * j);
        }
        printf("\n");
    }
    return 0;
}

代码分析

  1. 嵌套循环:外层for循环控制行数i,从 1 到 9;内层for循环控制列数j,从 1 到当前行号i
  2. 输出格式:使用printf函数输出乘法表达式,\t用于控制输出格式,使表格对齐美观,内层循环结束后换行。

练习题 6:判断水仙花数

题目描述

判断【100,999】内的水仙花数(水仙花数是一个 3 位数,且每个位的立方和等于这个数本身),并打印出来。

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    for (int i = 100; i <= 999; i++)
    {
        int a = i / 100;
        int b = i / 10 % 10;
        int c = i % 10;
        if (i == a * a * a + b * b * b + c * c * c)
        {
            printf("%d\n", i);
        }
    }
    return 0;
}

代码分析

  1. 数字拆分:通过整除和取余运算,将三位数i拆分为百位a、十位b和个位c
  2. 条件判断:使用if语句判断当前数是否为水仙花数,即i == a * a * a + b * b * b + c * c * c
  3. 输出结果:满足条件的水仙花数被打印出来。

练习题 7:函数与数组操作

题目描述

利用调用函数的方法找出数组a = {12, 23, 56, 45, 64}的最大值,并将数组降序排列输出为新的数组b

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

// 找出数组的最大值
int findMax(int a[], int size) {
    int max = a[0];
    for (int i = 1; i < size; i++) {
        if (a[i] > max) {
            max = a[i];
        }
    }
    return max;
}

// 降序排序
void descendingSort(int a[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (a[j] < a[j + 1]) {
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
}

int main() {
    int a[] = { 12, 23, 56, 45, 64 };
    int size = sizeof(a) / sizeof(a[0]);
    int max = findMax(a, size);
    printf("max = %d\n", max);

    // 降序排列
    descendingSort(a, size);
    printf("降序排列数组:");
    for (int i = 0; i < size; i++)
    {
        printf("%d ", a[i]);
    }


    return 0;
}

代码分析

  1. 函数定义: findMax函数用于找出数组中的最大值,通过遍历数组比较每个元素得到最大值。descendingSort函数使用冒泡排序算法对数组进行降序排列。
  2. 主函数操作:在main函数中,定义数组a,计算数组大小,调用findMax函数找到最大值并输出,调用descendingSort函数对数组进行降序排列后输出。

通过完成这些练习题,我对 C 语言的基本语法、控制结构、函数和数组的使用有了更深入的理解和掌握。每一道题都是一次成长的机会,让我在 C 语言的学习道路上不断前进,也期待在未来的学习中能够挑战更多复杂的编程任务,进一步提升自己的编程能力。​

#C语言#
C语言学习记录 文章被收录于专栏

C语言的初步学习

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务