控制语句

1.控制语句


 

什么是语句

语句可以理解为计算机指令

在C语言中,语句分为 表达式语句, 函数调用语句, 控制语句, 复合语句, 和空语句

#include <stdio.h>
void test()
{
	;	 // 空语句
}
int main()
{
	int a = 1;
	int b = 2;
	a + b; // 表达式语句

	test(); // 函数调用语句

	if (a == 1)	//控制语句
		printf("a = 1");

	if (b == 2)
	{
		printf("b == 2"); //复合语句
	}
    return 0;
}

 

什么是控制语句

C语句是一门结构化的计算机语言

这里的结构化是指,C语言支持3种程序结构 顺序,分支(选择),循环结构

在C语言中实现控制语句,实现3种程序结构,控制程序的执行流程

 

顺序结构,从上到下执行语句

分支结构,条件成立执行语句

循环结构,重复执行语句,直到条件不成立停止

#include <stdio.h>
void test1() // 顺序
{
	printf("test\n");
	printf("test\n");
	printf("test\n");
}
void test2() // 分支
{
	int age = 18;
	if (age >= 18)
	{
		printf("成年\n");
	}
	else
	{
		printf("未成年\n");
	}
}
void test3() // 循环
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
}
int main()
{
	test1();
	test2();
	test3();
	return 0;
}

 

 

顺序,分支,循环可解所有问题?

程序员使用计算机语言编写程序,解决实际生活中的问题

但是,世界上的问题纷繁复杂,3种结构足够解决,描述所有的问题吗

计算机科学家,通过高度抽象,证明在一个单入口,单出口的程序中,所有的问题都可以用3种程序结构中的一种,或组合进行描述

 

#include <stdio.h>
int main()
{
	return 0;
}

在C语言中,main主函数作为一个程序的入口, return 0 作为程序出口

在一个工程中,通常有多个以.c为后缀的源程序,这些源程序中只能有一个主函数,作为整个程序的入口

 

 控制语句分类

C语言中,有9种控制语句,可分为三类 分支,循环,转向语句

分支 - if, switch语句

循环 - for, while, do...while语句

转向 - continue, break, return, goto语句

 

 

2. 分支语句

 

什么是分支

分支,即选择

如果条件成立,就执行什么

 

3. if 语句 

语法

if (条件表达式)

  语句;

条件表达式不等于0, 条件表达式为真,执行语句

 注:在C语言中,0表示假,非0表示真

 

例子:

// 判断一个数是否为奇数
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 != 0)
		printf("奇数\n");
	return 0;
}

3 余 2 不等于 0, 表达式为真,执行语句打印奇数

 

复合语句

if (条件表达式)

  语句;

注意 :  这里只能执行一条语句, 如果执行多条语句,需要使用复合语句{ }

// 判断一个数是否为奇数
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 != 0)
	{
                // 复合语句
		printf("奇数\n"); 
		printf("test\n");
	}
	return 0;
}

 

 

else 子句

if 语句通常与else子句一起使用

例子:

// 判断一个数是否为奇数
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 != 0)
	{
		printf("奇数\n");
	}
	else
	{
		printf("偶数\n");
	}
	return 0;
}

 

 4 % 2 = 0, 表达式为假,执行 else语句, 打印偶数 

 

else if 

使用 else if,实现多分支的情况

else if ( 条件表达式 )

  语句;

例子:

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("少年\n");
    }
    else if (age >= 18 && age < 30)
    {
        printf("青年\n");
    }
    else if (age >= 30 && age < 50)
    {
        printf("中年\n");
    }
    else 
    {
        printf("老年\n");
    }

}

 

 

 

4. switch

 在C语言中,也可以使用switch语句实现分支结构, switch通常用于实现多分支

 

语法

switch(常量表达式)

{

  case 整形常量表达式:

  语句;

 }

例子:

#include <stdio.h>
int main()
{
	int n = 1;
	switch (n)
	{
	case 0:
		printf("a");
	case 1:
		printf("b");
	case 2:
		printf("c");
	}
}

 

n = 1, case 1 为真,打印b,然后打印c

 

break

在之前的例子中可以发现,当case 1成立, 执行完语句后,会直接执行case 2中的语句

所以,在使用switch语句时,通常会使用转向语句break, 跳出switch语句

#include <stdio.h>
int main()
{
	int n = 1;
	switch (n)
	{
	case 0:
		printf("a");
		break;
	case 1:
		printf("b");
		break;
	case 2:
		printf("c");
		break;
	}
}

 

default

当所有表达式都不成立时,默认执行default子句

#include <stdio.h>
int main()
{
	int n = 5;
	switch (n)
	{
	case 0:
		printf("a");
		break;
	case 1:
		printf("b");
		break;
	case 2:
		printf("c");
		break;
	default:
		printf("输入错误\n");
	}
	
}

 

5. 循环语句

什么是循环

循环,重复执行,直到条件不成立停止

 

循环的必要条件

如果使用循环,必须要确定循环可以停止,不陷入死循环

循环中,必须要有一个部分进行判断,条件不成立时,跳出循环,还必须要有一个调整部分,每一个执行,接近这条件,最后退出循环

 

6. while, for 循环

语法

while(表达式)

  语句;

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

  语句;

例子:

// while 打印 1 - 10
#include <stdio.h>
int main()
{
	int i = 1; //初始化
	while (i < 10) // 判断
	{
		printf("%d ",i);
		i++; // 调整
	}
	printf("\n");
}
// for 打印 1 - 10
#include <stdio.h>
int main()
{
	for (int i = 1; i <= 10; i++) //初始化; 判断; 调整
	{
		printf("%d ", i);
	}

}

 

 执行流程

 

// 打印 1 - 3
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 3; i++)
	{
		printf("%d ", i);
	}

}

 

1. 初始化部分, i = 1

2. 判断,1 <= 3, 表达式为真, 执行语句, 打印 1

3. 调整部分,  i ++, i = 2

4. 判断,2 <= 3, 为真, 打印2

5. 以此, 当i = 4时, 条件表达式为假,退出循环

 

7. 循环应用

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
int main()
{
	char passwd[20] = { 0 };
	char ch = 0;
	printf("输入密码: ");
	scanf("%s", passwd); //123456 abc\n
	
        // 清除缓冲区
	while (getchar() != '\n')
	{
		;
	}
	printf("确认密码(Y/N): ");
	ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	

}

scanf函数只会从输入缓冲区中,读取字符串123456

此时,输入缓冲区中还有abc\n

如果不清除缓冲区,字符变量ch就会直接从缓冲区中取值,ch = 'a', 导致程序逻辑错误

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
int main()
{
	char passwd[20] = { 0 };
	char ch = 0;
	printf("输入密码: ");
	scanf("%s", passwd); //123456 abc\n

	// 清除缓冲区
	/*while (getchar() != '\n')
	{
		;
	}*/
	printf("确认密码(Y/N): ");
	ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}


}

 

 

 

 

posted @ 2023-02-14 17:27  许木101  阅读(209)  评论(0)    收藏  举报