内容正文:
身高体型判定系统的数据处理(3.输入输出及项目实施)
C语言程序设计
-第5课时-
高教版第2版
学习目标
知识目标
掌握C语言输入输出函数(printf、scanf、putchar、getchar)的使用方法,学会运用相关函数知识,分析并解决基础的编程实际问题。
技能目标
能熟练使用输入输出函数进行数据的交互处理;独立编写完整程序,解决一元二次方程求解、列车交会时间计算、存款利息计算等典型实际应用问题。
素质目标
在编程实践中,培养运用计算思维解决实际问题的能力;锻炼逻辑推理与分析问题的思维方式,养成严谨、规范的程序设计习惯。
基础知识认知
让我们一起开启单片机的学习之旅。
教学引入
C语言中如何实现数据的输入和输出?
思考:怎样运用 C 语言解决一元二次方程、列车交会时间和存款利息计算等实际问题?
目录
输入输出函数
实际问题求解
BMI计算项目实施
名词解释
输入输出函数
程序与用户交互的核心接口,负责实现数据的输入与输出操作。
C语言标准库头文件stdio.h提供了完整的函数支持,常用核心函数包括:
printf() // 格式化输出
scanf() // 格式化输入
getchar() / putchar() // 字符输入输出
格式控制字符串
用于指挥printf/scanf如何解析数据的指令集,由两部分组成:
1. 普通字符:按原样输出或忽略,用于提示信息(如“年龄:”)。
2. 格式声明:以%开头,规定数据的类型和格式。
示例:printf("Score: %d", score);
输入输出函数
第一部分
知识讲授
输入输出函数
知识讲授
头文件
头文件主要作用,提前声明函数,因为在c语言中必须先声明或定义才能使用。
知识讲授
头文件 stdio.h
为什么必须写这行代码?
C语言编译器默认“不认识”printf、scanf等函数。我们需要通过 #include 指令,将包含这些函数声明的“说明书”(头文件)提前引入到程序中,编译器才能正常工作。
这是C语言中使用
输入输出功能的通行证
#include <stdio.h>
只要你的C程序需要从屏幕输出内容,或者从键盘读取数据,代码的第一行就应该写上:
#include <stdio.h>
知识讲授
printf 函数
printf 是程序的“嘴巴”,也是C语言中最基础的标准输出函数。它的核心作用是将数据按照开发者指定的格式,精准地打印输出到屏幕(控制台)上。
函数一般格式
printf("格式控制串", 输出列表);
核心组成:
由两部分构成,缺一不可。前半部分规定了“怎么输出”,后半部分规定了“输出什么”。
代码实战演示
int a=20; float h=1.75f;
printf("Age:%d, H:%.2f",a,h);
输出结果:
Age:20, H:1.75
知识讲授
printf格式字符
📋 常用格式字符
%d :输出十进制整数 (int)
%f :输出浮点数 (float/double)
%c :输出单个字符 (char)
%s :输出字符串 (String)
%p :输出指针的内存地址
%% :输出一个普通的百分号
⚙️ 常用格式修饰符
宽度控制 :%5d (占5位,右对齐) | %-5d (占5位,左对齐)
小数精度 :%.2f (保留2位小数) | %.4f (保留4位)
补零填充 :%05d (总宽5, 不足左侧补0)
综合示例 :%010.3f (宽10,补0,3位小数)
知识讲授
scanf函数
scanf 是 C 语言标准的输入函数,专门用于从键盘读取用户输入的数据,并将其存储到程序的变量中。
它是程序与用户交互的重要桥梁,配合 printf 可以实现完整的输入输出闭环。
知识讲授
scanf 格式字符
▍常用格式字符
%d
读取十进制整数(int类型)
%f/%lf
%f读单精度(float) / %lf读双精度(double)
%c
读取单个字符(包含空格/换行符)
%s
读取字符串(遇空格/回车/制表符停止)
知识讲授
字符输入输出函数
除了通用的格式化输入输出函数printf和scanf,C语言还提供了专门用于单个字符处理的轻量级函数,在仅需读写单一字符的场景下更加高效便捷。
putchar() - 字符输出函数
核心功能:向标准输出设备(如屏幕)写入并显示一个字符。
语法:putchar(ch);(ch为字符型/整型变量)
示例:putchar('A');→ 在屏幕上输出字母 A
getchar() - 字符输入函数
核心功能:从标准输入设备(如键盘)读取一个字符。
返回值:返回读取字符的 ASCII 码值(整数)。
语法:char ch = getchar();
程序执行到此会暂停,等待用户按下任意键。
💡 实战演示:回显输入程序 (Echo Input)
char ch; printf("请输入一个字符:"); ch = getchar(); // 阻塞等待输入
printf("你输入的字符是:"); putchar(ch); // 输出回显
背诵记忆
序号 核心概念 记忆要点
01 头文件 使用库函数需包含 stdio.h,重点记忆引入命令格式。
02 printf 输出 标准输出函数,掌握“格式控制符”与“输出列表”的一一对应规则。
03 scanf 输入 标准输入函数,重点记忆“变量前加 & 取地址”以及格式控制的匹配用法。
04 putchar 字符输出 专门用于输出单个字符的函数,记住其简洁的单参数调用功能。
05 getchar 字符输入 用于从键盘读取单个字符,注意读取回车符的特性及基本用法。
06 关键注意事项 函数参数匹配、括号完整性、输入输出缓冲区的影响等核心易错点。
例题分析
单选题
例题1:printf函数中格式声明与输出项有什么关系?
A. 个数可以不一致
B. 个数必须一致,类型可以随意
C. 个数必须一致,且类型要匹配
D. 没有关系
【答案】C
【解析】在printf函数中,格式控制字符串中的格式声明(如%d, %f)的数量必须和后面输出列表中变量或表达式的数量完全一致,并且它们的类型也必须一一对应。例如,一个%d必须对应一个整数类型的数据。如果不匹配,程序可能会输出错误的结果甚至崩溃。
例题分析
通过 C 语言解决实际问题(案例展示)
第二部分
案例一
求解一元二次方程
📝 核心问题
编写程序,实现对一元二次方程ax² + bx + c = 0的自动求解。程序需根据输入的系数,智能判断并输出方程的根。
💡 标准解题流程 (4步闭环)
01 输入:获取用户输入的系数 a, b, c
02 计算:计算判别式 delta = b² - 4ac
03 判断:根据 delta 的值判断根的类型
04 输出:格式化输出最终的方程根结果
🔑 求根公式 (关键)
x = [-b ± sqrt(delta)] / 2a
案例一:一元二次方程求解流程图
📌 算法执行流程逻辑
1. 初始化阶段:程序启动,准备接收用户输入的系数 a, b, c。
2. 关键计算:根据公式 Δ = b² - 4ac 计算判别式,判断根的情况。
3. 分支判断逻辑:
● 若 Δ > 0:方程有两个不相等的实数根,计算 x₁、x₂ 并输出。
● 若 Δ = 0:方程有两个相等的实数根,计算 x 并输出。
● 若 Δ < 0:方程无实数根,直接输出提示信息。
4. 终止:完成所有计算与输出,程序正常结束。
💻 C语言核心代码实现
#include <stdio.h>
#include <math.h>
intmain() {
doublea, b, c, delta, x1, x2;
scanf("%lf %lf %lf", &a, &b, &c);
delta = b*b - 4*a*c;
if(delta > 0) {// 两个不等实根
x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a);
printf("x1=%.2f, x2=%.2f
",x1,x2);}
else if(delta == 0) {// 两个相等实根
x1 = -b/(2*a); printf("x=%.2f
", x1); }
else{ printf("无实数根
"); }
return0; }
案例二
列车交会时间计算
问题背景:两列CR450高速动车组,车身长均为211.4米,分别以350km/h和300km/h的速度迎面驶来。试求:从两列车车头相遇到车尾完全相离,总共需要的时间是多少?
案例二
列车交会时间计算 · 流程与代码
▍ 核心流程执行逻辑
定义常量:设定列车长度(L)、两车速度(V1/V2)及单位转换系数
计算总路程:两车交会需行驶的总距离 = 列车长度 × 2 (两车车身)
计算相对速度:(V1+V2) × 转换系数 (km/h -> m/s)
计算与输出:时间 = 总路程 ÷ 相对速度,格式化打印最终结果
核心公式:T = (2L) / [(V1+V2) * (1000/3600)]
▍ C语言代码实现
#include <stdio.h>
int main() {
const double L = 211.4; // 列车长度(米)
const double V1=350, V2=300; // 速度(km/h)
const double CONV = 1000.0/3600.0; // 转换系数
double t = (2*L) / ((V1+V2)*CONV);
printf("交会时间: %.4f 秒
", t);
return 0; }
代码亮点:使用 const 定义常量增强可读性;将计算逻辑与输出分离,符合结构化程序设计思想。
案例三
存款利息计算
问题背景:在金融场景中,我们需要根据用户输入的本金、存款年限、年利率,自动计算并对比到期后的本息和。 本金 (money) | 年限 (year) | 利率 (rate)
单利
定义:仅对本金计算利息,利息不滚存。
公式:本息和 = 本金 × (1 + 利率 × 年限)
复利
定义:“利滚利”,利息加入本金再生息。
公式:本息和 = 本金 × (1 + 利率) ^ 年限
需引入 math.h 头文件,使用 pow() 函数
🚀 程序实现流程
STEP 01 数据输入
提示用户输入本金、年限、年利率
STEP 02 逻辑计算
分别调用单利、复利公式进行运算
STEP 03 结果展示
格式化输出两种方式的本息和对比
案例三
存款利息计算:流程图与代码实现
🔍 业务逻辑流程解析
1.开始:程序启动,准备接收用户输入。
2.输入:读取本金 (money)、存款年限 (year)、年利率 (rate)。
3.计算:分别套用单利和复利公式进行数值运算。
4.输出:格式化打印两种计算方式的最终本息和。
5.结束:释放资源,程序正常退出 (return 0)。
💡 核心逻辑:将数学公式(本金*(1+利率*年限))转化为计算机可执行的代码语句。
💻 C语言核心代码实现
#include <stdio.h> #include <math.h>
int main() {
double m, y, r; scanf("%lf%lf%lf", &m, &y, &r);
double simple = m * (1 + r * y);
double comp = m * pow(1 + r, y);
printf("单利: %.2f
复利: %.2f
", simple, comp);
return 0; }
关键说明:使用 pow() 函数计算复利时,必须引入 math.h 头文件;输出时使用 %.2f 保留两位小数,符合金额展示规范。
背诵记忆
序号 核心概念名称 核心说明与记忆要点
01 一元二次方程 核心记忆求根公式,代码实现需包含头文件 math.h,重点记忆公式结构。
02 列车交会问题 核心是计算相对速度与两车总长度之和,需熟练掌握物理运动公式,重点记忆解题过程。
03 存款利息计算 区分单利与复利计算方式,熟记不同存款年期对应的本息和数学公式,灵活代入数值。
例题分析
典型真题解析 · 头文件引用
【例题1】求解一元二次方程 ax² + bx + c = 0 的根时,程序中必须包含的头文件是?
A. #include <stdio.h> (标准输入输出函数库)
B. #include <math.h> (数学函数库)
C. #include <stdlib.h> (通用工具函数库)
D. #include <string.h> (字符串处理函数库)
【参考答案】B
【解析】:求解一元二次方程的核心步骤是计算平方根 √(b²-4ac),而平方根函数 sqrt() 是 C 语言标准数学库中的函数,其声明定义在 <math.h> 头文件中。stdio.h 仅负责输入输出,stdlib.h 负责内存分配等通用功能,string.h 负责字符串操作,均不包含 sqrt() 函数。
BMI计算项目实施
第三部分
知识讲授
BMI计算项目实施
知识讲授
身高预测系统
▍ 项目核心功能
用户交互输入:父亲身高、母亲身高及子女性别。
程序自动计算:基于统计模型,输出子女成年后的预测身高。
▍ 核心预测公式
儿子:(父亲身高 + 母亲身高 + 13) ÷ 2 (cm)
女儿:(父亲身高 + 母亲身高 - 13) ÷ 2 (cm)
▍ 程序执行流程
①输入:采集父母身高与子女性别
②判断:根据性别选择对应公式
③输出:计算并显示最终预测结果
核心逻辑:分支判断 (If-Else)
该项目是典型的分支结构应用案例。通过“性别”这一条件,程序在运行时动态选择不同的执行路径(公式)。请注意:此公式仅为基于统计学的经验估算模型,实际身高还受营养、运动、睡眠等多重后天因素影响,结果仅供参考。
知识讲授
体型判定系统 (BMI)
📌 核心功能 & 公式
功能描述:用户输入身高(m)和体重(kg),程序自动计算BMI指数,并依据标准判定体型类别。
BMI = 体重(kg) ÷ (身高 × 身高)
BMI = weight / (height²)
📊 中国成人判定标准
偏瘦:BMI < 18.5
正常:18.5 ≤ BMI < 24.0
超重:24.0 ≤ BMI < 28.0
肥胖:BMI ≥ 28.0
⚙️ 项目执行流程
01. 数据输入
录入身高(m)与体重(kg)数值
02. 核心计算
代入公式算出BMI具体指数
03. 条件判断
比对标准区间,确定体型
04. 结果输出
显示BMI值与最终体型结论
知识讲授:项目实现
01. 身高预测系统代码核心
char gender;
float f_h, m_h, pred_h;
scanf("%f %f", &f_h, &m_h);
getchar(); // 清除缓冲区
scanf("%c", &gender);
if (gender == 'M' || gender == 'm') {
pred_h = (f_h + m_h + 13) / 2;
} else if (gender == 'F' || gender == 'f') {
pred_h = (f_h + m_h - 13) / 2;
}
printf("预测身高: %.1f cm
", pred_h);
02. 体型判定系统代码核心
float h, w, bmi;
scanf("%f %f", &h, &w);
bmi = w / (h * h);
if (bmi < 18.5) {
printf("偏瘦
");
} else if (bmi < 24) {
printf("正常
");
} else if (bmi < 28) {
printf("超重
");
} else {
printf("肥胖
");
}
背诵记忆
序号 核心概念名称 核心说明与记忆要点
01 身高预测 重点记忆男孩与女孩的身高预测公式,理解公式中各项参数的含义与计算逻辑。
02 体型判定 牢记BMI(身体质量指数)的计算公式,掌握根据输入的身高体重进行体型判定的方法。
03 项目实现 熟练运用输入输出函数获取用户数据与展示结果,结合条件判断语句完成核心逻辑的编写。
04 要点意义 理解项目实施中“模块化设计”与“数据验证”的关键要点,体会其在软件开发中的通用性意义。
随堂练习
编程练习
求一元二次方程ax^2+bx+c=0方程的两个实根。a、b、c由键盘输入。(默认b*b-4*a*c>=0)
师生互动
师生互动
1
在实际项目开发中,如何优化输入输出(IO)函数的使用,从而显著提升程序的运行效率?
知识点小结
课后任务
布置作业:
小组合作,设计一个简单的计算器程序,要求能实现加、减、乘、除四种运算,用scanf函数输入两个运算数和运算符,用printf函数输出运算结果,既能锻炼动手能力,也能培养团队协作能力。
谢谢观看
THANKS
Lavf59.14.100
$