当前位置 : 主页 > 编程语言 > c语言 >

C语言进阶—— 分支语句和循环语句 1

来源:互联网 收集:自由互联 发布时间:2023-08-28
C语言是一门结构化的程序设计语言 1、顺序结构 2、选择结构 3、循环结构 一、语句 C语言中 由一个分号隔开的就是一条语句 ;//该是语句——具体为空语句 分支语句: if switch 循环语句

C语言是一门结构化的程序设计语言

1、顺序结构

2、选择结构

3、循环结构

一、语句

C语言中 由一个分号隔开的就是一条语句

;//该是语句——具体为空语句

分支语句:

if

switch

循环语句:

for

while

do while

goto语句:

1、分支语句(选择结构)

if语句的语法结构:
第一种:如表达式为真,if语句才可以执行
if(表达式)
		语句;
第二种:如表达式为真执行语句1,为假执行语句2
if(表达式)
		语句1;
else
		语句2;
第三种:按顺序

表达式1成立——执行语句1,不成立,——是否表达式2成立,成立——执行语句2  不成立——执行语句3

//多分支

if(表达式1)
		语句1;
else if(表达式2)
		语句2;
else
		语句3;

eg:结果为刚成年

#include <stdio.h>
#include <string.h>

int main()
{
	int age=18;
	if(age<18)
		printf("未成年");
	else if(age==18)
		printf("刚成年");
	else
		printf("成年");

	return 0;
}

eg:使用了逻辑与&&

#include <stdio.h>
#include <string.h>

int main()
{
	int age=18;
	if(age<18)
		printf("未成年");
	else if(age>=18 && age<28)
		printf("青年");
	else
		printf("成年");

	return 0;
}

如果条件成立,要执行多条语句,应使用代码块(一对{}就是一个代码块)

if(表达式)
{
		语句列表1;
}
else
{
		语句列表2;
}
return 0;

eg:

#include <stdio.h>
#include <string.h>

int main()
{
	int age=17;
	if(age<18)
	{
		printf("未成年\n");
	  printf("需要管教");
	}
	else if(age>=18 && age<28)
		printf("青年");
	
	return 0;
}

输出:

未成年

需要管教

if书写形式导致结果不同

悬空else(else和离它最近的if匹配)

#include <stdio.h>
#include <string.h>

int main()
{
	int a=0;
	int b=2;
	if(a==1)
		if(b==2)
			printf("hehe\n");
	    else
		    printf("haha\n");
	
	return 0;
}

输出结果为 空

C语言进阶——  分支语句和循环语句 1_switch语句


C语言进阶——  分支语句和循环语句 1_if语句_02

对比上下两图,else是第2个if对应,与第一个if无关

1、下述语句就是相当于if...else...的语句

//遇到一个return就停了

if (condition){
		return x;
}
return y;


2、

int main()
{
	int num=4;
  if(num=5) //结果会输出 num=5是赋值(=),
  所以不影响hehe输出;而==才是判断相等
  {
  	printf("hehe\n");
  }
  return 0;
}

那就写为:

涉及到判断变量是否等于常量,一般把常量写在前面 不容易出错

int num=4;
  if(5==num)  //错写为5=num会报错,5是常量
  {
  	printf("hehe\n");

练习:

输出1-100之前的奇数:

使用了while嵌套if语句:

#include <stdio.h>
#include <string.h>


int main()
{
	int b=0;
	while(b<100)
	{
		b++;
		if(1==b%2)
			printf("%d\n",b);
	}
	
	return 0;
}
int b=0;
	while(b<=100)
	{
		if(1==b%2)
			printf("%d\n",b);
    b++;
	}

根据奇数的特性书写:

int b=1;
while(b<=100)
{
	printf("%d\n",b);
  b+=2;
}
switch语句

switch语句是一种分支语句,多用于多分支的情况

简化书写编码:

#include <stdio.h>

int main()
{
	int day=0;
	scanf("%d",&day);  //输入数据使用scanf函数
	if(1==day)
		printf("星期一\n");
	else if(2==day)
		printf("星期二\n");
	else if(3==day)
		printf("星期三\n");
	else if
		printf("星期四\n");
	//...
		printf("星期天\n");

   return 0;
}

上述转化为switch语句:

case 1://指输入的常量为1时执行

break;  //用于跳出  不一定全部的case后都需要加break,根据情况设置

#include <stdio.h>

int main()
{
	int day=0;
	scanf("%d",&day);
	switch(day)
	{
		case 1:
			printf("星期一\n");
			break;  //用于跳出
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		//...
		case 7:
			printf("星期天\n");
			break;
	}
	
   return 0;
}

省略break的一些代码:

//default是当输入不符合规则时跳出,default可有可无

#include <stdio.h>

int main()
{
	int day=0;
	scanf("%d",&day);
	switch(day)
	{
		case 1:
		case 2:	
		case 3:
		case 4:
		case 6:  
			printf("工作日\n");
			break;
		case 6:
		case 7:
			printf("休息日\n");
			break;
		default:
			printf("输入错误\n");
			break;
	}
	
   return 0;
}

case后加入if语句:

int day=0;
	scanf("%d",&day);
	switch(day)
	{
		case 1:
			if(1==day)
				printf("hehe\n");
		case 2:	
		case 3:
		case 4:
		case 6:  
			printf("工作日\n");
			break;
语法结构
switch(整型表达式)   //括号内一定要定义为整型()
{
		语句项;
}

语句项为:

case 整型常量表达式:   //整型 常量表达式 可以是:1 (常量)...、1+1(表达式),不能是1.0(小数)、n(变量)也不行

语句;

switch允许嵌套使用
特例:
#include <stdio.h>

int main()
{
	int n=1;
	int m=2;
	switch(n)
	{
		case 1:m++;  //n=1,执行 m=3
		case 2:n++; //由于没有break,n就需要执行  n=2
		case 3:  //n
			switch (n)
			{
				case 1:n++; //由于n=2,不执行
				case 2:m++;n++;break; //由于n=2,执行 得 m=4,n=3 后break退出
			}
		case 4:m++; //继续执行没有break,得 m=5
			break;
		default:
			break;
	}
	printf("m=%d,n=%d\n",m,n);
	
   return 0;
}

输出结果为:

m=5,n=3

2、循环语句

while

for

do while

while循环

eg:恶性循环会一直重复返回hehe

#include <stdio.h>

int main()
{
   while(1)
	   printf("hehe\n");

   return 0;
}
while语法结构
while(表达式)
		循环语句;

举例:

while嵌套if语句

break; //停止、跳出循环,直接终止循环

continue;//终止本次循环,就是continue后的代码不会再执行,直接跳转到while语句的判断部分,进行下一次循环

#include <stdio.h>

int main()
{
	int i=1;
	while(i<=10)
	{
		if(5==i)
			break; //停止、跳出循环
		printf("%d ",i);
		i++;
	}
	
   return 0;
}
#include <stdio.h>

int main()
{
	int i=1;
	while(i<=10)
	{
		if(5==i)
			continue; //等i=5时会一直在 6、7、8、9行执行无法跳出
		printf("%d ",i);
		i++;
	}
	
   return 0;
}


getchar :(输入)获取字符的含义

puchar:(输出) ,puchar打印字符相当于printf

#include <stdio.h>

int main()
{
	int ch=getchar();\\getchar 运行结果是需要等待输入后,才可以输出
	putchar(ch);
	printf("%c\n",ch);
	
	return 0;
	
}

输出结果为:

r  //这个是getchar提示输出的
rr  //这个是putchar printf输入的

eg:

EOF—end of file:文件结束标志 \0,

scanf、getchar:都是  输入函数——>输入缓冲区
#include <stdio.h>

int main()
{
	int ch=0;
	//按ctrl+z 就会停止
	//EOF——end of file ->-1
	while((ch=getchar())!=EOF)
	{
		purchar(ch);
	}
	
	return 0;
	
}

scanf函数只读取到空格前面的字符

#include <stdio.h>

int main()
{
	int ret=0;
	char password[20]={0};
	printf("请输入密码:>");
	scanf("%s",password);//输入密码(当输入的密码为1234\n时适用),并存放在password数组中
	//缓冲区还剩余一个'\n'
	//读取一下'\n'
	getchar();
	printf("请确认(Y/N):>");
	ret=getchar();
	if(ret=='Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}

   return 0;
}

输入密码为:1234  abc\n时适用

#include <stdio.h>

int main()
{
	int ret=0;
	char password[20]={0};
	printf("请输入密码:>");
	scanf("%s",password);//输入密码,并存放在password数组中
	//缓冲区还剩余一个'\n'
	//读取一下'\n'
	while(ch=getchar())!='\n')//一直读取,等读取到'/n'才跳出
	{
		;
	}
	printf("请确认(Y/N):>");
	ret=getchar();
	if(ret=='Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}

   return 0;
}
网友评论