Linux第一课:c语言 学习记录day04

三、语句

1、分支语句

1.2、switch

switch(变量或表达式)

{

        case 常量1:语句块1;break;

        case 常量2:语句块2;break;

        ……

        case 常量n:语句块n;break;

        default:语句块n+1;

}

执行顺序:

判断switch后面的表达式结果,和case后面的常量匹配,如果匹配成功,就执行对应的语句块,碰到break则switch结束;如果没有匹配成功,则执行default后面的语句块,switch结束。

示例如下:

#include<stdio.h>
int main()
{
    int a;
    scanf ("%d", &a );
    switch ( a )
    {
    case 1:
        printf (" 1\n");
        break;
    case 2:
        printf (" 2\n");
        break;
    case 3:
        printf (" 3\n");
        break;
    default:
        printf ("other\n");
        break;
    }
    return 0;
}

注意:

1、表达式不能是浮点型或字符串,只能整型或者是字符型

练习:从终端输入年月日,判断这是这一年的第几天

#include<stdio.h>
int main()
{
    int year, month, day;
    int number;
    printf ("Please enter the date:");
    scanf ("%d/%d/%d", &year, &month, &day );
    number = day;
    switch ( month)
    {
    case 1:
    	break;
    case 2:
		number+= 31;
    	break;
    case 3:
    	number+= 31+28;
    	break;
    case 4:
    	number+= 31+28+31;
    	break;
    case 5:
    	number+= 31+28+31+30;
    	break;
    case 6:
    	number+= 31+28+31+30+31;
    	break;
    case 7:
       	number+= 31+28+31+30+31+30;
    	break;
   	case 8:
    	number+= 31+28+31+30+31+30+31;
    	break;
    case 9:
    	number+= 31+28+31+30+31+30+31+31;
    	break;
    case 10:
    	number+= 31+28+31+30+31+30+31+31+30;
    	break;
    case 11:
       	number+= 31+28+31+30+31+30+31+31+30+31;
    	break;
	case 12:
    	number+= 31+28+31+30+31+30+31+31+30+31+30;
    	break;
	}
	if ( year% 4 == 0)
	{
		number+=1;
	}
	printf ("%d/%d/%d is %d", year, month, day, number);
    return 0;
}

进阶用法:

case 后面可以不加break,程序会执行下一个case,直到遇到break。这种情况通常在两个或多个case共用一个语句块,即多个case表达同一个意思时使用,可以有效减少代码行数。

示例如下:

#include<stdio.h>
int main()
{
    int a;
    scanf ("%d", &a );
    switch ( a )
    {
    case 1:
        printf (" 1\n");
        //break;
    case 2:
        printf (" 2\n");
        //break;
    case 3:
        printf (" 3\n");
        //break;
    default:
        printf ("other\n");
        //break;
    }
    return 0;
}

运行结果如下:

上述练习题可以简化代码

#include<stdio.h>
int main()
{
    int year, month, day;
    int number;
    printf ("Please enter the date:");
    scanf ("%d/%d/%d", &year, &month, &day );
	switch (month)
	{
    case 12: number += 30;
    case 11: number += 31;
    case 10: number += 30;
    case 9: number += 31;
    case 8: number += 31;
    case 7: number += 30;
    case 6: number += 31;
    case 5: number += 30;
    case 4: number += 31;
    case 3: number += 28;
    case 2: number += 31;
    case 1: number += day;
	}
	if ( year% 4 == 0)
	{
		number+=1;
	}
	printf ("%d/%d/%d is %d", year, month, day, number);
	return 0;
}

2、循环语句

2.1、for循环

2.1.1、for循环基本结构

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

{
        语句块1;

}

表达式1:初值

表达式2:终止条件

表达式3:增或减

执行顺序:

首先执行表达式1,然后判断表达式2是否成立,如果成立,则执行语句块1,然后执行表达式3,第一次循环结束,第二次循环开始,再次判断表达式2是否成立,成立继续循环,不成立退出循环,执行下面的语句;如果第一次判断表达式2不成立,那么直接结束循环,执行后面的语句。

示例如下

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int i;
    for (i = 1; i <= 10; i++)
    {
        if(i == 10)
        {
            printf("恭喜宿主成功回到主世界\n");
        }
        else
        {
            printf("你已经死了%d次,还差%d次就可以回到主世界了\n", i, 10-i);
        }
    }
    
    return 0;
}
2.1.2、for循环嵌套结构

for循环中的语句块也可以是另一个for循环

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

{
        for(表达式4;表达式5;表达式6)

        {

                语句块1;

        }

}

执行顺序:

里面的for循环循环一轮,外面的循环循环1次

示例如下:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int i, j;
    for (i = 1; i <= 10; i++)
    {
        for (j = 1; j <=10; j++)
        {
            printf("%d:%d ", i, j);
        }
        printf("\n");
    }
    return 0;
}

运行结果如下:

可以很明显看到,里面的for循环循环一轮,外面的循环循环1次,即外层循环控制行数,内层循环控制列数

2.1.3、for循环的省略

for循环里面的表达式1,2,3都可以省略,但’;‘不能

表达式1

for(;表达式2;)

{

        语句块1;

        表达式3;

}

表达式1:for循环的初值,所以在for循环前面完成初值的定义和赋值

表达式2:for循环的终止条件,省略的话就是一个死循环,在未来的项目中可能会出现死循环的应用

表达式3:for循环的增值或减值,在for循环当次的循环中最后执行,省略不写的话也是死循环

练习:打印以下图案

*

**

***

****

*****

#include<stdio.h>
int main()
{
	for( int i=0;i<5;i++)
	{
		for(int j=0;j<=i;j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

进阶练习:打印以下图案:

*

**
***
****
*****

*****
 ****

  ***

   **

    *

#include <stdio.h>
int main()
{
    int i, j, s;
    for (i = 1; i <= 5; i++)
    {
        for (j = 1; j <= i; j++)
        {
            printf("*");
        }
        printf("\n");
    }

    for (i = 1; i <= 5; i++) 
    {
        for (s = 0; s < i-1; s++) 
        {
            printf(" ");
        }
        
        for (j = 0; j <= 5-i; j++) 
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

2.2、while循环

函数结构如下:

while(表达式1)

{

        语句块;

        增值或减值;

}

//表达式1:判断条件

执行顺序:

首先定义循环变量并赋值,然后判断是否符合条件,如果符合就进入循环执行语句块,以及增值和减值语句,然后继续判断,直到条件不成立,退出循环。

示例:1到10累加

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int i = 1, sum = 0;
    while (i <= 10)
    {
        sum += i;
        i++;
    }
    printf("%d\n", sum);
    
    return 0;
}

2.3、do_while循环

函数结构:

do

{

        语句块1;

        增值或减值;

} while(表达式1);

//表达式1:判断条件

执行顺序:

do_while循环先执行一次语句块和增值减值,执行完之后再判断条件,初值如果不符合条件,do—_while循环还是会执行一次循环,while和for循环中如果初值不符合条件的话,一次都不执行。

示例:1到100累加

#include<stdio.h>
int main()
{
	int i=0;
	int sum=0;
	do
	{
		sum+=i;
		i++;
	}while(i<=100);
	printf("%d\n",sum);
	return 0;
}

2.4、循环控制语句

break;

continue;

break:结束循环,后面的循环不再执行

continue:结束当次循环,开始下一次循环

使用场景:

循环语句中,结束循环

使用时要有判断条件

示例:

#include<stdio.h>
int main()
{
	for(int i=0;i<=10;i++)
	{
		if(i==3)
		{
			//break;
			continue;
		}
		printf("%d\n",i);
	}
	return 0;
}

运行结果如下:

练习:终端上输入一个字符,并将其打印到终端上,当输入为q时,程序结束

#include <stdio.h>

int main(int argc, char const *argv[])
{
    char ch;
    while(1)
    {
        scanf("%c", &ch);
        // getchar();
        if(ch == '\n')
            continue;

        if(ch == 'q')
            break;

        printf("%c\n", ch);
    }
    
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值