🎓博主介绍:精通 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 语言编程的大门。