(1)for循环算阶乘
//算阶乘
#include<stdio.h>
int main()
{
int n;
int ret=1;
scanf("%d",&n);
int i=1;
for(;n>=2;n-- ){//第一个分号前没东西,相当于n=n
ret*=n;
}
// while(i<=n){
// ret*=i;
// i++;
// }
printf("%d",ret);
return 0;
}
(2)for循环判断素数
//手动输入一个数,判断是否是素数(只能被1和它本身整除)
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int i;
int isprime=1; //x是素数?
for(i=2;i<x;i++){
if(x%i == 0){ //这个if语句是用来判断那种不是素数的情况。
isprime=0; //只要有能够整除开的情况,isprime就会变为0,而对于那种不能整除开的情况,不会进入到这个if语句中来。
break; //break:只要有一个能整除开就跳出循环,进入下面的if语句
}
}
if(isprime == 1){
printf("%d是素数\n",x);
}else{//也就是isprime==0
printf("%d不是素数\n",x);
}
return 0;
}
(3)注:在csdn中插入的代码的缩进有些小变化,但是拷贝到dev中缩进又会变为正确的。qaq
//输出100以内的素数
#include<stdio.h>
int main()
{
int x;
int cnt=0;
for(x=1;cnt<15;x++){
int i;
int isprime=1; //x是素数?
for(i=2;i<x;i++){
//这个if语句是用来判断那种不是素数的情况。
if(x%i == 0){
//只要有能够整除开的情况,isprime就会变为0,而对于那种不能整除开的情况,不会进入到这个if语句中来。
isprime=0;
//break:只要有一个能整除开就跳出循环,进入下面的if语句
break;
}
}
if(isprime == 1){
cnt++;
printf("%d\t",x);
if(cnt%5 == 0){
printf("\n");
}
}
}
return 0;
}
(4) for循环凑钱
//用一角,两角,五角来凑出预期的钱
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int one,two,five;//one,two,five分别表示的是一角,两角,五角钱的数量
int exit=0;
for(one=1;one<=10*x;one++){
for(two=1;two<=10*x/2;two++){
for(five=1;five<=10*x/5;five++){
if(one+two*2+five*5 == x*10){
printf("可以用%d个一角,%d个两角,%d个五角凑出%d元\n",one,two,five,x);
exit=1;//这个exit及下面那几个exit的作用是只要有一种方案便输出;将exit去掉后就是输出所有方案
break;
}
}
if (exit) break;
}
if (exit) break;//上面三个叫做接力break。
}
return 0;
}
(5)前n项倒数求和
//前n项的倒数求和f(n)=1+1/2+1/3+...+1/n 和 f(n)=1-1/2+1/3-...+1/n
#include<stdio.h>
int main()
{
int i;
double sum=0.0;
int n;
int sign=1; //启用一个sign用作一加一减的情况。
scanf("%d",&n);
for(i=1;i<=n;i++){
sum+=sign*1.0/i; //必须写成1.0,除号两边其中一个是浮点数,则会将相除结果也转化为浮点数。
sign=-sign;
}
printf("%f",sum);
return 0;
}
(6)while加do while进行整数分解,如356→3 5 6
//整数分解,如输入135,输出1 3 5,思路如下:
//x=135
//135/100-> 1这是要输出的那一位上的值
//135%100-> 35这是下一轮循环时要操作的数据
//100/10-> 10这是下一轮循环时数据进行取余及作出除法时的除数
//35/10-> 3
//35%10->5
//10/10->1
//5/1-> 5
//1%1->0
//1/10->0,这是循环结束的条件
//所以第一步是得出135的位数,与此同时得出相应的100;
//然后第二步就是不断地去除,去取余,然后输出。
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int t=x;
int i;
int cnt=1;
//通过下面的while循环得出"100"
while(t>=10){
t/=10;
cnt*=10;//在判断位数的这个循环的同时直接得出100,很利索
}
//printf("%d\n",cnt);
//通过下面的do while循环得出每一位。
do{
i=x/cnt;
printf("%d",i);
//这个if语句用来保证输出的最后一位数后面没有空格
if(cnt>=10){
printf(" ");
}
x%=cnt;
cnt/=10;
}while(cnt>0);
return 0;
}
(7)求最大公约数
a.枚举法
//求两个数的最大公约数---枚举法
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int min=0;
int i;
int ret;
if(a<b){
min=a;
}else{
min=b;
}
for(i=1;i<=min;i++){
if(a%i == 0){
if(b%i == 0){
ret=i;
}
}
}
printf("%d",ret);
}
b.辗转相除法
//求两个数的最大公约数---辗转相除法
//如果b等于0,计算结束,a就是最大公约数
//否则,计算a/b的余数,且a=b,b=余数;
//循环上面过程,知道满足第一步
/*
a b t
12 18 12
18 12 6
12 6 0
6 0
*/
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int i;//用来存放余数的变量
while(b != 0){
i=a%b;
a=b;
b=i;
}
printf("%d",a);
return 0;
}