第二次实验报告
C程序设计实验报告
实验项目:简单算法&分支结构实验
姓名:杜鹏 实验地点:一教524 实验时间:8:30-11:40
一、实验目的与要求
1、掌握结构话程序的算法描述方法
2、了解C语言的基本算法要素,能熟练地将算法描述转化为C语言程序
3、熟练掌握C语言运算符的优先级、结合性、运算规则、运算对象类型等
4、掌握各种形式的if语句语法和使用方法。注意if语句中if和else的匹配关系,以及if语句的嵌套
5、掌握switch语句的语法和使用方法。注意在switch语句中break语句的用法及switch语句的嵌套
二、实验内容
实验一
1)在if嵌套语句中容易忘记大括号导致报错
2)实验代码
3.3.1 #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=3*x-1 ;
printf("y的值为%.2f",y);
}
else
{
y=2*x-1;
printf("y的值为%.2f",y);
}
}
3)问题分析
在此实验中主要的问题就是if与else的配对问题,只要记住else与上一个最近的未配对的if配对即可。这样可以更加容易的找到与else配对的if
实验二
1)、if中的条件未用&&,以及在赋值x时直接写4h导致报错
2)、实验代码
3.3.2 #include<stdio.h>
int 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)问题分析
在使用if条件语句是的嵌套语句会忘记大括号,以及&&符号忘记。在列x,y的表达式是容易写成4h这样会导致报错,应该写成4*h。
实验三
1)、忘记使用头文件,以及在平方的时候直接^2导致报错。
2)、实验代码
3.3.3 #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):\n");
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);
}
else
printf("塔的高度为%d",h);
}
3)、问题分析
忘记头文件#include导致后面的sqrt函数报错,应该在头文件里加上。以及在用平方是不能直接^2而是两个相乘。
实验四
1)分析不清赋值还是关系。
2)实验代码 4.3.1
#include<stdio.h>
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)、问题分析
分不清赋值和关系语句,应该用==表示关系,=表示赋值。
实验五
1)if和else的配对问题,以及在用switch语句的时候break的使用问题。
2)实验代码 4.3.2
#include<stdio.h>
main()
{
int a,b,c;
float s;
printf("请输入打印纸、墨盒、光盘的数量:\n");
scanf("%d,%d,%d",&a,&b,&c);
s=18*a+132*b+4.5*c;
if(s>500)
s=0.9*s;
else if(s>400)
s=0.92*s;
else if(s>300)
s=0.93*s;
else if (s>200)
s=0.94*s;
else if(s>100)
s=0.95*s;
else
s=s;
printf("应付款=%.2f",s);
}
#include<stdio.h>
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)问题分析
if与else的配对应该遵循else与上一个未配对的if配对。switch语句时注意注意break的使用。
实验六
1)在使用连续运算的时候注意优先级的问题。
2)实验代码 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)
{
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)问题分析
在使用或和于是应该考虑优先级以及求余数是否等于0等
三、实验小结
1、对于if语句和switch语句自己还是不够熟练,应该反复练习。对于不懂的知识点进行反复练习。对于算法以及流程图的制作应该进行反复的练习。
2、对于小伙伴邓文超的建议:主要是要多多练习switch语句,以及对一些复杂的实验进行反复的训练。做什么都应该仔细一点。