C语言必背18个经典程序:搞定这些才算真正入门

🎓博主介绍:精通 C、Python、Java、JavaScript 等编程语言,具备全栈开发能力。日常专注于分享编程干货、算法解析、项目实战经验,以及前沿技术动态。让我们一起在技术的道路上不断探索,共同成长!
在这里插入图片描述

C语言必背18个经典程序:搞定这些才算真正入门

1. 引言

C语言作为一门广泛应用于系统软件、嵌入式开发等领域的编程语言,其重要性不言而喻。对于初学者而言,掌握一些经典的C语言程序是快速入门并提升编程能力的有效途径。本文将详细介绍18个C语言经典程序,帮助你更好地理解C语言的语法和编程思想。

2. 基础运算类程序

2.1 两数相加

功能:实现两个整数的相加并输出结果。
代码示例

#include <stdio.h>

int main() {
    int num1, num2, sum;
    printf("请输入两个整数:");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("两数之和为:%d\n", sum);
    return 0;
}

步骤

  1. 定义三个整型变量 num1num2sum
  2. 使用 printf 函数提示用户输入两个整数。
  3. 使用 scanf 函数读取用户输入的两个整数。
  4. 将两个整数相加并赋值给 sum
  5. 使用 printf 函数输出两数之和。

2.2 求平均值

功能:计算三个数的平均值并输出。
代码示例

#include <stdio.h>

int main() {
    float num1, num2, num3, average;
    printf("请输入三个数:");
    scanf("%f %f %f", &num1, &num2, &num3);
    average = (num1 + num2 + num3) / 3;
    printf("平均值为:%.2f\n", average);
    return 0;
}

步骤

  1. 定义四个浮点型变量 num1num2num3average
  2. 使用 printf 函数提示用户输入三个数。
  3. 使用 scanf 函数读取用户输入的三个数。
  4. 计算三个数的平均值并赋值给 average
  5. 使用 printf 函数输出平均值,保留两位小数。

3. 选择结构类程序

3.1 判断奇偶数

功能:判断一个整数是奇数还是偶数并输出结果。
代码示例

#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;
}

步骤

  1. 定义一个整型变量 num
  2. 使用 printf 函数提示用户输入一个整数。
  3. 使用 scanf 函数读取用户输入的整数。
  4. 使用 if-else 语句判断该整数是否能被 2 整除,根据结果输出是奇数还是偶数。

3.2 比较三个数的大小

功能:比较三个整数的大小,输出最大的数。
代码示例

#include <stdio.h>

int main() {
    int num1, num2, num3, max;
    printf("请输入三个整数:");
    scanf("%d %d %d", &num1, &num2, &num3);
    if (num1 >= num2 && num1 >= num3) {
        max = num1;
    } else if (num2 >= num1 && num2 >= num3) {
        max = num2;
    } else {
        max = num3;
    }
    printf("最大的数是:%d\n", max);
    return 0;
}

步骤

  1. 定义四个整型变量 num1num2num3max
  2. 使用 printf 函数提示用户输入三个整数。
  3. 使用 scanf 函数读取用户输入的三个整数。
  4. 使用嵌套的 if-else 语句比较三个数的大小,找出最大的数并赋值给 max
  5. 使用 printf 函数输出最大的数。

4. 循环结构类程序

4.1 打印九九乘法表

功能:使用嵌套循环打印九九乘法表。
代码示例

#include <stdio.h>

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

步骤

  1. 定义两个整型变量 ij 作为循环控制变量。
  2. 使用外层 for 循环控制行数,从 1 到 9。
  3. 在内层 for 循环中,控制每行的列数,列数从 1 到当前行数。
  4. 在内层循环中,使用 printf 函数输出乘法表的每一项。
  5. 每行输出完后,使用 printf("\n"); 换行。

4.2 计算 1 到 100 的和

功能:使用循环计算 1 到 100 的整数之和并输出结果。
代码示例

#include <stdio.h>

int main() {
    int i, sum = 0;
    for (i = 1; i <= 100; i++) {
        sum += i;
    }
    printf("1 到 100 的和为:%d\n", sum);
    return 0;
}

步骤

  1. 定义两个整型变量 i 作为循环控制变量,sum 用于存储累加和,初始化为 0。
  2. 使用 for 循环从 1 到 100 遍历每个整数。
  3. 在每次循环中,将当前整数累加到 sum 中。
  4. 循环结束后,使用 printf 函数输出 1 到 100 的和。

5. 数组类程序

5.1 数组元素求和

功能:计算一个整型数组中所有元素的和。
代码示例

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int i, sum = 0;
    for (i = 0; i < 5; i++) {
        sum += arr[i];
    }
    printf("数组元素的和为:%d\n", sum);
    return 0;
}

步骤

  1. 定义一个包含 5 个元素的整型数组 arr 并初始化。
  2. 定义两个整型变量 i 作为循环控制变量,sum 用于存储累加和,初始化为 0。
  3. 使用 for 循环遍历数组的每个元素。
  4. 在每次循环中,将当前数组元素累加到 sum 中。
  5. 循环结束后,使用 printf 函数输出数组元素的和。

5.2 查找数组中的最大值

功能:找出一个整型数组中的最大值并输出。
代码示例

#include <stdio.h>

int main() {
    int arr[5] = {3, 7, 2, 9, 5};
    int i, max = arr[0];
    for (i = 1; i < 5; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    printf("数组中的最大值为:%d\n", max);
    return 0;
}

步骤

  1. 定义一个包含 5 个元素的整型数组 arr 并初始化。
  2. 定义两个整型变量 i 作为循环控制变量,max 用于存储最大值,初始化为数组的第一个元素。
  3. 使用 for 循环从数组的第二个元素开始遍历。
  4. 在每次循环中,比较当前元素和 max 的大小,如果当前元素大于 max,则将当前元素赋值给 max
  5. 循环结束后,使用 printf 函数输出数组中的最大值。

6. 函数类程序

6.1 阶乘函数

功能:定义一个函数计算一个整数的阶乘,并在 main 函数中调用该函数。
代码示例

#include <stdio.h>

int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    int result = factorial(num);
    printf("%d 的阶乘是:%d\n", num, result);
    return 0;
}

步骤

  1. 定义一个递归函数 factorial,用于计算一个整数的阶乘。当输入为 0 或 1 时,返回 1;否则,返回 n * factorial(n - 1)
  2. main 函数中,定义一个整型变量 num,提示用户输入一个整数。
  3. 使用 scanf 函数读取用户输入的整数。
  4. 调用 factorial 函数计算该整数的阶乘,并将结果存储在 result 中。
  5. 使用 printf 函数输出该整数的阶乘。

6.2 交换两个数的值

功能:定义一个函数交换两个整数的值,并在 main 函数中调用该函数。
代码示例

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int num1, num2;
    printf("请输入两个整数:");
    scanf("%d %d", &num1, &num2);
    printf("交换前:num1 = %d, num2 = %d\n", num1, num2);
    swap(&num1, &num2);
    printf("交换后:num1 = %d, num2 = %d\n", num1, num2);
    return 0;
}

步骤

  1. 定义一个函数 swap,接受两个指向整型的指针作为参数,通过指针交换两个整数的值。
  2. main 函数中,定义两个整型变量 num1num2,提示用户输入两个整数。
  3. 使用 scanf 函数读取用户输入的两个整数。
  4. 输出交换前两个数的值。
  5. 调用 swap 函数,将 num1num2 的地址传递给 swap 函数。
  6. 输出交换后两个数的值。

7. 字符串类程序

7.1 字符串长度计算

功能:计算一个字符串的长度并输出。
代码示例

#include <stdio.h>

int stringLength(char str[]) {
    int i = 0;
    while (str[i] != '\0') {
        i++;
    }
    return i;
}

int main() {
    char str[100];
    printf("请输入一个字符串:");
    scanf("%s", str);
    int length = stringLength(str);
    printf("字符串的长度为:%d\n", length);
    return 0;
}

步骤

  1. 定义一个函数 stringLength,接受一个字符数组作为参数,使用 while 循环遍历字符串,直到遇到字符串结束符 '\0',返回循环次数,即字符串的长度。
  2. main 函数中,定义一个字符数组 str,提示用户输入一个字符串。
  3. 使用 scanf 函数读取用户输入的字符串。
  4. 调用 stringLength 函数计算字符串的长度,并将结果存储在 length 中。
  5. 使用 printf 函数输出字符串的长度。

7.2 字符串拼接

功能:将两个字符串拼接成一个新的字符串并输出。
代码示例

#include <stdio.h>

void stringConcat(char str1[], char str2[], char result[]) {
    int i = 0, j = 0;
    while (str1[i] != '\0') {
        result[i] = str1[i];
        i++;
    }
    while (str2[j] != '\0') {
        result[i] = str2[j];
        i++;
        j++;
    }
    result[i] = '\0';
}

int main() {
    char str1[100], str2[100], result[200];
    printf("请输入第一个字符串:");
    scanf("%s", str1);
    printf("请输入第二个字符串:");
    scanf("%s", str2);
    stringConcat(str1, str2, result);
    printf("拼接后的字符串为:%s\n", result);
    return 0;
}

步骤

  1. 定义一个函数 stringConcat,接受三个字符数组作为参数,将第一个字符串复制到结果数组中,然后将第二个字符串追加到结果数组后面,最后添加字符串结束符 '\0'
  2. main 函数中,定义三个字符数组 str1str2result,提示用户输入两个字符串。
  3. 使用 scanf 函数分别读取用户输入的两个字符串。
  4. 调用 stringConcat 函数将两个字符串拼接成一个新的字符串存储在 result 中。
  5. 使用 printf 函数输出拼接后的字符串。

8. 指针类程序

8.1 指针访问数组元素

功能:使用指针访问数组元素并输出。
代码示例

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr;
    int i;
    for (i = 0; i < 5; i++) {
        printf("arr[%d] = %d\n", i, *(ptr + i));
    }
    return 0;
}

步骤

  1. 定义一个包含 5 个元素的整型数组 arr 并初始化。
  2. 定义一个指向整型的指针 ptr,并将其指向数组 arr 的首地址。
  3. 使用 for 循环遍历数组,通过指针运算 *(ptr + i) 访问数组的每个元素并输出。

8.2 动态内存分配与指针

功能:使用 malloc 函数动态分配内存,存储一组整数,并输出这些整数。
代码示例

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, i;
    printf("请输入要存储的整数个数:");
    scanf("%d", &n);
    int *ptr = (int *)malloc(n * sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }
    for (i = 0; i < n; i++) {
        printf("请输入第 %d 个整数:", i + 1);
        scanf("%d", &ptr[i]);
    }
    printf("你输入的整数为:");
    for (i = 0; i < n; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");
    free(ptr);
    return 0;
}

步骤

  1. 提示用户输入要存储的整数个数 n
  2. 使用 malloc 函数动态分配 n 个整型元素的内存空间,并将返回的指针赋值给 ptr
  3. 检查内存分配是否成功,如果失败,输出错误信息并终止程序。
  4. 使用 for 循环提示用户输入每个整数,并将其存储在动态分配的内存中。
  5. 使用 for 循环输出用户输入的所有整数。
  6. 使用 free 函数释放动态分配的内存。

9. 文件操作类程序

9.1 文件写入

功能:将用户输入的字符串写入一个文本文件中。
代码示例

#include <stdio.h>

int main() {
    FILE *fp;
    char str[100];
    fp = fopen("test.txt", "w");
    if (fp == NULL) {
        printf("文件打开失败!\n");
        return 1;
    }
    printf("请输入要写入文件的字符串:");
    scanf("%s", str);
    fprintf(fp, "%s", str);
    fclose(fp);
    printf("字符串已成功写入文件!\n");
    return 0;
}

步骤

  1. 定义一个文件指针 fp 和一个字符数组 str 用于存储用户输入的字符串。
  2. 使用 fopen 函数以写入模式("w")打开一个名为 test.txt 的文件。如果文件打开失败,fopen 会返回 NULL,此时输出错误信息并终止程序。
  3. 提示用户输入要写入文件的字符串,使用 scanf 函数读取该字符串。
  4. 使用 fprintf 函数将字符串写入文件,fprintf 的第一个参数是文件指针,第二个参数是格式化字符串,这里直接使用 "%s" 表示写入一个字符串。
  5. 使用 fclose 函数关闭文件,释放相关资源。
  6. 输出写入成功的提示信息。

9.2 文件读取

功能:从一个文本文件中读取内容并输出到控制台。
代码示例

#include <stdio.h>

int main() {
    FILE *fp;
    char ch;
    fp = fopen("test.txt", "r");
    if (fp == NULL) {
        printf("文件打开失败!\n");
        return 1;
    }
    while ((ch = fgetc(fp)) != EOF) {
        printf("%c", ch);
    }
    fclose(fp);
    return 0;
}

步骤

  1. 定义一个文件指针 fp 和一个字符变量 ch 用于逐个读取文件中的字符。
  2. 使用 fopen 函数以读取模式("r")打开之前写入的 test.txt 文件。若文件打开失败,输出错误信息并终止程序。
  3. 使用 while 循环和 fgetc 函数逐个读取文件中的字符,fgetc 函数会返回文件中的下一个字符,当读取到文件末尾时返回 EOF(文件结束符),循环结束。
  4. 在循环中,将读取到的字符输出到控制台。
  5. 使用 fclose 函数关闭文件。

10. 结构体类程序

10.1 学生信息管理(简单示例)

功能:定义一个学生结构体,存储学生的姓名、年龄和成绩,并输出学生信息。
代码示例

#include <stdio.h>
#include <string.h>

struct Student {
    char name[50];
    int age;
    float score;
};

int main() {
    struct Student s1;
    strcpy(s1.name, "张三");
    s1.age = 20;
    s1.score = 85.5;
    printf("学生姓名:%s\n", s1.name);
    printf("学生年龄:%d\n", s1.age);
    printf("学生成绩:%.2f\n", s1.score);
    return 0;
}

步骤

  1. 使用 struct 关键字定义一个名为 Student 的结构体,包含三个成员:一个字符数组 name 用于存储姓名,一个整型变量 age 用于存储年龄,一个浮点型变量 score 用于存储成绩。
  2. main 函数中,定义一个 Student 类型的变量 s1
  3. 使用 strcpy 函数将字符串 "张三" 复制到 s1.name 中,为 s1.ages1.score 分别赋值。
  4. 使用 printf 函数输出学生的姓名、年龄和成绩。

10.2 结构体数组存储多个学生信息

功能:使用结构体数组存储多个学生的信息,并输出所有学生的信息。
代码示例

#include <stdio.h>
#include <string.h>

struct Student {
    char name[50];
    int age;
    float score;
};

int main() {
    struct Student students[3] = {
        {"张三", 20, 85.5},
        {"李四", 21, 90.0},
        {"王五", 19, 78.5}
    };
    int i;
    for (i = 0; i < 3; i++) {
        printf("学生 %d 信息:\n", i + 1);
        printf("姓名:%s\n", students[i].name);
        printf("年龄:%d\n", students[i].age);
        printf("成绩:%.2f\n", students[i].score);
    }
    return 0;
}

步骤

  1. 定义 Student 结构体,同前一个示例。
  2. main 函数中,定义一个包含 3 个元素的 Student 结构体数组 students,并进行初始化。
  3. 使用 for 循环遍历结构体数组,依次输出每个学生的姓名、年龄和成绩。

11. 结论

通过学习这 18 个经典的 C 语言程序,你已经对 C 语言的基础语法、控制结构、函数、数组、指针、字符串、文件操作、结构体等重要概念有了较为深入的理解和实践。这些程序涵盖了 C 语言编程中常见的应用场景,是你进一步学习和开发更复杂程序的基石。掌握这些经典程序,能够帮助你更好地运用 C 语言解决实际问题,真正踏入 C 语言编程的大门。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值