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

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

1. 引言

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

2. 基础运算类程序

2.1 两数相加

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

代码示例:

#include

int main() {

int num1, num2, sum;

printf("请输入两个整数:");

scanf("%d %d", &num1, &num2);

sum = num1 + num2;

printf("两数之和为:%d\n", sum);

return 0;

}

步骤:

定义三个整型变量 num1、num2 和 sum。使用 printf 函数提示用户输入两个整数。使用 scanf 函数读取用户输入的两个整数。将两个整数相加并赋值给 sum。使用 printf 函数输出两数之和。

2.2 求平均值

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

代码示例:

#include

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;

}

步骤:

定义四个浮点型变量 num1、num2、num3 和 average。使用 printf 函数提示用户输入三个数。使用 scanf 函数读取用户输入的三个数。计算三个数的平均值并赋值给 average。使用 printf 函数输出平均值,保留两位小数。

3. 选择结构类程序

3.1 判断奇偶数

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

代码示例:

#include

int main() {

int num;

printf("请输入一个整数:");

scanf("%d", &num);

if (num % 2 == 0) {

printf("%d 是偶数\n", num);

} else {

printf("%d 是奇数\n", num);

}

return 0;

}

步骤:

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

3.2 比较三个数的大小

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

代码示例:

#include

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;

}

步骤:

定义四个整型变量 num1、num2、num3 和 max。使用 printf 函数提示用户输入三个整数。使用 scanf 函数读取用户输入的三个整数。使用嵌套的 if-else 语句比较三个数的大小,找出最大的数并赋值给 max。使用 printf 函数输出最大的数。

4. 循环结构类程序

4.1 打印九九乘法表

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

代码示例:

#include

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;

}

步骤:

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

4.2 计算 1 到 100 的和

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

代码示例:

#include

int main() {

int i, sum = 0;

for (i = 1; i <= 100; i++) {

sum += i;

}

printf("1 到 100 的和为:%d\n", sum);

return 0;

}

步骤:

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

5. 数组类程序

5.1 数组元素求和

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

代码示例:

#include

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;

}

步骤:

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

5.2 查找数组中的最大值

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

代码示例:

#include

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;

}

步骤:

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

6. 函数类程序

6.1 阶乘函数

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

代码示例:

#include

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;

}

步骤:

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

6.2 交换两个数的值

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

代码示例:

#include

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;

}

步骤:

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

7. 字符串类程序

7.1 字符串长度计算

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

代码示例:

#include

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;

}

步骤:

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

7.2 字符串拼接

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

代码示例:

#include

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;

}

步骤:

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

8. 指针类程序

8.1 指针访问数组元素

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

代码示例:

#include

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;

}

步骤:

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

8.2 动态内存分配与指针

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

代码示例:

#include

#include

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;

}

步骤:

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

9. 文件操作类程序

9.1 文件写入

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

代码示例:

#include

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;

}

步骤:

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

9.2 文件读取

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

代码示例:

#include

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;

}

步骤:

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

10. 结构体类程序

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

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

代码示例:

#include

#include

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;

}

步骤:

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

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

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

代码示例:

#include

#include

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;

}

步骤:

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

11. 结论

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

Related Article

品行的意思