第一次实验报告

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 }

 

问题分析:在这个实验的时候花了很长时间去理解题目,看了很久才看懂。

三、实验小结(在本次实验中收获与不足)

在本次实验中,我发现自己有以下几点不足:

  1. 对知识点的理解和掌握不够熟练;
  2. 对一些细节的东西不能很好的进行处理;
  3. 对书本的过分相信和依赖;
  4. 对题目的理解能力不是很好。

我也有以下几点收获:

  1. 能够正确定义程序的变量;
  2. 加深的对算法概念的理解;
  3. 可以使用if语句来根据条件的真假来进行判断;
  4. 能够熟练的使用printf和scanf来输出变量和输入数据。
posted @ 2019-03-24 00:58  微风未起  阅读(338)  评论(0编辑  收藏  举报