• C【分支语句和循环语句】


    1.if语句

    1. //多分支
    2. if(表达式1)
    3. 语句1;
    4. else if(表达式2)
    5. 语句2;
    6. else
    7. 语句3;

    如果表达式的结果为真,则语句执行。 在C语言中如何表示真假? 0表示假,非0表示真。

    1. #include
    2. int main()
    3. {
    4. if(表达式)
    5. {
    6. 语句列表1
    7. }
    8. else
    9. {
    10. 语句列表2
    11. }
    12. return 0;
    13. }

    1.1 悬空else

    1. //适当的使用{}可以使代码的逻辑更加清楚。
    2. //代码风格很重要
    3. #include
    4. int main()
    5. {
    6. int a = 0;
    7. int b = 2;
    8. if(a == 1)
    9. {
    10. if(b == 2)
    11. {
    12. printf("hehe\n");
    13. }
    14. }
    15. else
    16. {
    17. printf("haha\n");
    18. }

    else的匹配:else是和它离的最近的if匹配的。

    2.switch语句

    1. #include
    2. int main()
    3. {
    4. int day = 0;
    5. switch(day)
    6. {
    7. case 1
    8. printf("星期一\n");
    9. break;
    10. case 2:
    11. printf("星期二\n");
    12. break;
    13. case 3:
    14. printf("星期三\n");
    15. break;
    16. case 4:
    17. printf("星期四\n");
    18. break;
    19. case 5:
    20. printf("星期五\n");
    21. break;
    22. case 6:
    23. printf("星期六\n");
    24. break;
    25. case 7:
    26. printf("星期天\n");
    27. break;
    28. }
    29. return 0;
    30. }

    优化

    1. #include
    2. //switch代码演示
    3. int main()
    4. {
    5. int day = 0;
    6. switch(day)
    7. {
    8. case 1
    9. case 2:
    10. case 3:
    11. case 4:
    12. case 5:
    13. printf("weekday\n");
    14. break;
    15. case 6:
    16. case 7:
    17. printf("weekend\n");
    18. break;
    19. }
    20. return 0;
    21. }

    2.1 default子句

    在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

    1. #include
    2. int main()
    3. {
    4. int n = 1;
    5. int m = 2;
    6. switch (n)
    7. {
    8. case 1:
    9. m++;
    10. case 2:
    11. n++;
    12. case 3:
    13. switch (n)
    14. {//switch允许嵌套使用
    15. case 1:
    16. n++;
    17. case 2:
    18. m++;
    19. n++;
    20. break;
    21. }
    22. case 4:
    23. m++;
    24. break;
    25. default:
    26. break;
    27. }
    28. printf("m = %d, n = %d\n", m, n);
    29. return 0;
    30. }

    3.while循环

    3.1 while中的break

    1. /*
    2. break:跳出本次循环
    3. while中的break是用于永久终止循环的
    4. */
    5. int c = 0;
    6. while (c <= 10)
    7. {
    8. if (c == 5)//等于5的时候跳出
    9. break;
    10. printf("%d", c);//01234
    11. c++;
    12. }
    13. printf("\n========");

    3.2 while中的continue

    1. /*
    2. continue:跳出本次循环,后面的代码不在执行
    3. 而是直接跳转到while语句的判断部分,进行下一次循环入口判断
    4. */
    5. int d = 0;
    6. while (d <= 10)
    7. {
    8. if (d == 5)//等于5的时候跳出
    9. continue;
    10. printf("%d\n", d);//01234死循环
    11. d++;
    12. }
    13. printf("========");
    14. int e = 0;
    15. while (e <= 10)
    16. {
    17. e++;
    18. if (e == 5)//等于5的时候跳出
    19. continue;
    20. printf("%d", e);//1234
    21. }
    22. printf("========");
    23. return 0;

    3.3 其他

    1. //代码什么意思?
    2. //代码1
    3. #include
    4. int main()
    5. {
    6. int ch = 0;
    7. while ((ch = getchar()) != EOF)
    8. putchar(ch);
    9. return 0;
    10. }
    11. 这里的代码适当的修改是可以用来清理缓冲区的.
    12. //代码2
    13. #include
    14. int main()
    15. {
    16. char ch = '\0';
    17. while ((ch = getchar()) != EOF)
    18. {
    19. if (ch < ‘0’ || ch > ‘9’)
    20. continue;
    21. putchar(ch);
    22. }
    23. return 0;
    24. }
    25. //这个代码的作用是:只打印数字字符,跳过其他字符的、
    1. //int ch 是因为 getchar 函数获取的是 ascll 不是字符!!!
    2. /*int ch = getchar();
    3. putchar(ch);
    4. printf("%c\n", ch);*/
    5. //int ch = 0;
    6. //EOF-- end of file -> 文件结束标志
    7. //while ((ch = getchar()) != EOF) {//只要不输出EOF就不会跳出
    8. // putchar(ch);
    9. //}
    10. int ret = 0;
    11. int ch = 0;
    12. char password[20] = { 0 };
    13. printf("输入密码:");
    14. scanf("%s", password);//此时缓冲区;password\n
    15. //此时缓冲区还剩余一个'\n'
    16. //读取一下'\n'
    17. //getchar();
    18. while ((ch = getchar()) != '\n') {
    19. }
    20. printf("请确认(y/n)");
    21. //此时ret输出:10-->获取了输入流中的回车键
    22. ret = getchar();//y/n
    23. if (ret == 'y') {
    24. printf("输入成功");
    25. }
    26. else {
    27. printf("输入失败");
    28. }

    4.for循环

    4.1 for循环中的break和continue

    1. int b = 0;
    2. while (b <= 10) {
    3. if (b == 5) {
    4. continue;
    5. }
    6. printf("b:%d", b);//01234
    7. b++;
    8. }
    9. int c = 0;
    10. for (c = 1;c < 10;c++) {
    11. if (c == 5) {
    12. break;
    13. }
    14. printf("c:%d", c);//12346789
    15. }
    16. return 0;

    4.2 for语句的循环控制变量

    1. int i = 0;
    2. //前闭后开的写法
    3. for(i=0; i<10; i++)
    4. {}
    5. //两边都是闭区间
    6. for(i=0; i<=9; i++)
    7. {}

    4.3 for循环变种

    1. #include
    2. int main()
    3. {
    4. //代码1
    5. for (;;)
    6. {
    7. printf("hehe\n");//死循环
    8. }
    9. return 0;
    10. }
    11. int main() {
    12. int a = 0;
    13. int b = 0;
    14. for (;a < 10;a++) {
    15. for (;b < 10;b++) {
    16. //这里就打印10个,因为当b跳出的时候b=10,再一次要进来则还是10,故进不来
    17. printf("hehe");
    18. }
    19. }
    20. printf("==============");
    21. //代码2
    22. int i = 0;
    23. int j = 0;
    24. //这里打印多少个hehe?
    25. for (i = 0; i < 10; i++)
    26. {
    27. for (j = 0; j < 10; j++)
    28. {
    29. printf("hehe\n");
    30. }
    31. printf(".....");
    32. }
    33. }
    34. int main() {
    35. //代码4-使用多余一个变量控制循环
    36. int x, y;
    37. for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
    38. {
    39. printf("hehe\n");//输出2个
    40. }
    41. return 0;
    42. }

    4.5 注意点

    1. //请问循环要循环多少次?
    2. #include
    3. int main()
    4. {
    5. int i = 0;
    6. int k = 0;
    7. for(i =0,k=0; k=0; i++,k++)
    8. k++;
    9. return 0;
    10. }

    5.do..while循环

    5.1 do while循环中的break和continue

    1. #include
    2. int main()
    3. {
    4. int i = 1;
    5. do
    6. {
    7. if (5 == i)
    8. continue;
    9. printf("%d\n", i);//1234
    10. } while (i < 10);
    11. return 0;
    12. }
    13. #include
    14. int main()
    15. {
    16. int i = 10;
    17. do
    18. {
    19. if (5 == i)
    20. break;
    21. printf("%d\n", i);//10
    22. } while (i < 10);
    23. return 0;
    24. }

    6.练习

    1. 计算 n的阶乘

    1. int main() {
    2. int i = 0;
    3. int n = 0;
    4. int result = 1;
    5. scanf("%d", &n);
    6. for (i = 1;i <= n;i++) {
    7. result = n * i;
    8. printf("%d", i);
    9. }
    10. return 0;
    11. }

    2. 计算 1!+2!+3!+……+10!

    1. int main() {
    2. int n = 0;
    3. int result = 1;
    4. int sum = 0;
    5. for (n = 1;n <= 10;n++) {
    6. result = result * n;
    7. sum += result;
    8. }
    9. printf("sum=%d\n", sum);
    10. return 0;
    11. }

    3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)

    1. int main() {
    2. int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    3. int k = 7;
    4. int i = 0;
    5. //数组长度
    6. int sz = sizeof(arr) / sizeof(arr[0]);
    7. for (i = 0;i < sz;i++) {
    8. if (k == arr[i]) {
    9. printf("找到了,下标为:%d", i);
    10. break;
    11. }
    12. }
    13. return 0;
    14. }
    15. int main() {
    16. int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    17. int k = 7;
    18. int i = 0;
    19. //数组长度
    20. int sz = sizeof(arr) / sizeof(arr[0]);
    21. for (i = 0;i < sz;i++) {
    22. if (k == arr[i]) {
    23. printf("找到了,下标为:%d", i);
    24. break;
    25. }
    26. }
    27. return 0;
    28. }

    1. int main()
    2. {
    3. int arr[] = {1,2,3,4,5,6,8,9,10,11};
    4. int k = 7;
    5. int sz = sizeof(arr)/sizeof(arr[0]);//计算元素个数
    6. int left = 0;//左下标
    7. int right = sz-1;//右下标
    8. while(left<=right)
    9. {
    10. int mid = (left+right)/2;
    11. if(arr[mid] > k)
    12. {
    13. right = mid-1;
    14. }
    15. else if(arr[mid] < k)
    16. {
    17. left = mid+1;
    18. }
    19. else
    20. {
    21. printf("找到了,下标是:%d\n", mid);
    22. break;
    23. }
    24. }
    25. if(left>right)
    26. {
    27. printf("找不到\n");
    28. }
    29. return 0;
    30. }

    4. 编写代码,演示多个字符从两端移动,向中间汇聚。

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. //
    7. //welcome to bit!!!!!!
    8. //####################
    9. //w##################!
    10. //we################!!
    11. //wel##############!!!
    12. //...
    13. //welcome to bit!!!!!!
    14. //
    15. //char arr[] = "abc";
    16. //[a b c \0]
    17. // 0 1 2 3
    18. //4-2
    19. char arr1[] = "welcome to bit!!!!!!";
    20. char arr2[] = "####################";
    21. int left = 0;
    22. //这里arr[0]-2:是因为,下面的实际长度下标值为:2=4-2
    23. // [a b c \0]
    24. // 0 1 2 3
    25. //int right = sizeof(arr1)/sizeof(arr1[0])-2;//err
    26. //使用strlen记得导入[#include]
    27. int right = strlen(arr1)-1;
    28. while(left<=right)
    29. {
    30. arr2[left] = arr1[left];
    31. arr2[right] = arr1[right];
    32. printf("%s\n", arr2);
    33. //休息一秒
    34. //#include
    35. Sleep(1000);
    36. //#include
    37. system("cls");//执行系统命令的一个函数-cls - 清空屏幕
    38. left++;
    39. right--;
    40. }
    41. printf("%s\n", arr2);
    42. return 0;
    43. }

    5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

    1. #include
    2. int main()
    3. {
    4. int i = 0;
    5. char password[20] = { 0 };
    6. for (i = 0; i < 3; i++)
    7. {
    8. printf("请输入密码:>");
    9. scanf("%s", password);
    10. if (strcmp(password, "123456") == 0)//== 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
    11. {
    12. printf("登录成功\n");
    13. break;
    14. }
    15. else
    16. {
    17. printf("密码错误\n");
    18. }
    19. }
    20. if (i == 3)
    21. printf("三次密码均错误,退出程序\n");
    22. return 0;
    23. }

  • 相关阅读:
    【开源】基于Vue和SpringBoot的智能教学资源库系统
    Chrome vs Firefox 性能之争,到底哪家强?
    【Spring Cloud】项目优化:如何确保Redis延迟队列中数据能够被正确消费
    安装黑群晖不求人,arpl在线编译安装群晖教程
    Linux-进程调度(CFS)
    day59
    thingsboard3.4版本之OTA升级
    Java的进化之路走到了尽头
    c++编程实例
    【手把手反内卷】开创全新AI多模态任务一视听分割:代码实践、优化教程(二)
  • 原文地址:https://blog.csdn.net/m0_63077733/article/details/132888168