c程序设计实验报告
姓名:张乐 实验地点:一教522 实验时间:2021.4.15
一、实验目的与要求
(1)掌握结构化程序的算法描述方法。
(2)了解C语言的基本语法要素,能熟练地将算法描述转化为C语言程序。
(3)熟练掌握C语言运算符的优先级、结合性、运算规则、运算对象类型等。
(4)掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”)。
(5)学会正确的使用逻辑表达式和关系表达式。
(6)掌握各种形式的if语句语法和使用方法。注意if语句中if和else的匹配关系,以及if语句的嵌套。
(7)掌握switch语句的语法和使用方法。注意在switch语句中break语句的语法及switch语句的嵌套。
(8)能独立编写分支结构程序并测试通过。
(9)用if语句、switch语句解决简单的应用问题并上机实现。
二、实验内容
1、实验练习:3.3.1
(1)问题描述:自己设计合适的算法流程图。输入x值,输出满足函数关系的y值。
(2)实验代码:
#include<stdio.h>
main()
{
float x,y;
printf("请输入x的值:");
scanf("%f",&x);
if(x<1)
{
y=x;
printf("y的值为%.2f",y);
}
else if(x<=10)
{
y=2*x-1;
printf("y的值为%.2f",y);
}
else
{y=3*x-1;
printf("y的值为%.2f\n",y);
}
}
(3)问题分析:
·在使用if语句嵌套时没有加大括号,导致代码运行失败,请教了老师,在老师的帮助下解决了该问题。
·if后面的括号里写完条件语句之后,不用输入分号。
2、实验练习:3.3.2
(1)问题描述:用算法流程图描述求解鸡兔同笼问题的算法:已知鸡兔的总头数为h,总脚数为f,求鸡兔各有多少只?
(2)实验代码:
#include<stdio.h>
void main()
{
int h,f,x,y;
printf("鸡兔总数,鸡兔脚总数:");
scanf("%d,%d",&h,&f);
if(x>0&&y>0)
{
x=(4*h-f)/2;
y=(f-2*h)/2;
printf("鸡有%d只 兔有%d只\n",x,y);
}
else
printf("输入错误!\n");
}
(3)问题分析:
·这个实验中主要出现的问题是关于x(鸡),y(兔)的表达式的计算,再找到问题之后,在草稿纸上用关于h,f的式子表达出了x,y。
3、实验练习:3.3.3
(1)问题描述:有四个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1,四个塔的高度均为10m,塔以外无建筑物。现输入任意一点的坐标,若该点的坐标在任意一个圆塔内,则输出圆塔的高度;若该点不在圆塔内,则输出0.
(2)实验代码:
#include<stdio.h>
#include<math.h>
void 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)
h=0;
printf("该圆塔的高度为%d",h);
}
(3)问题分析:
·在求两点间距离时,运用了两点间距离公式,在上机操作时,忘记了引用数学公式头文件,经过同学的提醒,改正了这个错误。
·求两点间距离时,平方只能用相乘的形式。
4、实验练习:4.3.1
(1)问题描述:读入三个表示箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。
(2)实验代码:
#include<stdio.h>
int main()
{
int l,w,h;
printf("请输入箱子的长,宽,高:\n");
scanf("%d%d%d",&l,&w,&h);
if(l==w==h)
printf("该箱子是正方体。\n");
else
printf("该箱子是长方体。\n");
return 0;
}
(3)问题分析:
·if后面的条件语句要注意用两个等于号。
5、实验练习:4.3.2
(1)问题描述:编写程序实现如下功能:商店有打印纸(18元/本)、墨盒(132元/个)、光盘(4.5元/片)出售,商店进行优惠酬宾活动。具体规则如下:顾客购买商品的总额超过100元,优惠%5;超过200元,优惠%6;超过300元,优惠%7;超过400元,优惠%8;超过500元,优惠%10。根据不同的购买量,计算应付货款。
(2)实验代码:
#include<stdio.h>
void main()
{
int x,y,z,a;//x为打印纸的数量,y为墨盒的数量,z为光盘的数量
float sum;
sum=0.0;
printf("请输入打印纸,墨盒,光盘的数量:\n");
scanf("%d%d%d",&x,&y,&z);
sum=18*x+132*y+4.5*z;
a=sum/100;
switch(a)
{
case 1:sum=sum*0.95;break;
case 2:sum=sum*0.96;break;
case 3:sum=sum*0.93;break;
case 4:sum=sum*0.92;break;
default:sum=sum*0.9;break;
}
printf("应付款%.2f",sum);
return 0;
}
(3)问题分析:
·对于sum函数的应用不够熟悉,这道题是在同学的指导下完成的。对于其中一些细节性的知识一知半解,还有就是对switch···case语句嵌套掌握的不够熟练。
6、实验练习:4.3.3
(1)问题描述:输入某一年、月的数值,输出该月的天数。
(2)实验代码:
#include<stdio.h>
int main()
{
int year,month,days;
printf("Please enter year and month:\n");
scanf("%d%d",&year,&month);
switch(month)
{
case 2:if(year%4==0&&year%100!=0||year%400==0)
days=29;
else days=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days=31;break;
case 4:
case 6:
case 9:
case 11: days=30;break;
}
printf("%d年%d月%d天",year,month,days);
return 0;
}
(3)问题分析:
·判断闰年的条件用代码表示不太会,请教了旁边的同学,在他的讲解下掌握了如何用代码表示.
·代码的最后两行要放在switch···case语句嵌套的大括号外面。
三、实验小结
1、这次实验课主要学习了简单算法和分支结构的应用。
·在学习简单算法时:要学会算法流程图的绘制。不仅要掌握用if语句根据条件的真假进行判断的方法,还要学会正确使用运算符。
·在学习分支结构时:我们要正确使用C语言逻辑运算和关系运算,还要正确使用关系表达式和逻辑表达式。尤其要掌握if语句和switch···case的用法。
2、if···else语句中,if后面的单个语句有分号,但复合语句(花括号)后没分号。当 felse语句有嵌套时,注意其搭配关系,else总是与它前面最近的尚未配对的if对应。switch后一对括号中的“表达式”,只要其值为整型即可,可以是整型表达式、字符型表达式或枚举型表达式;case后的表达式必须是常量表达式,不能包含变量;和if语句中的条件判断不同, switch语句只测试相等条件;一般在使用 switch语句实现“多选一”功能时,每个case子句后都使用 break语句。由于 switch语句的表达式不允许是实型的,当应用于实型值选择情况时,通常将实数表达式乘上一个适当的比例因子,将实数表达式的值映射到一个较小的范围,然后将它转换成整型。
四、预习