实验二
Posted gebilaowangfangruidong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二相关的知识,希望对你有一定的参考价值。
#实验结论
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!"; int y=3, z=4; printf("%d %d ", y, z); printf("y=%d, z=%d ", y,z); printf("%8d,%2d ", x,x); printf("%f, %8f, %8.1f, %0.2f, %.2e ",f,f,f,f,f); printf("%lf ",m); printf("%3c ", ch); printf("%s %15s %10.5s %2.5s %.3s ",a,a,a,a,a); return 0;
}
第三行:输出格式为“%8d”即数据宽度为8,进行右对齐。
输出格式为“%2d”,因为数据进行右对齐,从右边进行输出,因此输出原型。
第四行:输出格式为“%f”float以二进制形式储存,因此在转变数据输出时输出的时123.456的近似数。
输出格式为“%8f”因为输出数据占8个单位,其中整数整体占一个单位,“.”占一个单位,小数位一个数据占一个单位(001原因见上一行)。
输出格式“%8.1f”其中.1代表小数点后只有一个数据宽度,通过四舍五入将4进一位为5。同时数据宽度为8个单位,因此整数前右对齐,留出空格。
输出格式“%0.2f”输出时四舍五入保留两位小数。
输出格式“%.2e”%e指以指数形式输出实数,.2指输出的小数部分的位数,其中又进行了四舍五入。
第五行:输出格式“%lf”,因为m的输入形式是double型,因此以十进制形式输出,lf表示双精度浮点数,所占单位也比f大,因此在小数后面取0占位。
第六行:输出格式“%3c",表明数据宽度为3个单位,因此右对齐,在a的左边留出三个空格。
第八行:输出格式“%15s”,表明输出字符串占15个单位,右对齐,因此在左边空格占位。
第九行:输出格式“%10.5s”,10代表字符串占据10个单元,.5表示输出5个字符。右对齐,所以在左边空格占位。
第十行:输出格式“%2.5s”,2表示占2个单位,.5表示输出5个字符,右对齐。
第十一行:输出格式“%.3s”,表示输出3个字符。
ex2-2.cpp
错误源代码:
#include <stdio.h>
int main() {
double x,y;
char c1,c2,c3;
int a1,a2,a3;
scanf("%d%d%d",a1,a2,a3); -在a1,a2,a3前面均加上&
printf("%d,%d,%d
",a1,a2,a3);
scanf("%c%c%c",&c1,&c2,&c3);
printf("%c%c%c
",c1,c2,c3);
scanf("%f,%lf",&x,&y); -在%f前加上l
printf("%f,%lf
",x,y);
return 0;
}
修改源代码:
#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 ",a1,a2,a3); scanf("%c%c%c",&c1,&c2,&c3); printf("%c%c%c ",c1,c2,c3); scanf("%lf,%lf",&x,&y); printf("%f,%lf ",x,y); return 0; }
运行结果:
总结1.
%d:%md-整型输出单位为m个单位,%m.nd-整型输出占m个单位,并且如果输出数据不满n个,即在左边用0占位。
%f:%lf-双精度浮点数,对应double。%m.nf-数据占m个单位,小数点后保留n个小数(进行四舍五入),%.nf-整数部分不变,小数部分保留n个小数(四舍五入)
%c:%mc-表示字符占m个单位,右对齐(空格补位)。
%s:%ms-字符串占m个单位,右对齐(空格补位)。%m.ns-字符串占m个单位,且字符串显示n个字符。
%lf:是double类型,如果用%f输入,会导致输入错误。
%ld:是长整型数,在整数是长整型时,如果用%d输出,就会只取整型前几个数,导致输出错误。
Part2: 验证性内容
ex2-3.cpp
初始源代码:
#include <stdio.h> int main() { double a,b,c; scanf("%lf %lf %lf", &a, &b, &c); if(a<0 || b<0 || c<0) printf("不能构成三角形 "); else if(a+b>c && a+c>b && b+c>a) { if(a==b && a==c) printf("构成等边三角形 "); else if(a==b || a==c || b==c) printf("构成等腰三角形 "); else printf("构成一般三角形 "); } else printf("不能构成三角形 "); return 0; }
运行结果:
也可替换成:
#include <stdio.h> int main() { double a,b,c; scanf("%lf %lf %lf", &a, &b, &c); if(a<0 || b<0 || c<0) printf("不能构成三角形 "); else if(a+b>c && a+c>b && b+c>a) { if(a==b || a==c||b==c) {if(a==b&&a==c) printf("构成等边三角形"); else printf("构成等腰三角形"); }else printf("构成一般三角形"); } else printf("不能构成三角形 "); return 0; }
输出结果不变。
ex2-4.cpp
初始源代码:
#include <stdio.h> #include <stdlib.h> int main() { char choice; // 显示菜单 printf("输入0~9以内的数字,选择屏幕背景色前景色方案: "); printf("1- 黑底绿色 "); printf("2- 白底黑色 "); printf("3- 蓝底白色 "); printf("其它- 黑底白色(默认) "); printf(" 请输入, 选择你想使用的屏幕配色方案: "); // 要求用户从键盘输入0~9的数字,选择屏幕配色方案 choice = getchar(); // 根据用户输入,设置屏幕配色方案 if (choice == ‘1‘) { system("color 02"); printf("《黑客帝国》一类的影视剧常见这种屏幕色:) "); } else if(choice == ‘2‘) { system("color f0"); printf("大部分编辑器默认是这种配色:) "); } else if(choice == ‘3‘) { system("color 1f"); printf("这是机器蓝屏故障时的不讨喜色:) "); } else {
system("color 0f"); printf("控制台程序默认小黑窗:) "); } printf("programming is fun, just try@_@ "); return 0; }
运行结果:
输入4~9:
如果变量choice由char类型改成int类型:
应将源代码改为:
#include <stdio.h> #include <stdlib.h> int main() { int choice; // 显示菜单 printf("输入0~9以内的数字,选择屏幕背景色前景色方案: "); printf("1- 黑底绿色 "); printf("2- 白底黑色 "); printf("3- 蓝底白色 "); printf("其它- 黑底白色(默认) "); printf(" 请输入, 选择你想使用的屏幕配色方案: "); // 要求用户从键盘输入0~9的数字,选择屏幕配色方案 scanf("%d",&choice); // 根据用户输入,设置屏幕配色方案 if (choice == 1) { system("color 02"); printf("《黑客帝国》一类的影视剧常见这种屏幕色:) "); } else if(choice == 2) { system("color f0"); printf("大部分编辑器默认是这种配色:) "); } else if(choice == 3) { system("color 1f"); printf("这是机器蓝屏故障时的不讨喜色:) "); } else { system("color 0f"); printf("控制台程序默认小黑窗:) "); } printf("programming is fun, just try@_@ "); return 0; }
输出结果不变。
part3: 编程练习
1、从键盘上输入一个三位数以内的十进制整数,判断其是否满足正序、逆序相同。
#include<stdio.h> int main() { int a,b,c; scanf("%d",&a); b=a/10+(a%10)*10; c=a/100+(a/10-(a/100)*10)*10+((a%100)%10)*100; if(a>=0&&a<10) printf("%d正序和逆序相同",a); else if(a==b||a==c) printf("%d正序和逆序相同",a); else printf("%d正序和逆序不相同",a); return 0; }
结果:
2、 从键盘上输入年份和月份,计算该月有多少天
源代码:
#include<stdio.h> #include<stdlib.h> int main() { int y,m,d,r; scanf("%d%d",&y,&m); if(y<=0||m<1||m>12) { printf("输入的数据错误! "); exit(0); } r=y%400==0||y%4==0&&y%100!=0; if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) d=31; else if(m==4||m==6||m==9||m==11) d=30; else {d=28+r;} printf("%d年%d月的天数为:%d ",y,m,d); return 0; }
输出结果:
3、从键盘输入一个百分制成绩(整型量),要求输出成绩等级:优秀、良好、中等、及格、不及格
源代码:
#include<stdio.h> #include<stdlib.h> int main() { int x; scanf("%d",&x); if(x<0||x>100) { printf("分数不在有效区间内 "); exit(0); } x=x/10; switch(x) { case 0: case 1: case 2: case 3: case 4: case 5:printf("不及格 ");break; case 6:printf("及格 ");break; case 7:printf("中等 ");break; case 8:printf("良好 ");break; case 9: case 10:printf("优秀 ");break; } return 0; }
运行结果:
#实验总结与体会
1、if();出错
2、switch用法时,忘加break;做截止。
3、#include<stdlib.h>
······
if(x<0||x>100)
{
printf("分数不在有效区间内
");
exit(0);
}
······
上面一段我在switch语句中想用default代替,结果发现不好代。
以上是关于实验二的主要内容,如果未能解决你的问题,请参考以下文章