分支和循环语句(1)

c语言是结构化的程序设计语言。

  • 1.顺序结构
  • 2.选择结构
  • 3.循环结构

什么是语句?

c语句可以分为以下五类:

  • 1.表达式语句
  • 2.函数调用语句
  • 3.控制语句
  • 4.复合语句
  • 5.空语句
    • 本周介绍的是控制语句。
    • 控制语句,用于控制程序的执行流程,以实现程序的各种结构方式,它们又特定的语句定义符组成,c语言共有九种控制语句。可分为以下三类:
      • 1.条件判断语句,也叫分支语句:if语句 switch语句
      • 2.循环执行语句:do while语句 while语句 for语句
      • 3.转向语句:break语句 goto语句 continue语句 return语句

if语句

在分支语句中,if如果表达式结果为真,则语句执行。

0表示假,非0表示真。-1也是真。

if()

{

 }

一对{}大括号就叫代码块。

int main()
{
int a=0;
int b=2;
if(a==1)
    if(b==2)
        printf("hehehe");
else
    printf("haha");
return 0;

}

else总是和最近的if构成一对,所以上面的代码不会显示hehehe也不会显示haha。

这种叫悬空else。所以代码分隔很重要。

//怎样养成良好的代码风格?《高质量c/c++编程》前三章

//补充::关于static修饰局部变量,如下,则只在第一次调用时进行初始化,后序调用该函数时,使用的都是上次结束前该变量的值。即第二次用b时候b就是5,第三次就是7

static int b=3;
b+=2;

判断常量和变量是否相等时,将常量 放在左边 是好的习惯。

int num=1;
//如果本来想写if(num==5)但写成了下面两种情况:
if(num=5)
//则会继续执行,直接让num=5;自己很难发现
if(5=num)
//会报错,我们就能发现了

switch语句

switch(整型表达式)

{

语句项,case 整形常量表达式:

                语句;

}

遇见break就会跳出循环,没遇到break就会继续往下走。如下,1-5是工作日,67是休息日。有时候不加break是故意的,要按需求来。

scanf("%d",&day);

switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
        printf("工作日");
        break;
case 6:
case 7:
        printf("休息日");
        break;
default:
        printf("输入错误");
        break;  //最后一行其实加不加都行,不加也是走完了这个程序了,但是加上方便之后的修改添加。
}

default的位置在哪都可以,建议放最后。而且不是必须加的,可以不加。 switch允许嵌套使用。


循环语句

遇见break时候跳出循环。当遇见continue时候,跳过本次循环,直接跳回while的判断部分,进行下一次循环的入口判断。EOF是end of file ,值是-1,一个整数。

int ch=0;
while((ch=getchar())!=EOF)    //getchar就是输入一个字符
{
    putchar(ch);        //putchar 就是打印一个字符
}

按ctrl z会让getchar返回一个EOF,使得这个程序停下来。

//用getchar变量时候要用int。 int ch=getchar();

scanf、getchar在读取字符的时候,离键盘输入的数据中还隔着一个缓冲区。 

流程如下:当前面有个scanf,然后用户开始输入123456,然后回车,缓冲区就读取成了123456\n,然后scanf就把123456拿走了,缓冲区只剩一个\n。

然后getchat就读取了一个\n。

scanf扫描%s的时候,只读取空格之前的。

所以当scanf在上面,下面有个getchar时候,为了清理缓冲区可以这样做,用好几个getchar把缓冲区的东西都拿走。

int tmp=0;
while((tmp=getchar())!='\n')
{
    ;     //空语句
}

ASCII码中,0 123456789这些数字都是连续的。

for循环

建议:

1、不可在for循环体内修改循环变量,防止for循环失去控制

2、建议for语句的循环控制变量的取值均采用“前闭后开区间”的写法

int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(I=0;i<10;i++)        //前闭后开,相当于[0,10)
{
    printf("%d",arr[i]);
}

for(表达式1;表达式2;表达式3)              

         初始化         判断        调整

 //注意,顺序是先初始化,然后判断,如果为真就开始走循环体,然后表达式3,然后再判断;

遇见break就跳出循环。

如打印1-10

int i=0;

for(i=1;i<=10;i++)
{
    printf("%d",i);
}

注意,如果for循环的判断部分省略了,就意味着判断恒为真。

//break在while和for循环中的作用是一样的

//continue在for循环中出现时,是跳过后面代码来到调整部分,先调整后再进行判断;

在while中出现时,是跳过后面代码来到判断部分


do while循环

int I =1;
do
{
    printf("%d",i);
    I++;
}while(I<=10);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值