第二次实验报告
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
实验代码
#include<stdio.h>
main()
{
float x,y;
printf("请输入x的值:");
scanf("%f",&x);
if(x<1)
{y=x;
printf("y的值为%.2f\n",y);
} else if(x>=1&&x<10)
{y=2*x-1;
printf("y的值为%.2f\n",y);
}else if(x>10)
{y=3*x-1;
printf("y的值为%.2f\n",y);
}else
printf("y的值为%.2f\n",y);
}
问题分析:if...else嵌套中,注意匹配规则,else与它上一个最近的未配对的if配对,if语句多时应使用括号
2.实验练习3.3.2
实验代码
#include<stdio.h>
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");
}
问题分析:if的判断条件是输入的值是否大于零,若小于零,则会显示输入错误,但不知道为什么,我把在一教做的代码拷回来复制粘贴在自己的电脑上都是显示输入错误,可能是因为环境问题。
3.实验练习3.3.3
实验代码
#include<math.h>
#include<stdio.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);
}
问题分析:没有math头文件时sqrt无法运行,一个数的平方用乘法表示。
4.实验练习4.3.1
实验代码
#include<stdio.h>
main()
{
int l,w,h;
printf("请输入箱子的长、宽、高:\n");
scanf("%d,%d,%d",&l,&w,&h);
if(l==w&&w==h)
{
printf("该箱子是正方体。\n");
}else
printf("该箱子是长方体。\n");
}
问题分析:注意不能直接判断三个数是否相等,需要使用逻辑与。
5.实验练习4.3.2
实验代码
#include<stdio.h>
main()
{
float w ;
int t,x,y,z;
printf("请输入打印盒、墨盒、光盘的数量:");
scanf("%d,%d,%d",&x,&y,&z);
w=x*18+y*132+z*4.5;
t=(int)w/100;
switch(t)
{
case 0:printf("应付款数=%.2f",w);break;
case 1:printf("应付款数=%.2f",w*0.95);break;
case 2:printf("应付款数=%.2f",w*0.94);break;
case 3:printf("应付款数=%.2f",w*0.93);break;
case 4:printf("应付款数=%.2f",w*0.92);break;
default:printf("应付款数=%.2f",w*0.90);break;
}
return 0;
}
问题分析:注意switch结构中不要忘了加break使每个语句互相独立。
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;
case 4:
case 6:
case 9:
case 11:days=30;break;
}
printf("%d年%d月有%d天",year,month,days);
}
问题分析:需要到哪输出在哪加break,注意if优先级,代码没有问题,但是运行时结果中没有输出月份。
7.实验练习4.2.4(3)
实验代码
#include <stdio.h>
main()
{
float x,y;
char op;
printf("输入表达式");
scanf("%f%c%f",&x,&op,&y);
switch(op)
{
case '+':printf("%.2f%c%.2f=%.2f",x,op,y,x+y);break; //匹配加法
case '-':printf("%.2f%c%.2f=%.2f",x,op,y,x-y);break; //匹配减法
case '*':printf("%.2f%c%.2f=%.2f",x,op,y,x*y);break; //匹配乘法
case '/':if(y!=0)
{
printf("%.2f%c%.2f=%.2f",x,op,y,x/y);break;}
else
{
printf("除数为零");break;}//匹配除法
default:printf("表达式错误");break;
}
}
问题分析:注意判断除法时y是否等于0,应在除法上加上判断。若想模拟计算器循环使用,可在定义变量下加上while循环语句。
三、实验小结:
1.通过这次实验我对if和switch语句使用更加熟练了,了解了if和else的配对规则。
2.掌握使用多个if语句时应使用大括号
3.掌握switch语句中没有遇到break语句将一直进行,直到break才会结束。