C语言是一种 结构化 的程序设计语言
C语言支持三种结构:
顺序结构
选择结构
循环结构
C语言有9种控制语句,可分成以下三类:
1、条件判断语句也叫分支语句:if语句、switch语句;
2、循环执行语句:do while语句、while语句、for语句;
3、转向语句:break语句、goto语句、continue语句、return语句;
一、分支语句(选择结构)
1、if else
①结构:
<1>if(表达式)
{
语句
}
<2>if(表达式)
{
语句
}
else
{
语句
}
<3>if(表达式)
{
语句
}
else if(表达式)
{
语句
}
else
{
语句
}
②如果不加{}时,if或else只执行一条语句。如:
#include <stdio.h>
int main()
{
int a = 9;
if (a == 9)
printf("perfect\n");//执行,if所控制的
else
printf("good\n");//不执行,else控制的
printf("nice\n");//执行,if else之外的语句
return 0;
}
要想控制多条语句,需要加{}
③悬空else
if else语句进行嵌套使用时,else与离它最近的if相组合,如果要让else与别的if相组合,就要使用{}分清层次。
④<1>if()
{
return x;
}
return y;
<2>if()
{
return x;
}
else
{
return y;
}
两者表示的代码相同,结果相同。
⑤在进行判断时,可以将常量写在双等的左边,变量写在右边,这样可以防止将双等写成等于而造成出错。
★if {} else {}是一条语句
2、switch
①结构:switch(整形表达式)//可以是int、long、char等类型,但float不是。
{
case(整型常量表达式):
break;
case(整型常量表达式):
break;
default:
break;
}
②break可以使代码跳出switch语句。
③default执行的是case之外的其余情况。
★switch语句 default只是入口,如果default在最后,且每一个case语句均没有break,那么最后也会执行default,只起到入口作用,程序不遇阻碍将一直顺序执行。
★如果输入1,那么结果是1 10 2 4,因为没有break,所以会顺序执行。
#include<stdio.h>
int main()
{
int input = 0;
scanf("%d",&input);
switch (input)
{
case 1:
printf("1\n");
default:
printf("10\n");
case 2:
printf("2\n");
case 4:
printf("4\n");
}
return 0;
}
二、循环语句
1、while循环
①while循环中的break,用于永久的终止循环。
②while循环中的continue,用于跳过本次循环continue后面的代码,直接返回判断部分,进行下一次循环。
③getchar得到一个字符、putchar输出一个字符、EOF是文件结束的标志(当文件读取错误或者结束时出现,EOF是-1)
④gets是得到一串字符。
当 scanf 输入一串数字后,按回车之后缓冲区就多了\n,scanf只拿走了数字,留下了\n
<1>当下一步用getchar时就会得到\n而当下一步需要得到一个数字时可以正常输入数字。
<2>当下一步用scanf时就不用考虑这个问题。
<3>scanf读字符串时遇到空格就会停止读取。
☆windows 环境按ctrl +z,getchar就返回EOF
☆scanf读字符串时要注意清空缓冲区,scanf遇到空格就不再读取数据
2、for循环
格式:for(表达式1;表达式2;表达式3)
循环语句;
表达式1:初始化;
表达式2:判断;
表达式3:调整;
①for循环中也存在break、continue,用法与while循环中的一样,但是也存在差异,for循环中的continue之后是跳到调整部分。而while循环中continue是跳到判断部分,如果调整部分是在continue之后,会陷入死循环,而调整部分在continue之前则与for循环中的相同。
②建议不在for循环体内修改循环变量,防止for循环失去控制。
③建议for语句的 循环控制变量的取值范围采用“前闭后开”的写法。
④for循环的变种:
<1>for(;;)
这种写法完全合法,省略了初始化、判断和调整部分,但是省略了判断部分容易导致死循环,因为判断部分省略时判断部分恒为正。
<2>for(x=0,y=0;x<2 && y<5; x++,++y)
这种写法也完全合法,由两个变量控制这个循环。
⑤
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
k++;
return 0;
}
此代码循环几次?
循环0次,因为判断部分是赋值语句不是判断语句,而且赋的值为0,为假,不循环。
3、do while循环
格式:do
循环语句;
while(表达式);
①do while循环中的break和continue与while循环中的很相似。
②do while循环至少执行一次。
三、goto语句
可以进行乱跳。如:
flag:
语句;
goto flag;
最常用的是,跳出多层嵌套(但只能在一个函数范围内跳出,不能跨函数)
四、循环题目
1、n的阶乘
2、1!+2!+3!+4!+....+n!
3、在一个有序数组中查找具体的某个数字n(二分查找)
4、编写代码,演示多个字符从两端移动,向中间汇聚
5、编写代码实现,模拟用户登录情景,并且只能登陆三次
★strcmp和==