特此鸣谢:鱼C_小甲鱼(B站up主)不二如是(鱼C论坛大佬)
题目来源:https://fishc.com.cn
注:这些题在网上都可以搜到,题下面的代码大多是流传下来的答案(我重新排了一下版,增加了可读性),部分是本人经过深思熟虑后编写的。
11,(古典问题)兔子问题
1.题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
2.程序源代码:
- 第一种解:
#include <stdio.h>
int main()
{
int i;
int count = 3;
int month;
long int a[10];
a[0] = 2;
a[1] = 2;
printf("第1个月:2只\n");
printf("第2个月:2只\n");
for(i = 2; i < 10; i++)
{
a[i] = a[i - 1] + a[i - 2];
printf("第%d个月:%ld只\n", count, a[i]);
count++;
}
printf("\n");
printf("请输入您想查询的月数的兔子的总数:");
scanf("%d", &month);
if(month == 1 || month == 2)
{
printf("这个月的兔子的总数为:2只");
}
else
{
printf("这个月的兔子的总数为:%ld\n", a[month - 1]);
}
return 0;
}
- 第二种解:
#include <stdio.h>
int main()
{
long f1 = 1, f2 = 1;
int i;
for(i = 1; i <= 20; i++)
{
printf("%12ld %12ld", f1, f2);
if(i % 2 == 0)
{
printf("\n"); //控制输出,(f1,f2每次同时输出,所以在控制台是每行4个)每行四个
}
f1 = f1 + f2; //前两个月加起来赋值给第三个月
f2 = f1 + f2; //前两个月加起来赋值给第三个月
}
return 0;
}
12,判断101到200之间的素数
1.题目:判断101-200之间有多少个素数,并输出所有素数。
2.程序源代码:
#include <stdio.h>
#include <math.h>
int main()
{
int i, j;
int certain = 1;
int count = 0;
printf("101到200之间的素数有:\n");
for(i = 101; i <= 200; i++)
{
for(j = 2; j <= sqrt(i + 1); j++)
{
if(i % j == 0)//不是素数
{
certain = 0;
break;
}
}
if(certain)//如果是素数
{
printf("%d ", i);
count++;
if(count % 4 == 0)
{
printf("\n");
}
}
certain = 1;
}
printf("\n");
printf("共有%d个素数!\n", count);
return 0;
}
13,打印出所有的“水仙花数”
1.题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153 = 1的三次方+5的三次方+3的三次方。
2.程序源代码:
- 第一种解:
#include <stdio.h>
#include <math.h>
int main()
{
int i;
int x, y, z;
printf("水仙花树有:\n");
for(i = 100; i < 1000; i++)
{
x = i % 10;
y = i / 10 % 10;
z = i / 100;
if(pow(x, 3) + pow(y, 3) + pow(z, 3) == i)
{
printf("%d ", i);
}
}
return 0;
}
- 第二种解:
#include <stdio.h>
int main()
{
int i, j, k, n;
printf("'water flower'number is:");
for(n = 100; n < 1000; n++)
{
i = n / 100;//分解出百位
j = n / 10 % 10;//分解出十位
k = n % 10;//分解出个位
if(i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
{
printf("%-5d", n);
}
}
return 0;
}
14,将一个正整数分解质因数
1.题目:将一个正整数分解质因数。例如:输入90, 打印出90 = 2 * 3 * 3 * 5。
2.程序分析:让用户输入n,对n进行分解质因数,应先找到一个最小的质数k,然后按照下述步骤完成:
(1) 如果n > k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n。
(2) 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
(3) 如果这个质数k恰好等于n,则说明分解质因数的过程已经结束,打印出即可。
3.程序源代码:
- 第一种解:
#include <stdio.h>
#include <math.h>
int main()
{
int certain = 1;
int n;
int k = 2;
int num;
printf("请输入一个正整数,我们会将其分解:\n");
while(certain)
{
scanf("%d", &n);
if(n <= 0)
{
printf("输入错误,请重新输入!\n");
}
else
{
certain = 0;
}
}
certain = 1;
num = n;
if(n <= 2)
{
printf("他的分解质因数是%d\n", n);
}
else
{
printf("%d = ", num);
while(certain)
{
if(n == k)
{
certain = 0;
}
if(n % k == 0)
{
if(n == k)
{
printf("%d", k);
}
else
{
printf("%d * ", k);
n = n / k;
}
}
else
{
k++;
}
}
}
return 0;
}
- 第二种解:
#include <stdio.h>
int main()
{
int n, i;
printf("please input a number:\n");
scanf("%d", &n);
printf("%d = ", n);
for(i = 2; i <= n; i++)
{
while(n != i)
{
if(n % i == 0)
{
printf("%d * ", i);
n = n / i;
}
else
{
break;
}
}
}
printf("%d ", n);
}
15,利用条件运算符的嵌套完成学习成绩的转换
1.题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
2.要求:(a>b)?a:b这是条件运算符的基本例子。
3.程序源代码:
- 第一种解:
#include <stdio.h>
int main()
{
int result;
printf("请输入学生的成绩,我们将会对成绩分等级:\n");
scanf("%d", &result);
printf("%d分成绩的等级为:", result);
(result >= 90) ? printf("A") : ( (result >= 60) ? printf("B") : printf("C") ) ;
return 0;
}
- 第二种解:
#include <stdio.h>
int main()
{
int score;
char grade;
printf("please input a score\n");
scanf("%d", &score);
grade = score >= 90 ? 'A' : (score >= 60 ? 'B' : 'C');
printf("%d belongs to %c", score, grade);
return 0;
}