一、选择语言

语法:

if()
{
}
else
{
}
if()
{}
else if()
{}
else if()
{}
else
{}

举例

#include <stdio.h>
int main()
{
    int input = 0;
    printf("Workhard or not?(1/0)");
    scanf("%d\n", &input);
    if(input==1)
    {
        printf("Make more money.");
    }
    else
    {
        printf("Make less money.");
    }
    return 0;
}

注意条件判断多个条件时,需要使用&&

int main()
{
  int score = 80;
  if(score<60)
  {
    printf("不及格");
  }
  else if(60<=score && score <70)
  {
    printf("及格“);
  }
}

 

举例:求1-100之间的奇书

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

    }
    return 0;
}

 

 

二 switch 语句

 

注意:switch后面的表达式必须是整型常量表达式! 

 

举例:

#include <stdio.h>

int main()
{
    int day = 2;
    switch (day) //括号中是整型表达式
    {
    case 1: //case决定入口在哪里,
    {
        printf("Monday\n");
        break;//break决定出口在哪里;入口没有break,会从入口开始,一直往下执行;
    }
    case 2:
    {
        printf("Tuesday\n");
        break;
    }
    case 3:
    {
        printf("Wedsday\n");
        break;
    }
    default:
        break;
    }
    return 0;
}

results: Tuesday

下面把break全去掉

 

 

// 要求:输入1-5时打印工作日,输入6-7时打印休息日
int main()
{
    int day = 1;
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    {
        printf(" work day!\n");
        break;
    }
    case 6:
    case 7:
    {
        printf("Off work!\n");
        break;
    }
    default: // 输入的条件都不符合上面的case,进入default,
    {
        printf("输入日期不正确!\n");
        break;
    }
    }
    return 0;
}

 

 上面的case先后无顺序,只是习惯将default放在最后。

 

三、while循环

1.语法

while()

{
  //循环体    
}

 

2.举例

知识点:

getchar 读取字符,返回值是int
键盘输入字符+enter后,该字符就存在buffer中了,getchar就从buffer中把字符读取出来
 --读取成功的话,返回的是读取字符的ASCII码值
 --读取错误的话,返回的是EOF=-1 (end of file),文件结束标志
 
# define EOF (-1)
ctrl+z 结束getchar
 
int main()
{
    int ch = getchar();
    printf("%c\n", ch);
    putchar(ch); //输出字符

    return 0;
}
int main()
{
    char ch = 0;
    while((ch=getchar()) != EOF) // 如果读取的字符不是EOF,就输出该字符
    {
        putchar(ch);
    }
    return 0;
}

 

举例2:

// 举例2
int main()
{
    char password[20] = {0}; // password数组可以存放20个字符,默认是全0
    printf("请输入密码:");
    scanf("%c", password); // 数组的名字就是地址,这里不需要加取地址符号
    printf("请确认密码(Y/N):");
    //1.这里当输入密码时,比如123456+enter,buffer里面存的是123456\n,scanf会拿走123456,剩下
    //\n会被下面的getchar拿走,buffer不为空,就是导致getchar读取的字符不是最新键盘输入的
    //2.如果输入的密码是123456 abcdef\n, 那么scanf会拿走123456,剩下的字符,getchar会拿一个字符,所以
    //要使用循环将buffer中已经存在的字符清空
    
    int tmp = 0;
    while((tmp=getchar) != '\n') //清理缓冲区
    {
        ;//空语句,直到ch=\n,说明buffer已经清空了
    }
    char ch = 0;
    if((ch == getchar()) =='Y')
        printf("设置密码成功。");
    else
        printf("设置密码失败。");
}

 

举例3:

getchar获取的字符在字符0-9以内的,就可以输出出来, 字符在0-9以外的字符,直接跳过;

 

四、for循环

1.for循环的语法

for(初始化;条件判断;调整部分)

 

2.for循环的执行顺序

for循环的执行顺序是(1表示初始化,2表示条件,3表示调整部分,4表示循环体):

1,2,4,3 ,2,4,3,2,4直到循环结束;

所以由上可看出,初始化部分只会被执行1次 

 

 

举例:用for循环打印1-10

//for(表达式1;表达式2;表达式3)
//    循环体

// 举例, for循环实现1-10的输出打印

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

 

3.for循环中的continue 跟break

break:跳出循环,终止

continue: 跳出本次循环,进行下一个循环

for循环中的continue是跳到 调整部分进行i的调整(比如i++);而while循环,continue可能会跳过调整部分造成死循环

 

4.for语句的循环控制变量

建议:

 

int main()
{
    int arr[10] = {0,1,2,3,4,5};
    int i = 0;
    for(i=0;i<10;i++) // i<10 ,右开左闭,而不是使用<=9
    {
        printf("%d ", arr[i]); // result: 0 1 2 3 4 5 0 0 0 0 
    }
}

 

5.for循环的变种

判断部分的省略,表示判断部分恒为真,就可能导致死循环。不建议使用。

int main()
{
    int i  = 0;
    int j = 0;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            printf("inner loop.\n");
        }

}

result:打印9次 inner loop.

下面将j的初始化省略,

int main()
{
    int i  = 0;
    int j = 0;
    for(i=0;i<3;i++)
        for(;j<3;j++)
        {
            printf("inner loop.\n");
        }

}

result:打印3次inner loop.

解析:当i=0时,j是0,内部循环3次,此时j=3;

当i=1时,j没有初始化,还是为3,此时内部循环不符合条件,再次跳到外层循环。。。。

 

面试题: 

 

 0次,判断条件是赋值语句,k赋值0,条件恒为假,不会进入循环体内部。

 

五、do ...while循环

语法:

do

 循环语句;

while(表达式);

举例:用do...while 实现打印1-10的数字

#include <stdio.h>

int main()
{
    int a = 1;
    do
    {
        printf(" a = %d\n", a);
        a++;
    } while (a < 11);

    return 0;
    
}

结果:

 

 

那么在do...while中的continue,break又是如何呢?

举例2:

#include <stdio.h>

int main()
{
    int a = 1;
    do
    {
        if(5==a)
            break;
        printf(" a = %d\n", a);
        a++;
    } while (a < 11);

    return 0;
    
}

结果:1,2,3,4; 到5的时候被break了,而打印在break之后,所以5就没有被打印

 

举例3

#include <stdio.h>

int main()
{
    int a = 1;
    do
    {
        if(5==a)
            continue;
        printf(" a = %d\n", a);
        a++;
    } while (a < 11);

    return 0;
    
}

结果:死循环,a=5时,跳出循环,continue后面的语句不会执行,但是还是会进入while的判断部分,a一直为5,死循环了。

 

总结: do...while循环的循环体至少执行一次!