C语言基础第2天03

C语言第二天03

1.for循环

阶乘 n!=1x2x3x4x…xn

写一个程序,让用户输入n,然后计算输出n!
变量:
   显然读用户的输入需要一个int的n,然后计算的结果需要用一个变量保存,可以是int的factor,在计算中需要有一个变量不断地从1递增到n,那可以是int的i

for循环就像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进进行调整,比如加1或者减1

for(int i = 0 ;i<5 ;i++){
printf("%d",i);
}

1.1小套路

做求和的程序时,记录结果的变量应该初始化为0,而做求积的变量时,记录结果的变量应该初始化为1

循环控制变量i只在循环里被使用了,循环外面他没有任何用处。因此,我们可以把变量i的定义写道for语句里面去

2.循环的计算和选择

2.1循环次数

for==while

for(i=0;i<n;i++)
则循环的次数是n;而循环结束以后,i的值是n。循环的控制变量i,是选择从0开始还是从1开始,是判断i<n还是判断i<=n,对循环的次数,循环结束后变量的值都有影响

2.2for循环

for(初始动作;条件;每轮的动作){
}
for中的每一个表达式都是可以省略的
for(;条件;)==while(条件)

2.3 Tips for loops

如果有固定次数,用for

如果必须执行依次,用do_while

其他情况用while

3.循环控制

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

3.1break 和continue的区别

break:跳出循环

continue:跳过循环这一轮剩下的语句进入下一轮

在这里插入图片描述

4.嵌套的循环

如何写程序输出50个素数?

#include<stdio.h>
int main(){
	int x=2;
    int index=1;
	
	while(index<50){
		//TODO
	        int isPrime = 1;
			int i;
		for(i=2;i<x;i++){
			if(x%i == 0){
				isPrime = 0;
				break;
			}
		}
		if (isPrime == 1){
			printf("%d ",x);
			index++;
		}
		x++;
	}

	return 0;
}

循环里面还是循环

5.从嵌套的循环中跳出

凑硬币:如何用1角,2角和5角的硬币凑出10元以下的金额呢?

#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++){
				//TODO
				if( one + two*2 + five *5 == x*10){
					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",one,two,five,x);
				}
			}
			
		}
	}
	
	
	return 0;
}

5.1break和continue

只能对它所在的那层循环做

5.2接力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++){
				//TODO
				if( one + two*2 + five *5 == x*10){
					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",one,two,five,x);
			
				    exit = 1;
					break;
				}
			}
			if( exit ) break;
			
		}
		 if ( exit ) break;
	}
	
	
	return 0;
}

5.3 goto

#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++){
				//TODO
				if( one + two*2 + five *5 == x*10){
					printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",one,two,five,x);
			
					goto out;
				}
			}
			if( exit ) break;
			
		}
		 if ( exit ) break;
	}
	out:
	return 0;
}

6.前n项求和

求f(n)=1-1/2+1/3-1/4+1/5-1/6+…+n;

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

7.整数分解

#include<stdio.h>
int main(){
	int x,t;
	scanf("%d",&x);
	t=x;
//	13245/10000 ->1
//  13245%10000 ->3245
//  10000/10  ->1000
//	3245/1000 ->3
//  3245%1000 ->245
//	1000/10   ->100
//    245/100  ->2
//    245%100  ->45
//    100/10 ->10
//    45/10 ->4
//    45%10 ->5
//    10/10 ->1
//      5/1 ->5
//      5%1 ->0
//     1/10 ->0
	
int mask = 1;
while(t>10){
	//TODO
	t/=10;
	mask*=10;
}
do{
	int d = x/mask;
	printf("%d",d);
	if( mask >0){
		printf(" ");
	}
	x%=mask;
	mask/=10;
}while(mask>0);
	
	return 0;
}

8.最大公约数

输入俩个数a和b,输出他们的最大公约数

输入:12 18

输出:6

8.1辗转相除法

1.如果b等于0,计算结束,a就是最大公约数
2.否则,计算a除以b的余数,让a等于b,而b等于那个余数
3.回到第一步
a  12  18  12  6

b   18  12  6   0
#include<stdio.h>
int main(){
//	方法1
//	int sum=1;
//	for(int i =1; i<=27; i++){
//		if(27%i==0&&128%i==0){
//			sum=i;
//		}
//	}
//	printf("%d",sum);
//	方法2
 
    int m,n,t;
	scanf("%d%d",&m,&n);
	while(n!=0){
		//TODO
	  t=m;
	  m=n;
	  n=t%n;
	  
	}
	printf("gcd=%d",m);
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值