当前位置: 首页 > news >正文

【零基础C语言】第三节 控制结构

【零基础C语言系列】

【零基础C语言】第一节 C语言概述+【数制进制码制】-CSDN博客

【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客

目录

1.三大基本结构的共同特点

2.多分支选择结构

一、顺序结构 

1.1 输入输出

(1)标准/格式化输入

(2)标准/格式化输出

(3)字符的输入/输出

1.2 算法

(1)一个程序应包括内容

(2)计算机科学家沃思:

(3)完整的程序设计

(4)计算机算法两大类别

☆☆☆代码练习题☆☆☆

二、选择结构

2.1 关系表达式

2.2 逻辑表达式

2.3 条件表达式

☆☆☆代码练习题☆☆☆

字母大小写的判断和转换

 2.4 if语句

2.5 switch语句

三、循环结构

3.1 while() 语句(“当……”)

3.2 do…while() 语句

3.3 for() 语句(常用)

3.4 continue 和 break 

(1)continue 语句

(2) break 语句

☆☆☆代码练习题☆☆☆

①判断是否为素数/质数

②求两数的最大公约数

        Bohra 和 Jacopini 提出了以下三种基本结构作为表示一个良好算法的基本单元:顺序结构、选择结构、循环结构。

算法的四种表示方式:自然语言,伪代码、流程图、N-S图

流程图

流程图

1.三大基本结构的共同特点

  • 只有一个入口和一个出口
  • 结构内的每一部分都有机会被执行到
  • 结构内不存在死循环(无终止的循环)
  • 由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。
  • 由基本结构所构成的算法属于结构化的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。
  • 只要具有上述四个特点的都可以作为基本结构。
  • 可以自己定义基本结构,并由这些基本结构组成结构化程序。

2.多分支选择结构

虚线框内的结构是一个入口一个出口,并且有上述全部的四个特点。由此构成的算法结构也是结构化的算法, 可以认为这是由三种基本结构所派生出来的。
根据表达式的值决定执行路线

一、顺序结构 

1.1 输入输出

第一节提到过

(1)标准/格式化输入

scanf("格式控制字符串",变量地址);

格式符数据类型说明
%d 
%i
十进制整数带符号(正数不输出符号)
%c一个字符单个字符
%s字符串以 null 结尾的字符数组
%u十进制整数无符号
%o八进制整数无符号,不输出前导符0

%x  %X

十六进制整数

小写字母      大写字母

%f单精度浮点数浮点数(固定小数点格式)
%lf双精度浮点数输出双精度浮点数 (与 %f 类似)
%e %E单精度浮点数以科学计数法输出浮点数(小写e或大写E)
%g %G单精度浮点数自动选择 %e 或 %f 中输出宽度较短的一种格式,不输出无意义的0
scanf("a=%d,b=%c,c=%c",&a,&b,&c);
int float 数据输入可用空格、换行、 Tab 键作分隔。
对于字符数据来说,空格、转移字符、换行均为有效字符。

(2)标准/格式化输出

printf("格式控制",输出列表)

附加格式说明符描述
%m数据输出的最小宽度。如果变量长度小于这个宽度,会在左侧填充空格
%-m数据向左对齐,即字符向左靠齐,右侧填充空格
%n对于浮点数,输出 n 位小数实数(如 %.2f 表示保留两位小数),截取 n 个字符
%.*s输出字符串时,截取前 n 个字符(如 %.5s 输出前 5 个字符)
注: %o %x 不能输出负数
visual6.0 C++ 编译器中 int 数据分配四个字节。

(3)字符的输入/输出

  • 字符输入 getchar(); /*只能用键盘输入一个字符*/
  • 字符输出 putchar(ch);
#include<stdio.h>
void main(){int c;c = getchar();while(c != EOF)  //EOF是一个字符常量 ,值为-1putchar(c);      //得到的字符通过putchar()输出到屏幕上c = getchar();   //读入下一个字符
}

1.2 算法

1)一个程序应包括内容

  • 对数据的描述:数据结构(data structure)
  • 对操作的描述:算法(algorithm)

2)计算机科学家沃思:

        数据结构 + 算法 = 程序

(3)完整的程序设计

数据结构+算法+程序设计方法+语言工具

       广义地说,为解决一个问题而采取的方法和步骤,就称为 算法 。对同一个问题, 可有不同的解题方法和步骤

(4)计算机算法两大类别

  • 数值运算算法:求数值解,例如求方程的根、求函数的定积分等。
  • 非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、 人事管理、行车调度管理等。

☆☆☆代码练习题☆☆☆

#include <stdio.h>
# define PI 3.14;
int main(){float r,C,S,V;int h;scanf("r=%f,h=%d",&r,&h);C = 2  * r * PI;S = r * r * PI;V = S * h;//输出保留两位有效数字printf("圆周长:C=%.2f \n圆面积:S=%.2f \n圆柱体积:V=%.2f",C,S,V);return 0;
}

#include <stdio.h>
#include "math.h"
int main(){int a,b,c;scanf("%d,%d,%d",&a,&b,&c);int check = b * b - 4 * a * c; double x1,x2;if(check > 0){x1 = (-b + sqrt(check)) / (2 * a);x2 = (-b - sqrt(check)) / (2 * a);printf("x1=%.2f\n", x1);printf("x2=%.2f", x2);} else{printf("输入不合法,方程无意义");}return 0;
}

二、选择结构

2.1 关系表达式

自左向右  ;0为假,非0为真 

2.2 逻辑表达式

2.3 条件表达式

☆☆☆代码练习题☆☆☆

字母大小写的判断和转换

#include <stdio.h>int main() {char c;scanf("%c", &c);//条件表达式 三目c = (c >= 'A' && c <= 'Z') ? (c + 32) : c;printf("%c", c);}

 2.4 if语句

2.5 switch语句

三、循环结构

3.1 while() 语句(“当……”)

  • 特点:先判断,后执行循环体 
while 语句用来实现 当型 ” 循环结构:当表达式为非 0 /真 时,执行 while 语句中的内嵌语句。
/*** 求1-100的和*/
# include <stdio.h>
int main(){int i = 1,sum = 0;//循环结构while (i <= 100){//循环体超过一个语句,用{}括起来sum = sum + i;i++;     //防止死循环:再循环体重应有使得循环趋向于结束的语句}printf("%d",sum);
}

3.2 do…while() 语句

  • 特点:先执行一次循环体,后判断
       在一般情况下,用 while 语句和用 do-while 语句处理同一问题时,若二者的循环 体部分是一样的,它们的结果也一样。 但是如果 while 后面的表达式一开始就为假 (0 ) 时,两种循环的结果是不同的

3.3 for() 语句(常用)

       C 语言中的 for 语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况它完全可以代替 while 语句

3.4 continue 和 break 

  • continue 语句只结束本次循环,而不是终止整个循环的执行。
  • break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。

(1)continue 语句

结束本次循环,跳过循环体中下面尚未执行的语句,进行下一次是否执行循环的判定

(2) break 语句

  • 跳出循环体,执行循环下面的语句
  • 只能用在循环语句和switch语句中

☆☆☆代码练习题☆☆☆

①判断是否为素数/质数
 /*** 思路:让n除以 (1,n)开区间中 的所有整数,看会不会出现整除情况*/
# include <stdio.h>int main() {int n, i;printf("请输入一个大于3的整数:");scanf("%d", &n);for (i = 2; i < n; i++) { //排除1和本身(1,n)if (n % i == 0)    //判断(1,n)中间有没有数能被n整除break;  //出现一次整除,就可以判断,退出循环}if (i == n)printf("%d是素数", n);else printf("%d是合数", n);}
/*** 优化:减少循环次数,除数最小是2,只用看左边一半,右边一般不可能被整除* 1 (2 3 | 4 5)6* 6 / 3 = 2* 6 /2 = 3** 1(2 3 | 4 5 6)7*/
# include <stdio.h>int main() {int n, i;printf("请输入一个大于3的整数:");scanf("%d", &n);for (i = 2; i <= n/2; i++) {if (n % i == 0)break;}if (i == n/2+1 )printf("%d是素数", n);else printf("%d是合数", n);}
/*** 继续优化:开平方根,根号n* 7* 2<根号7<3* int k = 2*/
# include <stdio.h>
#include "math.h"int main() {int n, i;printf("请输入一个大于3的整数:");scanf("%d", &n);int k = sqrt(n);for (i = 2; i <= k; i++) {if (n % i == 0)break;}if (i == k + 1)printf("%d是素数", n);else printf("%d是合数", n);}
②求两数的最大公约数
/**
* 求两数的最大公约数* 找出所有的公约数(被x整除,同时能被y整除)* 再得到最大的公约数*
*/
int main(){int x,y,max;printf("请输入两个整数:");scanf("%d %d",&x,&y);for(int i = 1; i<=x && i<=y;i++){if(x % i == 0 && y%i == 0){max = i; //i本身就是从小变大,最后赋值的就是最大的}}printf("最大公约数为:%d",max);
}

 

 


http://www.mrgr.cn/news/92814.html

相关文章:

  • 为AI聊天工具添加一个知识系统 之129 详细设计之70 编程 核心技术:Cognitive Protocol Language 之2
  • CSS—背景属性与盒子模型(border、padding、margin)
  • 如何从零开始理解LLM训练理论?预训练范式、模型推理与扩容技巧全解析
  • Linux——基本指令
  • Spring Boot集成Spring Ai框架【详解 搭建Spring Ai项目,以及简单的ai大模型智能体应用,附有图文+示例代码】
  • ue5 创建多列StreeView的方法与理解
  • 【13】智能合约进阶
  • RabbitMQ快速入门
  • 【Python 语法】算法合集
  • HTMLS基本结构及标签
  • 分享一套适合做课设的SpringBoot商城系统
  • React底层原理详解
  • 5分钟看懂Deepseek开源周之六:Deepseek-V3/R1推理系统设计----揭开深度求索模型系统设计和运营成本之谜
  • Linux-ftrace-双nop机制的实现
  • 【异地访问本地DeepSeek】Flask+内网穿透,轻松实现本地DeepSeek的远程访问
  • 10.1 指针进阶
  • 施耐德 PLC 硬件库 DTM 的安装
  • Mysql100道高频面试题
  • 【Qt QML】QML鼠标事件(MouseArea)
  • C#-委托