第二次实验报告
第二次实验报告
实验项目:简单算法和分支结构实验
姓名:熊远辉 实验地点:一教524 实验时间:2021.4.15
一、实验目的与要求
- 进一步掌握DEVC++的安装方法,并实现程序的编辑、编译、连接、运行。
- 通过运行简单的C语言程序,进一步了解C语言的结构特点。
- 掌握C语言的基本类型及使用方法。
- 熟悉C语言运算符和表达式的正确使用方法。
- 熟练掌握Markdown的用法。
二、实验内容
1. 实验练习3.3.1
- 问题的简单描述:输入x值,输出满足函数关系的y值,并用C语言编写程序进行校验。
- 实验代码:
#include<stdio.h>
main()
{
float x,y;
printf("请输入x的值;\n");
scanf("%f",&x);
if(x>1) /*判断变量x是否小于1*/
if(x<10) /*判断x的值是否小于10*/
y=2*x-1;
else
y=3*x-1;
else
y=x; /*其他*/
printf("y的值为%0.2f\n",y); /*输出y的值*/
}
3.问题分析:本题无较大问题,注意大小写的书写即可
2. 实验练习3.3.2
- 问题的简单描述:鸡兔同笼的算法简单描述。
- 实验代码:
#include<stdio.h>
main()
{
int h,f,x,y;
printf("鸡兔总数,鸡兔脚总数:\n");
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");
}
- 问题分析:本题应注意应变量x,y的表达,其它没什么大问题。
3. 实验练习3.3.3
- 问题的简单描述:有四个圆塔,圆心分别为(2,2)(2,-2)(-2,-2)(-2,2),圆半径为1,这四个塔高为10m,塔以外无建筑物。现输入任一坐标,若该点坐标在任意一个圆塔内,则输出圆塔高度;若不在圆塔内,则输出0。
- 实验代码:
#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)
h=0;
printf ("该塔高度为%d",h);
}
- 问题分析:在实验时无法输出根号导致无法计算,后面通过翻书找到了根号如何输入利用sqrt函数,以及头文件math的使用。
案例三
- 问题描述:制作一个简单的计算器并使其循环使用。
- 实验代码:
#include<stdio.h>
#include<stdlib.h>
main()
{
float x,y;
char op;
while(true)
{
printf("请输入表达式:");
scanf("%f%c%f",&x,&op,&y);
switch(op)
{
case '+':
printf("%.2f%c%.2f=%.2f\n",x,op,y,x+y); break;
case '-':
printf("%.2f%c%.2f=%.2f\n",x,op,y,x-y); break;
case '*':
printf("%.2f%c%.2f=%.2f\n",x,op,y,x*y); break;
case '/':
if(y!=0)
{printf("%.2f%c%.2f=%.2f\n",x,op,y,x/y); break;}
else {printf("除数为零!\n"); break;}
default : printf("输入表达式有误!\n");
}
printf("清屏并返回主菜单!\n");
system("pause");
system("cls");
}
}
- 问题分析:一开始无法让代码循环不了解while语句的应用,后来不明白如何清屏,通过上网查找资料,以及翻找书籍才解决这些问题。
4. 实验4.3.1
- 问题的简单描述:读入3个表示箱子长,宽高的整数值,判断并输入该箱子是正方体还是长方体。
- 实验代码:
#include<stdio.h>
main()
{
int l,w,h;
printf("请输入箱子的长,宽,高:\n");
scanf("%d%d%d",&l,&w,&h);
if(l==w&&w==h&&h==l)
printf("该箱子是正方体。\n");
else
printf("该箱子是长方体。\n");
}
- 问题分析:本题无较大问题。
5. 实验4.3.2
- 问题描述:编写程序实现如下功能:商店有打印纸(18元/本),墨盒(132元/个),光盘(4.5元/个)出售,商店进行优惠酬宾活动。具体规则如下:顾客购买商品的总额超过100元,优惠5%;超过200元,优惠6%;超过300元,优惠7%;超过400元,优惠8%;超过500元,优惠10%
- 实验代码:
switch结构
#include<stdio.h>1
main()
{
float x,y,z,w,h;
int s;
printf("请输入打印纸,墨盒,光盘的数量:");
scanf("%f,%f,%f",&x,&y,&z);
w=18*x+132*y+4.5*z;
s=w/100;
switch (s)
{
case 1: h=0.95*w;
printf("应付款数=%.2f",h);
break;
case 2: h=0.94*w;
printf("应付款数=%.2f",h);
break;
case 3: h=0.93*w;
printf("应付款数=%.2f",h);
break;
case 4: h=0.92*w;
printf("应付款数=%.2f",h);
break;
case 0: h=w;
printf("应付款数=%.2f",h);
break;
default: h=0.9*w;
printf("应付款数=%.2f",h);
break;
}
}
if...else结构
#include<stdio.h>
main()
{
float x,y,z,w,h;
printf("请输入打印纸,墨盒,光盘的数量:");
scanf("%f,%f,%f",&x,&y,&z);
w=18*x+132*y+4.5*z;
if(w>500)
{h=w*0.9;
printf("应付款数=%.2f",h);}
else if(w>400)
{h=w*0.92;
printf("应付款数=%.2f",h);}
else if(w>300)
{h=w*0.93;
printf("应付款数=%.2f",h);}
else if(w>200)
{h=w*0.94;
printf("应付款数=%.2f",h);}
else if(w>100)
{h=w*0.95;
printf("应付款数=%.2f",h);}
else
{h=w;
printf("应付款数=%.2f",h);}
}
- 问题分析:switch语句无法运行显示出错,后面通过与同学讨论发现switch中的表达式不能用float型要用int型。if语句中无太大问题。
6. 实验4.3.3
- 实验描述:输入某一年,月的数值,输出该月的天数。
- 实验代码:
#include<stdio.h>
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;
}
- 问题分析:代码可以运行但输入年,月后得出数值出错,我先是与同学讨论但却没有发现问题,然后就去请教老师,通过调试发现程序直接跳出switch语句,最后发现原来是一个空格没打。
三、实验小结
1.
通过此次实验加深了我对if,switch语句结构的了解,并且能够独立书写代码,找出错误并通过调试的方法解决错误,从第一次实验到现在我们已经学习到了不少知识,以下是我的总结:
- 数据类型的区分,数据类型的转换,比如强制转换。
- 基本运算符,其中逻辑运算符较为重要
- 运算符的优先级的详细区分以及运算的结合方向。见书表2-20
- 输入函数scanf的使用,以及输出函数printf的使用。
- 结构化算法的基本结构,描述其的自然语言,伪代码以及流程图。其中流程图的制作是重点。
- if语句的结构,if...else语句的嵌套
- switch语句结构以及switch语句的简单使用。
- if,switch语句的嵌套。
2.
谢垚同学做的挺好的,特别是代码的排版,层次分明。但在实验总结是可以多写一点。