c语言控制流程 顺序 选择 循环

思想:程序的核心是算法 算法的核心是流程控制
       程序 = 算法 + 数据结构
流程控制---郝斌老师永远的神!!!!
顺序  选择 循环是解决一切问题的流程控制
学完这些之后 对于其他的语言都是一样的
 
流程控制  ---C语言执行的顺序



所谓流程控制就是对于任何困难的问题
都是有一个个问题简单问题组成的
至于这些小小的问题都可以用简单的流程控制
语句来解决!
解决问题的步骤就是----数据结构中的算法
郝斌曰:在我看来一个程序 分3步 流程--每个语句的功能--取数


流程控制分类
          一、顺序
              按部就班由上往下执行。。。
              
          二、选择:if和switch
                 定义:某些语句可能执行,也可能不执行
                              有选择执行某些语句
                              
                 分类:if和switch
                     
                  if:
                             1.if最简单的用法
                                     if (表达式)
                                         语句;
                                     功能:为真就执行,为假不执行

# include <stdio.h>


int main(void)
{
	if (1) // 逻辑值
		printf("开心\n"); // 执行

	if (0 == 1) // 逻辑值
		printf("zyy"); //不执行
    if (3 > 2)
        printf("开心\n"); // 执行
		printf("zyy\n"); //不执行
	
	if (3 > 2)
	{
        printf("开心\n"); // 执行
		printf("zyy\n"); //执行
	} //一个大括号也相当一条语句


	return 0;
}

/*
开心
开心
zyy
开心
zyy

*/


                             2.  if的范围问题
                                             if(表达式)
                                                语句A;
                                                语句B;
                                             解释:只能执行一个语句,想执行多个语句可以采用{}
                                                   里面可以包含多个语句;

                                             
                             3.   if...else...的用法:要么为真,要么为假反正都要执行一条语句
                                                                         简而言之 “非真既假”

                                    


                                    语法格式:  
                                         if (表达式)
                                            语句1;
                                         else  
                                                 语句2
                                 注意:else后面不加小括号!!!

# include <stdio.h>
/*
	if...else...用法
*/

int main()
{
	int i, j; //定义两个变量
	

	printf("请输入两个数\n");// 用于提示用户输入
	scanf("%d %d",&i,&j); //用于接收用户输入

	if(i > j) //只能控制一条语句
		printf("i大于j\n"); 
	else      //只能控制一条语句
		printf("i小于j\n"); 
   

	return 0;
}

                             
                             4.if...else if...else...的用法:可用于多条判断语句
                                               当且仅当else前面都不成立才会执行else后面的语句

                                     
                                     语法格式:
                                          if (表达式1)
                                                  语句1;
                                              else if (表达式2)
                                                 语句2;
                                              else if (表达式3)
                                                 语句3;
                                              ...
                                              else
                                                      语句4; 
                                                      
                                                      
                                 注意: else后面不加小括号!!!其余都加小括号

  •                              理解:就是当if else-if判断都不成立时才会执行else语句,
  •                               无论else-if判断有多少个只要存在一个else if成立其余就不用执行了
  •                               在这个语句中只出现一次if和一次else判断,而else-if可以出现多次
  •                               且不能以else-if判断开头还有else开头

 
                                  

# include <stdio.h>
# include <math.h>  //使用sqrt(delta)函数

/*
2023年6月10日17:31:25

一元二次方程求解
*/
int main(void)
{
	//把三个系数保存到计算机中
	int a = 1;  //=不表示相等,表示赋值
	int b = 2;
	int c = 1;
	float delta; //delta存放的 b*b - 4*a*c
	float x1; //存放一元二次方程的其中一个解
	float x2; //存放一元二次方程的其中一个解
	
	delta = b*b -4*a*c; //定义变量delta接收达尔塔值
	
	if (delta > 0) //
	{
		x1 = (-b + sqrt(delta)) / (2*a);
		x2 = (-b - sqrt(delta)) / (2*a);
		printf("该一元二次方程有两个解, x1 = %f, x2 = %f\n",x1,x2);
	}
    else if (delta == 0)
	{
		x1 = (-b) / (2*a);
		x2 = x1; //右边赋值给左边
		printf("该一元二次方程有两个一样的解: x1 = %f, x2 = %f\n", x1, x2);
	}
	else
	{
		printf("无解\n");
		
	}
	
	return 0;
}
# include <stdio.h>
/*
    2023年6月11日22:00:03
	多层for循环 循环输出9*9乘法表
*/
int main()
{
	//定义变量
	int i;
	int j;


	//算法
	for (i=1; i<10; i++)
	{
		for (j=1; j<10; j++)
			printf("%d*%d = %2d\t",i, j,i*j);
        printf("\n");
	}
	//输出



	return 0;
}
# include <stdio.h>
/*
	if常见错误
*/
int main(void)
{
	if (3 > 2)  //只会执行第一个语句,因为有一个为真其余就不用执行了
		printf("aaa\n");
    else if (4 > 5)
		printf("bbb\n");
    else if (4 > 5)
		printf("ccc\n");
	else (6 > 5);//
		printf("qqq\n");




	return 0;
}


                                                 
                                              
                                           
      
                             5.C语言对真假的处理
                                             非0即真
                                             零就是假
                                             
                                             1代表真
                                             0代表假
                                             不为零的数就是1

                                              
                             
                             
                             6.if举例--求分数等级--两个数的互换

# include <stdio.h>
/*
	两个数的互换
*/

int main(void)
{
	int i = 3;
	int j = 5;
	int temp ; //中间变量


	temp = i; //先把i的值放入t中
	i = j; //再把j的值放到i中
	j = temp; //最后再把t的值放到中


	

	printf("i = %d, j = %d, temp = %d\n",i,j,temp);




	return 0;
}


                                  
                                          
                             7.if的常见问题解析
                     

#  include <stdio.h>
# include <windows.h>  
/*
	if应用举例
*/

int main(void)
{
	float score; //score分数

	

	while (1)
	{
		printf("请输入你的分数0-100: ");
		printf("");
        scanf("%f",&score);


		if ((score < 0) || (score > 100))
		{
			printf("输入范围0-100重新输入\n\n");
			continue;
		}
		else
			break;
	
	}
    

    while (1)
	{
	
	if (score < 60)
	{
		printf("不及格\n");
		break;
	}	
	else if ((score >= 60) && (score <= 70))
	{
		printf("及格\n");
		break;
	}	
	else if ((score > 70) && (score < 90))
	{
		printf("良好\n");
		break;
	}
		
	else
	{
		printf("优秀\n");
		break;
	}

	}


    getchar();


	return 0;
}


                     
                switch://switch一旦成立,只要没遇到break,就会从上往下一直执行到底
                         还有case如没有成立话就直接执行default

                      格式:
                      switch(整形表达式)
                              {
                                      
                                      case 常量1:
                                          语句1;
                                    case 常量2:
                                            语句2;
                                      ....
                                      default:
                                          语句n;
             
                              }
                              注意
                        
                

# include <stdio.h>
/*
2023年6月12日17:55:00
switch --选择
*/
int main(void)
{
	int val;
	char ch;
	
	
	
	
	do 
	{
		printf("请输入你想进入的楼层:");
		scanf("%d",&val);


		switch (val)
		{
		case 1:
			printf("一层即将开门\n");break;
		case 2:
			printf("二层即将开门\n");break;
		case 3:
			printf("三层即将开门\n");break;
		default:
			printf("输入错误!\n");break;
		}
		
		printf("是否继续开门(Y/N): ");
		scanf(" %c",&ch);
	}while (ch=='y' || 'Y'==ch);
	
	
	
	
	return 0;
}


                
                
            三、循环:for和while和do-while


                        定义:
                             某些代码会被重复执行
                         
                        
                        
                        分类 
                            重点 是for逻辑最清晰
                            for(初始值-1; 循环条件-2; 自增变量-3 )
                                           循环语句-4;
                                           
                                          假设 for(1; 2; 3)
                                              4;  
                            //从右边开始 第一个语句(初始值)只执行一次,语句二用于控制循环的条件,语句三给变量增值主要用于达到预定设置的循环条件用于结束循环
                            需要注意的是:执行顺序很重要
                                  在循环条件满足时:
                                    执行顺序 
                                    第一次  1--2--4--3
                                    第二次  2--4--3
                                    第三次  2--4--3
                                    ....
                                    第n次 2不满足循环 结束循环

                               
            for循环默认只能控制一个语句 :什么是语句?
                                                     一个分号代表一个语句
                                                     一个大括号{}相当于一个语句
                                                     整个控制属于一个语句如for循环 while循环...

                          
                          

# include <stdio.h>
/*
	    循环求1-100之内的和
	for(初始值-1; 循环条件-2; 自增变量-3 )
	        			    			   循环语句-4;
	    //从右边开始 第一个语句(初始值)只执行一次,语句二用于控制循环的条件,
         语句三给变量增值主要用于达到预定设置的循环条件用于结束循环
	        			    需要注意的是:执行顺序很重要
	        			          在循环条件满足时:
	        			            执行顺序 
	        			            第一次  1--2--4--3
	        			            第二次  2--4--3
	        			            第三次  2--4--3
	        			            ....
	        			            第n次 2不满足循环 结束循环
*/

int main(void)
{
	int i;
	int sum = 0; // 初始化sum,sum不初始化就存放的是一个垃圾值
	int count = 1; //执行次数

	
	for(i=1; i<=100; i++) //
	{
		sum = sum +i;
		printf("第%d执行\n sum = %d\n", count, sum);
		count++;
	}







	return 0;
}
# include <stdio.h>

/*
	2023年6月11日10:31:19
	目的:学习
	功能:求任意数字开始到结束能被3整数的数的和
*/
int main(void)
{   //定义变量
    int i, j;
	int sum = 0;
	int count = 0;
	
	//用户提示
	printf("请输入起始值和终点值的整数:  "); //提示用户输入
	scanf("%d %d", &i, &j); //接收用户输入


	//算法实现
	for (i; i<=j; i++) //循环输出3到12值
	{
		if (i%3 == 0) //i如果能被3整除
		{
	        sum = sum +i;
			count++;
		printf("第%d累加的和是: %d\n", count, sum);//打印出被3整除的数和
		
		}
	
		
			
	}
	
	//最终结果
		printf("----------------------\n");
		printf("最终累加总和是 : %d\n", sum);

	return 0;

}
# include <stdio.h>
/*
	循环举例一
	求1 + 1/2 +1/3 + 1/4 +...+1/n
*/
int main(void)
{
	//定义变量
	int i, j;
	float sum = 0;

	//用户提示
	printf("请输入起点和终点 ");
	scanf("%d %d",&i, &j);


    //实现算法
	for (i; i<=j; i++)
	{
		sum = sum + 1/(float)i; //强制类型转化

	}

	//打印结果
	printf("sum = %f\n",sum);



	return 0;
}


                          
                               三目运算符 : A?B:C 
                                        等价于 if -else语句 
                              
                                           A为真执行B
                                           否则执行C
                                           例如:(1>2)?2:3 1>2为假执行3
                                           
                               自增自减 :最终的目的都是让i加1或减1,只不过是先使用加1或减1的值,还是后使用的加1或减1的值顺序 符号在前先使用,符号在后后使用,但是i的值最终都是要加1或减1
                                       ++i --i 符号在前:先加1或减1先使用 例如:i=2 ++i的值就为3 最终i的值也为3            
                                       i++ i-- 符号在后:先加1或减1后使用 ,此时一定要记住i++ i--还是原先的值 但是i的值一定会变
                                                 例如:i = 3 i++的值还是3,但是i的值会加1
                                   逗号表达式 :d = (A, B, C, D, ... N);从左往右执行到最后 最后一个表达式为该语句的值;
                                       例如:d = (1,3,5,6) d的值就为6                                                                 
                                           
                            
                            while
                                        1.执行顺序
                                                    格式:
                                                             while(表达式)  //里面也是个逻辑值,真就执行,假就不执行
                                                                         语句1;

# include <stdio.h>
/*
	while循环举例1-100的和
*/
int main(void)
{
	int i = 1 ;
	int j ;
	int sum = 0;
	int count = 1;
	
	
	while (i < 101) //只有条件一个表达式
	{
		sum = sum + i;
		i++;

	}
	printf("sum = %d\n",sum);
	
	
			
	
	 
	return 0; 
	
}


                                                                         
                                        2.与for的相互比较
                                                             for和while可以相互转换一样的
                                                             for (1; 2; 3)
                                                                         4;
                                                             等价于
                                                             1;
                                                             while (2)
                                                             {
                                                               4;
                                                               3;
                                                             }
                                                 for的逻辑性比while更清晰 建议多使用for
                                                 
                                        3.举例
                                                    回文数:倒着写和正着写都一样 123321

#include <stdio.h>
#define  true  1  //宏定义不需要加分号,只要用用将所有的true都当做1使用 便于全局设计
#define  false 0 
/*
	2023年6月12日13:12:34
	用while循环写一个回文数
*/

//将算法变成一个函数 用的时候直接调用,调用规则直接用--- 函数名(变量)
int hws(int val)//自定义一个函数 返回值是一个int 必须要有返回值
{
	int sum = 0; //定义一个初始值为0的变量m ,用于存放val的倒数
	int m; //存放val的原始值


	//算法实现
	m = val;  //将用户输入的值保存一份放到m中,对m进行取反操作
	while(m) 
	{ //取反
		sum = sum*10 + m%10; 
		m /= 10;
		
	}

	//输出
	if(sum == val) //推断倒序后的结果k 和原来输入的数字n 是否相等,相等返回true
		return true;
	else
		return false;
}

int  main(void)
{
	//定义变量 
	static int num ; 
	static int ret ;

	//提示用户	
	printf("请输入一个数:\n"); 
	scanf("%d",&num); 

	//算法
	ret = hws(num); //调用函数实现的将num取反 然后赋返回值赋于ret变量中

	//输出
	if(1 == ret) //
		printf("是回文数\n");
	else
		printf("不是回文数\n");

	return 0 ;
}


                                                常见算法 :记住就行了 m是个有限值  且只对10为底的倍数有效 
                                                          m/10, m/100, m/1000 ... m/n  ... 0  口诀:舍右保左 舍去几个       数取决于右边多少个0
                                                          例如:m = 123 那么 m/10 = 12, m/100 = 1, m/1000 = 0 
                                                          m%10, m%100 ... m%n ... m 口诀 :保右舍左 保留几个数也 是取决于几个0
                                                          例如: m = 123 那么 m%10 = 3, m%100 = 23, m%1000 = 123 
                                                          
                                        4.什么时候使用while,什么时候使用for :用的多了感觉就来了
                                  
                                 
                            do...while
                                 定义:无论怎么语句一定会执行一次
                                 格式
                                         do
                                        {
                                          语句;
                                        } while(表达式);  //一定要有一个分号
                                 
                                 作用:主要用于人机交互
                                 
                                 do-while和while、for的区别
                                 
                                 do-while语句 不等价于while和for
                                 原因很简单 do-while 无论表达式条件成不成立一定会先执行一次,
                                 而while和for有可能一次也不执行,只有for和while一定可以相互转换
                                 
                                 do-while 应用举例 “一元二次方程求解”

# include <stdio.h>
# include <math.h> //使用数学公式,引用数学头文件
/*
2023年6月12日14:43:26
“do-while”实现一元二次方程求解
*/

int main (void)
{
	//定义变量
	double x1, x2 ; //用于保存方程的解
    int a, b, c; //一元二次方程的系数
	double detal; //存放判根数值
    char ch;
	
	do
	{
		
		//用户提示
		printf("请输入方程的系数\n");
		scanf("%d%d%d",&a,&b,&c);
		
		
		//算法实现
		
		
		detal = b*b - 4*a*c; 
		printf("detal = %f\n",detal);
		
		if (detal > 0) //有两个不相等的实数根
		{
			x1 = (-b + sqrt(detal)) / (2*a);
			x2 = (-b - sqrt(detal)) / (2*a);
			printf("detal大于0有两个不同的实数根\nx1 = %f,x2 = %f\n",x1 ,x2);
			
		}
		else if (detal == 0) //有两个相同的实数根
		{
			x1 = (-b) / (2*a);
			x2 = x1;
			printf("detal等于0有两个相同的实数根\nx1 = %f,x2 = %f\n",x1 ,x2);
		}
		else
			printf("detal小于0\t无解!\n" );
		
		printf("你想继续么(Y/N):");
		scanf(" %c", &ch); //%c前面必须有一个空格
		
	} while ('y'==ch || 'Y'==ch);
	
	return 0;
	
}

                                 
                                 
                            break和continue
                            一般而言, 程序进入循环后, 在下一次循环测试之前会执行完循环体中
                      的所有语句。 continue 和break语句可以根据循环体中的测试结果来忽略一部
                       分循环内容, 甚至结束循环。
                       


                       continue://只会在当前循环内结束本次循环
                             3种循环都可以使用continue语句。 执行到该语句时, 会跳过本次迭代的
                             剩余部分, 并开始下一轮迭代。 如果continue语句在嵌套循环内, 则只会影
                             响包含该语句的内层循环。
                             for(1; 2; 3)
                                {
                                  A;
                                  B;
                                 continue;//continue执行了会直接执行3,跳过C和D
                                  C;
                                  D;
                                }
                                例如:对用户的非法输入进行处理
                                while((ch=getchar()) != '\n')
                                      continue;

# include <stdio.h>
/*
   continue语句;
   结束本次循环下面的语句,不会跳出循环
*/
int main(void)
{
	int i;

	for (i=0; i<3; i++)
	{
		printf("哈哈!\n");
		printf("嘻嘻!\n");
		continue; //不会执行下面,会继续执行循环
		printf("啦啦!\n");

	}


	return 0;
}


                                
                       break://终止本次循环的所有迭代
                       程序执行到循环中的break语句时, 会终止包含它的循环, 并继续执行
                       下 一阶段。   
                                      1.break如果用于循环用来终止语句
                                      2.break如果用于switch,则用来终止switch
                                      3.break不能直接用于if,除非if属于循环内部的一个子句
                            
                            
                            
            强制类型转换格式 :
                                                 (要转换的数据类型)i    i是被转换数据
                                                 例如 :(float)i :含义就是将i的值转换成float类型
            除数计算时: 分子/分母 
                                  分子 > 分母 时 取整输出
                                  例如:3/2 = 1  舍去小数部分
                                  分子 < 分母 时 输出0 取整输出
                                  例如 1/2 = 0 舍去小数


            取余计算:   分子%分母

                                                        分子 > 分母 时 
                                                        计算方法 
                                                        分子/分母 如果分子是分母的倍数 输出为0
                                                        例如 6%3 = 0
                                                        否则输出除过之后的余数
                                                        例如 4%3 = 1 
                                                        
                                                        分子 < 分母 时
                                                        直接输出分子 例如 8%9 = 8
                                                                           
                                  
                                               
                                                 
                                                  
                                                 
            
            
            
            
            
            
            
            
            
            
            
                                 
                      
             

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值