C语言语句-笔记(五)

一、基础概念

1、语句

表达式后面加上分号,构成表达式语句。特殊情况为只有1个分号的语句,称空语句。

2、语句分类

(1)空语句:本身只有一个分号,在不需要执行任何任务,但语法要求出现一条完整的语句时使用。
(2)表达式语句:如:x=y+3;
(3)控制语句,包括选择语句和循环语句。

二、选择语句(分支语句)

分类:if语句和switch语句

1、 if语句

(1) 分类
① if(单分支);
② if(expression) …else…(双分支)
③ if … else if … (else if) …else(多分支)
if (表达式1) {
当表达式1为真(值非零)时执行的语句;
}
else if (表达式2) {
当表达式2为真(值非零)时执行的语句;
}

else {
当表达式1-N都不为真时执行的语句;
}
expression可以是任何能够产生整型结果的表达式,零值表示”假”,非零值表示”真”。C语言中不具备布尔类型。
if只能出现1次,else if可以出现0-N次,else可以出现0-1次。
如果{}中只有一条语句,或者一个独立的控制结构,那么可以省略该{}。
else和else if总是和最近的if配对。

(2)if语句用法
①单分支if语句

#include <stdio.h>
int main()
{
    int i=0;//--i=1
    if(i)//条件表达式,条件为真(非0),则执行,假(0)则不执行
     {
      printf("1111\n");
     }
     return 0;
}

②双分支if语句

#include <stdio.h>
int main()
{
	int iNum=0;
	while(1)//"1"为真,重复执行,非0即真
	{
        printf("请输入一个数\n");
        scanf("%d",&iNum);
        //条件判断
        if(0==iNum%2)
		  {
			printf("%d是偶数\n",iNum);
		  }
        else
		  {
			printf("%d是奇数\n",iNum);
		  }
	 }
	 return 0;
} 

③多分支if语句

#include <stdio.h>
int main()
{
	int i;
	while(1)
	{	
		printf("请输入成绩\n");
		scanf("%d",&i);
		if(i>90)
		{
			printf("成绩为A\n");
		}
		else if(i<=90 && i>80)
		{
			printf("成绩为B\n");
		}
		else if(i<=80 && i>70)
		{
			printf("成绩为C\n");
		}
		else
		{
			printf("成绩D\n");
		}
	}
	return 0;
}

2、switch case 语句

(1)概念
switch 语句是一种多路判定语句,它判断表达式的值是否与整数或字符常量列表中的某个值相匹配,若找到了相应的匹配,就会执行与常量关联的语句, 遇到break语句终止执行。不符合case语句就执行default后的语句,同样遇到break语句终止执行。default子句可以出现在语句列表的任何位置,通常放在列表末尾。
执行过程:首先计算switch(表达式)中表达式的值,然后当case后不加break;时,程序执行case标签与表达式值匹配的语句,并从该条case语句开始,一直执行直至语句列表结束;当case后加上break;时,执行完case标签与表达式值匹配的语句后,程序跳到语句列表的末尾,即跳出switch语句。
(2)编写格式

switch(表达式)
 {
	    case 1{
				语句集;
			  }
		      break;
	    case 2{...}break;
        default:
		      {
				语句集;
		      }
		break;
  }

控制表达式被当做整数处理,可以是字符,但是不能是浮点数和字符串。常量表达式必须是常量,如:3、‘A’、2+5。不允许有重复的分支。
default不一定在最后,但是如果default出现在其它case之前,其最后的break不能省略。
一般而言所有能够使用switch-case结构的场合都可以用if-else替代。
(3)示例
根据输入成绩并输出分数等级 >90:A ; >=90>80:B ; >=80>70:C; >=70>60:D;其他:不合格

#include <stdio.h>
int main()
{ 
	int iscore;
	while(1)
	{
        printf("请输入成绩\n");
        scanf("%d",&iscore);
        switch(iscore/10)
		{
		case 9:
			{
				printf("A\n");
			}
			break;
		case 8:
			{
				printf("B");
			}
			break;
		case 7:
			{
				printf("C");
			}
			break;
		case 6:
			{
	               printf("D");
			}
			break;
		default:
			{
	               printf("不合格");
			}
		}
    }
	return 0;
}

(4)注解
1)计算表达式的数据类型要与指定的case常量的数据类型匹配。
2)switch后的表达式可以包含任何变量名,也可以是常量,但结果必须是整型值。
3)case后面只能是常量(整型和字符型)。
(5)If和switch区别
If:范围性判断(线判断),条件的计算是自顶向下
switch:状态性判断(点判断)

三、循环语句

分类:for循环、while循环、do…while循环

1、for语句

(1) 编写格式
for(初始值;终止值;步长)
{
语句集;
}
S1:初始值为循环变量的初始值;
S2:终止值为循环条件,若为真则执行循环体语句块,否则退出循环;
S3:步长修改/调整循环变量的值。
程序执行过程流程图:
在这里插入图片描述
初始值在循环最开始时执行一次,之后不再执行初始值。第一次执行完初始值后,执行for循环里面的语句,然后执行步长,接着终止值作判断,满足条件,直接执行for循环里面的语句,不满足条件则跳出for循环;然后再执行步长(调整部分),如此循环,直到终止值判断不满足条件跳出for循环。
在for语句中,continue跳过循环体的剩余部分,直接回到调整部分。continue -> 步长 -> 终止值。
在while/do-while语句中,调整部分是循环体的一部分,所以continue将会把它也跳过。continue -> 计算循环控制表达式 -> …。
(2)示例
//绘制九九乘法表

#include <stdio.h>
int main()
{
	int i,j;
    for(j=1;j<10;j++)
	{
        for(i=1;i<=j;i++)
		{
            printf("%d×%d=%d\t",i,j,i*j);
		}
        printf("\n");
    }
    return 0;
}

(3)注解
for嵌套使用,可以实现画界面效果。

2、while语句

(1)while(表达式)//表达式为真,才执行语句
{
语句集;
}
–重复执行,有可能执行不到
S1:计算循环控制表达式,若为真则执行循环体语句块,否则退出循环;
S2:执行循环体语句块后,执行S1。
1)如果循环控制表达式恒为真,则构成无限循环;//break,return
2)while循环的循环体可能一次都不执行。

(2)do
{
语句集;
}while(条件表达式);
–至少执行一次,条件满足继续执行,直到条件为假,结束程序。(当型循环)
S1:执行循环体语句块;
S2:计算循环控制表达式,若为真则执行S1,否则退出循环。
(3)示例
1)重复执行,按esc退出

#include <stdio.h>
int main()
{
	char ch=0;
	int i=0;
	while(1)
	{
		printf("111\n");
		ch=getch(); 
		if(27==ch)//27为esc的ASCII码
		{
			break;//若输出为esc,则退出
		}
	}
	return 0;
}

2)重复执行,按y再回车,进行下一步,按n退出

#include <stdio.h>
int main()
{
	char ch='y';
	while(ch=='y')//while中可以是常量也可以是变量也可以是表达式
	{
		printf("111\n");
		ch=getch();
		if('n'==ch) //若输入为n,则退出
		{
			break;
		}
	}
	return 0;
}

3)至少执行一次,直到条件不满足结束循环。

#include <stdio.h>
int main()
{
	int i=0;
	do
	{
		printf("111");
	}while(1);
	return 0;
}

(4)for和while区别:
while和for语句的循环体可能一次也不执行,而do-while语句的循环体至少也要执行一次。
for:范围条件限定(循环次数)已知 while:循环条件未知

for( ;1 ;) ;相当于while(1) ;

四、其它控制语句

break; continue; goto; return;exit等

1、break语句和continue语句

(1) break语句概念
1)用于在 switch 语句中终止case,也可用于循环中突然终止循环
2)当循环中遇到 break 语句时,循环立即终止,控制权传递给循环之后的语句
3)多层循环中,break只向外跳一层
(2) continue语句概念
1)只能在循环中使用让封闭循环进行下一次迭代
2)遇到该语句时,跳过循环体中剩余的语句,控制权传递给重新初始化步骤
3)在while循环和do…while循环中,程序控制权传递给条件测试语句
4)在for循环中,continue影响循环的增量部分,然后执行条件测试
(3)示例
1)break在前,continue在后

#include <stdio.h>
int main()
{
	int i;
	for(i=0;i<10;i++)
	{
		if(i==2)
		{
			break; //结束for循环
		}
		if(i==4) 
		{
			continue;
		}
		printf("%d\n",i);
	}
	return 0;
}//运行输出 0 1

2)continue在前,break在后

#include <stdio.h>
int main()
{
	int i;
	for(i=0;i<10;i++)
	{
		if(i==2)
		{
			continue;//结束当前循环,进入下一次循环
		}
		if(i==4) 
		{
			break;
		}
		printf("%d\n",i);
	}
	return 0;
}//运行输出 0 1 3

break和continue两条语句中的任意一条出现在嵌套的循环内部,只会对最内层的循环起作用,无法对外层循环起作用。

2、goto语句

goto 语句将控制权传递给C程序中同一函数内的其他语句。
C语言是结构化语言,顺序较为严谨,故一般不用goto,会破坏结构体。

3、return语句

(1)编写格式:return expression;
(2)使用
1)表达式可选
2)return 语句用于从函数中返回
3)return 语句可带有值,该值将返回给调用程序,该语句使程序执行返回到调用函数的位置。
4)一个函数中可以使用多个return语句,但是遇到第一个return语句时返回

4、exit语句:结束函数

(1)编写格式:exit(int return_code);
(2)使用
1)exit() 用于跳出一个程序,是一个标准库函数
2)该函数的用途是立即终止程序,控制权交给操作系统

注:基于代码规范,各控制语句无论几行,都应加{}。

五、控制语句应用

1、输入一个合法的正整数,求出它是几位数;分别打印每一位数字,按逆序输出各位上的数字。

#include <stdio.h>
int main()
{
	int i,j,x,n=0;//定义i为输入变量,n为正整数位数
    while(1)
	{
		printf("请输入一个正整数\n"); 
		scanf("%d",&i);//输入一个正整数
		x=i; //x作为备用变量,值等于i初值
	   //输出正整数位数
		do
		{
			n++;
			i/=10;
		}while(i>0);
		printf("%d是%d位数\n",x,n);
	    //逆序输出	
		while(x!=0)
		{
			j=x%10;//最小位
			printf("%d\n",j);//输出最小位
			x/=10;
		}
	}
	return 0;
}

2、求1到10的阶乘和。

#include <stdio.h>
int main()
{
	int i,n,total=0,sum;//定义sum为阶乘变量,total为阶乘和变量
	while(1)
	{
		printf("请输入一个正整数\n"); 
		scanf("%d",&n);//输入一个正整数n
		for(i=1,sum=1;i<=n;i++)
		{
			sum *= i;//递推求阶乘
			total+=sum;//求阶乘和
		}
		printf("sum=%d\n",sum);//输出n的阶乘
		printf("total=%d\n",total);//输出阶乘和
	}
	return 0;
}

3、密码显示

#include <stdio.h>
#include <conio.h>

int main()
{ 
    char buf[100]={0};
	char ch=0;//保存当前字符
	int ilent=0;//当前字符串长度
    int	iMax=6;//限定输出最大长度
	int type=0;//0数字 1字母
	int isplant=1;//0 显示 1 隐藏	
	while(1)
	{
		ch=getch();
		if(ch=='\r')//回车结束
		{
			buf[ilent]='\0';
			break;
		}
		if(ch=='\b')//回删
		{    
			if(ilent>0)//长度大于0
			{			
				printf("\b \b");//删除	
				--ilent;//光标回退
				buf[ilent]='\0';			
			}			
		}
		if(ilent<iMax && ch!='\b')//限定输入长度
		{
			switch(type)	
			{
			case 0:
				{
					if(ch>='0' && ch<='9')//数值型字符
	                  	{
						if(isplant)
						{
							putchar('*');	
						}
						else
						{
							putchar(ch);//打印输出	
						}
					}
				} 
				break;	
			}
			buf[ilent]=ch;//存入数组
			ilent++;		
		}
	}
	printf("\n");
	printf("buf=%s\n",buf);//输出传入的字符串
	return 0;
}
运行输出:
输入:123456

4、猜数字游戏设计

#include <stdio.h>
#include <time.h>//time的头文件
#include <stdlib.h>//rand,irand的头文件

int main()
{ 
	int i;
    int irand=0;//随机数变量
    srand(time(0));//设置时间种子 
	while(1)
	{
		irand=rand()%100+1;//irand=rand();->为伪随机 i%4->:0,1,2,3,
        //以上为随机生成一个0到100的数
		printf("请输入一个数\n");
		scanf("%d",&i);
        printf("irand=%d",irand);
		//以上为2、输入一个数
		if(i>irand)
		{
			printf(" 大\n");
		}
		else if(i<irand)
		{
			printf(" 小\n");	
		}
		else
		{
			printf("win\n");//以上为4.游戏结束
			exit(0);//结束函数
		}
        //以上为判断(3种情况:大于,等于,小于)
	} 
    return 0; //结束程序
}

输出:
在这里插入图片描述
编辑 2020-04-20 21:03
增改 2020-10-11 11:59 增加控制语句应用部分
修改 2021-07-02 22:32 内容结构修改

注:本文旨于作为自己的学习笔记,不作他用。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值