第二次实验报告
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值,并用c语言编写程序检验。
2)实验代码:
#include <stdio.h> int main() { float x,y; printf("请输入x的值:"); scanf("%f",&x); if(x<1) { y=x; printf("y的值为 %.2f",y); } else if(x<10) { y=3*x-1 ; printf("y的值为 %.2f",y); } else { y=2*x-1; printf("y的值为 %.2f",y); } }
3) 问题分析:if与else的配对问题。
2.实验练习:3.3.2
1)问题的简单描述:用算法流程图描述求解鸡兔同笼问题的算法。
2)实验代码:
#include<stdio.h> int 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("输入错误!\n"); }
3) 问题分析:if后条件的不清晰而导致达不到目的。
3.实验练习:3.33
1)问题的简单描述:有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度均为10m,塔外无其他建筑。
2)实验代码:
#include<stdio.h> int 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):\n"); scanf("%f,%f",&x,&y); d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); d2=(x-x2)*(x-x2)+(y-y2)*(y-y2); d3=(x-x3)*(x-x3)+(y-y3)*(y-y3); d4=(x-x4)*(x-x4)+(y-y4)*(y-y4); if(d1>1&&d2>1&&d3>1&&d4>1) { h=0; printf("塔的高度为%d",h); } else printf("塔的高度为%d",h); }
3) 问题分析:对于计算机运算符优先级的混淆。
4.实验练习:4.3.1
1)问题的简单描述:读入3个表示箱子长、宽、高的整数值,判断并输出该箱子是长方体还是正方体。
2)实验代码:
#include<stdio.h> int main() { int l,w,h; printf("请输入箱子的长、宽、高:\n"); scanf("%d,%d,%d",&l,&w,&h); if(l==w&&l==h) printf("该箱子为正方体。\n"); else printf("该箱子为长方体。\n"); }
3) 问题分析:对于逻辑运算符的用法。
5.实验练习:4.3.2
1)问题的简单描述:编写程序实现如下功能,根据不同购买量,计算应付贷款。
2)实验代码:
#include <stdio.h> int main() { int a,b,c,f; float s; printf("请输入打印纸、墨盒、光盘的数量:\n"); scanf("%d,%d,%d",&a,&b,&c); s=18*a+132*b+4.5*c; f=s/100; if(f>=5) f=5; switch(f) { case 0 : s=s;break; case 1 : s=0.95*s;break; case 2 : s=0.94*s;break; case 3 : s=0.93*s;break; case 4 : s=0.92*s;break; case 5 : s= 0.9*s;break; default : break; } printf("应付款=%.2f",s); }
3) 问题分析:switch用法的不熟练。
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) { case2 : if((year%4==0&&year&100!=0)||year%400==0) days=29; else days=28;break; case1 : case3 : case5 : case7 : case8 : case10 : case12 : days=31;break; case4 : case6 : case9 : case11 : days=30;break; default : break; } printf("%d年%d月有%d天",year,month,days); }
3) 问题分析:代码数量太多导致对整体问题的混乱。
三、实验小结
1)通过本次实验学习,对if语句和switch语句有了更深入的了解。
2)规则嵌套的形式是每一层的else分支嵌套着另一个if...else语句。else与离他最近的上一个if配对。
3)对于switch语句,必须设置default标号,用于处理switch语句中表达式的值不在case标号集范围内的情况。
四、预习第四章