c语言循环专题

while()循环        //while的汉译是  当...的时候
    while(条件语句){
        执行的命令块
    }
for语句
for(初始条件;循环继续的条件;循环每轮要做的条件){
    
}
***for中的每一个表达式都是可以省略的
for(;条件;)==while(条件)
    for循环像一个计数循环:设定一个计数器,初始化它,
    然后在计数器到达某个值之前,重复执行循环体,
    而每执行一轮循环,计数器值以一定步进进行调整,
    比如加1或者减1
for(i=0;i<5;i=i+1){
    printf("%d",i);
}
##########

for  汉译为 “对于”
for(count=10;count>0;count--)
就读成                :    "对于一开始的count=10,当count>0时,重复做循环体,
        每一轮循环在做完循环体内语句后,使得count--"
    //做求和的程序时,记录结果的变量应该初始化为0,而做求
    循环控制变量i只在循环里被使用了,在循环外面它没有任何用处。
    因此,我们可以把变量i的定义写到for语句里面去

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

因此 for循环等价于while循环

for(int i=1;i<=n;i++){
    fact *= i;
}
等价于
int i=1;
while (i<=n){
    fact *=i;
    i++;
}

do while循环,while循环的区别
do while
是先进行do里面的命令块 再判断
while
是先判断 再进行{内的命令块

*********        如果有固定次数,用for
*********        如果必须执行一次,用do_while
*********        其他情况用while

########################
bool类型
#include<stdbool.h>
之后就可以使用bool和true,flase

##############################################
逻辑运算
//逻辑运算是对逻辑量进行的运算,结果只有0或1
//逻辑量是关系运算或逻辑运算的结果
!    逻辑非    !a    
&&    逻辑与    a&&b    
||    逻辑或    a||b    
优先级
!>&&>||

####短路
逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算
a==6&&b==1
a==6&&b+=1
对于&&,左边是false时就不做右边了
对于||,左边是true时就不做右边了

注意点
不要把赋值,包括复合赋值组合进表达式!即把&&看做*法,把||看成+法
###########
条件运算符
count=(count>20)?count-10:count
条件 ?条件满足时候的值:条件不满足的值
***条件运算符的优先级高于赋值运算符,但是低于其他运算符

条件运算符是自右向左结合的

*************条件运算符 只做了解
逗号运算符
逗号用来连接两个表达式,并以其右边的表达式的表达式的值作为它的结果。逗号的优先级
是所有的运算符中最低的,所以它两边的表达式会先计算;逗号的组合关系是自左向右,所以左边的表达式会先计算,而右边的表达式的值就留下来作为逗号运算的结果
i=3+4,5+6;    //返回7    =号的优先级比逗号高
i=(3+4,5+6);    //返回11    先运算()内的命令  逗号运算符是以右边的表达式作为它的结果
*****逗号运算符主要运用到逗号运算符

#############################################################
嵌套的判断
当if的条件满足或者不满足的时候要执行的语句也可以是一条if或if-else语句,这就是嵌套的if语句
if(){
    if(){
    }else{
    }
}
***else的匹配
当没加大括号的时候
else总是和最近的的if组合

所以在编写if语句的时候
在if或else后面总是用{}
即使只有一条语句的时候

###################################
2级联合嵌套的判断
if(exp1){
    st1;
}else if(){
    st2;
}else if(){
    .....
}else{
}

####在编写代码时 尽量做到 "单一出口"
#########################################################3
多路分支
switch-case语句
switch (控制表达式){        //控制表达式只能是整数型的结果
case 常量:            //常量可以是常数,也可以是常数计算的表达式
    语句
    ......
case 常量:
    语句
    ......
default:
    ......

}

####break
switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处。
分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break,或者switch结束为止

######################################################################
循环的例子
int x;
int ret=0;
scanf("%d",&x);
int t=x;        //计算之前先保存原始的值,后面可能有用
while(x>1){
    x/=2;
    ret++;    
}
printf("log2 of %d is %d",t,ret);

计数循环
int count=100;
while(count>=0){
    count--;
    printf("%d\n",count);
}
printf("发射!\n");

这个循环需要执行几次?
循环停下来的时候,有没有输出最后的0?
循环结束后,count的值是多少?
解决方法——可以进行一个模拟
         如果模拟运行一个很大次数的循环,可以模拟较大的循环次数,然后作出判断

################算平均数##################
让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数
变量——>算法——>流程图——>程序
一个记录读到的整数的变量
平均数怎么算?
只需要每读到一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除读到的数的个数就可以了
一个变量记录累加的结果,一个变量记录读到的数的个数
算法
初始化变量sum和count为0;
 

#include <stdio.h>
int main(){ 
   int number;
    double sum=0;
    int count=0;
    scanf("%d",&number);
    while (number !=-1){ 
       sum +=number; 
       count++; 
       scanf("%d",&number); 
   } 
   printf("%lf\n",sum/count); 
   return 0;
}


#################################################
猜数游戏
让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户猜了多少次
#include <stdlib.h>
#include <time.h>
srand(time(0));
int round=rand()%100+1;    //round的范围为 [1,100] 
****随机数
    每次召唤rand()就得到一个随机的整数
**%100
    x%n的结果是[0,n-1]的一个整数
    x%100的结果是[0,99]的一个整数
————100以内的猜数 最多用7次 就可以猜出来

  

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
	int number;
	int count=1;
	srand(time(0));
	int round=rand()%100+1;    //round的范围为 [1,100]
	scanf("%d",&number);
	while(number !=round) {
		if(number>round) {
			printf("猜大了  false  第%d\n",count);
			scanf("%d",&number);
			count++;
		} else {
			printf("猜小了  false  第%d\n",count);
			scanf("%d",&number);
			count++;
		}
	}
	printf("true 是%d\n  一共猜了%d次",number,count);
}

###############################################################
整数的分解
    一个整数是由1至多位数字组成的,如何分解出整数的各个位上的数字,然后加以计算
    对一个整数做%10的操作,就得到它的个位数
    对一个整数做/10的操作,就去掉了它的个位数
    然后再对2的结果做%10,就得到原来数的十位数了
    依次类推
####数的逆序
    输入一个正整数,输出逆序的数
    结尾的0的处理

#include <stdio.h>
int main() {
	int x;
	scanf("%d",&x);
	int digit;
	int ret=0;
	while(x>0) {
		digit=x%10;                    //用于分解
		//printf("%d\n",digit);
		ret = ret*10+digit;            //将分解的digit组合起来
		printf("x=%d,digit=%d,ret=%d\n",x,digit,ret);
		x/=10;
	}
	printf("%d\n",ret);
	return 0;
}


******当需要累加一些值的时候,用来记录累加结果的变量应该被初始为:0
######################################################################3

        if语句常见的错误
***忘了大括号    ——永远在if和else后面加上大括号,即使后面只有一条语句
***if后面的分号    ——一定不能在if()后面加分号
***错误使用==和=    ——if只要求()里的值是零或非零,=是赋值运算符,==才是比较等于的意思
***使人困惑的else    ——在if和else之后必须加上大括号形成语句块  大括号内的语句缩进一个tab的位置

################################################################################
循环控制
***素数

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

#####################################################################
多重循环
100以内的素数
############for循环与while循环可以替换
嵌套的循环
循环里面还是循环
################################################
离开多重循环
break 和 continue 只能对它所在的那层循环做
1.接力break
    对多重循环可以这样子退出循环
    int exit=0;
    给达标的语句加上一条 exit=1;  的命令
    再给外面的循环加上 if(exit == 1) break;
2.goto
    goto out;        //跳到out: 的地方
***其他地方不要使用goto    
    
####################################################
循环应用
求和
 

#include<stdio.h>
int main() {
	int n;
	int i;
	double sum=0.0;
	double sign=1.0;
	scanf("%d",&n);
	for(i=1; i<=n; i++)    {
		sum +=sign/i;        //利用分子来改变+-号
		sign=-sign;
	}
	printf("f(%d)=%lf\n",n,sum);
}

 

############################
求最大公约数
运用 辗转相除法

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

#include<stdio.h>
int main() {
	int a,b;
	int t;
	scanf("%d %d",&a,&b);
	while(b!=0)    {
		t = a%b;        //t相当于一个盒子
		a=b;
		b=t;
	}
	printf("gcd=%d\n",a);
}

#####################################################################################
正序分解整数
 

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

 

##########################################################

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

99Kies

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值