分支语句和循环语句
分支语句
if
1.如下输入代码时,输出结果为3,因为在判断5<x<10时,由于5>3,此判断5<x结果为假,这条语句会变为0<10,由于0<10,结果为真,所以输出x,在写代码时,避免这种错误语法,可以活用&&/||代替
int main()
{
int x=3;
if(5<x<10)
printf("%d",x);
return 0;
}
2.如果if需要控制多条语句,需要用{}括起来,否则会形成语法错误,导致else找不到与之匹配的if语句 ; (一对{}为一个代码块)
#include<stdio.h>
int main()
{
int a=3;
if(a==3)
printf("a==3");
printf("right");
else
printf("error");
return 0
}
3.悬空else:在如下代码中,运行后会没有输出结果,这是因为在这里else语句与离他最近的if(b==4)语句结合,导致第一个if语句结束后,直接返回;
#include<stdio.h>
int main()
{
int a=3,b=4;
if(a!=3)
if(b==4)
printf("b==4");
else
printf("error");
return 0;
}
switch
switch语法:
int main()
{
switch(整形表达式)
{
case:整型常量表达式;
语句;
}
}
在switch语句中无法直接实现分支,需要搭配break使用才能实现分支效果
每个switch语句中只能出现一条default子句
循环语句
while
break:跳出循环;用于永久终止循环
continue:continue后面的代码不再实现,进行下一个循环 ;用于终止本次循环直接跳转到while语句判断部分
#include <stdio.h>
#include <stdlib.h>
int main()
{
//代码1
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d",n);
}
//代码2
int ret=0;
char password[20]={0};
printf("请输入:");
scanf("%s",password)
printf("确认(Y/N):");
ret=getchar();
if(ret=='Y')
{
printf("right");
}
else
{
printf("error");
}
}
此时想要结束循环可输入ctrl+z,这里的scanf("%d",&n)!=EOF与~scanf("%d",&n)类似
请注意:输入password时,会先存入缓冲区,此时scanf会从缓冲区里取走需要的数据,如:123\n(这里的\n表示回车),会取走123,但是\n会留在缓冲区,后面的getchar()会取走\n,导致最后的结果输出的是"error",此时在scanf("%s",password)后加一个getchar()可以解决这个问题
for
语法:
for(表达式1;表达式2;表达式3)
{循环语句}
表达式1为初始化部分,用于初始化循环变量,表达式2为条件判断部分,用于判断循环时候终止,表达式3为调整部分,用于循环条件的调整
注意:for循环的初始化、判断、调整都可以省略,但是for循环没有判断终止,会导致死循环
do while
循环体至少执行一次
goto语句
c语言中的跳转语句,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环
关机程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char input[20]={0};
system("shutdown -s -t 60");
again:
printf("输入no取消关机");
scanf("%s",input);
if(strcmp(input,"no")==0)
{
system("shutdown -a")
}
else
{
goto again;
}
return 0;
}
判断素数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
int i=0;
int j=0;
int count=0;
for(i=1;i<=100;i+=2)
{
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
break;
}
}
if(j>sqrt(i))
{
count++;
printf("%d ",i);
}
}
return 0;
}