实验结论
Part1:
格式化输出函数 printf() 和格式化输入函数 scanf() ex2_1.cpp
- #include <stdio.h>
- int main() {
- int x=1234;
- float f=123.456;
- double m=123.456;
- char ch='a';
- char a[]="Hello, world!"; // 定义一个数组 a, 数组中连续存放了字符串常量 hello,world!
- int y=3, z=4;
- printf("%d %d\n", y, z);
- printf("y=%d, z=%d\n", y,z);
- printf("%8d,%2d\n", x,x);
- // 不一致.%8d %2d 表示的数据位置宽度不同, 数据宽度不够, 默认右对齐, 左侧补空格
- printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f);
- // 不一致 . %f, %8f 浮点型数据输入时为十进制, 计算机读取转化为二进制, 再输出为十进制之间有误差
- // %8.1f, %0.2f 小数点前面表示的是宽度, 小数点后表示保留的小数点后位数, 要四舍五入
- // %.2e 小数点后表示保留的小数点后位数, 要以指数形式表示
- printf("%lf\n",m);// 一致, %lf 双精度浮点型, 精确度高
- printf("%3c\n", ch);// 不一致 3 也表示数据位置宽度, 数据宽度不够, 默认右对齐, 左侧补空格
- printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a);
- // 有的不一致.%15s 数据位置宽度不同, 数据宽度不够, 默认右对齐, 左侧补空格
- //%10.5s\n%2.5s\n%.3s\n %a.bs 字符串输出 a 位, 取字符串前 b 位, 对齐, 左侧补空格
- return 0;
- }
精度要求高的情况下用 %lf
- ex2_2.cpp
- /*
- C 语言程序设计教程学习指导》p119 实验内容 (2)
- 这是一个格式化输入输出函数及格式符使用练习
- 找出两处错误, 修改并运行程序
- 为 a1,a2,a3,c1,c2,c3,x,y 输入数据, 使得:
- a1=1,a2=2,a3=3,c1='a',c2='b',c3='c', x=1.5, y=2.5
- */
- #include <stdio.h>
- int main() {
- double x,y;
- char c1,c2,c3;
- int a1,a2,a3;
- scanf("%d%d%d",&a1,&a2,&a3);// 未取地址符, 输入的数字无法存储
- printf("%d,%d,%d\n",a1,a2,a3);
- scanf("%c%c%c",&c1,&c2,&c3);
- printf("%c%c%c\n",c1,c2,c3);
- scanf("%lf,%lf",&x,&y); // x 为双精度浮点型常量, 要用 %lf
- printf("%lf,%lf\n",x,y);// x 为双精度浮点型常量, 要用 %lf
- return 0;
- }
Part2:
1. 从键盘上输入 3 个数, 让它们代表 3 条线段的长度, 编写一个 c 程序判断这 3 条线段组成的三角形属于什么类型 (一般三角形, 等腰三角形, 等边三角形或不构成三角形).
输入多组测试数据, 让每一个分支都有可能被执行到, 观察结果.
- #include <stdio.h>
- int main() {
- double a,b,c;
- scanf("%lf %lf %lf", &a, &b, &c);
- if(a<0 || b<0 || c<0)
- printf("不能构成三角形 \ n");
- else if(a+b>c && a+c>b && b+c>a) {
- if(a==b && a==c)
- printf("构成等边三角形 \ n");
- else if(a==b || a==c || b==c)
- printf("构成等腰三角形 \ n");
- else
- printf("构成一般三角形 \ n");
- }
- else
- printf("不能构成三角形 \ n");
- return 0;
- }
思考: line14-line19 替换, 在软件环境中, 替换代码, 然后运行程序, 输入不同边长数 据进行测试验证.
- #include <stdio.h>
- int main() {
- double a,b,c;
- scanf("%lf %lf %lf", &a, &b, &c);
- if(a<0 || b<0 || c<0)
- printf("不能构成三角形 \ n");
- else if(a+b>c && a+c>b && b+c>a) {
- if(a==b || a==c || b==c) {
- if (a==b && a==c)
- printf("构成等边三角形 \ n");
- else
- printf("构成等腰三角形 \ n");
- }
- else
- printf("构成一般三角形 \ n");
- }
- else
- printf("不能构成三角形 \ n");
- return 0;
- }
2. 要求用户从键盘输入 0~9 之间的数字, 选择屏幕配色方案, 打印字符串.
运行程序, 分别输入 0~9 之间的不同数值, 观察程序运行结果, 分析并理解其中 if 语句实现的多分支结构的用 法.
- // 功能: 从键盘上输入数字选择屏幕配色方案, 打印字符串
- // 输入 1, 选择黑底绿色配色方案
- // 输入 2, 选择白底黑色配色方案
- // 输入 3, 选择蓝底黑色配色方案
- // 输入其它, 选择黑底白字配色方案 (默认)
- #include <stdio.h>
- #include <stdlib.h>
- int main() {
- char choice;
- // 显示菜单
- printf("输入 0~9 以内的数字, 选择屏幕背景色前景色方案: \n");
- printf("1-\t 黑底绿色 \ n");
- printf("2-\t 白底黑色 \ n");
- printf("3-\t 蓝底白色 \ n");
- printf("其它 -\t 黑底白色 (默认)\n");
- printf("\n 请输入, 选择你想使用的屏幕配色方案:");
- // 要求用户从键盘输入 0~9 的数字, 选择屏幕配色方案
- choice = getchar();
- // 根据用户输入, 设置屏幕配色方案
- if (choice == '1') {
- system("color 02");
- printf("《黑客帝国》一类的影视剧常见这种屏幕色:)\n");
- }
- else if(choice == '2') {
- system("color f0");
- printf("大部分编辑器默认是这种配色:)\n");
- }
- else if(choice == '3') {
- system("color 1f");
- printf("这是机器蓝屏故障时的不讨喜色:)\n");
- }
- else {
- system("color 0f");
- printf("控制台程序默认小黑窗:)\n");
- }
- printf("programming is fun, just [email protected][email protected]\n");
- return 0;
- }
思考: 如果把 line11 中用于存放用户选择的 choice 类型改成 int, 修改程序代码, 使其依然能够满足题目要求.
- // 功能: 从键盘上输入数字选择屏幕配色方案, 打印字符串
- // 输入 1, 选择黑底绿色配色方案
- // 输入 2, 选择白底黑色配色方案
- // 输入 3, 选择蓝底黑色配色方案
- // 输入其它, 选择黑底白字配色方案 (默认)
- #include <stdio.h>
- #include <stdlib.h>
- int main() {
- int a;
- // 显示菜单
- printf("输入 0~9 以内的数字, 选择屏幕背景色前景色方案: \n");
- printf("1-\t 黑底绿色 \ n");
- printf("2-\t 白底黑色 \ n");
- printf("3-\t 蓝底白色 \ n");
- printf("其它 -\t 黑底白色 (默认)\n");
- printf("\n 请输入, 选择你想使用的屏幕配色方案:");
- // 要求用户从键盘输入 0~9 的数字, 选择屏幕配色方案
- scanf("%d",&a);
- // 根据用户输入, 设置屏幕配色方案
- if (a == 1) {
- system("color 02");
- printf("《黑客帝国》一类的影视剧常见这种屏幕色:)\n");
- }
- else if(a == 2) {
- system("color f0");
- printf("大部分编辑器默认是这种配色:)\n");
- }
- else if(a == 3) {
- system("color 1f");
- printf("这是机器蓝屏故障时的不讨喜色:)\n");
- }
- else {
- system("color 0f");
- printf("控制台程序默认小黑窗:)\n");
- }
- printf("programming is fun, just [email protected][email protected]\n");
- return 0;
- }
Part3: 编程练习
1. 从键盘上输入一个三位数以内的十进制整数, 判断其是否满足正序, 逆序相同. 例如, 121 满足. 156 不满足. 输入不同测试数据, 确保程序逻辑无误, 无考虑不周的状况.
- #include<stdio.h>
- int main()
- {
- int a,b,c;
- printf("请输入一个三位数以内的十进制整数:");
- printf("计算其逆序数......\n");
- scanf("%d",&a);
- b=a%10*10+a/10;
- c=a/100+(a/10)%10*10+(a%10)*100;
- if(a<0||a>999)
- {
- printf("输入有误");
- }
- else if(a>9&&a<1000)
- {
- if(a==b||a==c)
- printf("%d 正序与逆序相同",a);
- else
- {
- printf("%d 正序与逆序不同",a);
- }
- }
- else if(a>0&&a<10)
- {
- printf("%d 正序与逆序相同",a);
- }
- return 0;
- }
2. 从键盘上输入年份和月份, 计算该月有多少天.(要求: 用 if 语句实现) 说明: 教材 p70 例 3.25 是用 switch 语句实现的. 结合示例程序, 理解算法逻辑, 用 if 语句编程实现. 输入不同测试数据, 确保程序逻辑无误, 无考虑不周的状况.
- #include<stdio.h>
- int main()
- {
- int year,month,day,leapyear;
- printf("输入年份 月份:\n");
- scanf("%d %d",&year,&month);
- if(year<0||month<1||month>12)
- printf("输入错误!\n");
- leapyear=year%4==0&&year%100!=0||year%400==0;
- if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
- day=31;
- else if(month==4||month==6||month==9||month==11)
- day=30;
- else
- day=28+leapyear;
- printf("%d 年 %d 月的天数为:%d\n",year,month,day);
- return 0;
- }
3. 从键盘输入一个百分制成绩 (整型量), 要求输出成绩等级: 优秀, 良好, 中等, 及格, 不及格.(要求: 用 switch 语句实现) 输入不同测试数据, 确保程序逻辑无误, 无考虑不周的状况.
- #include<stdio.h>
- #include<stdlib.h>
- int main ()
- {
- int score;
- printf("输入分数 (0~100):\n");
- scanf("%d",&score);
- if(score<0||score>100)
- {
- printf("分数不在有效区间内");
- exit(0);
- }
- switch(score/10)
- {
- case 10:
- case 9:printf("优秀 \ n");break;
- case 8:printf("良好 \ n");break;
- case 7:printf("中等 \ n");break;
- case 6:printf("及格 \ n");break;
- default:printf("不及格 \ n");break;
- }
- return 0;
- }
实验总结与体会
格式化输入 / 输出函数, 格式符使用中的注意事项: scanf 后需要地址符告诉系统输入数字的存储位置
通过本次实验, 对 if 语句, switch 用法是否已经理解并掌握: 掌握还不够
请总结列出. 本次实验尝试中踩的坑: 不同函数输入方式不同. int 型需要 scanf(), 而字符要 getchar();
掌握还是不够熟练, 发现问题比较慢 ; 头文件会忘记写; if 后运行的大括号会漏掉; if 后要执行不可加 ";"
来源: http://www.bubuko.com/infodetail-3274669.html