C语句可分为以下五类
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句
控制语句可以分为以下三类:
1.分支语句(条件判断语句):if语句,switch语句。
2.循环语句:do while while for
3.转向语句:break,goto,continue,return
分支语句
if语句(语法结构)
语法结构:
if(表达式)
if(表达式)
语句1;
else
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
语法风格很重要!else只与最近的if或else if 对应
if(age<18)
{
printf("未成年\n");
}
///
if(age<18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
///
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else
{
printf("老寿星\n");
}
}
if括号中的表达式成立了才能进入该语句,当出现赋值语句或类似a-b,则当括号的值为真时执行if,为假时不执行。
if if 分开写时都进去
if(a=3)表达式为真,if(a=0)为假
易错点:
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
什么都不打印,因为第一个if没进去。
在书写判断语句时尽量将数字放在左侧:5==a;因为赋值语句中数字只能在右侧,这样写容易发现错误。
switch语句
switch语句中可以使用break;if语句无法使用break;
switch(整型表达式)当判断结果取决于某个变量的值时,使用switch比if方便。
switch表达式支持的类型:
基本结构
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期天\n");
break;
}
当某个变量的值判断条件是>=值的情况下得到的判断结果一样,可以用以下方法
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
当while循环中嵌套switch语句时break只能跳出单前代码块,无法直接跳出while;while循环嵌套if时一个break就可以跳出while;
default:当与case都不匹配时使用,default: printf(“输入错误”); break;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0; }
打印出的m为5,n为3;
循环语句
while
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0; }
break
遇到break直接跳出当前代码块,如果是在if中的break直接跳出while循环
countinue
在for循环中直接跳到for的调整部分再去判断部分
while循环的判断部分,为赋值语句不是0时就是死循环,赋值表达式也有值
getchar
返回类型为int即对应字符的ASCLL值,不需要参数
尽量使用时用int int ch=getchar();
putchar()打印对应字符
#include <stdio.h>
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < ‘0’ || ch > ‘9’)
continue;
putchar(ch);
}
return 0; }
表示只打印数字字符不打印其他字符
for循环
分为初始化,判断,调整三个部分
进入for循环前要初始化,进入之后先看判断部分,完成代码块后进入调整部分再进行判断;
对比while和for
int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
printf("hehe\n");
i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++) {
printf("hehe\n");
}
break和countinue在for循环中
break直接跳出循环;countinue跳到调整部分再去判断部分
建议:for采用前闭后开的写法
for循环的变种:
该循环是死循环
#include <stdio.h>
int main()
{
//代码1
for(;;)
{
printf("hehe\n");
}
//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题
当没有初始化部分时,该变量就会一直累加
当判断部分是赋值语句时:判断部分为0时不会循环
没有判断部分的话就是死循环
没有调整部分死循环
do while循环
do{ }while( );
当需要循环至少执行一次时使用
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0; }
do while 循环中的continue
int main()
{
int i = 5;
do
{
if (5 == i)
continue;
printf("%d\n", i);
} while (i < 10);
return 0;
}
当遇到continue时,直接跳到while判断部分之后重新进入循环
确认密码程序
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);//123456
int tmp = 0;
while ((tmp = getchar()) != '\n')
{
;
}
printf("请确认密码(Y/N):>");
int ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
}
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
//
while (scanf("%d", &ch) != EOF)
{
printf("%d ", ch);
}
return 0
多次输入程序