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

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

5.4循环控制

5.4.1for循环控制

5.4.1.1介绍

for循环可以让代码循环进行

5.4.1.2语法

for(1.循环变量初始化;2.循环条件;4.循环变量迭代){
    3.循环操作(多条语句);
}
#include<stdio.h>
void main() {
  int i;
  for (i = 1; i <= 7; i++) {
    printf("江南江南江南丶=%d\n", i);
  }
}

b987227ed4984f74b1e31e183f52768f.png

5.4.1.3 for循环注意事项

  1. 循环条件是返回一个表示真(非0)假(0) 的表达式
  2. for(;循环判断条件;) 中的初始化和变量迭代可以不写(写到其它地方),但是 两边的分号不能省略
#include<stdio.h>
void main() {
  int i=1;
  for (; i <= 7; ) {
    printf("江南江南江南丶=%d\n", i);
    i++;
  }
}

3.循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开, 循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开

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

67571448a2f04f8a97d0c37e59fe8713.png

5.4.1.4 for循环练习

  1. 打印1~100之间所有是9的倍数的整数的个数及总和
#include<stdio.h>
void main() {
  int num;
  for (num = 1; num <= 100; num++) {
    if (num % 9 == 0) {
      printf("%d是9的倍数\n", num);
    }
  }
}

7e0cf8b317ab488980db2833eebbaeb8.png2.完成下面的表达式输出

0c04bfedfd8443f7a9a2ffee01ee679c.png

#include<stdio.h>
void main() {
  int num1, num2, sum;
  printf("请输入一个整数:");
  scanf_s("%d", &num1);
  for (num2 = 0; num1 >=0 ; num1--, num2++) {
    sum = num1 + num2;
    printf("%d+%d=%d\n", num1, num2, sum);
  }
}

1cdf8aaa97954b068840830087babeb2.png

5.4.2 while循环

5.4.2.1基本语法

1.循环变量初始化; 
while(2.循环条件){
    3.循环体(多条语句); 
    4.循环变量迭代;
}
#include<stdio.h>
void main() {
  int a = 1;
  while (a <= 7) {
    printf("江南江南江南丶 %d\n", a);
    a++;
  }
}

42f94aae40fd48ceb735ea7e76c6e73f.png

5.4.2.2 while注意事项

  1. 循环条件是返回一个表示真(非 0)假(0) 的表达式
  2. while 循环是先判断再执行语句

5.4.2.3 while练习

  1. 打印 1—100 之间所有能被 3 整除的数
#include<stdio.h>
void main() {
  int a = 1;
  while (a <= 100) {
    if (a % 3 == 0) {
      printf("%d是3的倍数\n", a);
    }
    a++;
  }
}

d59c1b0ff721419f909517ba5ff25d45.png

2.打印 40—200 之间所有的偶数

#include<stdio.h>
void main() {
  int num = 40;
  while (num <= 200) {
    if (num % 2 == 0) {
      printf("%d是偶数\n", num);
    }
    num++;
  }
}

e394e793eec7488fa767226e92230384.png

3.不断输入姓名,直到输入 "exit" 为止[使用while 完成]

#include<stdio.h>
#include<string.h>
void main() {
  char name[20]="";
  while (strcmp(  name, "exit") != 0) {
    printf("请输入姓名\n");
    scanf_s("%s", name, sizeof(name));
  }
  printf("退出");
}

043497977e0d40268bf33a7dfa2b143f.png

5.4.3 do while循环

5.4.3.1基本语句

1.循环变量初始化; 
do{
    2.循环体(多条语句); 
    3.循环变量迭代;
}while(4.循环条件);//do – while 后面有一个分号,不能省略.
#include<stdio.h>
void main() {
  int a = 0;
  do {
    printf("江南江南江南 %d\n", a);
    a++;
  } while (a <=7);
}

582055113a93476e8bd819f277c533b6.png

5.4.3.2 do while注意事项

  1. 循环条件是返回一个表示真(非 0)假(0) 的表达式
  2. do..while 循环是先执行,再判断

5.4.3.3 do while 练习

1.打印 1—100

//打印 1—100
#include<stdio.h>
void main() {
  int num = 1;
  do {
    printf("%d\n", num);
    num++;
  } while (num <= 100);
}

2d3512f3c31b4a43b644a173f1bcb757.png

2.计算 1—100 的和

//计算 1—100 的和
#include<stdio.h>
void main() {
  int num = 1, sum = 0;
  do {
    sum = sum + num;
    num++;
  } while (num <= 100);
  printf("1-100的和为%d", sum);
}

bb95e611527e489dbbfdfb0514a8f791.png

3.统计 1——200 之间能被 5 整除但不能被 3 整除的个数

//统计 1——200 之间能被 5 整除但不能被 3 整除的个数
#include<stdio.h>
void main() {
  int count = 0, num = 1;
  do {
    if (num % 5 == 0 && num % 3 != 0) {
      count++;
    }
    num++;
  } while (num <= 200);
  printf(" 1——200 之间能被 5 整除但不能被 3 整除的个数为%d", count);
}

336e278840b94230becb726641ecb3da.png

4.如果老公同意老婆购物,则老婆将一直购物,直到老公说不同意为止

#include<stdio.h>
void main() {
  char answer;
  do {
    printf("请输入是否同意:y/n\n");
    scanf_s("%c", &answer, sizeof(answer));
    getchar();
  } while (answer == 'y');
  printf("老公不同意老婆购物,请老婆停止购物");
}

f625b8f90fae423b9d013fd2fa5741dc.png

5.4.4多重循环控制

5.4.4.1介绍

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。【建议一般使用两层,最多不要超过 3 层】, 如果嵌套循环过多,会造成可读性降低
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环
  3. 设外层循环次数为m次,内层为 n 次,则内层循环体实际上需要执行m*n 次

5.4.4.2 多重循环练习

  1. 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]
#include<stdio.h>
void main() {
  int classNum = 1, studentNum = 1, count = 0;
  double score = 0.0, augClassScore = 0.0, totalScore = 0.0, augTotalScore = 0.0, sum = 0.0;
  for (classNum = 1; classNum <= 3; classNum++) {//用于控制输入成绩的班级
    for (studentNum = 1; studentNum <= 5; studentNum++) {//用于控制输入成绩的学号
      printf("请输入%d班%d号学生的成绩:\n", classNum, studentNum);
      scanf_s("%lf", &score);
      sum = sum + score;//计算该班级的总成绩
      if (score >= 60) {//如果成绩大于60,则及格人数加1
        count++;
      }
    }
    augClassScore = sum / 5;//计算该班级的平均成绩
    totalScore = totalScore + sum;//计算所有班级的总成绩
    printf("%d班的平均分为%f\n", classNum, augClassScore);
    sum = 0.0;//计算完该班级总成绩后,该班级的总成绩清零,方便计算下个班级的总成绩
  }
  augTotalScore = totalScore / 15;
  printf("所有班级的平均分为%f,及格人数有%d人\n", augTotalScore, count);
}

eebf16a5e1fa47a2b258d5d50e9232b6.png

2.打印出九九乘法表

//打印出九九乘法表
#include<stdio.h>
void main() {
  int firstNum, secondNum;
  for (firstNum = 1; firstNum <= 9; firstNum++) {
    for (secondNum = 1; secondNum <= firstNum; secondNum++) {
      printf("%d * %d = %d  ", firstNum, secondNum, firstNum * secondNum);
    }
    printf("\n");
  }
}

587bebde662e49bc873859d59e17bb30.png

3.请编写一个程序,可以接收一个整数,表示层数(totalLevel),打印出空心金字塔。

//空心金字塔
#include<stdio.h>
void main() {
  int totalLevel, firstLevel, starCount, enterCount;
  printf("请输入层数:");
  scanf_s("%d", &totalLevel);
  for (firstLevel = 1; firstLevel <= totalLevel; firstLevel++) {//控制层数
    for (enterCount = 1; enterCount <= totalLevel - firstLevel; enterCount++) {//每行打印空格的数量
      printf(" ");
    }
    for (starCount = 1; starCount <= 2 * firstLevel - 1; starCount++) {
      if (starCount == 1 || starCount == 2 * firstLevel - 1 || firstLevel == totalLevel) {//当第一层、最后一层、每行的一个和最后一个,打星
        printf("*");
      }
      else {//其余打空格
        printf(" ");
      }
    }
    printf("\n");
  }
}

73d545f6be634044a50c1c12ca400896.png


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