C语言学习笔记——程序流程控制(一)

简介: C语言学习笔记——程序流程控制

5.1程序流程控制介绍

在程序中,程序运行的流程控制决定程序是如何执行的,其中主要有三大流程控制语句顺序控制、分支控制和循环控制

5.2顺序控制

5.2.1顺序控制介绍

程序从上到下逐行地执行,中间没有任何判断和跳转

5.2.2顺序控制注意事项

C中定义变量时采用合法的前向引用的原则,即在使用变量前应该申明

#include<stdio.h>
void main() {
  int a = 97;
  int b = a + 7;
  printf("b = %d", b);
}

5.3分支控制

5.3.1if-else

5.3.1.1单分支

if (条件表达式){
        执行代码块;
}

当条件表达式为真(非0)时,执行代码块;为假时,不会执行代码块

#include<stdio.h>
void main() {
  int a1 = 9;
  int b1 = 7;
  if (a1 > b1) {
    printf("ok!!\n");//a1 > b1为真,执行printf("ok!!\n")
  }
  int a2 = 9;
  int b2 = 7;
  if (a2 < b2) {
    printf("ok??\n");//a2 < b2为假,不执行printf("ok??\n");
  }
}

710deb6435794c2d8fc2f5a53761d809.png

5.3.1.2双分支

当条件表达式成立(为真),执行代码块1,否则执行代码块2

if(条件表达式){ 
      执行代码块1;
} 
else{ 
      执行代码块2; 
}
#include<stdio.h>
void main() {
  int age;
  printf("请输入你的年龄");
  scanf_s("%d", &age);
  if (age > 18) {
    printf("你大于18岁了");
  }
  else {
    printf("你还小");
  }
}

29abb719e88d428481a101c8ff6f31a7.png

5.3.1.3练习

  1. 定义两个变量int,判断二者的和,是否既能被3又能被5整除
#include<stdio.h>
void main() {
  int num1, num2, sum;
  printf("请输入两个数字:");
  scanf_s("%d%d", &num1, &num2);
  sum = num1 + num2;
  if ((sum % 3 == 0) && (sum % 5 == 0) ) {
    printf("%d和%d的和既能被三整除,也能被五整除", num1, num2);
  }
}

fbf48f2b4082472ea2bc3c7daf0dc81d.png

2.判断一个年份是否是闰年,闰年的条件是符合下面二者之一:(1)年份能被4整除, 但不能被100整除;(2)能被400整除

#include<stdio.h>
void main() {
  int year;
  printf("请输入年份:");
  scanf_s("%d", &year);
  if (((year % 4 == 0) && (year % 100 != 0)) || year % 400 == 0) {
    printf("%d是闰年", year);
  }
  else {
    printf("%d不是闰年", year);
  }
}

b595c9ccaa3f421ca71fbec57804e7a4.png

5.3.1.4多分支

if(条件表达式1){ 
       执行代码块1;
}
else if (条件表达式2){ 
       执行代码块2;
}
…… 
else{
       执行代码块n; 
}
  1. 当条件表达式1成立时,即执行代码块1
  2. 如果表达式1不成立,才去判断表达式2是否成立
  3. 如果表达式2成立,就执行代码块2
  4. 以此类推如果所有的表达式都不成立 ,则执行 else 的代码块,注意, 只能有一个执行入口
//岳小鹏参加C二级考试,他和父亲岳不群达成承诺: 
//如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone7plus; 
//当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 
//请从键盘输入岳小鹏的C二级考试,并加以判断, 输出提示
#include<stdio.h>
void main() {
  double score;
  printf("请输入成绩:");
  scanf_s("%lf", &score);
  if (score == 100) {
    printf("奖励一辆BMW");
  }
  else if (score > 80 && score <= 99) {
    printf("奖励一台iphone7plus");
  }
  else if (score >= 60 && score <= 80) {
    printf("奖励一个ipad");
  }
  else {
    printf("什么奖励也没有");
  }
}

3b529a470e534c4daa34dc680d108033.png

5.3.1.5 嵌套分支

if(){
    if(){ //被包含的可以是单分支,双分支,多分支 
    }else{ 
    }
}

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。嵌套分支不适合过多,最多不要超过3层

  1. 参加百米运动会,如果用时8秒以内进入决赛,否则提示淘汰。并且根据性别提示进入 男子组或女子组。 输入成绩和性别,进行判断。
#include<stdio.h>
void main() {
  char gender;
  double score;
  printf("请输入成绩\n");
  scanf_s("%lf", &score);
  printf("请输入性别m/f\n");
  scanf_s("%c", &gender, sizeof(gender));
  scanf_s("%c", &gender, sizeof(gender));
  if (score < 8) {
    if (gender == 'm') {
      printf("你进入男子组决赛");
    }
    else {
      printf("你进入女子组决赛");
    }
  }
  else {
    printf("你未能进入决赛");
  }
}

c8df0a2949534873a472941f4b1b0bd0.png

2,。出票系统:根据淡旺季的月份和年龄, 打印票价

4-10月

旺季:成人(18 - 60):60 儿童( < 18):半价 老人(>60):1 / 3

其他

淡季:成人:40 其他:20

#include<stdio.h>
void main() {
  int mouth, age;
  printf("请输入月份和年龄\n");
  scanf_s("%d%d", &mouth, &age);
  if (mouth >= 4 && mouth <= 10) {//判断是否在4-10月内,即旺季
    if (age < 18) {
      printf("票价为30");//小于18岁的票价
    }
    else if (age>=18 && age < 60){
      printf("票价为60");//成年人的票价
    }
    else {
      printf("票价为20");//老人的票价
    }
  }
  else {//非旺季
    if (age >= 18 && age < 60) {//成人票价
      printf("票价为40");
    }
    else {//其余人的票价
        printf("票价为20");
    }
  }
}

6f54b0395dfd4fb7a2fd2f5fc511444a.png

5.3.1.6 switch分支结构

switch(表达式){ 
        case 常量1: //当表达式值等于常量1 
        语句块1; 
        break; //退出switch 
        case 常量2; // 含义一样 
        语句块2; 
        break; 
        ... 
        case 常量n; 
        语句块n; 
        break; 
        default: //如果之前的常量都不相等,则执行default语句块
        default语句块; 
        break;
}

请编写一个程序,该程序可以接收一个字符,比如: a,b,c,d,e,f,g a表示星期一,b表示星期 二… 根据用户的输入显示相依的信息.要求使用 switch 语句完成

#include<stdio.h>
void main() {
  char day;
  printf("请输入a,b,c,d,e,f,g其中之一的字符\n");
  scanf_s("%c", &day, sizeof(day));
  switch (day) {
  case 'a'://如果输入的字符与a相等,则printf("星期一"),然后break
    printf("星期一");
    break;
  case 'b'://如果输入的字符不是a,则判断是否与b相等
    printf("星期二");
    break;
  case 'c':
    printf("星期三");
    break;
  case 'd':
    printf("星期四");
    break;
  case 'e':
    printf("星期五");
    break;
  case 'f':
    printf("星期六");
    break;
  case 'g':
    printf("星期天");
    break;
  default://如果a,b,c,d,e,f,g都没有匹配成功,则执行default里的语句
    printf("没有匹配到");
  }
}

b37d373a035f4a5480cfe3bb88641bcb.png

1.switch 语句中的 expression 是一个常量表达式,必须是一个整型(char、short, int, long 等) 或枚举类型

#include<stdio.h>
void main() {
  char num = 'a';
  switch (num) {
  case 97://等价于case'a'
    printf("ok2");
    break;
  }
}

65f90f07f6a243dbb83eb4b54f8648c6.png

2.case 子句中的值必须是常量,而不能是变量

#include<stdio.h>
void main() {
  char num = 'a';
  char num1 = 97;
  switch (num) {
  case num1://case的值不能是变量
    printf("ok2");
    break;
  }
}

3995962eb1ad45dcac756d6663652ebd.png

3.default 子句是可选的,当没有匹配的 case 时,执行 default

4.break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果没有写 break,会执行下一个 case 语句块,直到遇到 break 或者执行到 switch 结尾,这个现象称为穿透

#include<stdio.h>
void main() {
  char day;
  printf("请输入a,b,c,d,e,f,g其中之一的字符\n");
  scanf_s("%c", &day, sizeof(day));
  switch (day) {
  case 'a':
    printf("星期一\n");
    break;
  case 'b':
    printf("星期二\n");
    break;
  case 'c':
    printf("星期三\n");
    break;
  case 'd':
    printf("星期四\n");
    break;
  case 'e':
    printf("星期五\n");
    //break;
  case 'f':
    printf("星期六\n");
    break;
  case 'g':
    printf("星期天\n");
    break;
  default:
    printf("没有匹配到");
  }
}

7e81480a80524fa58fd0bebf688c9da6.png

5.3.1.7 switch练习

  1. 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 “other”
#include<stdio.h>
void main() {
  char letter;
  printf("请输入字符:");
  scanf_s("%c", &letter, sizeof(letter));
  switch (letter) {
  case 'a':
    printf("A\n");
    break;
  case 'b':
    printf("B\n");
    break;
  case 'c':
    printf("C\n");
    break;
  case 'd':
    printf("D\n");
    break;
  case 'e':
    printf("E\n");
    break;
  default:
    printf("other");
  }
}

39e327bce56f4d4081dfb457ddeba2bd.png

2.对学生成绩大于 60 分的,输出“合格”。低于 60 分的,输出“不合格”。(注:输入的成绩不能大于 100)

#include<stdio.h>
void main() {
  double score;
  printf("请输入成绩:\n");
  scanf_s("%lf", &score);
  switch ((int)(score/60)) {
  case 1:
    printf("合格");
    break;
  case 0:
    printf("不合格");
    break;
  default:
    printf("成绩有误");
  }
}

e5c13732c7a3456c85ecbf40d29ca29f.png

3.根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

//根据用于指定月份,打印该月份所属的季节。3, 4, 5 春季 6, 7, 8 夏季 9, 10, 11 秋季 12, 1, 2 冬季
#include<stdio.h>
void main() {
  int mouth;
  printf("请输入月份:\n");
  scanf_s("%d", &mouth);
  if (mouth > 0 && mouth < 13){
    switch (mouth / 3) {
    case 0:
      printf("冬季\n");
      break;
    case 1:
      printf("春季\n");
      break;
    case 2:
      printf("夏季\n");
      break;
    case 3:
      printf("秋季\n");
      break;
    case 4:
      printf("冬季 \n");
    }
  }
  else{
    printf("输入错误");
  }
}

3099ee5e502a401b9a358d6d33a06baa.png

#include<stdio.h>
void main() {
  int mouth;
  printf("请输入月份:\n");
  scanf_s("%d", &mouth);
  switch (mouth) {
  case 3:
  case 4:
  case 5:
    printf("春季\n");
    break;
  case 6:
  case 7:
  case 8:
    printf("夏季\n");
    break;
  case 9:
  case 10:
  case 11:
    printf("秋季\n");
    break;
  case 12:
  case 1:
  case 2:
    printf("冬季\n");
    break;
  default:
    printf("输入错误");
  }
}

1db58038b0bd4b42b83f1f3c475d8c71.png


相关文章
|
2月前
|
存储 自然语言处理 编译器
【C语言】编译与链接:深入理解程序构建过程
【C语言】编译与链接:深入理解程序构建过程
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
106 1
|
4月前
|
编译器 C语言 计算机视觉
C语言实现的图像处理程序
C语言实现的图像处理程序
166 0
|
2月前
|
C语言
C语言学习笔记-知识点总结上
C语言学习笔记-知识点总结上
81 1
|
2月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
3月前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
100 10
|
3月前
|
网络协议 C语言
C语言 网络编程(十一)TCP通信创建流程---服务端
在服务器流程中,新增了绑定IP地址与端口号、建立监听队列及接受连接并创建新文件描述符等步骤。`bind`函数用于绑定IP地址与端口,`listen`函数建立监听队列并设置监听状态,`accept`函数则接受连接请求并创建新的文件描述符用于数据传输。套接字状态包括关闭(CLOSED)、同步发送(SYN-SENT)、同步接收(SYN-RECEIVE)和已建立连接(ESTABLISHED)。示例代码展示了TCP服务端程序如何初始化socket、绑定地址、监听连接请求以及接收和发送数据。
|
3月前
|
C语言
C语言 网络编程(七)UDP通信创建流程
本文档详细介绍了使用 UDP 协议进行通信的过程,包括创建套接字、发送与接收消息等关键步骤。首先,通过 `socket()` 函数创建套接字,并设置相应的参数。接着,使用 `sendto()` 函数向指定地址发送数据。为了绑定地址,需要调用 `bind()` 函数。接收端则通过 `recvfrom()` 函数接收数据并获取发送方的地址信息。文档还提供了完整的代码示例,展示了如何实现 UDP 的发送端和服务端功能。
|
3月前
|
网络协议 C语言
C语言 网络编程(十)TCP通信创建流程---客户端
在TCP通信中,客户端需通过一系列步骤与服务器建立连接并进行数据传输。首先使用 `socket()` 函数创建一个流式套接字,然后通过 `connect()` 函数连接服务器。连接成功后,可以使用 `send()` 和 `recv()` 函数进行数据发送和接收。最后展示了一个完整的客户端示例代码,实现了与服务器的通信过程。