第二次实验报告
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) printf("y=%.2f",x); else if(x<10) { y=2*x-1; printf("y的值为:%.2f\n",y); } else { y=3*x-1; printf("y的值为:%.2f\n",y); } }
(3)问题分析:
if下的括号问题浪费了很多时间
2、实验练习:3.3.2
(1)问题描述:用算法流程图描述求解鸡兔同笼问题的算法:已知鸡兔的总头数为h,总脚数为f,求鸡兔各有多少只?
(2)实验代码:
#include <stdio.h> main() { int x,y,h,f; printf("鸡兔总数,鸡兔脚总数:"); scanf("%d,%d",&h,&f); if(x>0&&y>0) { x=(4*h-f)/2; y=(f-2*h)/2; printf("鸡有:%d,兔有:%d",x,y); } else printf("输入有误!\n"); }
(3)问题分析:
- 要先列方程得出方程
3、实验练习:3.3.3
(1)问题描述:有四个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1,四个塔的高度均为10m,塔以外无建筑物。现输入任意一点的坐标,若该点的坐标在任意一个圆塔内,则输出圆塔的高度;若该点不在圆塔内,则输出0.
(2)实验代码:
#include <stdio.h> #include <math.h> main() { int h=10; float x1=2,y1=2,y2=2,x2=-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> main() { int l,w,h; printf("请输入箱子的长 宽 高:\n"); scanf("%d,%d,%d",&l,&w,&h); if(l==w&&l==h&&w==h) printf("该箱子为正方体!\n"); else printf("该箱子为长方体!\n"); return 0; }
(3):问题分析:
- 等号要打双等
5、实验练习:4.3.2
(1)问题描述:编写程序实现如下功能:商店有打印纸(18元/本)、墨盒(132元/个)、光盘(4.5元/片)出售,商店进行优惠酬宾活动。具体规则如下:顾客购买商品的总额超过100元,优惠%5;超过200元,优惠%6;超过300元,优惠%7;超过400元,优惠%8;超过500元,优惠%10。根据不同的购买量,计算应付货款。
(2)实验代码:
#include <stdio.h>
main()
{
int x,y,z,s;
printf("请输入打印纸,墨盒,光盘数量:");
scanf("%d,%d,%d",&x,&y,&z);
s=18*x+132*y+4.5*z;
if(s>500)
s=s*0.9;
else
if(s>400)
s=s*0.92;
else
if(s>300)
s=s*0.93;
else
if(s>200)
s=s*0.94;
else
if(s>100)
s=s*0.95;
else
if(s>0)
s=s;
else
printf("输入值有误!");
printf("应付款数=%d",s) ;
}
(3)问题分析:
- 注意从大到小,开始输错了
- else要匹配,注意别配错
6、实验练习:4.3.3
(1)问题描述:输入某一年、月的数值,输出该月的天数。
(2)实验代码:
#include<stdio.h> main() { int year,month,days; printf("请输入年份和月份:"); 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); }
(3)问题分析:
- switch和if语句嵌套不熟练
三、实验小结
1.用if语句要注意与else的对应,用switch要注意break的位置和影响
2.switch语句是一种多分支选择语句,其可读性比if语句强。要注意在switch语句中正确地使用break语句,以使程序能正确地从switch分支中跳出,避免发生逻辑错误。
3.还是要注意中英文区分,细心操作。把代码排布弄漂亮
4.在if语句中的结构可以内嵌一个switch结构的语句,同样,在switch语句的结构中也可以内嵌一个if结构的语句,尽量打熟练。