⽬录
- if语句
- 关系操作符
- 条件操作符
- 逻辑操作符:&& , || , !
- switch语句
- while循环
- for循环
- do-while循环
- break和continue语句
- 循环的嵌套
- goto语句@TOC
五、switch语句
switch等价于if…else语句
如下为基本结构
#include<stdio.h>
int main()
{
int a=0;
scanf("%d",&a);
switch (a)
{
case 0:
printf("输入的是0");
case 2:
printf("输入的是2");
case 3:
printf("输入的是3");
}
return 0;
}
a等于几,就从哪个case进入。
注意:switch中的a必须为整型表达式,所以不能为double这种类型,可以为字符型,因为字符存储是对应的ASILL值。
case后必须要有空格,且空格后只能为一个整型常量表达式,不能为a,b这种变量。
5.1break
switch中含有break,会直接跳出switch语句
但若没有break,则继续往后运行
#include<stdio.h>
int main()
{
int a=0;
scanf("%d", &a);
switch (a)
{
case 0:
printf("输入的是0\n");
case 2:
printf("输入的是2\n");
case 3:
printf("输入的是3\n");
}
return 0;
}
有个break,那么就只会运行一个case了
#include<stdio.h>
int main()
{
int a=0;
scanf("%d", &a);
switch (a)
{
case 0:
printf("输入的是0\n");
break;
case 2:
printf("输入的是2\n");
break;
case 3:
printf("输入的是3\n");
break;
}
return 0;
}
另外,如果有时多个case表达的意思一样,还可以简写。
#include<stdio.h>
int main()
{
int a=0;
scanf("%d", &a);
switch (a)
{
case 0:
case 2:
printf("输入的是2或0\n");
break;
case 3:
printf("输入的是3\n");
break;
}
return 0;
}
5.3default
如果输入的值不是case中含有的值就会走default语句
#include<stdio.h>
int main()
{
int a=0;
scanf("%d", &a);
switch (a)
{
case 0:
case 2:
printf("输入的是2或0\n");
break;
case 3:
printf("输入的是3\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
还有,default与case的顺序都是随意,谁先谁后都无所谓的。
六.while循环
while(表达式)
语句;
若要循环多条语句,可以用{}来执行;
6.1实践
练习:在屏幕上打印 1~100的值,并计算它们的和。
#include<stdio.h>
int main()
{
int a = 1;
int sum = 0;
while (a <= 100)
{
printf("%d ", a);
sum = sum + a;
a++;
}
printf("\nsum=%d", sum);
return 0;
}
输⼊⼀个正的整数,逆序打印这个整数的每⼀位 例如: 输⼊:1234,输出:4 3 2 1 输⼊:521,输出:1 2 5.
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
while (a != 0)
{
printf("%d ", a % 10);
a = a / 10;
}
return 0;
}
这道题,只需用%来求个位数,再用/来去掉个位数,就可以做了,最后a会变为0。
七.for循环
7.1语法
for(表达式1;表达式2;表达式3)
语句;
其中表达式1为变量的初始化,表达式2为循环条件的判断,表达式3为循环变量的调整
7.2实践
练习:在屏幕上打印 1~100的值,并计算它们的和。
#include<stdio.h>
int main()
{
int a = 1;
int sum = 0;
for(a=1;a<=100;a++)
{
printf("%d ", a);
sum = sum + a;
}
printf("\nsum=%d", sum);
return 0;
}
由此可见,while与for循环相比,for循环把初始化,条件判断,变量调整更加紧密的联系到了一起,所以说,for循环往往要比while用的要多。
八.do-while循环
8.1语法
do
语句;
while(表达式);
先做一遍循环,在判断是否满足循环条件,满足就继续循环,所以说,do-while循环要比前两个循环特殊一点,它的执行循环次数总是与判断条件次数一样,不像前两个,总是判断条件次数比循环次数一次。
8.2实例
练习:在屏幕上打印 1~100的值,并计算它们的和。
#include<stdio.h>
int main()
{
int a = 1;
int sum = 0;
do
{
printf("%d ", a);
sum = sum + a;
a++;
} while (a <= 100);
printf("\nsum=%d", sum);
return 0;
}
输⼊⼀个正整数,计算这个整数是⼏位数? 例如: 输⼊:1234 输出:4 输⼊:12 输出:2
#include<stdio.h>
int main()
{
int a = 0;
int count = 0;
scanf("%d", &a);
do
{
a = a / 10;
count++;
} while (a);
printf("%d", count);
return 0;
}
使用do-while,相比for,while循环的优点就是循环至少执行了一次,所以当a等于0的时候也能判断出是一位数。
九.break与continue语句
9.1break描述
遇到break直接跳出一层循环
#include<stdio.h>
int main()
{
int a = 1;
for(a=1;a<=10;a++)
{
if(a==5)
break;
printf("%d ", a);
}
return 0;
}
例如如上代码,只会输出1 2 3 4
9.2continue描述
遇到continue会直接跳过continue后面的代码,直接跳到循环条件。
#include<stdio.h>
int main()
{
int a = 1;
for(a=1;a<=10;a++)
{
if(a==5)
continue;
printf("%d ", a);
}
return 0;
}
如上,会输出1 2 3 4 6 7 8 9 10
十.循环的嵌套
找出100~200之间的素数,并打印在屏幕上。 注:素数⼜称质数,只能被1和本⾝整除的数字。
#include<stdio.h>
int main()
{
int a = 1,j;
for (a = 100; a <= 200; a++)
{
int flag = 0;
for(j=2;j<=a-1;j++)
{
if (a % j == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
printf("%d ", a);
}
return 0;
}
要判断一个数n是否是素数,只需把2到n-1,分别去整除n就可以了,还有如何判断是不是全部数无法整除而跳出的循环,只需用一个flag即可,用来区分是break跳出的(不是素数)还是所有j无法整除跳出的(是素数)
十一.goto语句
goto哪里就跳到哪里
change:
printf("hehe");
goto change;
如上,goto change就会跳到change,所以会一直打印hehe
11.1goto语句的玩法:关机程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char input[20] = { 0 };
int get;
again:
system("shutdown -s -t 60");//60秒后关机
printf("请注意哈,真的请注意,您的电脑或者手机将在一分钟内关机,目前只有一个解决方法,");
printf("也就是输入我是猪,为了不让小的关机,请输入:");
scanf("%s", input);
get = strcmp(input, "我是猪");//对比是否相同,相同返回0
if (get == 0)
system("shutdown -a");//取消关机
else
goto again;
return 0;
}
读者可以用这个代码去捉弄自己的好朋友哦。当且仅当输入“我是猪”才能取消关机。
十二.综合应用:猜数字游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("**************\n");
printf("****1.play****\n");
printf("****0.exit****\n");
printf("**************\n");
}
void game()
{
printf("你有五次猜的机会,小心哦\n");
int get = rand()%100+1;//产生的一个1到100的随机数
for (int i = 4;;i--)
{
printf("请输入你要猜的数字:<");
int guess;
scanf("%d", &guess);
if (guess > get)
printf("猜大了\n");
else if (guess < get)
printf("猜小了\n");
else
{
printf("恭喜你,猜对了\n");
printf("你真厉害,你还要玩吗\n");
break;
}
if (i >= 1)
{
printf("你还有%d次机会\n", i);
}
else
{
printf("你输了哦,五次机会都被你用完了,还没有猜出来\n");
printf("正确的数字是:%d\n", get);
printf("你还要来吗?\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));//辅助产生随机数的
int input = 1;
do
{
menu();
printf("请选择:<");
scanf("%d", &input);
switch (input)
{
case 1:
printf("开始猜数字游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
还是挺好玩的,放在这里了哦😊😊😊😊。