C语言学习笔记 分支和循环1
分支语句
- if
- switch
循环语句
- while
- for
- do while
什么是语句
c语言中由一个分号;隔开的就是一条语句
if语句
#include <stdio.h>
int main() {
int age = 10;
//int age = 25;
//int age = 45;
//int age = 99;
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 28)
printf("青年\n");
else if (age >= 28 && age < 50)
printf("壮年\n");
else
printf("老年\n");
return 0;
}
#include <stdio.h>
int main() {
int age = 10;
//int age = 25;
//int age = 45;
//int age = 99;
if (age < 18)
printf("未成年\n");
else {
if (age >= 18 && age < 28)
printf("青年\n");
else if (age >= 28 && age < 50)
printf("壮年\n");
else
printf("老年\n");
}
return 0;
}
else要符合就近原则,与最近的if匹配
#include <stdio.h>
int main() {
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
在写代码时,涉及到常量与变量比较,将常量放在变量左边更容易判断且更优
#include <stdio.h>
int main() {
int a = 5;
// if ((a = 6)) {
// printf("Hello, World!\n");
// }
if (5 = a)
printf("hehe\n");
return 0;
}
练习
- 判断一个数是否为奇数
- 输出1-100之间的奇数
#include <stdio.h>
int main() {
int i = 0;
while (i < 100){
if(1 == i%2)
printf("%d是奇数\n",i);
i++;
}
return 0;
}
switch语句
switch语句也是一种分支语句。常常用于多分支的情况
#include <stdio.h>
int main() {
int day;
scanf("%d\n",&day);
switch (day) {
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期7\n");
break;
default:
printf("*\n");
}
return 0;
}
switch 后面必须是整型表达式,case 后面必须是整型常量表达式。
在switch语句中,我们没法直接实现分支,搭配使用才能实现真正的分支。
循环语句
while语句
在while循环语句中,break的作用是停止后期的所有循环,直接终止循环,所以在while中的break是用于永久终止循环的;而continue是用于终止本次循环,也就是本次循环中continue后边的代码不会再执行,跳转到while语句的判断部分,进行下一次循环的入口判断。
#include <stdio.h>
int main() {
int ret;
int ch;
char password[20];
printf("请输入密码:>");
scanf("%s", password);//输入密码,并存放在password数组中
//缓冲区还剩余一个 \n
//读取一下 \n
while ((ch = getchar()) != '\n') {
}
printf("请确认(Y/N):>");
ret = getchar();//Y/N
if (ret == 'Y') {
printf("确认成功\n");
} else {
printf("放弃确认\n");
}
return 0;
}
for循环
#include <stdio.h>
int main() {
// 初始化 判断 调整
for (int i = 0; i < 5; ++i) {
printf("%d\n",i);
}
return 0;
}
break和continue在for循环中和在while循环中的意义是一样的,但还是会有一些差异。
在使用for循环时一些建议
- 不可在for循环体内修改循环变量,防止for循环失去控制。
- 建议for语句的循环控制变量的取值采用"前闭后开区间"写法。
一些for循环变种
#include <stdio.h>
int main() {
//变种1
for (;;) {
printf("hehe\n");
}
//变种2
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++) {
printf("heh\n");
}
return 0;
}
- for循环的初始化,调整,判断 都可以省略,但是如果for循环的判断部分被省略,则判断条件恒为真。
- 如果不是非常熟练,建议大家不要随便省略。
do while循环
#include <stdio.h>
int main() {
int i = 1;
do{
printf("%d\n",i);
i++;
}
while (i<=10);
return 0;
}
do while语句循环至少执行一次,使用的场景有限,所以不经常使用。
练习
- 计算n的阶乘
#include <stdio.h>
int main() {
int n,i,rel = 1;
scanf("%d",&n);
for (i = 1; i <= n; i++) {
rel=i*rel;
}
printf("%d",rel);
return 0;
}
- 计算1!+2!+3!+......+10!
#include <stdio.h>
int main() {
int i,rel1, rel2 = 0;
for (int j = 1; j <= 10; ++j) {
for (i = 1,rel1 = 1; i <= j; i++) {
rel1=i*rel1;
}
rel2+=rel1;
}
printf("%d",rel2);
return 0;
}
- 在一个有序数组中查找具体的某个数字。编写 int binsearch(int x,int v[], int n);功能:在v[0]<=v[1]<=v[2]<=......<=v[n-1]的数组中查找x。
#include <stdio.h>
int main() {
int j,length;
int arr[10] = {1,2,3,4,5,6,7,8,9};
printf("需要查找几(1-9)\n");
length = sizeof(arr)/sizeof(arr[0]);
scanf("%d",&j);
for (int i = 0; i < length; ++i) {
if(i == j)
printf("下标为%d\n",i);
}
return 0;
}
二分查找
#include <stdio.h>
//折半查找法
int main() {
int j, length;
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
printf("需要查找几(1-9)\n");
scanf("%d", &j);
length = sizeof(arr) / sizeof(arr[0]);
int left = 0;//下标左
int right = length - 1;//下标右
while (left <= right) {
if (arr[(right + left) / 2] > j) {
right = (right + left) / 2 - 1;
printf("j小于%d\n",right);
continue;
} else if (arr[(right + left) / 2] < j) {
left = (right + left) / 2 + 1;
printf("j大于%d\n",left);
continue;
} else if(arr[(right + left) / 2] == j){
printf("下标为%d\n",(right + left) / 2);
break;
}
}
return 0;
}
- 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,密码正确提示登录成功,如果三次都输入错误,则退出程序)
#include <stdio.h>
#include <string.h>
//折半查找法
int main() {
char password[20];
int i;
for (i = 0; i < 3; ++i) {
printf("请输入密码\n");
scanf("%s",password);
if (strcmp(password,"123456")==0){
printf("登陆成功\n");
break;
} else{
printf("密码错误\n");
}
}
if(i == 3){
printf("三次密码都错误,推出程序\n");
}
return 0;
}

浙公网安备 33010602011771号