Part 1: 格式化输出函数printf()和格式化输入函数scanf():
- 观察运行结果
转换说明及其打印的输出效果:
%d | 按有符号十进制整数输出 |
%f | 按十进制浮点数输出 |
%c | 按字符型输出 |
%e | 按浮点型指数形式输出 |
%s | 按字符串输出 |
%o | 按无符号八进制整数输出 |
%x | 按无符号十六进制整数输出 |
关于数字:
%5d 输出数据长度为5,若输出的数据长度大于5,则按实际输出。
%lf 在d,o,x,u前,指定输出精度为long型;在e,f,g前,制定输出精度为double。
%.3f 对实数,指定小数点后3位数,四舍五入。对字符串,指定实际的输出位数。
%6.2f 输出数据长度为6,指定小数点后两位。
在输入数据为double类型是,要使用格式控制符%lf输出;输入数据为float类型时,要使用格式控制符%f输出。
- 查找错误
修改结果:
#includeint 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); printf("%lf,%lf\n",x,y); return 0;}
运行结果:
Part 4: switch语句体验练习:
源代码:
#includeint 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;}
去除break;后:
Part 5: 简单编程练习:
要求:用户从键盘输入一个答案选项(A,B,C,D之一),如果用户答案是'A',则输出提示信息"Binggo, you are right~",否则输出提示信息"try again~"。
ps:对于上述的要求,我个人认为是不太完善的。在日常应用中,很多时候用户在作答题目时并不一定会打开大写锁定,导致其作答的答案即使就是‘A',程序也会显示回答错误。所以我在这里擅自添加了一个“invalid answer,try again~"的提示选项,当用户的答案不是“A,B,C or D”时,程序便会提醒用户答案无效。
源代码:
#includeint main(){ int answer; printf("请输入你的答案(A,B,C or D):"); scanf("%c",&answer); if(answer!='A'&&answer!='B'&&answer!='C'&&answer!='D'){ printf("invalid answer,try again~\n"); } else switch(answer){ case 'A':printf("Binggo, you are right~\n");break; default :printf("try again~\n");break; } return 0;}
运行结果:
Part 6: 拓展练习:
- 要求:取一个无符号的十进制整数中的所有奇数数字,按原来的顺序组成一个新的数。
源代码:
#includeint main(){ int a,b=0,c,number,result=0; printf("Please input a number:"); scanf("%d",&number); while(number!=0){ a=number%10; number=number/10; switch(a%2){ case 1:b=b*10+a;break; default:break; } } while(b!=0){ c=b%10; b=b/10; result=result*10+c; } printf("%d",result); return 0;}
运行结果:
- 要求:输入一个正整数,求它的所有素数因子。
源代码:
#include#include int main(){ int a=1,b,number; printf("Please input a number:"); scanf("%d",&number); do{ switch(number%a){ case 0:for(b=2;b<=sqrt(a);b++) if(a%b==0)break; if(b>sqrt(a)&&a>1){ printf("%d ",a); }break; default:break; } a++; }while(a<=number); return 0;}
运行结果:
实验总结与体会:
- part 1部分,我们详细了解了不同的转换说明及其输出效果。知识点多且杂,在记忆背诵的同时更要在实践中加深对其的理解;后面的找错纠正中,两个错误更是我们平时练习的常见问题,须牢记在心。
再次强调:对于printf(),%f可表示单精度和双精度的任意一种;
对于scanf(),%f表示双精度,%fl表示单精度(通过指针的存储方向不同);
- part 2-5部分,主要是对几种函数和语句的熟悉和理解。其中值得我们注意的是:
1、对于putchar()和getchar()而言,它们只处理字符(单个),而printf()和scanf()为标准输入\输出函数,功能更加齐全;
2、对于switch语句,如果一个进入其中一个case而没有break,则程序会自动进入下一个case运行,直到出现break或运行完所有case;
- part 6部分来自于书后练习3,几乎使用了这次课所学的全部知识。
p.s.由于全部是我独立编写的,与书上的答案思路有所不同。若有问题,敬请指正,感激不尽!
评论地址:
https://www.cnblogs.com/NyaNyaGoose/p/10640071.html
https://www.cnblogs.com/zhaoyingshan/p/10621191.html
https://www.cnblogs.com/linmuqiao/p/10596479.html