实验2(2019.3.26)
【实验结论】
一、Part1:格式化输出函数printf()和格式化输入函数scanf().
1、几个常用的格式符%d,%f,%c,%e,%s的常用用法。
便于直观体现,就基于书本P45的表3-1加工一下,有如下结论:
格式符 | 含义 | 举例 | 结果 | 特殊的注意事项 |
%d | 输出/入十进制数 | int a=567;printf("%d",a); | 567 | %5d:输出/入字符宽度为5的十进制数 |
%f | 输出/入浮点数 | float a=567.789;printf("%f",a); | 567.789000 |
%lf:输出/入字符为长浮点数 %.3f:输出/入浮点数小数点后字符宽度为3 %6.2f:输出/入浮点数共占6个字符宽度,其中小数部分保留2位(占2个字符宽度) |
%c | 输出/入字符形式 | char a=65;printf("%c",a); | A | |
%e | 输出/入指数形式 | double a=567.789;printf("%e",a); | 5.677890e+002 | |
%s | 输出/入字符串 | printf("%s","ABC"); | ABC |
2、对于格式符"%lf",经资料查找和多次测试,发现该格式符在输入的类型为双精度(double)类型时必须使用。
二、Part4:switch语句体验练习。
完整的程序源码如下:
#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; }
case后面有break时,程序运行截图如下:
而当case后面的两个”break“时被我删掉之后,程序运行截图如下:
用一个表情包形容我当时的反应:
为什么会出现这种情况?
后来我翻了一下书,第67页最下面的⑦项是这么写的:
⑦每个case后面语句序列里的break语句可有可无,但执行效果不同。当有break语句时,遇到break语句,程序就跳出这一层switch语句结构,转到其结构后面的语句执行;当没有break 语句时,程序就会一直执行下去,知道遇到break语句或该switch结构结束。
上面的话看起来很绕口,实际逻辑很简单:有break,这个条件语句遇到break成立的条件就结束了;没有break,那么这个条件语句就老老实实地从成立的那个语句运行到截止吧。
三、Part5:简单编程小练习。
(一)用if......else语句。
程序源码如下:
#include<stdio.h> int main(){ char ch; printf("please write down your answer:\n"); scanf("%c",&ch); if(ch=='A') printf("Bingo,you are right!\n"); else printf("try again~\n"); return 0; }
运行结果如下:
无误。
(二)用switch语句。
那么:
#include<stdio.h> int main(){ char ch; printf("please write down your answer:\n"); scanf("%c",&ch); switch(ch){ case 'A':printf("Bingo,you are right\n");break; default:printf("try again~\n"); } return 0; }
运行结果:
也无误。
【实验总结与体会】
1、在这次实验前,对于精度要求、字符宽度等细节的理解还不是很到位。但经过这次实验,对这些细节有了更进一步的清醒认识,但还不能说非常熟练,还需要在不断的实验中总结和提高。
2、在格式化输入函数和输出函数中,注意换行转义字符“\n”的位置在双引号里面。
3、在if......else语句中if和else后面不需要加分号。
总之,实践出真知。只有不断地实验、操作,才能对有关知识有更好的掌握。