写在开始
来几道比较快乐的题目吧。
(不按照难度排序)
1.求两个正整数的最小公倍数和最大公因数
2.求出所有水仙花数
3.判断一个正整数是不是素数
4.求出斐波拉契数列的前20项
一、scanf()函数
printf()函数是一个标准格式化输出的函数,前面已经讲过了,相对的有一个从命令行读入数据的函数:scanf()
scanf()函数与printf()函数的用法形式大致相同。
&称为取地址符,用于取出某个变量的地址。
eg:scanf("%d",&i)的意思就是取一个整数存在变量i的地址,也就是把值赋给i。其他类型的输入值,用不同的符号取,多个输入值按照顺序排列(和printf()一样)。
代码展示:
int i=0;
printf("请输入一个整数:\n");
scanf("%d",&i);
printf("%d",i);
return 0;
运行结果:
请输入一个整数:
1
1
本来给i赋值为0,取入值后变成了输入的值。
二、求两个正整数的最小公倍数和最大公因数
因为考虑到现在只学了这么多,那就都用穷举法,不用啥花里胡哨的东西。
穷举法求a和b最小公倍数:
1.如果a>=b(b>=a则相反)
2.令out=a(双等号中间加了一个空格)
3.如果out被a和b整除(取余为0)则:out就是最小公倍数
4.如果不能被两者同时整除,那么out++;返回步骤3
(取余符号%在第一次笔记的最后推荐的链接里面有)
穷举法求x和y最大公因数:
1.如果x>=y(y>=x则相反)
2.令out=y
3.如果out能同时整除x和y,则:out就是最大公因数
4.如果不能,那么out–;返回步骤3
代码:
//求两个正整数的最小公倍数和最大公因数
//用穷举法
#include<stdio.h>
int main()
{
int i,j,multiple,factor;
printf("请输入第一个正整数!\n");
scanf("%d",&i);
printf("请输入第二个正整数!\n");
scanf("%d",&j);
if(i<=j){
multiple=j;
factor=i;
}
else{
multiple=i;
factor=j;
}
for(;multiple<=i*j;multiple++)
{
if((multiple%i)==0&(multiple%j)==0){
break;
}
}
for(;factor>=1;factor--)
{
if((i%factor)==0&(j%factor)==0){
break;
}
}
printf("这两个数的最小公倍数是:%d\n",multiple);
printf("这两个数的最大公因数是:%d\n",factor);
return 0;
}
运行结果:
请输入第一个正整数!
4
请输入第二个正整数!
18
这两个数的最小公倍数是:36
这两个数的最大公因数是:2
三、求出所有水仙花数
水仙花数:
一个三位数,他的三位数分别的三次方的和是他本身那么他就是水仙花数。
代码:
//求出所有水仙花数
//水仙花数是三位的自幂数
#include<stdio.h>
int main()
{
int x,y,z,flag;
printf("水仙花数有:\n");
for(int i=100;i<=999;i++)
{
flag=i;
x=flag%10;
flag=(flag-flag%10)/10;
y=flag%10;
flag=(flag-flag%10)/10;
z=flag;
if(i==(x*x*x+y*y*y+z*z*z)){
printf("%5d",i);
}
}
return 0;
}
运行结果:
水仙花数有:
153 370 371 407
四、判断一个正整数是不是素数
代码:
//判断一个正整数是不是素数
#include<stdio.h>
int main()
{
int i;
bool sign=0;
printf("请输入这个正整数:\n");
scanf("%d",&i);
for(int j=2;j<i;j++)
{
if(i%j==0){
sign=1;
break;
}
}
if(sign){
printf("这不是一个素数。\n");
}
else{
printf("这是一个素数。\n");
}
return 0;
}
运行结果:
请输入这个正整数:
7
这是一个素数。
五、求出斐波拉契数列的前20项
斐波拉契数列:
这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
代码:
//求出斐波拉契数列的前20项
#include<stdio.h>
int main()
{
printf("斐波拉契数列前20项是:\n");
int x=1,y=1,z;
printf("%6d%6d",x,y);
int flag=3;
for(int i=3;i<=20;i++)
{
z=x+y;
printf("%6d",z);
x=y;
y=z;
if(flag==5){
printf("\n");
flag=0;
}
flag++;
}
return 0;
}
运行结果:
斐波拉契数列前20项是:
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
写在最后
如果您是初学者,切勿慌张,对初学者挺难的。