### C语言初学者常用函数详解
#### 一、计算序列 e 的值
**函数功能**:此函数用于计算序列 `e = 1 + 1/2 + 1/(1+2) + ... + 1/(1+2+...+n)` 的值。
**代码解析**:
1. **主函数** (`main`):
- 定义了一个 `f` 函数,该函数用于计算分母的累加值。
- 用户输入一个整数 `a`。
- 使用 `for` 循环调用 `f` 函数,并将结果累加到变量 `all` 中。
- 输出最终的结果 `all`。
2. **辅助函数** (`f`):
- 接受一个整数 `n` 作为参数。
- 计算从 1 到 `n` 的累加和,并返回其倒数。
**示例代码**:
```c
#include<stdio.h>
double f(int n) {
int sum = 0, i;
for (i = 1; i <= n; i++) {
sum += i;
}
return 1.0 / sum;
}
void main() {
double all = 0;
int a, j;
scanf("%d", &a);
for (j = 1; j <= a; j++) {
all += f(j);
}
printf("%lf\n", all);
}
```
**注意事项**:
- 输入的整数 `a` 应为正数。
- 确保在实际应用中处理边界条件和异常情况。
#### 二、字符循环输出
**功能描述**:接收用户输入的一个大写字母,在 A 到 Z 范围内循环输出字符。
**方法一**:
1. **主函数** (`main`):
- 用户输入一个大写字母 `ch1`。
- 调用 `cop` 函数,传递输入的大写字母。
2. **循环输出函数** (`cop`):
- 使用 `for` 循环从 'A' 开始输出到输入的大写字母。
- 再次使用 `for` 循环从输入的大写字母减 1 开始反向输出至 'A'。
**示例代码**:
```c
#include<stdio.h>
char cop(char ch) {
int i, j;
for (i = 'A'; i <= ch; i++) {
printf("%c", i);
}
for (j = ch - 1; j >= 'A'; j--) {
printf("%c", j);
}
}
void main() {
char ch1;
printf("input a char:\n");
scanf("%c", &ch1);
cop(ch1);
}
```
**方法二**:
1. **主函数** (`main`):
- 用户输入一个大写字母 `c1`。
- 创建一个长度为 54 的字符数组 `c`,并初始化为空。
- 调用 `copy` 函数,传递字符数组 `c` 和输入的大写字母。
2. **循环输出函数** (`copy`):
- 使用 `for` 循环正向填充字符数组。
- 使用 `for` 循环反向填充字符数组。
**示例代码**:
```c
#include<stdio.h>
void copy(char s[], int n, char D) {
int i, j;
for (i = 65, j = 0; i <= D && j < (D - 64); i++, j++) {
s[j] = i;
}
for (i = D - 1, j = D - 64; i >= 65 && j < (2 * D - 129); i--, j++) {
s[j] = i;
}
}
void main() {
char c1;
char c[54] = {''};
scanf("%c", &c1);
copy(c, 54, c1);
printf("%s\n", c);
}
```
#### 三、不重复的三位数组合
**功能描述**:给定四个数字(1、2、3、4),输出所有不重复的三位数组合。
**代码解析**:
1. **主函数** (`main`):
- 用户输入四个不同的数字。
- 使用三层嵌套 `for` 循环来组合三个数字。
- 调用 `comp` 函数检查组合是否不重复。
2. **比较函数** (`comp`):
- 接收三个整数 `m`、`n` 和 `p`。
- 如果三个数字均不相同,则返回 `1` 表示不重复;否则返回 `0` 表示重复。
**示例代码**:
```c
#include<stdio.h>
#define N 4
int comp(int m, int n, int p) {
if ((m != n) && (m != p) && (n != p)) {
return 1;
} else {
return 0;
}
}
void main() {
int i, j, k, a[N];
printf("input %d numbers:\n", N);
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
printf("\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
for (k = 0; k < N; k++) {
if (comp(a[i], a[j], a[k]) == 1) {
printf("%d%d%d", a[i], a[j], a[k]);
}
}
}
}
}
```
#### 四、购物折扣计算
**功能描述**:根据用户的购物金额计算相应的折扣。
**代码解析**:
1. **主函数** (`main`):
- 用户输入购物金额 `m`。
- 根据金额大小设置不同的折扣率。
- 输出折扣后的金额。
**示例代码**:
```c
#include<stdio.h>
void main() {
int m;
double n;
scanf("%d", &m);
if (m >= 10000) {
n = m * 0.8;
} else if (m >= 8000 && m <= 9999) {
n = m * 0.85;
} else if (m >= 5000 && m <= 7999) {
n = m * 0.9;
} else if (m >= 1000 && m <= 4999) {
n = m * 0.95;
} else {
n = m;
}
printf("%lf\n", n);
}
```
#### 五、成绩等级评定
**功能描述**:根据用户输入的成绩,输出成绩等级和分数段。
**代码解析**:
1. **主函数** (`main`):
- 用户输入成绩 `score`。
- 使用 `if` 语句块判断成绩所在的等级。
- 使用 `switch` 语句输出成绩等级和分数段。
**示例代码**:
```c
#include<stdio.h>
void main() {
char grade;
float score;
scanf("%f", &score);
if (score >= 90) {
grade = 'A';
} else if (score >= 80 && score <= 89) {
grade = 'B';
} else if (score >= 70 && score <= 79) {
grade = 'C';
} else if (score >= 60 && score <= 69) {
grade = 'D';
} else {
grade = 'E';
}
switch (grade) {
case 'A':
printf("'A' >= 90\n");
break;
case 'B':
printf("'B' [80, 89]\n");
break;
case 'C':
printf("'C' [70, 79]\n");
break;
case 'D':
printf("'D' [60, 69]\n");
break;
case 'E':
printf("'E' < 60\n");
break;
}
}
```
#### 六、两数平方和或和的判断
**功能描述**:根据输入的两个数,如果它们的平方和大于 100,则输出平方和;否则输出两数之和。
**代码解析**:
1. **主函数** (`main`):
- 用户输入两个整数 `a` 和 `b`。
- 计算 `a` 和 `b` 的平方和 `c` 和 `a` 加 `b` 的和 `d`。
- 使用 `if` 语句判断平方和是否大于 100,然后输出相应的结果。
**示例代码**:
```c
#include<stdio.h>
void main() {
int a, b, c, d;
scanf("%d%d", &a, &b);
c = a * a + b * b;
d = a + b;
if (c > 100) {
printf("%d\n", c);
} else {
printf("%d\n", d);
}
}
```
### 总结
以上介绍的几个 C 语言程序都是针对初学者设计的常见问题解决方案。这些程序涵盖了从简单的数学运算到更复杂的逻辑控制结构。通过学习和实践这些代码片段,可以帮助初学者更好地理解 C 语言的基本语法和编程思想。希望这些知识点能够帮助你更好地掌握 C 语言编程的基础。