头歌c语言之函数练习题
时间: 2025-02-20 11:07:19 浏览: 27
### C语言函数练习题
#### 判断字符串是否为回文
给定一段代码用于判断输入的字符串是否是回文。此程序定义了一个名为`fun`的函数,该函数接收一个字符数组作为参数并检查其是否满足回文条件。
```c
#include<stdio.h>
void fun(char buf[10]) {
int i = 0, j = 0;
while (buf[i] != '\0')
i++;
for (; j <= i / 2; j++) {
if (buf[j] == buf[i - j - 1]) {
if (j == (i - 1) / 2) {
printf("yes\n");
return;
}
} else {
printf("no\n");
return;
}
}
}
int main() {
char buf[10] = "abcdcba";
fun(buf);
}
```
上述代码可以正常工作,但是存在冗余逻辑[^1]。当检测到第一个不匹配的情况时立即返回“no”,这是合理的;然而,在每次成功比较一对字符之后再去验证索引位置的做法显得多余。实际上可以在循环结束后再统一输出结果。
#### 打印指定范围内的素数
另一个例子展示了如何创建一个简单的函数`sushu`来测试整数是否为质数,并在一个范围内查找所有的质数:
```c
#include <stdio.h>
// 判断是否为素数
int sushu(int n) {
int j = 0;
for (j = 2; j * j <= n; ++j) { // 改进后的效率更高的方法
if (n % j == 0)
return 0;
}
return n > 1 ? 1 : 0;
}
int main() {
int i = 0;
for (i = 100; i <= 200; i++) {
if (sushu(i))
printf("%d ", i);
}
return 0;
}
```
这里对原始版本进行了优化,通过减少不必要的迭代次数提高了性能[^2]。另外值得注意的是,对于小于等于1的数值应该直接排除在外,因为它们不是有效的质数候选者。
#### 使用指针修改变量值
最后一个案例说明了怎样利用指针传递地址从而改变外部作用域中的数据:
```c
#include <stdio.h>
// 增加传入指向整型的指针对应内存单元存储的数据量
void Add(int* p) {
(*p)++;
}
int main() {
int num = 0;
Add(&num); printf("num = %d\n", num); // 输出:num = 1
Add(&num); printf("num = %d\n", num); // 输出:num = 2
Add(&num); printf("num = %d\n", num); // 输出:num = 3
Add(&num); printf("num = %d\n", num); // 输出:num = 4
return 0;
}
```
这段代码清晰地展现了C语言中指针的强大功能以及它在实际编程场景下的应用方式[^3]。
阅读全文
相关推荐














