《C语言》函数练习题--1
《C语言》函数练习题–1
1. 计算两个数的最大值
题目描述:
编写一个C程序,定义一个函数max
,接受两个整数参数,返回其中较大的一个数。在main
函数中调用该函数并输出结果。
解题思路:
创建一个名为max
的函数,该函数接受两个整数参数,通过条件判断返回较大的数。在main
函数中,提示用户输入两个整数,调用max
函数并打印返回值。
详细代码:
#include <stdio.h>// 定义函数max,返回两个整数中的较大者
int max(int a, int b) {if(a > b)return a;elsereturn b;
}int main() {int num1, num2, maximum;// 提示用户输入两个整数printf("请输入两个整数:\n");printf("第一个整数: ");scanf("%d", &num1);printf("第二个整数: ");scanf("%d", &num2);// 调用max函数并获取较大值maximum = max(num1, num2);// 输出结果printf("较大的数是 %d。\n", maximum);return 0;
}
代码注释:
-
int max(int a, int b)
:定义一个名为max
的函数,接受两个整数参数a
和b
。 -
if(a > b)
:比较a
和b
,如果a
大于b
,则返回a
。 -
else
:否则,返回b
。 -
在
main
函数中:
- 使用
printf
和scanf
获取用户输入的两个整数。 - 调用
max(num1, num2)
函数,获取较大值并存储在maximum
变量中。 - 使用
printf
输出结果。
- 使用
2. 计算阶乘
题目描述:
编写一个C程序,定义一个递归函数factorial
,接受一个非负整数参数,返回其阶乘。在main
函数中调用该函数并输出结果。
解题思路:
创建一个递归函数factorial
,其基本情况为n = 0
或n = 1
时返回1。对于n > 1
,返回n * factorial(n-1)
。在main
函数中,提示用户输入一个非负整数,调用factorial
函数并打印结果。
详细代码:
#include <stdio.h>// 定义递归函数factorial,返回n的阶乘
unsigned long long factorial(int n) {if(n == 0 || n == 1)return 1;elsereturn n * factorial(n - 1);
}int main() {int number;unsigned long long fact;// 提示用户输入一个非负整数printf("请输入一个非负整数: ");scanf("%d", &number);// 检查输入是否为非负整数if(number < 0) {printf("错误: 阶乘不存在于负数。\n");return 1; // 非正常退出}// 调用factorial函数计算阶乘fact = factorial(number);// 输出结果printf("%d 的阶乘是 %llu。\n", number, fact);return 0;
}
代码注释:
-
unsigned long long factorial(int n)
:定义一个递归函数factorial
,返回n
的阶乘。 -
if(n == 0 || n == 1)
:基例,当n
为0或1时,阶乘为1。 -
else
:对于n > 1
,返回n * factorial(n - 1)
,实现递归计算。 -
在
main
函数中:
- 使用
printf
和scanf
获取用户输入的非负整数。 - 检查输入是否为负数,若是,则输出错误信息并退出程序。
- 调用
factorial(number)
函数,获取阶乘值并存储在fact
变量中。 - 使用
printf
输出结果。
- 使用
3. 判断素数
题目描述:
编写一个C程序,定义一个函数isPrime
,接受一个整数参数,返回1如果该数是素数,返回0否则。在main
函数中调用该函数并输出结果。
解题思路:
创建一个名为isPrime
的函数,通过遍历从2到sqrt(n)
的数,检查是否有任何数能整除n
。如果找到一个因数,则不是素数。否则,是素数。在main
函数中,提示用户输入一个整数,调用isPrime
函数并根据返回值输出结果。
详细代码:
#include <stdio.h>
#include <math.h>// 定义函数isPrime,判断一个数是否为素数
int isPrime(int n) {if(n <= 1)return 0; // 0和1不是素数if(n == 2)return 1; // 2是素数if(n % 2 == 0)return 0; // 偶数不是素数// 检查从3到sqrt(n)的奇数是否能整除nfor(int i = 3; i <= sqrt(n); i += 2) {if(n % i == 0)return 0; // 找到因数,不是素数}return 1; // 没有因数,是素数
}int main() {int number;// 提示用户输入一个整数printf("请输入一个整数: ");scanf("%d", &number);// 调用isPrime函数并输出结果if(isPrime(number))printf("%d 是素数。\n", number);elseprintf("%d 不是素数。\n", number);return 0;
}
代码注释:
-
int isPrime(int n)
:定义一个函数isPrime
,接受一个整数n
作为参数。 -
if(n <= 1)
:如果n
小于或等于1,则不是素数。 -
if(n == 2)
:2是素数,直接返回1。 -
if(n % 2 == 0)
:除2之外的偶数不是素数。 -
for(int i = 3; i <= sqrt(n); i += 2)
:遍历从3到sqrt(n)
的奇数,检查是否能整除n
。 -
if(n % i == 0)
:如果n
能被i
整除,则不是素数,返回0。 -
return 1
:如果没有找到因数,则n
是素数。 -
在
main
函数中:
- 使用
printf
和scanf
获取用户输入的整数。 - 调用
isPrime(number)
函数,判断是否为素数。 - 根据返回值使用
printf
输出相应的信息。
- 使用
4. 计算斐波那契数列
题目描述:
编写一个C程序,定义一个函数fibonacci
,接受一个整数参数n
,返回斐波那契数列的第n
项。在main
函数中调用该函数并输出结果。
解题思路:
创建一个名为fibonacci
的函数,通过递归或迭代的方式计算斐波那契数列的第n
项。为了提高效率,采用迭代方法。在main
函数中,提示用户输入一个整数n
,调用fibonacci
函数并打印结果。
详细代码:
#include <stdio.h>// 定义函数fibonacci,返回斐波那契数列的第n项
long long fibonacci(int n) {if(n == 0)return 0;if(n == 1)return 1;long long a = 0, b = 1, fib = 0;for(int i = 2; i <= n; i++) {fib = a + b;a = b;b = fib;}return fib;
}int main() {int term;long long result;// 提示用户输入要计算的斐波那契数列项数printf("请输入斐波那契数列的项数 (n): ");scanf("%d", &term);// 检查输入是否为非负整数if(term < 0) {printf("错误: 斐波那契数列的项数必须为非负整数。\n");return 1; // 非正常退出}// 调用fibonacci函数计算第n项result = fibonacci(term);// 输出结果printf("斐波那契数列的第 %d 项是 %lld。\n", term, result);return 0;
}
代码注释:
-
long long fibonacci(int n)
:定义一个函数fibonacci
,返回斐波那契数列的第n
项。 -
if(n == 0)
和if(n == 1)
:处理斐波那契数列的前两项,分别为0和1。 -
for(int i = 2; i <= n; i++)
:使用迭代方法计算斐波那契数列的第
n
项。
fib = a + b;
:当前项等于前两项之和。a = b; b = fib;
:更新前两项。
-
在
main
函数中:
- 使用
printf
和scanf
获取用户输入的项数n
。 - 检查输入是否为非负整数,若不是,则输出错误信息并退出程序。
- 调用
fibonacci(term)
函数,获取斐波那契数列的第n
项。 - 使用
printf
输出结果。
- 使用
5. 字符串长度函数
题目描述:
编写一个C程序,定义一个函数stringLength
,接受一个字符串参数,返回该字符串的长度。在main
函数中调用该函数并输出结果。
解题思路:
创建一个名为stringLength
的函数,通过遍历字符串,直到遇到\0
,计数字符的数量并返回。在main
函数中,提示用户输入一个字符串,调用stringLength
函数并打印结果。
详细代码:
#include <stdio.h>// 定义函数stringLength,返回字符串的长度
int stringLength(char str[]) {int length = 0;while(str[length] != '\0') {length++;}return length;
}int main() {char input[100];int len;// 提示用户输入一个字符串printf("请输入一个字符串: ");fgets(input, sizeof(input), stdin);// 去除fgets读取的换行符int i;for(i = 0; input[i] != '\0'; i++) {if(input[i] == '\n') {input[i] = '\0';break;}}// 调用stringLength函数计算长度len = stringLength(input);// 输出结果printf("字符串的长度是 %d。\n", len);return 0;
}
代码注释:
-
int stringLength(char str[])
:定义一个函数stringLength
,接受一个字符数组作为参数。 -
while(str[length] != '\0')
:遍历字符串,直到遇到字符串结束符\0
。 -
length++
:计数字符的数量。 -
在
main
函数中:
- 使用
fgets
读取用户输入的字符串,包括空格。 - 遍历字符串,遇到换行符
\n
则替换为\0
,避免影响长度计算。 - 调用
stringLength(input)
函数,获取字符串长度并存储在len
变量中。 - 使用
printf
输出字符串的长度。
- 使用