第一次实验报告
C程序设计实验报告
实验项目:基本的程序语句实验和程序的简单算法设计实验
姓名:罗子健 实验地点:514物联网实验室 实验时间:2019/3/19
一、实验目的与要求
(1)掌握C语言几种基本数据类型,如整型(int)、字符型(char)、单精度型(float)、双精度型(double),以及由这些基本类型构成的常量和变量的使用方法。
(2)掌握C语言的运算符和表达式的正确使用。
(3)掌握自自增(++)和自减(--)运算符的正常使用。
(4)掌握基本的输入/输出函数scanf()、getchar()、printf()和putchar()函数的基本功能、调用方法、输入/输出格式控制规定等。
(5)能独立编写顺序结构程序并调试通过。
(6)用表达式语句、输入/输出语句解决简单的应用问题并上机实现。
(7)掌握结构化程序的算法描述方法。
(8)了解C语言的基本语法要素,能熟练地将算法描述转化成C语言程序。
(9)熟练掌握C语言地运算符,即运算符地优先级和结合性、运算规则、运算对象类型等。
二、实验内容
2.3.3实验练习:
问题的简单描述:从键盘输入一个大写字母,要求转换成小写字母输出这个小写字母相邻的两个字母,以及它们的ASCII码。
实验代码:
1 #include<stdio.h> 2 main() 3 { 4 char ch; 5 printf("请输入一个大写字母:\n"); 6 scanf("%c",&ch); 7 printf("小写字母为:%c,%c,%c\n",ch+31,ch+32,ch+33); 8 printf("ASCII码值为:%d,%d,%d",ch+31,ch+32,ch+33); 9 }
问题分析:实验过程中看了好久不知道怎么表示这个意思,有些无从下手,翻了好久书才知道到底应该怎么表示,明白之后就简单多了。
2.3.4实验练习:
问题的简单描述:从键盘输入一个3位整数,将输出该数的逆序数。例如,输入123,输出321.
实验代码:
1 #include<stdio.h> 2 int main() 3 { 4 int a,b,c,x,y; 5 printf("请输入一个3位的正整数;\n"); 6 scanf("%d",&x); 7 a=x/100;/*求x的百位数*/ 8 b=x%100/10;/*求x的十位数*/ 9 c=x%100%10;/*求x的个位数*/ 10 y=c*100+b*10+a;
11 printf("%d: %d\n",x,y); 12 return 0; 13 }
问题分析:要利用模运算求出它的各个位的数,因为是整型输出,所以是取整数。老师在实验前提了一下,实验过程中并没有遇到什么问题。特别要注意数字的位置。
2.3.5实验练习:
问题的简单描述:编写一个程序,用于医院收费处出纳算账。要求输入所在医院费用(西药费、检查费、材料费、床位费、观察费和护理费),打印出应付钱数,再输入病人所付款数,打印出应找的钱数(已知某病人,西药费268.2元,检查600元,注射用材料费206元,床位费120元,观察费360元,护理费220元)。
实验代码:
1 #include<stdio.h> 2 int main() 3 { 4 float x,j,c,hj,fk,zh,cw,g,f; 5 /*其中,x代表西药费;j代表检查费;c代表材料费;cw代表床位费;g代表观察费;f代表护理费;hj代表应付费;fk代表病人付款;zh代表应找回的金额;*/ 6 printf("输入西药费,检查费,材料费。床位费,观察费,护理费:\n") ; 7 scanf("%f,%f,%f,%f,%f,%f",&x,&j,&c,&cw,&g,&f);/*编写接受语句,将西药费、检查费、材料费、床位费、观察费、护理费存放在相应的变量中*/ 8 hj=x+j+c+cw+g+f;/*计算各项费用的金额*/ 9 printf("应付款(元):%.2f",hj); 10 printf("病人付款(元):"); 11 scanf("%f",&fk); 12 zh=fk-hj;/*得出应找回给病人的金额*/ 13 printf("计算结果:\n"); 14 printf("病人付款=%6.2f元\n应付款=%6.2f元应找回=%6.2f元\n",fk,hj,zh); 15 return 0; 16 }
问题分析:在实验中总是算出的结果是0,后面发现是因为代码里的%f好多打成了&f,改了之后又发现它的结果变成了负数,仔细检查了几遍发现是因为第7行的scanf中少打了一个%f。照着书上给的代码打上去的,并没有仔细的去打,也没有去检查。
3.3.1实验练习:
问题的简单描述:请用流程图表示该函数的算法。输入x值,输出满足函数关系的y值。并用C语言编写程序进行检验。
实验代码:
1 #include<stdio.h> 2 main() 3 { 4 float x,y; 5 printf("请输入x的值:"); 6 scanf("%f",&x); 7 if(x<1) 8 y=x; 9 else 10 if(x<10) 11 y=2*x-1; 12 else 13 y=3*x-1; 14 printf("y的值为%.2f\n",y); 15 }
问题分析:忽略了乘号不像以前一样可以省略不写,导致输出的结果错误。
3.3.2实验练习:
问题的简单描述:用流程图描述求解鸡兔同笼问题的算法:已知鸡兔的总头数为h(head),总脚数为f(feet),求鸡兔各有多少只?
实验代码:
1 #include<stdio.h> 2 #include<math.h> 3 main() 4 { 5 int h,f,x,y; 6 printf("鸡兔总数,鸡兔脚总数:"); 7 scanf("%d,%d",&h,&f); 8 if (h>0&&f>0) 9 { 10 x=(4*h-f)/2; 11 y=(f-2*h)/2; 12 printf("鸡:%d 兔:%d\n",x,y); 13 } 14 else 15 printf("输入错误!\n"); 16 }
问题分析:照着书上给的模板打的代码,后面发现无论输入什么东西,结果都是显示“输入错误”,看了周围的同学也是这样的,就一时间不知道为什么,思索了一会才发现是书上的模板错了,条件不是“if (x>0&&y>0)”而应该是“if (h>0&&f>0)”才是对的。
3.3.3实验练习:
问题的简单描述:有4个园塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1.这4个塔的高度均为10m,塔以外无建筑物。现输入任一点的坐标,若该点坐标在任意圆塔内,则输出圆塔的高度;若该点不在圆塔内,则输出0。
实验代码:
1 #include<stdio.h> 2 #include<math.h> 3 main() 4 { 5 int h=10; 6 float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4; 7 printf("请输入一个点(x,y)"); 8 scanf("%f,%f",&x,&y); 9 d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)); 10 d2=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2)); 11 d3=sqrt((x-x3)*(x-x3)+(y-y3)*(y-y3)); 12 d4=sqrt((x-x4)*(x-x4)+(y-y4)*(y-y4)); 13 if(d1>1&&d2&&d3>1&&d4>1) 14 printf("该点的高度为:0"); 15 printf("该点的高度为:%d",h); 16 }
问题分析:在这个实验的时候花了很长时间去理解题目,看了很久才看懂。
三、实验小结(在本次实验中收获与不足)
在本次实验中,我发现自己有以下几点不足:
- 对知识点的理解和掌握不够熟练;
- 对一些细节的东西不能很好的进行处理;
- 对书本的过分相信和依赖;
- 对题目的理解能力不是很好。
我也有以下几点收获:
- 能够正确定义程序的变量;
- 加深的对算法概念的理解;
- 可以使用if语句来根据条件的真假来进行判断;
- 能够熟练的使用printf和scanf来输出变量和输入数据。