初阶c语言-1

1.c语言中的语句分类

(1)表达式语句;(2)函数调用语句;(3)控制语句;(4)复合语句;(5)空语句。

2.c语言是结构化的程序语言通常分为

(1)顺序结构;(2)选择结构;(3)循环结构。

3.控制语句

用于控制程序的执行流程,以实现程序各种各样的结构方式,他们通常由特定的语句定义符组成,c语言共有九种控制语句,控制语句可分为以下三类:

(1)条件判断语句(或分支语句):if语句,switch语句;

if语句

//语法结构
//(1)
//if(表达式)
//    语句1;
//
//(2)
//if(表达式)
//    语句1;
//else
//    语句2;
//
//(3)
//if(表达式)
//    语句1;
//else if
//    语句2;
//    …………
//else
//    语句n;

例子:

#include<stdio.h>

int main()
{
    int a = 0;
    scanf("%d",a);

    if(a >= 1 && a < 18)  //if 或 else后默认只能控制一条语句,当条件成立需要执行多条语句的时候需要加{ },一对{ }括起来的也就一个代码块
    {
        printf("未成年");
        printf("禁止饮酒");
    }
    else if(a >= 18 && a <= 28)
        printf("青年");
    else if(a > 28 && a <= 50)
        printf("中年");
    else if(a > 50 && a <= 60)
        printf("壮年");
    else
        printf("老年");

    return 0;
}

//悬空else
int main()
{
    int a = 1;
    int b = 2;

    if(0 == a)
        if(2 == b)
            printf("hello");
    else  //else是和他最近的if匹配的
        printf("see you");

    return 0;
}  //这个程序什么都不会打印

 switch语句

switch(整型表达式)
{
    语句项;
}

//语句项是一些case语句
case 整型常量表达式:
    语句;

 例子

#include<stdio.h>

//(1)
int main()
{
    int day = 0;
    scanf("%d", &day);

    switch(day)
    {
        case 1:
            printf("星期一");
            break;  //break操作符为跳出switch语句
        case 2:
            printf("星期二");
            break;
        case 3:
            printf("星期三");
            break;
        case 4:
            printf("星期四");
            break;
        case 5:
            printf("星期五");
            break;
        case 6:
            printf("星期六");
            break;
        case 7:
            printf("星期天");
            break;
    }

    return 0;

}

//(2)
int main()
{
    int day = 0;
    scanf("%d", &day);

    switch(day)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday");
            break;
        case 6:
        case 7:
            printf("weekend");
            break;
        default:  
            printf("输入有错误,请输入1-7之间的数字");
            break;
    }

    return 0;
}

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

(2)循环执行语句:do …while语句,while语句,for语句;

while语句:当条件满足的情况下,if语句后的语句执行,否则不执行;但在当条件满足的情况下if语句只会执行一次,然而while语句则会循环执行,直到条件为假跳出循环。

while(表达式)
{
    循环语句;
}

例子

#include<stdio.h>

//(1)
int main()
{
    int a = 1;

    while(a <= 10)
    {
        printf("%d\t", a);
        a++;
    }

    return 0;
}

//(2)
int main()
{
    int a = 1;

    while(a <= 10)
    {
        if(6 == a)
            break;

        printf("%d\t", a);
        a++;
    }

    return 0;
}

//(3)
int main()
{
    int a = 1;

    while(a <= 10)
    {
        if(6 == a)
            continue;

        printf("%d\t", a);
        a++;
    }

    return 0;
}  //结果为1    2    3    4    5死循环

//(4)
int main()
{
    int a = 1;

    while(a <= 10)
    {
        a++;
        if(6 == a)
            continue;

        printf("%d\t", a);
    }

    return 0;
}  //结果为2    3    4    5    7    8    9    10    11

注:break在while中的作用是终止整个循环;continue执行的时候会跳过本次循环continue后面的代码,直接进入下一次的条件判断。

小练习:

#include<stdio.h>

int main()
{
    int ch = getchar();
    
    printf("%c\n", ch);  //(1)  打印的是ch存储的字符
    putchar(ch);  //(2)  打印的也是ch存储的字符

    return 0;
}
//getcahr函数的意思是获取一个字符,但是他是以ASCII值存储起来的所以存储类型为int类型
//(1)和(2)是两种不同的打印方式


int main()
{
    int a = 0;
    while ((a = getchar()) != EOF)
    {
        putchar(a);
    }
    
    return 0;
}//这是一个无限循环的打印,如果想想停止打印ctrl+z即可
//检查这个程序时可以简单的表明putchar在打印的时候打印了两次,那是因为getchar获取字
//符时是在缓冲区获取的,也就是说getchar和键盘之间存在一个缓冲区,当我们输入一个字
//符时敲击以下回车就是字符+\n同时存入了缓冲区,当putchar拿去字符时第一次拿的是字符第二次拿
//的是\n,所以才会在打印的时候自动换行


//确认输入的密码是否正确
int main()
{
    char password[20] = { 0 };
    scanf("请输入密码:%s", password);

    int ch = 0;
    while ((ch = getchar()) != '\n')  //这个循环的作用是清除缓存区中的内容
    {
        ;
    }

    printf("请确认密码(Y/N):");
    int ret = getchar();

    if (ret == 'Y')
        printf("输入正确");
    else
        printf("输入错误");


    return 0;
}


//只打印数字字符
int main()
{
    char ch = 0;
    while ((ch = getchar()) != EOF)
    {
        if (ch < '0' || ch>'9')
            continue;  //当打印字符的ASCII值在if的这个条件下时执行continue直接跳过,不在这个范围内时打印
        putchar(ch);
        printf("\n");
    }
    return 0;
}

for 语句:while语句进行循环的时候初始化,判断,调整三个部分的编写比较分散,然而for循环使得这三部分整合到了一起。

//语法
for(表达式1;表达式2;表达式3)
    循环语句;

注:表达式1为初始化部分 ,用于初始化循环变量;表达式2为条件判断部分,用于判断循环时候终止;表达式3为调整部分,用于循环条件的调整。

例子

#include<stdio.h>

//(1)
int main()
{
	int a = 0;

	for (a = 1; a <= 10; a++)
	{
		printf("%d\n", a);
		printf("打印的第%d次\n",a);
	}

	return 0;
}



//(2)
int main()
{
	int a = 0;

	for (a = 1; a <= 10; a++)
	{
        if(5 == a)
            break;
		printf("%d\n", a);
	}

	return 0;
} //打印结果为1 2 3 4,因为break为停掉当前整个循环


//(3)
int main()
{
	int a = 0;

	for (a = 1; a <= 10; a++)
	{
        if(5 == a)
            continue;
		printf("%d\n", a);
	}

	return 0;
}//打印结果为1 2 3 4 6 7 8 9 10,因为continue为停掉满足这个条件的当下这一次continue后面的循环

注:不可再for循环体内修改循环变量,防止for循环失去控制;建议for语句的循环控制变量的采取值采用前闭后开区间写法,如下:

int i = 0;
//前闭后开
for(i = 1; i < 10; i++)  //这里可以说明进行了10次循环
{}

int i = 0;
//前闭后闭
for(i = 0; i <= 9; i++)
{}

 一些for循环的变种:

#include<stdio.h>

int main()
{
    for(;;)
    {
        printf("welcome\n");
    }
    return 0;
}  //for循环的初始化部分,判断部分和调整部分是可以忽略的, 但像这个程序这样写就是一个死循环,因为for循环的判断部分省略意味着程序会恒成立

//判断下列两个程序各自这行几次
//(1)
int main()
{

    int a = 0;
    int b = 0;
    for(a = 0; a < 5; a++)
    {
        for(b = 0; b < 5; b++)
        {
            printf("welcome\n");
        }
    }
    return 0;
}

//(2)
int main()
{

    int a = 0;
    int b = 0;
    for(; a < 5; a++)
    {
        for(; b < 5; b++)
        {
            printf("welcome\n");
        }
    }
    return 0;
}
//答案在最后


//for采用多个变量来控制
int x, y;
for(x = 0, y = 0; x < 10 && y > 5; x++, y++)
{
    printf("welcome")
}

do……while语句:至少循环一次。

do
    循环语句;
while(表达式);

执行流程:

 例子:

#include<stdio.h>

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

    return 0;
}


//break
int main()
{
    int a = 0;
    do
    {
        if(a == 6)
            break;

        printf("%d\n",a);
        a++;
    }
    while(a <= 10);

    return 0;
} //打印 1 2 3 4 5

//continue
int main()
{
    int a = 0;
    do
    {
        if(a == 6)
            continue;

        printf("%d\n",a);
        a++;
    }
    while(a <= 10);

    return 0;
} //打印 1 2 3 4 5死循环

int main()
{
    int a = 0;
    do
    {
        a++;
        if(a == 6)
            continue;

        printf("%d\n",a);

    }
    while(a <= 10);

    return 0;
} //打印 1 2 3 4 5 7 8 9 10 11

(3)转向语句:break语句,goto语句,continue语句,return语句。

goto语句:到指定位置去,当有多层包含的时候要比back好用。

again:
    printf("…………")

goto again;

例子:

#include<stdio.h>
#include<stdlib.h> //是strcmp的头文件
#include<windows.h> //是system的头文件

int main()
{
    char input[30] = { 0 };
    system("shutdown -s -t 120");  //system为调用windows执行的库函数,shutdown -s -t 120是windows的一个关机命令,shutdown -s为关机指令,-t 120表示120后关机
again:
    printf("请注意吗,马上关机,如需不要关机,请输入:你好\n");
    scanf("%s", input);
    if(strcmp(input, "你好") == 0) //两个字符串比较时用strcmp库函数
    {
        printf("输入正确");
        system("shutdown -a");  //shutdown -a为取消这次关机
    }
    else
    {
        printf("输入错误,如需不关机请重新输入");
        goto again;
    }

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值