实验结论
Part 1: 格式化输出函数printf()和格式化输入函数scanf()
1.在c程序开发环境下输入程序ex2_2.c,查找并修改错误:
修改前:
修改后代码:
/*
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("%f,%lf",&x,&y);
printf("%lf,%lf\n",x,y);
return 0;
}
运行结果如预期:
2.几个常用的格式符%d, %f, %c, %e, %s的常用用法:
%d是指按十进制整数输出,
%f是指按浮点数输出,小数点后默认保留六位,
%c是指按字符输出,
%e是指按(以十为底的)指数形式输出,
%s是指按字符串输出。
关于如%5d, %lf, %.3f, %6.2f的用法:
%5d表示指定输出宽度为5的整数,
%lf指定输出精度为double型,
%.3f表示四舍五入后指定输出小数位的宽度为3位,
%6.2f表示数字整体长度为6,小数部分(四舍五入)保留两位,不足用空格补。
3.必须使用格式符%lf的情况:
与输出的情况不同,用scanf输入double 型数据时必须使用%lf。
Part4: switch语句体验练习
1.程序源码:
#include <stdio.h>
int main() {
int level;
printf("输入现在状态等级(1-5): ");
scanf("%d",&level);
switch(level) {
case 1: printf("high翻了:)\n"); break;
case 2: printf("low爆了:(\n"); break;
default: printf("一言难尽,无法概括。。。\n");
}
return 0;
}
2.运行测试结果:
有break语句:
无break语句:
运行结果不同体现在去掉break语句后程序在做完分支语句后继续执行之后的分支语句,并没有跳出该switch语句结构。造成程序流程发生变化。
Part 5: 简单编程小练习
程序功能:
编程模拟用户做选择题的情况:要求用户从键盘输入一个答案选项(A,B,C,D之一),
如果用户答案是'A',则输 出提示信息"Binggo, you are right~",否则,输出提示信息"try again~"。
程序源码:
#include <stdio.h>
int main() {
int ans;
printf("请输入你的答案(A,B,C or D): ");
scanf("%c",&ans);
switch(ans) {
case 'A': printf("Binggo, you are right~\n"); break;
case 'B':
case 'C':
case 'D': printf("Try again~\n"); break;
default: printf("Invalid input\n");
}
return 0;
}
运行测试截图:
实验总结与体会
- 语法掌握得还不牢,很多细节没记住,自己动手编程序运用的时候自然就会出现差错或者错了也不知道错在哪里。
- 不理解为什么用scanf输入double 型数据时必须使用%lf。原理是什么?希望能得到解答。
- 一开始以为switch语句不加break语句运行完case之后会跳出switch结构,以为default只有在case都不成立才会执行。结果并不是这样。实践出真知,哈哈。