第一次试验报告

C程序设计实验报告

实验项目:基本程序语句实验、程序的简单算法实验
姓名:黄澄 实验地点: 514实验室 实验时间:2019年3月19日

一、实验目的与要求

1、了解字符在计算机中以及ASCII码方式表达,字符的类型字长其数的表示范围。
2、掌握算数运算符的使用,正确定义程序中的变量;
3、用if语句根据条件的真假进行判断;掌握运算符的运算规则。
4、熟练掌握scanf用户提供的数据以及printf的输出的变量。

二、实验内容

1、实验练习:字符与ASCII码(2.3.3)
问题的简单描述:从键盘输入一个大写字母,要求转换成小写字母输出,并输出这个小写字母相邻的两个字母,以及它们的ASCII码。
2实验代码:


#include<stdio.h>
main()
{ char x;
printf("请输入一个大写字母\n");
scanf("%c",&x);
printf("小写字母为:%c,%c,%c\n",x+31,x+32,x+33);
printf("ASCII码值为%d,%d,%d",x+31,x+32,x+33);
}

3问题分析

因为输入的是字符,所以用char;字符的输入输出都是用%c;A与a的ASCII码相差32,所以利用这个原理就可以实现大小写的转换了。
出现的问题:scanf的输入是写成了%c即

scanf("%d",&x);

接着在printf中漏掉一个分号。
解决方法:每一步都仔细的写,多问一句为什么。

2、实验练习:运算符与表达式的运用(2.3.4)

1问题的简单描述:从键盘输入一个三位整数,将输出该数的逆序数。例如输入123,输出321。
2实验代码:

#include<stdio.h>
main()
{
int a,b,c,x,y;
printf("请输入一个3位的正整数:\n");
scanf("%d",&x);
c=x/100;
b=x%100/10;
a=x%10;
y=a*100+b*10+c;
printf("%d:%d\n",x,y);
return 0;
}

3问题分析
解决思路:需要把三位数提取写出来,然后进过放大就可以了,百位:X除以100就可以得到,因为除号可以得到整数。十位:X除以100取余得到一个十位数接着在除以10就可以把十位数提取出来。个位:除以10取余即可。
出现的问题:

y=100a+10b+c;

这是一个不知道怎么形容的错误,个人习惯的问题。学习一段时间就会忘记得。
解决方法:书写规范的问题,自己私下多写一些代码,出错多了就会发现问题,就会熟悉,就会变得规范。

3.实验练习:2.3.5

1编写一个程序,用于医药收费处纳算账。要求输入所在医院费用(西药费、检查费、材料费、床位费、观察费和护理费),打印出应付钱款,再输入病人所付款数,打印出应找钱数(已知某病人,西药费268.2元,检查费600元,注射用材料费206元,床位费120元,观察费360元,护理费220元)。
2、实验代码

#include<stdio.h>
int main()
{ float x,j,c,hj,fk,zh,cw,g,f;
printf("输入西药费,检查费,材料费,床位费,观察费,护理费:\n");
scanf("%f,%f,%f,%f,%f,%f,",&x,&j,&c,&cw,&g,&f);
hj=x+j+c+cw+g+f;
printf("应付款(元):%.2f",hj);
printf("病人付款(元):");
scanf("%f",&fk);
zh=fk-hj;
printf("计算结果:\n");
printf("病人付款=%6.2f元\n应收款=%6.2f元\n应找回=%6.2f元\n",fk,hj,zh); 
return 0;
}

3、问题分析
解题思路:这个题中规中矩的没有其他的什么设计难度,这需要一步一步的进行就可以了。其中float的输入与输出都是用%f,而double用%lf;其中的%.2f表示为两位小数。
出现的问题:出现不值得提的一些小问题,运行一下是可以解决的。
解决方法:运行调试,不要忽略警告。

4.实验练习:3.3.1

1有一函数
请用流程图表


示该函数的算法。输入x值,输出满足函数关系的y值。并用c语言编写程序进行检验。
2、实验代码

#include<stdio.h>
main()
{
float x,y;
printf("请输入x的值:"); 
scanf("%f",&x);
if (x<1)
printf("%f",x);
else if (x<10&&x>1)
printf("%f",x*2-1); 
else 
printf("%f",x*3-1);
}

3、问题分析
解题思路:首先分析是一个分段函数可以用if语句来完成,其中有两个需要判断的地方,因此可以用if,else实现。
出现的问题:

if (x<1)
{ printf("%f",x);
else if (x<10&&x>1)
printf("%f",x*2-1); }
else 
{ printf("%f",x*3-1);}

这是因为我认为if和elseif是一起的,然后在else,这个程序是错误的,其实他们都应该是单独存在的。
解决方法:这是涉及大括号的使用,应为本身对if语句不熟悉所以会有这问题,应该看看关于if的嵌套使用方法。

5.实验练习:

1鸡兔同笼问题。将鸡和兔子关在同一个笼子里,假如知道鸡和兔子的总头数h,鸡和兔的总脚数f,请设计算法,能计算出鸡和兔分别有多少只。
2实验代码

#include<stdio.h>
main()
{
int h,f,x,y;
printf("鸡兔总数,鸡兔总数:");
scanf("%d,%d",&h,&f);
if(h>0&&f>0)
{
x=(4*h-f)/2;
y=(f-2*h)/2;
printf("鸡:%d 兔:%d\n",x,y);
}
else
printf("输入错误"); 
}

3、问题分析
解题思路:这里涉及到判断可以用if语句来做,算法已经给出所以这题难度降低,假设所有的都是兔子那么少了的多了的腿的数量就是鸡腿的数量。与用&&表示。
出现的问题:

if(x>0&&y>0)
{
x=(4*h-f)/2;
y=(f-2*h)/2;
printf("鸡:%d 兔:%d\n",x,y);
}

这是被书误导了,导致可以运行但结果一直出错,之后再反反复复的检查发现不是程序设计的问题是数据出现了错误。
解决方法:给变量命名时最好是选择一些有意义的字符,首先看起来舒服,记起来也方便。跟着自己的思路写程序,弄清每一个步骤。

6.实验练习:3.3.3

1根据平面坐标,输出圆塔的高度。
2实验代码

#include<stdio.h>
#include<math.h>
main()
{ int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
printf ("请输入一个点(x,y)");
scanf("%f,%f",&x,&y);
d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
d2=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
d3=sqrt((x-x3)*(x-x3)+(y-y3)*(y-y3));
d4=sqrt((x-x4)*(x-x4)+(y-y4)*(y-y4));
if(d1>1&&d2>1&&d3>1&&d4>1)
printf("该点高度为:0");
else 
printf("该点高度为:10");
}

3、问题分析
解题思路:用两点之间的距离公式判断是否在圆内,需要用到开方sqrt,因此需要用到函数,头文件要包含<math.h>
出现的问题:

scanf("%f,%f",&x,&y);
d1=sqrt(x-x1)*(x-x1)+(y-y1)*(y-y1);
d2=sqrt(x-x2)*(x-x2)+(y-y2)*(y-y2);
d3=sqrt(x-x3)*(x-x3)+(y-y3)*(y-y3);
d4=sqrt(x-x4)*(x-x4)+(y-y4)*(y-y4);

错误是没有用括号括起开方的部分,运行之后检查就可以发现错误。其中a的平方用a*a表示而不是a^2表示;
解决方法:注意拼写以及符号的使用问题,开方部分要用括号括起来。

实验小结

收获:对于变量有了更深层的理解,同时体会到了程序设计中的严谨性的问题,每一个符号,每一个字符都应该应用的有理有据,int char float的选择,%c,%d的使用,%f与%lf的区别这都需要思考和判断,因此理解他们的深层含义可以帮助写出更加合理的程序。程序的步骤对于实现功能会造成意想不到的影响,有的放前面没影响但是有的却又有影响如

1 #include<stdio.h>
2 main()
3 { char a,b,c;
4 printf("请输入一个大写字母\n");
5 scanf("%c",&a);
6 b=a+31;
7 c=a+33;
8 a=a+32;
9 printf("小写字母为:%c,%c,%c\n",b,a,c);
10 printf("ASCII值为:%d,%d,%d",b,a,c);
11 }

假如a,b,c的位置两两交换,会出现结果变化与结果不变会的情况,这也是程序设计时要考虑的。
觉得C语言的学习还是要多练习,课堂中发现自己打代码的速度比较慢,自己一个人打代码的时候没有发现这问题,还是得多交流交流,其次看别人的代码也是一减很有意思的一件事,会发现不同的想法,或者说是一题多解,经过比较可以让自己的水平得到提升。有些看起来简短的代码不一定是最好的代码,我觉得好代码是容易理解的不需要花费脑子认真思考的,相比聪明的代码我更喜欢笨笨一点的代码。

posted @ 2019-03-24 17:12  孤岛WTT  阅读(239)  评论(0编辑  收藏  举报