写几个c语言的详细教学案例,加上注释
时间: 2023-07-15 12:10:59 浏览: 47
案例一:计算阶乘
```c
#include <stdio.h>
int main() {
int n, i;
unsigned long long factorial = 1;
printf("输入一个整数: ");
scanf("%d", &n);
// 如果输入的是负数,输出错误信息
if (n < 0)
printf("错误!负数没有阶乘。");
else {
for (i = 1; i <= n; ++i) {
factorial *= i; // 计算阶乘
}
printf("%d 的阶乘 = %llu", n, factorial);
}
return 0;
}
```
注释说明:
- `#include <stdio.h>`:包含标准输入输出库的头文件。
- `int main() {...}`:程序从这里开始执行。
- `int n, i;`:定义整型变量 `n` 和 `i`。
- `unsigned long long factorial = 1;`:定义阶乘变量 `factorial` 并赋初值为 1,注意使用 `unsigned long long` 类型,以免结果溢出。
- `printf("输入一个整数: ");`:输出提示信息。
- `scanf("%d", &n);`:读入用户输入的整数,存储到变量 `n` 中。
- `if (n < 0) {...}`:判断输入的数是否为负数,如果是则输出错误信息。
- `else {...}`:否则进行计算。
- `for (i = 1; i <= n; ++i) {...}`:循环计算阶乘,从 1 开始乘到 `n`。
- `factorial *= i;`:累乘计算阶乘,每次循环将 `i` 乘到 `factorial` 中。
- `printf("%d 的阶乘 = %llu", n, factorial);`:输出结果,注意使用 `%llu` 指定输出类型。
案例二:判断闰年
```c
#include <stdio.h>
int main() {
int year;
printf("输入一个年份: ");
scanf("%d", &year);
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0)
printf("%d 是闰年。", year);
else
printf("%d 不是闰年。", year);
}
else
printf("%d 是闰年。", year);
}
else
printf("%d 不是闰年。", year);
return 0;
}
```
注释说明:
- `int year;`:定义整型变量 `year`。
- `printf("输入一个年份: ");`:输出提示信息。
- `scanf("%d", &year);`:读入用户输入的年份,存储到变量 `year` 中。
- 判断闰年的逻辑如下:
- 如果能被 4 整除,但不能被 100 整除,则是闰年。
- 如果能被 100 整除,但不能被 400 整除,则不是闰年。
- 如果能被 400 整除,则是闰年。
- `printf("%d 是闰年。", year);`:输出结果。
案例三:冒泡排序
```c
#include <stdio.h>
int main() {
int data[100], i, j, n, tmp;
printf("输入要排序的元素个数: ");
scanf("%d", &n);
printf("输入 %d 个整数: ", n);
for (i = 0; i < n; ++i)
scanf("%d", &data[i]);
for (i = 0; i < n - 1; ++i) {
for (j = 0; j < n - i - 1; ++j) {
if (data[j] > data[j + 1]) {
tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
printf("排序后的数组: ");
for (i = 0; i < n; ++i)
printf("%d ", data[i]);
return 0;
}
```
注释说明:
- `int data[100], i, j, n, tmp;`:定义整型数组 `data` 和变量 `i`、`j`、`n`、`tmp`。
- `printf("输入要排序的元素个数: ");`:输出提示信息。
- `scanf("%d", &n);`:读入用户输入的元素个数,存储到变量 `n` 中。
- `printf("输入 %d 个整数: ", n);`:输出提示信息。
- `for (i = 0; i < n; ++i) scanf("%d", &data[i]);`:循环读入用户输入的整数,存储到数组 `data` 中。
- 冒泡排序的逻辑如下:
- 从数组的第一个元素开始,对相邻的两个元素进行比较,如果第一个元素比第二个元素大,则交换它们的位置。
- 对每一对相邻的元素进行同样的操作,从开始第一对元素到结尾最后一对元素,最终最后位置的元素就是最大的。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 重复步骤 1~3,直到排序完成。
- `printf("排序后的数组: ");`:输出排序后的数组。
- `printf("%d ", data[i]);`:逐个输出数组中的元素。
以上三个案例分别展示了 C 语言中的基本语法和常见算法,希望对初学者有所帮助。