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

CSP-J教程——第一阶段——第三课:基本的输入与输出

课程目标

  • 掌握使用cin从键盘读取输入
  • 掌握使用cout输出数据到屏幕
  • 学习格式化输出技巧
  • 能够编写交互式程序
  • 理解输入输出中的常见问题及解决方法

第一部分:输出流cout(复习与加深)

1.1 基本输出回顾

我们已经知道使用cout<<运算符可以输出数据

#include <iostream>
using namespace std;int main() {cout << "Hello, World!" << endl;cout << "This is a number: " << 42 << endl;return 0;
}

1.2 输出多个数据

可以在一行中输出多个数据,用<<连接

int age = 12;
double height = 1.65;
cout << "Age: " << age << ", Height: " << height << " meters" << endl;

1.3 特殊字符的输出

有些字符需要特殊方式输出

cout << "引号: \"Hello\"" << endl;      // 输出:引号: "Hello"
cout << "反斜杠: C:\\Program Files" << endl; // 输出:反斜杠: C:\Program Files
cout << "换行符: 第一行\n第二行" << endl;    // \n 也用于换行
cout << "制表符: 姓名\t年龄\t成绩" << endl;  // \t 用于对齐

第二部分:输入流cin

2.1 基本输入

使用cin>>运算符从键盘读取数据

#include <iostream>
using namespace std;int main() {int age;cout << "请输入你的年龄: ";cin >> age;cout << "你的年龄是: " << age << endl;return 0;
}

2.2 读取多个数据

可以连续使用>>读取多个数据

#include <iostream>
using namespace std;int main() {int a, b;cout << "请输入两个整数,用空格隔开: ";cin >> a >> b;cout << "你输入的两个数是: " << a << " 和 " << b << endl;cout << "它们的和是: " << a + b << endl;return 0;
}

2.3 读取不同类型的数据

cin会根据变量的类型自动转换输入数据

#include <iostream>
using namespace std;int main() {int age;double height;char grade;string name;cout << "请输入姓名、年龄、身高和等级: ";cin >> name >> age >> height >> grade;cout << "=== 学生信息 ===" << endl;cout << "姓名: " << name << endl;cout << "年龄: " << age << endl;cout << "身高: " << height << endl;cout << "等级: " << grade << endl;return 0;
}

2.4 字符串输入的特殊性

cin读取字符串时以空格为分隔符

#include <iostream>
#include <string>
using namespace std;int main() {string firstName, lastName;cout << "请输入姓和名(用空格分开): ";cin >> firstName >> lastName;cout << "你的全名是: " << firstName << " " << lastName << endl;return 0;
}

第三部分:格式化输出

3.1 使用iomanip头文件

需要包含<iomanip>头文件来使用格式化功能

#include <iostream>
#include <iomanip>  // 格式化输出所需的头文件
using namespace std;

3.2 设置输出宽度(setw)

setw(n)设置下一个输出项的宽度为n个字符

#include <iostream>
#include <iomanip>
using namespace std;int main() {cout << "默认输出:" << endl;cout << "Apple" << 5 << endl;cout << "Banana" << 3 << endl;cout << "\n设置宽度后:" << endl;cout << setw(10) << "Apple" << setw(5) << 5 << endl;cout << setw(10) << "Banana" << setw(5) << 3 << endl;return 0;
}

3.3 设置对齐方式

  • left:左对齐
  • right:右对齐(默认)
#include <iostream>
#include <iomanip>
using namespace std;int main() {cout << "左对齐:" << endl;cout << left << setw(10) << "Apple" << setw(5) << 5 << endl;cout << left << setw(10) << "Banana" << setw(5) << 3 << endl;cout << "\n右对齐:" << endl;cout << right << setw(10) << "Apple" << setw(5) << 5 << endl;cout << right << setw(10) << "Banana" << setw(5) << 3 << endl;return 0;
}

3.4 设置浮点数精度(setprecision)

setprecision(n)设置浮点数输出的精度

#include <iostream>
#include <iomanip>
using namespace std;int main() {double pi = 3.1415926535;double price = 19.99;cout << "默认精度:" << endl;cout << "π = " << pi << endl;cout << "价格 = " << price << endl;cout << "\n设置精度为4:" << endl;cout << fixed << setprecision(4);cout << "π = " << pi << endl;cout << "价格 = " << price << endl;return 0;
}

3.5 设置填充字符(setfill)

setfill(char)设置填充字符

#include <iostream>
#include <iomanip>
using namespace std;int main() {int num = 123;cout << "默认填充(空格):" << endl;cout << "[" << setw(10) << num << "]" << endl;cout << "用*填充:" << endl;cout << "[" << setw(10) << setfill('*') << num << "]" << endl;cout << "用-填充并左对齐:" << endl;cout << left << setw(10) << setfill('-') << num << endl;return 0;
}

第四部分:综合应用示例

4.1 学生成绩管理系统

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;int main() {string name;int chinese, math, english;// 输入学生信息cout << "=== 学生成绩录入系统 ===" << endl;cout << "请输入学生姓名: ";cin >> name;cout << "请输入语文成绩: ";cin >> chinese;cout << "请输入数学成绩: ";cin >> math;cout << "请输入英语成绩: ";cin >> english;// 计算总分和平均分int total = chinese + math + english;double average = total / 3.0;// 格式化输出成绩单cout << "\n=== 成绩单 ===" << endl;cout << fixed << setprecision(2);cout << left << setw(8) << "姓名" << ": " << name << endl;cout << left << setw(8) << "语文" << ": " << chinese << "分" << endl;cout << left << setw(8) << "数学" << ": " << math << "分" << endl;cout << left << setw(8) << "英语" << ": " << english << "分" << endl;cout << left << setw(8) << "总分" << ": " << total << "分" << endl;cout << left << setw(8) << "平均分" << ": " << average << "分" << endl;return 0;
}

4.2 购物小票打印

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;int main() {string item1, item2;double price1, price2;int quantity1, quantity2;// 输入商品信息cout << "请输入第一种商品名称: ";cin >> item1;cout << "请输入" << item1 << "的价格: ";cin >> price1;cout << "请输入" << item1 << "的数量: ";cin >> quantity1;cout << "请输入第二种商品名称: ";cin >> item2;cout << "请输入" << item2 << "的价格: ";cin >> price2;cout << "请输入" << item2 << "的数量: ";cin >> quantity2;// 计算金额double total1 = price1 * quantity1;double total2 = price2 * quantity2;double grandTotal = total1 + total2;// 打印小票cout << "\n" << string(40, '=') << endl;cout << "              购物小票" << endl;cout << string(40, '=') << endl;cout << fixed << setprecision(2);cout << left << setw(15) << "商品名称" << setw(8) << "单价" << setw(8) << "数量" << setw(10) << "小计" << endl;cout << string(40, '-') << endl;cout << left << setw(15) << item1<< "¥" << setw(7) << price1<< setw(8) << quantity1<< "¥" << setw(7) << total1 << endl;cout << left << setw(15) << item2<< "¥" << setw(7) << price2<< setw(8) << quantity2<< "¥" << setw(7) << total2 << endl;cout << string(40, '-') << endl;cout << left << setw(31) << "总计" << "¥" << grandTotal << endl;cout << string(40, '=') << endl;return 0;
}

第五部分:常见问题与调试

5.1 输入缓冲区问题

问题: 混合输入数字和字符串时可能出现问题

#include <iostream>
#include <string>
using namespace std;int main() {int age;string name;cout << "请输入年龄: ";cin >> age;// 这里可能会有问题!cout << "请输入姓名: ";cin >> name;  // 可能会直接跳过输入cout << "年龄: " << age << ", 姓名: " << name << endl;return 0;
}

解决方法: 使用cin.ignore()清除缓冲区

cout << "请输入年龄: ";
cin >> age;cin.ignore();  // 清除缓冲区中的换行符cout << "请输入姓名: ";
getline(cin, name);  // 可以读取包含空格的字符串

5.2 输入类型不匹配

问题: 输入的数据类型与变量类型不匹配

int number;
cout << "请输入一个整数: ";
cin >> number;  // 如果输入字母,会导致错误

解决方法: 检查输入是否成功

int number;
cout << "请输入一个整数: ";
if (cin >> number) {cout << "输入成功: " << number << endl;
} else {cout << "输入错误!" << endl;cin.clear();  // 清除错误状态cin.ignore(1000, '\n');  // 忽略错误的输入
}

练习与作业

基础练习(必做)

练习1:个人信息收集器
编写程序收集用户的个人信息并格式化输出:

  • 姓名
  • 年龄
  • 身高
  • 体重
  • 喜欢的颜色

要求输出时对齐,数字保留合适的小数位数。

练习2:简单计算器
编写一个交互式计算器:

  • 用户输入两个数字
  • 程序计算并输出它们的和、差、积、商
  • 商要保留2位小数

练习3:成绩转换器
编写程序将百分制成绩转换为等级:

  • 90-100: A
  • 80-89: B
  • 70-79: C
  • 60-69: D
  • 0-59: E

要求用户输入成绩,程序输出对应的等级。

挑战练习(选做)

挑战1:BMI计算器
编写程序计算身体质量指数(BMI):

  • 公式:BMI = 体重(kg) / 身高(m)²
  • 根据BMI值给出健康建议
  • 输出格式要美观

挑战2:时间转换器
编写程序进行时间单位转换:

  • 将秒转换为时:分:秒格式
  • 用户输入总秒数
  • 程序输出格式如:3723秒 = 1小时2分3秒

挑战3:格式化表格输出
编写程序输出乘法表,要求:

  • 使用格式化输出使表格对齐
  • 输出9×9乘法表
  • 表格要有边框线

实验任务

任务1:输入缓冲区实验
测试以下情况,记录结果:

  1. 输入数字后立即输入字符串
  2. 使用cin.ignore()后的效果
  3. 混合使用cin >>getline()

任务2:格式化输出实验
尝试不同的格式化组合:

  1. 不同宽度和对齐方式的组合
  2. 不同精度设置
  3. 不同填充字符

任务3:错误处理实验
故意输入错误的数据类型,观察程序行为,并测试错误处理代码的效果。


学习总结

今天学到了:

  • ✅ 使用cin从键盘读取各种类型的数据
  • ✅ 使用cout进行格式化输出
  • ✅ 设置输出宽度、对齐方式、精度和填充字符
  • ✅ 处理输入输出中的常见问题
  • ✅ 编写交互式程序

关键技能:

  • 基本输入cin >> 变量
  • 基本输出cout << 数据
  • 格式化输出setw, setprecision, left/right, setfill
  • 特殊字符\n, \t, \", \\
  • 错误处理cin.ignore(), cin.clear()

下一课预告:

下一节课我们将学习算术与逻辑运算,包括各种运算符和表达式,让程序能够进行复杂的计算和逻辑判断!


http://www.dtcms.com/a/564854.html

相关文章:

  • 营销网站怎么做合适全站搜索
  • 解决IntelliJ IDEA控制台输出中文乱码问题
  • 昆仑芯 X HAMi X 百度智能云 | 昆仑芯 P800 XPU/vXPU 双模式算力调度方案落地
  • HarmonyOS6.0开发实战:HTTP 网络请求与 API 交互全指南
  • 合肥网站开发建设wordpress使用难不难
  • 杭州市上城区建设局网站江阴网页设计
  • 【软考】信息系统项目管理师-进度管理论文范文
  • 开关电源的短路保护如何测试?又需要哪些仪器呢?-纳米软件
  • 从 0 到 1 掌握医学图像分割 的完整实战指南
  • HTML应用指南:利用POST请求获取全国爱回收门店位置信息
  • 在线下载免费软件的网站网页设计模板图片html
  • 第九天 - psutil系统监控库 - 资源监控仪表盘 - 练习:实时CPU/Memory监控
  • CentOS/AlmaLinux 9 中 SSH 服务启动失败:OpenSSL 版本不匹配解决
  • MAC-SQL 论文翻译
  • 海宁最火高端网站设计推荐crack wordpress
  • Kanass零基础学习,如何进行任务管理
  • 3 个诊断 Linux 服务器的脚本
  • Spring Boot Bean 生命周期注解深度解析:@PostConstruct 与 @PreDestroy 面试高频考点 + 实战案例
  • 深入浅出 Java 虚拟机之实战部分
  • 营销型网站建设的认识wordpress支持python吗
  • iOS 26 CPU 使用率监控策略 多工具协同构建性能探索体系
  • iOS 文件管理与导出实战,多工具协同打造高效数据访问与调试体系
  • 文件上传(vue3+element-plus+php)
  • Unity与iOS原生交互开发入门篇 - 打开iOS设置
  • Python循环continue与break
  • 网站开发 外包空心哪家网站设计比较好
  • Python scikit-learn详解:从入门到实战,机器学习的“瑞士军刀”
  • [论文阅读] AI+ | 从 “刚性科层” 到 “智能协同”:一文读懂 AI 应对国家安全风险的核心逻辑
  • 西安网站托管商家成都比较好的室内设计公司有哪些
  • Spark 中数据读取方式详解:SparkSQL(DataFrame)与 SparkCore(RDD)方法对比及实践