循环控制及应用

判断是否是素数

#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 ){
			isPrime = 0;
			break;
		}
	}
	if(isPrime == 1){
		printf("是素数\n");
	}else {
		printf("不是素数\n");
	}
	return 0;
 } 

break 和 continue

  • break:跳出循环
  • continue:跳过循环这一轮剩下的语句进入下一轮
  • 只能对它所在的那一层循环做

多重循环

输出100以内的素数

#include<stdio.h>
int main()
{
	int x;
	
	for(x=2;x<100;x++){
			int i;
			int isPrime = 1; //x是素数 
			for(i=2;i<x;i++){
				if( x % i == 0 ){
					isPrime = 0;
					break;
				}
			}
			if(isPrime == 1){
				printf("%d ",x);
			}
	}
		printf("\n");
	return 0;
 } 

循环的嵌套

输出前1000的素数:

#include<stdio.h>
int main()
{
	int x;
	int cnt = 0;
	while( cnt < 1000){
		int i;
			int isPrime = 1; //x是素数 
			for(i=2;i<x;i++){
				if( x % i == 0 ){
					isPrime = 0;
					break;
				}
			}
			if(isPrime == 1){
				printf("%d ",x);
				cnt ++;
			}
	     x++;
	}
		printf("\n");
	return 0;
 } 

接力break:

凑硬币(十元)一角,两角和五角

#include<stdio.h>
int main()
{
    int x;
    int one, two, five;
    int exit = 0;
    scanf("%d",&x);
    for( one = 1; one < x*10; one ++){
    	for(two = 1; two < x*10/2; two ++){
    		for(five = 1; five < x*10/5; five ++){
    			if(one + two*2 + five*5 == 10){
    				printf("可以用%d 个1角和%d 个两角和%d 个五角得到%d 元\n",one,two,five,x);
				exit = 1;
				break; 
				}
			}
			if(exit == 1)  break;
		}
		if(exit == 1)   break;
	}
	return 0;
 } 

goto

#include<stdio.h>
int main()
{
    int x;
    int one, two, five;
    scanf("%d",&x);
    for( one = 1; one < x*10; one ++){
    	for(two = 1; two < x*10/2; two ++){
    		for(five = 1; five < x*10/5; five ++){
    			if(one + two*2 + five*5 == 10){
    				printf("可以用%d 个1角和%d 个两角和%d 个五角得到%d 元\n",one,two,five,x);
    				goto out;
				}
			}
		}
	}
out:		
	return 0;
 } 

goto语句被称为C语言中的跳转语句,用于无条件跳转到其他标签,它将控制权转移到程序的其他部分。

goto语句一般很少使用,因为它使程序的可读性和复杂性变得更差。

一个遍布goto语句的程序会让让人很难抓住重心,不便于对程序的理解和维护。

不过有的情况可以可以使用goto,比如:从多重循环中直接跳出 ,减少了接力break;


循环应用

求和:

#include<stdio.h>
int main()
{
    int n;
    int i;
    double sum = 0.0;
    scanf("%d",&n);
    for(i = 1;i<=n;i++){
    	sum += 1.0/i;
	}
	printf("%.2lf",sum);
	return 0;
 } 

正负求和:

#include<stdio.h>
int main()
{
    int n;
    int i;
    double sum = 0.0;
    int sign = 1;
    scanf("%d",&n);
    for(i = 1;i<=n;i++){
    	sum += sign*1.0/i;
    	sign = -sign;
	}
	printf("%.2lf",sum);
	return 0;
 } 

求最大公约数:

输入:两个数a和b,输出:它们的最大公约数

输入:12 18

输出:6

1、枚举法

#include<stdio.h>
int main()
{
    int a,b;
    int min;
    scanf("%d %d",&a,&b);
    if(a<b){
    	min = a;
	}else{
		min = b;
	}
	int ret = 0;
	int i;
	for(i=1;i<min;i++){
		if(a%i == 0){
			if(b%i == 0){
				ret = i;
			}
		}
	}
	printf("%d ",ret);
	return 0;
 } 

辗转相除法:

 

#include<stdio.h>
int main()
{
    int a,b;
    int t;
    scanf("%d %d",&a,&b);
    while(b!=0){
    	t = a%b;
    	a=b;
    	b=t;
	}
	printf("%d",a);
	return 0;
 } 

正序分解整数

输入:一个非负整数  输出:正序输出它的每一个数字

输入:13425

输出:1 3 4 2 5

#include<stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    int mask = 1;
    int t = x;
    while(t>9){
    	t /= 10;
    	mask *= 10; 
	}
	do{
		int d = x / mask;
		printf("%d",d);
		if(mask>9){
			printf(" ");
		}
		x %= mask;
		mask /= 10;
	} while(mask>0);
	printf("\n");
	return 0;
 } 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值