一、分支语句
1、多分支语句
if else语句,if与else if的使用
代码语言:javascript复制 int main()
{
int age = 100;
if (age < 18)
printf("未成年n");
else if (age >= 18 && age < 28)
printf("青年n");
else if (age >= 28 && age < 50)
printf("壮年n");
else if (age >= 50 && age < 90)
printf("老年n");
else
printf("长寿n");
return 0;
}
if与else if的使用,if与else if使用时,如果if执行else if就不会执行。
2、悬空else
else与最近的且未匹配的if匹配
代码语言:javascript复制 int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (a == 2) //若在这加{}else就无法和这个if匹配
printf("hehen");
else
printf("hahan");
return 0;
}
3、switch语句
switch(整型表达式) { case(整型常量表达式): }
代码语言:javascript复制 int main()
{
int day = 0;
scanf("%d", &day);
switch(day) //switch括号内的必须是整型表达式
{
case 1: //case后面必须是整型常量表达式
printf("星期一n");
break;
case 2: //若1-5的内容都相同
printf("星期二n"); //case 1:
break; //case 2:
case 3: //case 3:
printf("星期三n"); //case 4:
break; //case 5:
case 4: // printf();
printf("星期四n"); // break;
break;
case 5:
printf("星期五n");
break;
case 6:
printf("星期六n");
break;
case 7:
printf("星期天n");
break;
default:
printf("输入错误n");
break;
}
return 0;
}
2.循环语句
2.1 while循环
代码语言:javascript复制 int main()
{
int i = 1;
while (i <= 10)
{
if (i == 6)
break;
printf("%d ", i);
i ;
}
return 0;
}
结论:break的作用------直接跳到结尾(只要遇到break直接终止所有循环)
代码语言:javascript复制 int main()
{
int i = 0;
while (i < 10)
{
i ;
if (i == 6)
continue;
printf("%d ", i);
}
return 0;
}
结论:continue的作用-----回到开头-----终止本次循环,即本次continue后面的语句不再执行,跳回while的判断部分
2.2 getchar()和putchar()
getchar()-----读取一个字符 putchar()-----输出/打印一个字符
代码语言:javascript复制 int main()
{
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password);
//清理缓冲区
while (getchar() != 'n')
{
;
}
//scanf读取完password后剩余一个n,若不加getchar();会直接读取n然后输出放弃确认
printf("请确认(Y/N):");
int ch = getchar();
int ret = getchar();
if (ret == 'Y')
{
printf("确认成功n");
}
else
{
printf("放弃确认n");
}
return 0;
}
2.3 for循环
代码语言:javascript复制 for(表达式1; 表达式2; 表达式3)
{
循环语句;
}
表达式1:初始化 表达式2:判读 表达式3:调整
代码语言:javascript复制 int main()
{
int i = 0;
for (i = 1; i <= 10; i )
printf("%dn", i);
return 0;
}
2.4 do…while循环
do…while()循环-----先执行再判断
代码语言:javascript复制 do
{
循环语句;
}
while(表达式); (判断)
如:
int main()
{
int i = 1;
do
{
printf("%d ", i);
i ;
}
while (i <= 10);
return 0;
}
2.5 在arr数组(有序的)中找到某个数-----二分查找
代码语言:javascript复制 int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]); //计算元素个数
int left = 0; //左下标(以中间元素的下标为标准) 数组元素 1 2 3 4 5 6 7 8 9 10
int right = sz-1; //右下标(以中间元素的下标为标准) 下标 0 1 2 3 4 5 6 7 8 9
while (left <= right) //若查找的元素存在,右下标是会比左下标大的
{
//int mid = (left right) / 2;
int mid = left (right - left) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid 1;
}
else
{
printf("找到了,下标是:%dn",mid);
break;
}
}
if (left > right) //若查找的元素不存在,左下标是会比右下标大的
printf("找不到n");
return 0;
}
2.6 编写代码,演示多个字符从两端移动,向中间汇聚
代码语言:javascript复制 int main()
{
char arr1[] = "welcome to LOL!!!!!";
char arr2[] = "###################";
int left = 0;
int right = strlen(arr1)-1;
while (right >= left)
{
arr2[left] = arr1[left]; //使arr1数组左边的元素赋给arr2左边,下同
arr2[right] = arr1[right];
printf("%sn", arr2);
Sleep(1000); //休息1秒,需引用头文件#include<windows.h>
system("cls"); //执行系统命令的一个函数-cls-清空屏幕,需引用头文件#include<stdlib.h>
left ;
right--;
}
printf("%sn", arr2);
return 0;
}
2.7 编写代码实现,模拟登陆情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次都输入错误,则退出程序)
代码语言:javascript复制 int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0; i < 3; i )
{
printf("请输入密码:");
scanf("%s", &password);
if (strcmp(password, "123456") == 0) //(password=="123456"), == 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
{
printf("登陆成功n");
break;
}
else
{
printf("密码错误n");
}
}
return 0;
}
2.8 猜数字游戏
代码语言:javascript复制 void menu()
{
printf("****************************************n");
printf("**** 1.play 0.exit ****n");
printf("****************************************n");
}
void game()
{
//1.电脑生成一个随机数-使用rand()函数--在调用rand之前,使用srand函数为伪随机数生成器种子--在srand()函数里面要放一个随机值,所以引用时间戳放进去
int ret = 0;
int guess = 0;
//拿时间戳来设置随机数的生成起点
//time_t time(time_t *timer) -时间戳的使用方法time函数(需引用time.h头文件)--time_t是它的类型,实质是long(长整型)--time_t *是指针类型
ret = rand() % 100 1;
//printf("%dn", ret);
//2.猜数字,猜大了提示你大了,......
while (1)
{
printf("请输入一个整数(1-100):n");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了n");
}
else if (guess < ret)
{
printf("猜小了n");
}
else
{
printf("恭喜你,猜对了n");
break;
}
}
}
int main()
{
int input = 0;
//srand 放在主函数,防止在game()函数里面过于频繁使用,以至于生成的随机值过于相近
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏n");
break;
default:
printf("选择错误n");
break;
}
} while (input);
return 0;
}
2.9 goto语句的应用-----一个关机程序
在cmd中输入shutdown -s -t 60,电脑会在60s后关机;输入shutdown -a 会取消。代码形式:
代码语言:javascript复制int main()
{
char input[] = { 0 };
//system()--执行系统命令
system("shutdown -s -t 60");
again:
printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就会取消关机n请输入:");
scanf("%s", input); //这里的input是数组,可以不用加&
if (strcmp(input, "我是猪") == 0) //strcmp()比较两个字符串
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
用循环形式:
代码语言:javascript复制int main()
{
char input[] = { 0 };
//system()--执行系统命令
system("shutdown -s -t 60");
while (1)
{
printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就会取消关机n请输入:");
scanf("%s", input); //这里的input是数组,可以不用加&
if (strcmp(input, "我是猪") == 0) //strcmp()比较两个字符串
{
system("shutdown -a");
break;
}
}
return 0;
}
2.10 辗转相除法求最大公约数
求两个数的最大公约数-----辗转相除法: 假如两个数a=24,b=18,先让k=a%b=6,若结果不为0,则将b的值赋给a(a=b=18),k的值赋给b(b=k=6),a%b=0,则b为他们的最大公约数
代码语言:javascript复制 int main()
{
int a = 190;
int b = 25;
int k = 0;
while (a % b) //a%b不等于0即为真,执行下面内容;a%b等于0为假,不执行
{
k = a % b;
a = b;
b = k;
}
printf("最大公约数为:%dn", b); //5
return 0;
}