文章目录
分支语句和循环语句
分支语句
if
语句结构
if(表达式)
语句;
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年\n");
}
else
{
printf("未成年\n");
}
return 0;
}
C语言中0表示假,1表示真。
else和最近的if匹配。
int main()
{
int confidence=1;
if(confidence)
{
return x;
}
else
{
return y;
}
return 0;
}
而当上述代码变为
if(confidence){
return x;}
return y;
则编译器不能很好识别。
比较一个变量和一个常量是否相等的时候,建议把常量放在等号的左边。
练习1:
判断奇偶
int main()
{
int num=0;
scanf("%d",&num};
if(num%2==1)
{
printf("奇数\n");
}
else
{
printf("不是奇数\n");
}
return 0;
}
练习2
输出一百内的奇数
int main()
{
int i=1;
while(i<=100)
{
if(i%2==1)
{
printf("%d",i);
}
}
return 0;
}
switch
switch常常用于多分支的情况。
比如:
输入1,输出星期一;
输入2,输出星期二;
输入3,输出星期三;
输入4,输出星期四;
输入5,输出星期五;
输入6,输出星期六;
输入7,输出星期七;
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 4:
printf("星期四\n”);
break;
case 5:
printf("星期五\n”);
break;
case 6:
printf("星期六\n”);
break;
case 7:
printf("星期七\n”);
default:
printf("错误“);
break;
}
return 0;
}
case决定入口,break决定出口。
当我们有重复的的打印可以简化
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日”);
break;
case 6:
case 7:
printf("休息日“);
break;
default:
printf("错误“);
break;
}
switch()括号内必须更整形表达式。
case后必须是整形常量表达式。
循环
while 循环
我们将if和while进行对比。
当条件满足的情况,if语句后的语句执行,否则不执行。
但这个语句只会执行一次。
当需要执行很多次时,可以使用while循环。
while(表达式)
循环语句;
while语句执行流程图
简单whle 语句
while后大括号里是循环内容
其中在while循环中,有break和contuine两种关键词。
break介绍
break在while中的作用:
在循环中只要遇到braeak,就是停止所有循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
int main()
{
int n=10;
while(n<=10)
{
if(5==n)
{
break;
}
printf("%d",n) ;
n++;
}
return 0;
}
continue
当我们把break改变成continue时候,在n的值到5时候不会改变。
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会在
执行,而是直接跳转到while语句判断部分,进行下一次循环入口判断。
int main()
{
int n=0;
while(n<=10)
{
n++;
if( 5==n)
{
comtinue;
}
printf("%d\n",n)
}
return 0;
}
当把n++提前则可避免continue所带来的影响。
getchar putchar
int main()
{
char ch=0;
ch=getchar();//等于scanf("%d",&ch);
putchar(ch);//等于printf("%c\n",ch);
return 0;
}
getchar–>输入缓冲区(拿走键盘输入的)–>输出
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
scanf在存入数据在缓存区时会拿走数据本身而保留“\n"而getchar会
读取到”\n“.
为避免有遗漏的字符干扰我们可以加入清理循环区。
while (getchar()!='\n'
{
;
}
for
for(表达式1;表达式2;表达式3)
打出从1到10;
int main()
{
int i;
for(i=1;i<=10;i++)
{
printf("%d",i);
}
return 0;
}
break
```c
int main()
{
int i;
for(i=1;i<=10;i++)
{
if(i==5)
break;
printf("%d",i);
}
return 0;
}
和在while一致,终止循环。
continue
int main()
{
int i;
for(i=1;i<=10;i++)
{
if(i==5)
continue;
printf("%d",i);
}
return 0;
}
打印时缺少五而不出循环继续打印。
循环控制变量
建议
1.不可在for循环体中修改循环变量,防止for循环失去控制。
2.建议在for循环控制变量的取值采用"前闭后开区”。
循环变种
int main()
{
for(;;;)
{
printf("hh")
}
return 0;
}
打印会一直持续。
for循环初始化,判断和调整三个部分可以省略,但缺少判断会死循环。判断恒真。
当省略了初始化
循环减少是因为在j取三后跳出循环,j的值一直是3不变导致外部循环无法进入。
do while
do
循环语句;
while(表达式);
int main()
{
int i=1;
do
{
printf("%d",i)
i++;
}while(i<=10);
return 0;
}
因运用较少所以简单描述。
例题
求5!
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
ret=ret*i:
}
return 0;
}
求 1!+2!+3!+4!+…+10!
int main()
{
int n=0;
int i=0;
int ret=1;
int sum=0;
for(n=1;n<=n;n++)
{
ret=1;
for(i=1;i<=n;i++)
{
ret=ret*i;
}
sum=sum+ret;
}
return 0;
}