《分支语句和循环语句》
文章目录
一.分支语句(选择语句):
1.if else语句
1.语句结束;
2.打印多条语句,用代码块{}
3.if else两种模式
①两整体
②多条并列
4.else和离他最近的未匹配的if匹配
5.书写习惯:5= =num(√)num= =5(×)
6.练习:判断奇数,输出1-100奇数
2.switch语句(适合多条分支)
switch(整形(int)表达式)
case(整形常量(不能是变量)表达式)
break(跳出)
default子句
3.练习
1.输入三个数,从大到小排列
①法一:
②法二:
二.循环语句:
1.while语句
1.循环中的break:跳出循环
循环中的continue:continue后的语句不再执行,回到循环入口的判断部分(存在死循环)
2.
①
②
2.for循环
1.for(初始化;判断;调整){}
2.break:……
continue:……(不存在死循环)
3.不要再for循环体内改变变量值,防止for循环失去控制。
建议循环控制变量的取值用左闭右开式。
4.for循环的初始化、调整、判断都可以省略。(但不建议省略)
但是如果判断部分被省略,他的判断条件就是:恒为真。
3.do…while循环
先斩后奏,先循环后判断,至少循环一次
4.练习
1.计算n的阶乘
2.在有序数组中找数,找7
①法一:低效
②法二:二分查找法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[] = { 0,1,2,3,4,5,6,8,9,10,11 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int left = 0;//左下标
int right = sz - 1;//右下标
int k = 7;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到了,下标是%d", k - 1);
break;
}
}
if (left > right)
printf("找不到");
return 0;
}
3.演示多个字符从两端移动,向中间汇聚
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
char arr1[] = " welcome to bite ";
char arr2[] = " ";
int left = 0;
int right = strlen(arr1) - 1;
//或者int right = sizeof(arr1) / sizeof(arr1[0])-2; 麻烦
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(100);//休息0.1秒
system("cls");//cls-清空屏幕
left++;
right--;
}
printf("%s", arr2);
return 0;
}
【注】
sizeof(arr)或者sizeof(arr[0])---------计算变量或者类型(此处为字符串arr或者单个字符)所占空间的大小,单位:字节
strlen(arr);---------#include<string.h>---------计算字符串arr长度
Sleep(1000------);--------#include<windows.h>--------休息1秒
system(“cls”);--------#include<stdlib.h>-----------清屏
4.输入密码登录,三次机会
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("&s", password);
if (strcmp(password, "123456")==0)//不能用来比较两个字符串是否相等,应该使用一个库函数strcmp
{
printf("密码正确\n");
break;
}
else
{
printf("输入错误\n");
}
}
if (i == 3)
{
printf("三次输入均错误,退出程序");
}
return 0;
}
5.求两个数的最大公约数:辗转相除法
6.打印100到200间素数《素数求解的n种境界》
试除法
①
②优化:sqrt开平方的数学库函数
【注】
sqrt(数)-------#include<math.h>-----------数开平方
③再优化:
7.分数求和:计算1-1/2+1/3-1/4+……+1/99-1/100=?
8.打印10个数中的最大值
9.打印乘法表
10.猜数游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
void menu()
{
printf("*****************************\n");
printf("**** 1.play 2.exit ****\n");
printf("*****************************\n");
}
void game()
{
int ret = 0;
int guess = 0;
ret = rand() % 100 +1;//生成随机数1--100//RAND_MAX-32767
while (1)
{
printf("猜数游戏:");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//拿时间戳来设置随机数的生成起点
do
{
menu();//进入菜单
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//进入猜数游戏
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
三.goto语句:
优点:直接跳出多层循环
关机游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
char input[] = { 0 };
system("shutdown -s -t 60");
again:
printf("请注意,你的电脑将在1分钟后关机,输入213就取消关机\n请输入:");
scanf("%s", input);
if (strcmp(input, "213") == 0)
{
system("shutdown - a");
}
else
{
goto again;
}
return 0;
}