重点学习:分支语句与循环语句(一)

C语言是一门结构化的程序设计语言。

生活中结构又分:1、顺序结构      2、选择结构    3、循环结构

生活中所有情况无非就这三种情况,可以描述生活中所有的事情。

选择结构在C语言中又叫作分支语句或选择语句

循环结构在C语言中也叫循环语句

分支语句:

if

switch

循环语句:

while

for

do while

什么是语句?

C语言中由一个分号 “;” 隔开的就是一条语句。

空语句:是指只有一个分号作为语句。(不需要内容,只需语句)

如:

int main(){

                  int a=0;——表示一个语句

                   ;——空语句

                   return 0;

}

分支语句(选择结构)

面对多种选择的同时也会得到相对应的结果。

例子:如果你好好学习,校招时拿一个好offer,走上人生巅峰;如果你不学习,毕业等于失业,回家卖红薯。——这就是选择!

if语句

语句结构:

第一种

if(表达式)

语句;

这里表达式计算的结果如果为真(即非0),那这个语句就要被执行否则,什么都不执行

第二种

if(表达式)

语句1;

else

语句2;

这里表达式计算结果为真(即非零),那语句1就要被执行否则,就执行语句2

第三种(多分支)

if(表达式1)

语句1;

else if(表达式2)

语句2;

else

语句3;

这里如果表达式1成立,语句1就要被执行;另外如果表达式2成立,那就执行语句2;那如果表达式2也不成立,那就只能执行语句3

这里,语句1、语句2、语句3只能被执行一个,且执行顺序依次递进的。

用代码描述if语句——

int main(){
            int age=10;
            if(age<18)         //原括号里头放的是一个判断语句
            printf("未成年\n");//因age=10<18,条件成立,所以语句被执行
            return 0;
}

若age=20时,那这时20<18为假,什么都不输出。(单分支if)

2、 if  else的例子:

int main(){
            int age=20;
            if(age<18)          //如果age<18则打印
            printf("未成年\n");
            else                //否则,则打印
            printf("成年\n");
            return 0;
}

【注:if相当于判断,else则给出另一种可能】

3、当int age=10;时,若 if() 写成 if(18<=age<28) 时,这个表达式写法是错误的。

这个写法执行顺序为:先执行18<=age,再执行后半部分;因18<=10条件为假,为假的结果就为0,但又因0<28为真,则又可以成功被打印;所以这种写法是错误的。

正确的写法:else if(age>=18&&age<28)

例子:

 int main(){
             int age=100;
             if(age<18)
             printf("未成年\n");
             else if(age>=18&&age<28)            //这是并列的判断
             printf("青年\n");
             else if(age>=18&&age<50)
             printf("壮年\n");
             else if(age>=50&&age<90)
             printf("老年\n");
             else               //最后这个else是说在前几次可能,给出最后一种可能(当然也可以省略,看是否需要)
             printf("长生\n");
             return 0;

}

也可换成:

if(age<18)

printf("未成年\n");

else{

   if(age>=18&&age<28)

    ...

}

这是把if和else当成两个逻辑,else里面在当成一个逻辑

if  else 语句的书写形式多样化

在C语言中如何表示真假?

0为假,非0即为真。

if语句如果要控制多条语句,包括else语句要控制多条语句的话,都要用大括号括起来。

如:

if(age<18)

printf("未成年\n");

printf("不能谈恋爱\n");

else{

        printf...

}

从语法形式来讲这是错的;这两个打印函数若未括起来,则会出现“没有匹配if的非法else”的错误。

这里的一对大括号{ }就是一个代码块

else中悬空else问题

对比以下两个代码中形式上的区别

#include<stdio.h>
int main(){
            int a=0;
            int b=2;
            if(a==1)
              if(b==2)
               printf("hehe\n");
            else
             printf("haha\n");
            return 0;
}
#include<stdio.h>
int main(){
            int a=0;
            int b=2;
            if(a==1)
              if(b==2)
               printf("hehe\n");
              else
               printf("haha\n");
            return 0;
}

第一个代码中else看似与第一个if对齐;第二个代码中else看似与第二个if对齐;但其实两个代码中else都是与第二个if匹配。

第一个代码的写法会误以为if不执行,则执行else,但这是错的。

试着去vs编译器中运行这两个代码会发现输出结果都是一样的;从中可发现else的位置存在差异,但输出结果都一样。

总结得出:else和其最近的未匹配的if进行匹配。

但要注意,代码的写法不一样,容易造成阅读上的理解错误。

注意代码风格(即写法)

美观的话,可以在if之后加上代码块把if与else包住,即——

  if(a==1){
              if(b==2)
               printf("hehe\n");
              else
               printf("haha\n");

}

因a=0,为假,其循环并不执行。

若想让else与第一个if匹配,则——

  if(a==1){
              if(b==2)
               printf("hehe\n");

}
              else
               printf("haha\n");

添加上一个代码块即可

if书写形式的对比

代码1:

if(condition){

                        return x;

}

return y;

代码2:

if(condition){

                        return x;

}

else{

                        return y;

}

这两个代码表示的意思是——条件成立返回x,否则返回y

代码1与代码2打印结果一样,区别于写法形式上的差异;相对于代码1,代码2更容易看懂。

判断:

int  main(){
             int num=4;
             if(num=5){
                          printf("hehe\n");
                       }
             return 0;
}

这个代码可以打印。(区别在于一个等号和两个等号)

【注:判断相等——“==”,“=”是赋值的意思。】

若写成

if(5=num)

则无法打印,这里意思是将num赋给5,而5是常量,无法像变量可以改变。【注:常量无法改变

以上代码容易写错,可采用:

if(5==num)或if(num==5)

效果一样,这只是从形式上风格效果更好。

未来如果设计到一个常量与一个变量的比较相不相等,可以把常量放到左边来判断。

练习:

1、判断一个数是否为奇数

2、输出1~100之间的奇数

思路:判断奇数就用除2看余数是否为1;而输出1~100之间的奇数,就要有1~100之间的数来判断。

这时,在编程中联想到 “%” 取模 while 循环  if语句

while循环需要循环变量,而又需要判断i是奇数,则要加上if

i++——表示下一个数。

代码如下:

int main(){
            int i=1;
            while(i<=100){
                           if(i%2==1)       //也可写成if(i%2!=0)指模2的结果不等于0
                           printf("%d ",i);
                           i++;
                         }
             return 0;
}

注:这里“%d”后加一个空格,意思是每个数都隔开,不会连在一起。

另一种写法:

int main(){
            int i=1;
            while(i<=100){
                          
                           printf("%d ",i);
                           i+=2;
                         }
             return 0;
}

这个代码意思是从i=1开始,依次往后加上2,再打印出来。

其结果和上一个代码一样。

这是一种算法,不同的做法也是不同的算法。

注:不能写成

i+=2;

printf("%d ",i);

这种先计算后打印;这样会导致最开始的1没有打印,因此应先打印再计算

switch语句

switch语句也是一种分支语句;常常用于多分支情况。

若想要输入1~7的数值,来判断星期几,则用输入函数scanf

int day=0;

scanf("%d ",&day);

接下来就是判断了,而这是多分支情况。

若采用:

if(表达式1)

语句1;

else if(表达式2)

语句2;

else

语句3;

if else多分支语句,则会过于繁琐。

这时,就运用到switch语句——

语法形式:

switch(整形表达式){

                                 语句项;

}

每个语句项都是由case组成的。

case 整形常量表达式:     语句;

如:

switch(day){

                         case 1:

                                      printf("星期1\n");

                          case 2:

                                     ....(以此往复下去)

}

case 1:表示情况1

这里意思是如果输入为1,switch(day)里day为1,则打印星期1

整形表达式结果是几,它就从case几进去。

switch判断,case作为一个入口,然后进去输出相应结果。

【注:这里指从哪里进去,但没有给出从哪出去的代码语句指令;因此,若输入3,则后面4、5、6、7的结果会相继打印。】

这里就要加上“break”语句(break——停止、终止)指跳出switch语句。

建议在每一个case语句后加上break语句。

【注:switch()语句,括号里必须是整形表达式,case后一定是要整形以及常量。如case 1;不能是case n或case 0.1这样】

若想要表达周一至周五是工作日,周六日是休息日。

除上述的方法,也可用——多个case语句对应一个break(根据逻辑需要而定)

case 1:

case 2:

case 3:

case 4:

case 5:

             printf("工作日\n");

             break;

case 6:

case 7:

             printf("休息日\n");

             break;

若原本只需一个break语句的代码若改成每个case后都加上break,这样会把原来整体代码执行的逻辑打乱。(依整体而言)

建议即便是最后一个break也要写上,可为后续修改添加提供方便。

若在给定的范围输入范围之外的数,会导致超出处理范围,最后什么都没有。

C语言给出这样的解决方案——加上default: 语句

即——

default:

             printf("输入错误\n");    //——贴心提示(也可以不写)

 break;

用于处理非法情况。

break语句的实际效果是把语句列表划分为不同部分。

编程好习惯:在最后一个case语句的后面加上一条break语句。(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加break语句)。

default子句

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结构就是所有的语句都被跳过而已,程序并不会终止,也不会报错;因为这种情况在C语言中并不认为适合错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办?

你可以在语句列表中增加一条default子句,把下面的标签default: 写在任何一个case标签可以出现的位置。

当switch表达式的值并不匹配所有case标签的值时,这时default子句后面的语句就会执行;所以,每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句又会像贯穿一个个case标签一样贯穿default子句。(即包括与被包括的意思)

注:case: 与default: 后面都是有冒号存在的。

switch case 语句中可能出现的关键字default和break,在if语句也是可以出现的。

如:

case 1:                                              

              if(n==1)

               printf("hehe\n");

不能出现continue。(因为不知道会跳到哪里去。)

编程好习惯:

在每个switch语句中都放一条default子句是个好习惯,甚至可以在后边再加上一个break。

练习:

int main(){
            int n=1;
            int m=2;
            switch(n){
                       case 1:m++;
                       case 2:n++;
                       case 3:
                              switch(n){
                                          case 1:n++
                                          case 2:m++;n++;break;
                                        }
                        case 4:m++;break;
                        default:
                                 break;
                     }
             printf("m=%d,n=%d\n",m,n);
             return 0;
}

【注:switch1允许嵌套使用。】

打印结果为m=5,n=3

具体请自行分析。(提一点:break语句在最后)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(完整版)Python基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。(完整版)Python基础学习笔记全文共69页,当前为第1页。Python 基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。 (完整版)Python基础学习笔记全文共69页,当前为第1页。 基于《Python语言程序设计基础(第2版)》 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 计算机的概念 计算机是根据指令操作数据的设备,具备功能性和可编程性两个基本特性。 计算机技术发展阶段: 第一阶段:1946-1981年,"计算机系统结构阶段"。 第二阶段:1982-2007年,"计算机网络和视窗阶段"。 第三阶段:2008年至今,"复杂信息系统阶段"。 第四阶段:月20年后某个时期开始,"人工智能阶段"。 1.2程序设计语言 1.2.1程序设计语言概述 机器语言:直接使用二进制代码表达指令,可被计算机硬件直接识别和执行。不同计算机结构的机器指令不同。 汇编语言:使用助记符对应机器语言中的指令,可直接操作计算机硬件。不同计算机结构的汇编指令不同。 机器语言和汇编语言都直接操作计算机硬件并基于此设计,统称"低级语言"。 (完整版)Python基础学习笔记全文共69页,当前为第2页。(完整版)Python基础学习笔记全文共69页,当前为第2页。高级语言:用更接近自然语言的方式描述计算问题。代码只与编程语言有关,与计算机结构无关。 (完整版)Python基础学习笔记全文共69页,当前为第2页。 (完整版)Python基础学习笔记全文共69页,当前为第2页。 1.2.2编译和解释 高级语言按执行方式可分为采用编译执行的静态语言和采用解释执行的脚本语言。 编译是将源代码转换成目标代码的过程。 解释是将源代码逐条转换成目标代码同时逐条运行目标代码的过程。 1.2.3计算机编程 我学习Python的原因: 通过编程实现自动化,提高效率。 通过编程了解一个新的广阔世界。 学习一门编程语言(重点在于练习) 掌握该语言的语法 结合问题设计程序结构 掌握解决问题的能力 1.3Python语言概述 1.3.1 Python语言的发展 Python语言是一个语法简洁、跨平台、可扩展的开源通用脚本语言。 Python语言诞生于1990年,创世人为Guido。 2000年10月,Python 2.0正式发布,2010年,Python 2.x系列发布最后一版(2.7)。 (完整版)Python基础学习笔记全文共69页,当前为第3页。(完整版)Python基础学习笔记全文共69页,当前为第3页。2008年12月,Python 3.0正式发布,解释器内部采用完全面向对象的方式实现,代价是3.x系列版本无法向下兼容2.x系列的既有语法。 (完整版)Python基础学习笔记全文共69页,当前为第3页。 (完整版)Python基础学习笔记全文共69页,当前为第3页。 Python 2.x已经是遗产,Python 3.x是这个语言的现在和未来。 1.3.2编写Hello程序 print("Hello World") 1.3.3 Python语言的特点 语法简洁 可跨平台 应用广泛 支持中文 强制可读:通过强制缩进体现语句间的逻辑关系提高了程序的可读性 模式多样:语法层面同时支持面向过程和面向对象两种编程方式 粘性扩展:通过接口和函数集成其他语言编写的代码 开源理念 库类丰富 1.4 Python语言开发环境配置 Python解释器 IDLE开发环境 交互式启动 文件式启动 Python语言集成开发环境——PyCharm 1.5 程序的基本编写方法 1.5.1 IPO程序编写方法 (完整版)Python基础学习笔记全文共69页,当前为第4页。(完整版)Python基础学习笔记全文共69页,当前为第4页。每个程序都有统一的运算模式:输入数据、处理数据和输出数据。这种朴素的运算模式形成了基本的程序编写方法:IPO(Input,Process,Output)方法。 (完整版)Python基础学习笔记全文共69页,当前为第4页。 (完整版)Python基础学习笔记全文共69页,当前为第4页。 IPO不仅是程序设计的基本方法,也是描述计算问题的方式。 1.5.2理解问题的计算部分 使用计算机解决问题的6个步骤: 分析问题 划分边界 设计算法 编写程序 调试测试 升级维护 第2章 Python程序解析 2.1 Python程序语法元素分析 Python程序包括格式框架、注释、变量、表达式、分支语句循环语句、函数等语法元素。 程序的格式框架 Python语言采用严格的"缩进"来表明程序的格式框架,缩进表达了所属关系 在代码编写中缩进可通过Tab

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值