前言:
今天你们对“c语言十大经典例题解析及答案”大体比较关心,你们都想要知道一些“c语言十大经典例题解析及答案”的相关文章。那么小编也在网络上收集了一些有关“c语言十大经典例题解析及答案””的相关知识,希望你们能喜欢,看官们一起来学习一下吧!1,写一个函数,求解一元二次方程。
#include <stdio.h>
#include <math.h>
double quadratic_equation(double a, double b, double c) {
double delta = b * b - 4 * a * c;
if (delta < 0) {
return NAN; // 无法求解
}
double x1 = (-b + sqrt(delta)) / (2 * a);
double x2 = (-b - sqrt(delta)) / (2 * a);
return x1 + x2;
}
int main() {
double a = 1.0;
double b = 2.0;
double c = 1.0;
double result = quadratic_equation(a, b, c);
printf("The sum of the two solutions is: %f\n", result);
return 0;
}
在这个示例中,我们定义了一个名为quadratic_equation的函数,用于求解一元二次方程。函数接受三个参数:a、b和c,分别代表一元二次方程的系数。函数首先计算出方程的判别式delta,如果delta小于0,则无法求解方程,返回NAN。如果delta大于等于0,则计算出方程的两个解x1和x2,并返回它们的和。
在主函数中,我们定义了三个系数a、b和c,分别赋值为1、2和1。然后调用quadratic_equation函数求解方程,并将结果输出到控制台中。在这个示例中,方程的两个解分别为-1.0和1.0,它们的和为0。
2,写一个函数,判断一个数是否为质数。
写这个函数,首先我们得回顾小学知识,了解什么是质数才能写出来。
#include <stdio.h>
int is_prime(int n) {
if (n <= 1) {
return 0; // 小于等于1的数不是质数
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0; // 如果n能被i整除,则n不是质数
}
}
return 1; // n不能被2到sqrt(n)之间的任何数整除,所以n是质数
}
int main() {
int n = 23;
if (is_prime(n)) {
printf("%d is a prime number.\n", n);
} else {
printf("%d is not a prime number.\n", n);
}
return 0;
}
在这个示例中,我们定义了一个名为is_prime的函数,用于判断一个整数是否为质数。函数接受一个整数n作为参数,返回值为1表示n是质数,返回值为0表示n不是质数。在函数中,我们首先判断n是否小于等于1,如果是,则直接返回0。否则,我们使用一个循环从2到sqrt(n)之间的所有整数进行判断,如果n能被其中的任何一个整数整除,则说明n不是质数,返回0。如果循环结束后仍然没有找到能整除n的整数,则说明n是质数,返回1。在主函数中,我们定义了一个整数n,并调用is_prime函数判断其是否为质数,并输出相应的结果。
3,写一个函数,计算斐波那契数列的第n项。
小学六年级的知识,斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。
#include <stdio.h>
int fibonacci(int n) {
if (n <= 0) {
return 0; // 如果n小于等于0,返回0
} else if (n == 1) {
return 1; // 如果n等于1,返回1
} else {
return fibonacci(n-1) + fibonacci(n-2); // 否则递归计算第n项的值
}
}
int main() {
int n = 10; // 要计算的斐波那契数列项数
int result = fibonacci(n); // 调用函数计算结果
printf("斐波那契数列的第%d项为%d\n", n, result); // 输出结果
return 0;
}
在这个示例中,我们定义了一个名为fibonacci的函数,用于计算斐波那契数列的第n项。函数使用递归的方式实现,如果n小于等于0,则返回0;如果n等于1,则返回1;否则递归计算第n项的值。在主函数中,我们定义了要计算的斐波那契数列项数n,并调用fibonacci函数计算结果。最后输出结果到控制台中。
4,写一个函数,将一个字符串反转。
#include <stdio.h>
#include <string.h>
void reverse_string(char *str) {
int len = strlen(str);
int i, j;
char temp;
for (i = 0, j = len - 1; i < j; i++, j--) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
reverse_string(str);
printf("反转后的字符串为:%s\n", str);
return 0;
}
在这个示例中,我们定义了一个名为reverse_string的函数,用于反转一个字符串。该函数接受一个指向字符串的指针作为参数,使用strlen函数获取字符串长度,并使用循环遍历字符串中的字符,通过交换字符位置实现反转。最后,我们在主函数中调用reverse_string函数,并输出反转后的字符串。需要注意的是,该示例中的函数只能处理简单的字符串,如果需要处理包含空格或特殊字符的字符串,需要进行额外的处理。
5,写一个函数,判断一个字符串是否包含某个子字符串。
#include <stdio.h>
#include <string.h>
int is_substring(char *str, char *sub) {
int len_str = strlen(str);
int len_sub = strlen(sub);
if (len_sub > len_str) {
return 0; // 子字符串长度大于原字符串,不可能包含
}
int i, j;
for (i = 0; i <= len_str - len_sub; i++) {
for (j = 0; j < len_sub; j++) {
if (str[i+j] != sub[j]) {
break; // 发现不匹配,跳出内层循环
}
}
if (j == len_sub) { // 循环结束,说明匹配成功
return 1;
}
}
return 0; // 循环结束,说明没有匹配成功
}
int main() {
char str[100], sub[100];
printf("请输入原字符串:");
scanf("%s", str);
printf("请输入子字符串:");
scanf("%s", sub);
if (is_substring(str, sub)) {
printf("原字符串包含子字符串\n");
} else {
printf("原字符串不包含子字符串\n");
}
return 0;
}
在这个示例中,我们定义了一个名为is_substring的函数,用于判断一个字符串是否包含某个子字符串。该函数接受两个指向字符串的指针作为参数,使用strlen函数获取字符串长度,并使用两个循环遍历字符串中的字符,逐一比对子字符串中的字符。如果发现不匹配的字符,就跳出内层循环。如果内层循环结束,说明匹配成功,返回1;如果内层循环没有结束就跳出外层循环,说明没有匹配成功,返回0。在主函数中,我们调用is_substring函数,并输出判断结果。