c语言基础编程——for循环(好多小套路在里面)

(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;
	
	
}

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值