C零基础自学笔记<2>

第二部分


流程控制


问题一:什么是流程控制:程序代码执行的顺序
问题二:流程控制的分类:顺序执行、选择执行、循环执行
问题三:流程控制为什么非常重要:若流程控制无法掌握,无法看懂程序

1.顺序执行


自上而下,一步一步的运行  第一部分中所有代码均为顺序执行

2.选择执行


定义:某些代码可能执行,也可能不执行,有选择的执行某些代码


①if 最简单的方法

格式


if(表达式)
    语句


功能


    若表达式为真,执行语句
    若表达式为假,不执行语句

例一:

#include 

int main()

{   
	if(3>2)

		printf("哈哈哈哈哈哈哈\n");

	return 0;

}
/*----输出结果-----------

哈哈哈哈哈哈哈

-------------------------*/

 例二:

#include 

int main()

{   
	if(3)  //3是真的,执行

		printf("哈哈哈哈哈哈哈\n");//会输出
	
	if(0)   //0为假,假不执行

		printf("嗷嗷嗷嗷嗷嗷嗷\n");//不会输出

	if(0 == 0)   //0==0是真的,执行

		printf("喵喵喵喵喵喵喵\n");//会输出

	return 0;

}
/*----输出结果-----------

哈哈哈哈哈哈哈
喵喵喵喵喵喵喵

-------------------------*/


②if 的范围问题(重要)

▶if(表达式)
         语句A;
         语句B;
解释:if默认只能控制语句A的执行或不执行
          if无法控制语句B的执行或不执行
         换言之,不论表达式真或假,语句B一定会执行

#include 

int main()

{   
	if(1>2)
		printf("哈哈哈哈哈哈哈\n");

		printf("喵喵喵喵喵喵喵\n");//

	return 0;

}
/*----输出结果-----------

喵喵喵喵喵喵喵

-------------------------*/

▶if(表达式)

        {
            语句A;
            语句B;
        }
因为if默认只能控制一个语句的执行或不执行,
若想控制多个语句的执行或不执行
必须将这些语句用{ }括起来

#include 

int main()

{   
	if(1>2)
	{

		printf("哈哈哈哈哈哈哈\n");

		printf("喵喵喵喵喵喵喵\n");//

	}
	
	printf("嗷呜嗷呜嗷呜嗷呜\n");//不包含在if内,缩进与否都可以

	return 0;

}
/*----输出结果-----------

嗷呜嗷呜嗷呜嗷呜

-------------------------*/


③if ...else...的用法

 例一:

#include 

int main()

{   
	int i,j;
	
	scanf ("%d %d",&i,&j);
	
	if(i>j)  //如果i>j.执行下一行
	
		printf("i大于j\n");
		
	else    //else为否则,即条件为i

 例二:

#include 

int main()

{   
	if(1<2) //若将条件修改为1<2,则最终输出喵和嗷呜那两行

		printf("哈哈哈哈哈哈哈\n");

	else

		printf("喵喵喵喵喵喵喵\n");
	
    printf("嗷呜嗷呜嗷呜嗷呜\n");

	return 0;

}
/*----输出结果-----------

哈哈哈哈哈哈哈
嗷呜嗷呜嗷呜嗷呜

-------------------------*/


④if ...else if ...else...的用法

if(表达式1)
   语句A;
else if(表达式2)
   语句B;
else if(表达式3)
   语句C;
else 
   语句D;
执行语句D,说明表达式1,2,3均不成立

执行语句C,说明表达式1,2不成立

执行语句B,说明表达式1不成立

执行语句A,说明表达式1成立

例一:

#include 

int main()

{   
    double delta = -1;  // delta为变量的名字,也可以跟前面的代码一样用i或j
    
	if(delta >0 )  //-1>0为假,不执行下一行语句
	
		printf("有两个解!\n");

	else if(delta == 0) //-1==0为假,不执行下一行语句

		printf("有一个唯一解!\n");
	
	else
	
	    printf("无解\n");

	return 0;

}
/*----输出结果-----------

无解
-------------------------*/

例二:   注意一定要理解


else子句不能作为语句单独使用,必须和if语句配对使用,如果没有if语句,则会报错。

if后面的执行语句不用"{}"括起来,它只把紧跟在后的第一条语句作为执行语句。

if和else if中间有两条语句,又不用{}括起来,就会报错

#include 

int main()

{   
    double delta = -1;  // delta为变量的名字,也可以跟前面的代码一样用i或j
    
	if(delta >0 )
	
		printf("有两个解!\n");      
		printf("哈哈哈!\n");

	else if(delta == 0)

		printf("有一个唯一解!\n");
	
	else
	
	    printf("无解\n");

	return 0;

}
/*----结果报错-----------
error: ‘else’ without a previous ‘if’

-------------------------*/


⑤C语言对真假的处理

非零为真   零为假
真用1表示   假用0表示


⑥if举例—求分数的等级

分数等级:成绩划分

>100        输出哇

90—100  输出优秀

80—90    输出良好

70—80    输出及格

0—60      输出不及格

否则        分数过低

#include 

int main()

{   
    float score;

    printf("请输入您的考试成绩:\n"); 
    
    scanf("%f",&score);
    
	if(score >100 )
	
		printf("哇!\n");

	else if(score >= 90 && score <= 100)//注意不能写成90<=score<=100
		
		printf("优秀!\n");

	else if(score >= 80 && score <= 90)
		
		printf("良好!\n");

	else if(score >= 60 && score <= 80)
		
		printf("及格!\n");
	
	else if(score >= 0 && score <= 60)
		
		printf("不及格!\n");

	else
	
	    printf("分数过低\n");

	return 0;

}
/*----显示结果-----------

请输入您的考试成绩:
2
不及格!

-------------------------*/

例一:两个数字互换  错误代码

#include 

int main()

{   
    int i=3;

	int j=5;

	i=j;  //i=5,j=5

	j=i;  //i=5,j=5  因此无法实现i和j的互换
	
	printf("i=%d , j=%d\n",i,j);

	return 0;

}
/*----显示结果-----------
i=5 , j=5

-------------------------*/

思路:想象两瓶水,一瓶红色i,一瓶蓝色j,如果要将液体互换瓶子,需要借助另一个空瓶子t。

红色→空        空=红色      t=i

蓝色→红色    红色=蓝色   i=j

空→蓝色        蓝色=空      j=t

例一:两个数字互换  正确代码

#include 

int main()

{   
    int i=3;

	int j=5;
	
	int t; //定义临时变量
	
	t=i;

	i=j;

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

	return 0;

}
/*----显示结果-----------

i=5 , j=3

-------------------------*/

例二:对任意三个数字进行排序

思路
abc三个数进行比较,
如果(a>b)
    则a与c比较  a>c  则输出a  a 否则
      b与c比较   b>c 则输出b  b  

#include 

int main()

{   
    	int a,b,c;

	int t;

	printf("请输入三个整数(中间依空格分隔):\n");
	
	scanf("%d %d %d",&a,&b,&c);

//编写代码完成a是最大值,b是中间值,c是最小值
	if(a
小算法的程序


        判断一个数组是否为素数
                素数:只能被1和自身整除   1 3 7

        判断一个数字是否是回文数
                回文数:数字正写倒写一致 121=121

        编程实现求一个十进制数字的二进制形式
                10→1010

        一个数字的位每是奇数的数字取出组合形成的新数字
                12345→135

        求一个数字倒过来的数字
                123→321

如何看懂一个程序

分三步:
流程→每个语句的功能→试数

小tips

1.尝试自己去编程解决
        要意识到大部分人都无法自己解决,这时不要气馁也不要放弃
        如果15min还想不出来,直接看答案
2.如果解决不了就去看答案
        关键要把答案看懂,把答案看懂要花很大的精力,也是我们学习的重点
        上面说过,看懂一个程序分三步:流程→每个语句的功能→试数

3.看懂后尝试自己去修改代码,并直到修改后程序不同输出结果的含义
        不建议看懂程序之后就立即自己敲代码

4.先照着答案去敲→调试错误→不看答案自己敲

5.若程序实在无法彻底理解,背会
        但无法彻底理解的程序其实是很少的


⑦空语句的问题

    if(1>2);

等价于

    if(1>2)

          ;

一个分号一个语句

看常见问题解析中的例一:

⑧if常见问题解析(重点)

例一:if...

与②if的范围问题(重要)中的第一个例题做区别

#include 

int main()

{   
	if(1>2);   //运行时会出现警告,不会有语法错误
		printf("哈哈哈哈哈哈哈\n");

		printf("喵喵喵喵喵喵喵\n");//

	return 0;

}
/*----输出结果-----------

哈哈哈哈哈哈哈
喵喵喵喵喵喵喵

-------------------------*/
例二:  if..else

正确格式:

if(表达式1)
    A;
else
    B;

错误格式:
if(表达式1);
    A;
else
    B;

#include 

int main()

{   
	if(3>2); //加分号,执行到else那一行会报错

		printf("哈哈哈哈哈哈哈\n");
	
	else

		printf("喵喵喵喵喵喵喵\n");

	return 0;

}
//注意:无分号,输出哈哈,有分号,报错
/*----结果报错-----------
-------------------------*/
例三:if..else if...else

if(表达式1)
   语句A;
else if(表达式2)
   语句B;
else 
   语句C;

表达式1和表达式2均成立时,只会执行语句A

#include 

int main()

{   
	if(3>2)

		printf("哈哈哈哈哈哈哈\n");
	else if(3>1)

		printf("喵喵喵喵喵喵喵\n");

	else
		printf("嗷呜嗷呜嗷呜\n");
	
	return 0;

}
/*----输出结果-----------

哈哈哈哈哈哈哈

-------------------------*/
例四:if..else if...

if(表达式1)
   语句A;
else if(表达式2)
   语句B;
 

不会报错,但逻辑上有漏洞,不建议

//本代码与“求分数等级”的代码一致,仅去掉了else语句,执行结果
#include 

int main()

{   
    float score;

    printf("请输入您的考试成绩:\n"); 
    
    scanf("%f",&score);
    
	if(score >100 )
	
		printf("哇!\n");

	else if(score >= 90 && score <= 100)//注意不能写成90<=score<=100
		
		printf("优秀!\n");

	else if(score >= 80 && score <= 90)
		
		printf("良好!\n");

	else if(score >= 60 && score <= 80)
		
		printf("及格!\n");
	
	else if(score >= 0 && score <= 60)
		
		printf("不及格!\n");

	return 0;

}
/*----显示结果-----------

请输入您的考试成绩:
-2

-------------------------*/
例五:if...else if..else(表达式)

if(表达式1)
   语句A;
else if(表达式2)
   语句B;
else (表达式3)
   语句C;

这种写法会报错,

 error: expected ‘;’ before ‘printf’

正确的是:
要么去掉else后的表达式3
要么在else后面加if,再补全代码

例六:if...else if..else(表达式);(语句);

if(表达式1)
   语句A;
else if(表达式2)
   语句B;
else (表达式3); //无实际意义的语句
   语句C;

语法上不出错,但是逻辑上有漏洞,不建议

#include 

int main()

{   
    float score;

    printf("请输入您的考试成绩:\n"); 
    
    scanf("%f",&score);
    
	if(score >100 )
	
		printf("哇!\n");

	else if(score >= 90 && score <= 100)//注意不能写成90<=score<=100
		
		printf("优秀!\n");

	else if(score >= 80 && score <= 90)
		
		printf("良好!\n");

	else if(score >= 60 && score <= 80)
		
		printf("及格!\n");
	
	else (score >= 0 && score <= 60); //比上一个代码多了个;
		
		printf("不及格!\n");



	return 0;

}
/*----显示结果-----------

请输入您的考试成绩:
120
哇!
不及格!
-------------------------*/

switch后面讲

——第二部分完——

下一篇从循环开始

你可能感兴趣的:(笔记,开发语言,c语言)