第一次作业
一、实验结论
1、实验任务1:打印一个字符小人
①在列方向上打印两个字符小人:
#include <stdio.h> int main() { printf(" 0 \n"); printf("<H>\n"); printf("I I\n"); printf("\n"); printf(" 0 \n"); printf("<H>\n"); printf("I I\n"); return 0; }
结果如图:
②在行方向上打印两个字符小人:
#include <stdio.h> int main() { printf(" 0 "); printf(" 0 \n"); printf("<H> "); printf("<H>\n"); printf("I I "); printf("I I\n"); return 0; }
结果如图:
2、实验任务2:一个简单的运算程序
①定义为整型时:
#include <stdio.h> int main() { int x,y; int r1,r2,r3,r4; x=1; y=2; r1=x+y; r2=x-y; r3=x*y; r4=x/y; printf("r1=%d\n",r1); printf("r2=%d\n",r2); printf("r3=%d\n",r3); printf("r4=%d\n",r4); return 0; }
结果如图:
②定义为浮点型时:
#include <stdio.h> int main() { float x,y; float r1,r2,r3,r4; x=1; y=2; r1=x+y; r2=x-y; r3=x*y; r4=x/y; printf("r1=%f\n",r1); printf("r2=%f\n",r2); printf("r3=%f\n",r3); printf("r4=%f\n",r4); return 0; }
结果如图:
③分析结果中r4不同的原因:
float型变量精度高,保留小数部分;int型变量精度低,且预留字节中没有小数的位置。当题中计算的返回值有小数部分时,int型量会自动舍去小数部分(没有储存小数的空间),而float型没有损失精度,显示正确结果。
3、实验任务3:简单运算
①n=100时:
#include <stdio.h> int main() { int n,r1,r2,r3,r4; n=100; r1=n*(n+1)/2; r2=(n+1)*n/2; r3=n/2*(n+1); r4=(n+1)/2*n; printf("n=%d\n",n); printf("r1=%d\n",r1); printf("r2=%d\n",r2); printf("r3=%d\n",r3); printf("r4=%d\n",r4); return 0; }
结果如图:
②n=101时:
#include <stdio.h> int main() { int n,r1,r2,r3,r4; n=101; r1=n*(n+1)/2; r2=(n+1)*n/2; r3=n/2*(n+1); r4=(n+1)/2*n; printf("n=%d\n",n); printf("r1=%d\n",r1); printf("r2=%d\n",r2); printf("r3=%d\n",r3); printf("r4=%d\n",r4); return 0; }
结果如图:
③
对应的数学表达式为:½n*(n+1)
r3和r4在n取奇数和偶数时结果有误的原因分析:本质上是int型变量导致的精度损失。题中的运算是按照从左到右的顺序进行的,则以n=101为例:
r3=n/2*(n+1)=101/2*102=50*102=5100(在定义为int型时返回值中的小数部分被自动舍去)
当n=100时,r4=101,同上理。
4、实验任务4:一个简单的文字测试程序
①测试你是哪一类学习者
#include <stdio.h> int main() { int answer; char words[5000]; printf("网课学习让一些人欢喜一些人忧.\n"); printf("1.作为一个宅,社恐,觉得这样很好.有网络,自主学习,很ok.\n"); printf("2.不喜,不喜,很不喜,眼睛快瞎了,脑壳有点卡…\n"); printf("3.中间派,不知道,说不清.\n"); printf("4.其它…\n"); printf("你的选择: "); scanf("%d", &answer); if(answer==4) { printf("请补充说明你的想法: \n"); getchar(); gets(words); } printf("\n"); printf("当遇到问题时,你会选择:\n"); printf("1.遇到问题,就解决问题。不懂的,搜索式学习,逐个击破.\n"); printf("2.遇到问题,不高兴,然后,…,没有了.\n"); printf("3.其它…\n"); printf("你的选择: "); scanf("%d", &answer); if(answer==1) printf(":)\n"); else if(answer==2) printf("这样不能解决问题啊…我们选择1好不好:)\n"); else if(answer==3) { printf("请补充说明你的想法:\n"); getchar(); gets(words); } return 0; }
结果如图:
②自己乱写的非要起名字的话就叫“一个自闭人的疑问”吧
#include <stdio.h> int main() { int answer; char words[5000]; printf("更喜欢身处一群热闹的人中还是更乐意独处?\n"); printf("1.喜欢人多热闹\n"); printf("2.喜欢独处\n"); printf("3.不一定,看情况\n"); printf("4.其它\n"); printf("你的选择是:"); scanf("%d",&answer); if(answer==4) { printf("请补充说明你的想法:\n"); getchar(); gets(words); } else if(answer==2) { printf("那没事了\n"); return 0; } printf("\n"); printf("是喜欢和朋友们一起还是喜欢热闹?\n"); printf("1.喜欢和朋友一起\n"); printf("2.喜欢热闹!\n"); printf("3.有什么区别吗?\n"); printf("4.都不是,是:\n"); printf("你的选择是:"); scanf("%d",&answer); if(answer==1) printf("安静的朋友为此感到快乐\n"); else if(answer==2) printf("很有烟火气!\n"); else if(answer==3) printf("或许有呢?\n"); else if(answer==4) { printf("请补充说明你的想法:\n"); getchar(); gets(words); } return 0; }
结果如下:
二、实验总结
1、疑问:
①关于实验1,有没有除了这种手动分行/不分行、打空格键和复制粘贴代码以外的简易实现方式?
②关于实验4,定义变量时[5000]是表示对输入字数限制吗?
2、收获:
①更加明确整型int定义和浮点型float定义的区别以及它们对实际运算的影响:对于明确的返回数必为整数的变量,定义为整型可以节约存储空间;但是对于运算过程中可能出现小数形式的变量,定义为整型意味着精度的损失,需要定义成浮点型来保持运算的准确性。整型变量表示含小数的返回量时是直接将小数部分全部舍去的,这和整型变量定义的存储空间有关,与数学意义上的舍去无关。
②对于程序运行的顺序和输出输入的交互有了更深的理解。对较简单的逻辑运算和条件函数的运用有了更深的理解。