#include <stdio.h>
int menu(); // 菜单函数
int factorial(); // 求阶乘函数
int sum(); // 求累加和函数
int power(); // 求N次方函数
int gcd(); // 求最大公约数函数
int lcm(); // 求最小公倍数函数
int isPrime(); // 判断素数函数
int fibonacci(); // 斐波拉契数列函数
int main() {
int choice;
do {
choice = menu();
switch (choice) {
case 1: factorial(); break;
case 2: sum(); break;
case 3: power(); break;
case 4: gcd(); break;
case 5: lcm(); break;
case 6: isPrime(); break;
case 7: fibonacci(); break;
case 0: return 0;
default: printf("输入错误,请重新输入!\n"); break;
}
} while (1);
}
int menu() {
int choice;
printf("==========菜单==========\n");
printf("1. 求任意数的阶乘");
printf("2. 求任意数的累加和");
printf("3. 求任意正整数的N次方");
printf("4. 求任意两个数的最大公约数");
printf("5. 求任意两个数的最小公倍数");
printf("6. 判断任意数是否为素数");
printf("7. 输出斐波拉契数列前N项");
printf("0. 退出");
printf("=========================\n");
printf("请输入数字选择功能:");
scanf("%d", &choice);
return choice;
}
int factorial() {
int n, i;
long long result = 1;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n < 0) {
printf("输入错误,负数没有阶乘!\n");
return 0;
} else if (n == 0) {
printf("0的阶乘为1");
return 0;
} else {
for (i = 1; i <= n; i++) {
result *= i;
}
printf("%d的阶乘为%lld", n, result);
return 0;
}
}
int sum() {
int n, i;
long long result = 0;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n < 0) {
printf("输入错误,不能为负数!\n");
return 0;
} else {
for (i = 1; i <= n; i++) {
result += i;
}
printf("1到%d的累加和为%lld", n, result);
return 0;
}
}
int power() {
int base, exponent, i;
long long result = 1;
printf("请输入一个正整数作为底数:");
scanf("%d", &base);
printf("请输入一个正整数作为指数:");
scanf("%d", &exponent);
if (base < 0 || exponent < 0) {
printf("输入错误,不能为负数!\n");
return 0;
} else {
for (i = 1; i <= exponent; i++) {
result *= base;
}
printf("%d的%d次方为%lld", base, exponent, result);
return 0;
}
}
int gcd() {
int a, b, c;
printf("请输入两个正整数,用空格隔开:");
scanf("%d %d", &a, &b);
if (a < 0 || b < 0) {
printf("输入错误,不能为负数!\n");
return 0;
} else if (a == 0 || b == 0) {
printf("0没有最大公约数!\n");
return 0;
} else {
while (b != 0) {
c = a % b;
a = b;
b = c;
}
printf("%d和%d的最大公约数为%d", a, b, a);
return 0;
}
}
int lcm() {
int a, b, c, d, result;
printf("请输入两个正整数,用空格隔开:");
scanf("%d %d", &a, &b);
if (a < 0 || b < 0) {
printf("输入错误,不能为负数!\n");
return 0;
} else if (a == 0 || b == 0) {
printf("0没有最小公倍数!\n");
return 0;
} else {
c = a;
d = b;
while (c != d) {
if (c > d) {
d += b;
} else {
c += a;
}
}
result = c;
printf("%d和%d的最小公倍数为%d", a, b, result);
return 0;
}
}
int isPrime() {
int n, i;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n < 2) {
printf("%d不是素数!\n", n);
return 0;
} else {
for (i = 2; i <= n / 2; i++) {
if (n % i == 0) {
printf("%d不是素数!\n", n);
return 0;
}
}
printf("%d是素数!\n", n);
return 0;
}
}
int fibonacci() {
int n, i;
long long a = 0, b = 1, c;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n < 1) {
printf("输入错误,至少输出一项!\n");
return 0;
} else {
printf("斐波拉契数列前%d项为:", n);
for (i = 1; i <= n; i++) {
printf("%lld ", a);
c = a + b;
a = b;
b = c;
}
printf("\n");
return 0;
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:可能这个指针指向的空间已被释放,或者是这个函数里面出错了。