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. 判断一个数是否为奇数
  2. 输出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循环时一些建议

  1. 不可在for循环体内修改循环变量,防止for循环失去控制。
  2. 建议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;
}
  1. for循环的初始化,调整,判断 都可以省略,但是如果for循环的判断部分被省略,则判断条件恒为真。
  2. 如果不是非常熟练,建议大家不要随便省略。

do while循环

#include <stdio.h>

int main() {
    int i = 1;
    do{
        printf("%d\n",i);
        i++;
    }
    while (i<=10);
    return 0;
}

do while语句循环至少执行一次,使用的场景有限,所以不经常使用。

练习

  1. 计算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. 计算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;
}

  1. 在一个有序数组中查找具体的某个数字。编写 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;
}

  1. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,密码正确提示登录成功,如果三次都输入错误,则退出程序)
#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;
}

posted @ 2022-02-10 01:09  玖丶Diana  阅读(75)  评论(0)    收藏  举报