《C语言程序设计》实验报告(三)
C语言程序设计报告
实验项目:课堂练习4-3-1,4-3-2,4-3-3,4-3-4,4-3-4
姓名:余永祥 实验地点:家 实验时间:2020年3月25日
一、实验目的与要求
1.掌握c语言逻辑值的表示方法,0为假,1为真;
2.学会正确地使用关系表达式和逻辑表达式;
3.掌握各种形式的if语句语法和使用方法。if语句中if和else的匹配关系,以及if语句的嵌套;
4.熟练掌握switch语句的语法和使用方法,注意在switch语句中break语句的用法及switch语句的嵌套。
二、实验内容
1.实验练习:
实验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&&l==h)
printf("该箱子是正方体。\n");
else
printf("该箱子是长方体。\n");
return 0;
}
出现问题:由于“lwh”错误判断
解决方法:改为“lw&&lh&&w==h”
2.实验练习:
实验4-3-2
实验代码:
#include<stdio.h>
main()
{
int a,b,c;
double x,y;
printf("请输入打印纸、墨盒、光盘的数量:");
scanf("%d,%d,%d",&a,&b,&c);
x=18*a+132*b+4.5*c;
switch(x>500)
{
case 1:y=0.9*x;
printf("应付款数=%.2f",y);
break;
case 0:switch(x>400)
{
case 1:y=0.92*x;
break;
case 0:switch(x>300)
{
case 1:y=0.93*x;
break;
case 0:switch(x>200)
{
case 1:y=0.94*x;
break;
case 0:switch(x>100)
{
case 1:y=0.95*x;
break;
case 0:y=x;
break;
}
}
}
}
}
return 0;
}
出现问题:switch语句后面只能跟整形
解决方法:调整
另一个代码:
#include<stdio.h>
#include<limits.h>
main()
{
int a,b,c;
double x,y;
printf("请输入打印纸、墨盒、光盘的数量:");
scanf("%d,%d,%d",&a,&b,&c);
x=18*a+132*b+4.5*c;
switch((int)x)
{
case 500 ... INT_MAX:y=0.9*x;
break;
case 400 ... 499:y=0.92*x;
break;
case 300 ... 399:y=0.93*x;
break;
case 200 ... 299:y=0.94*x;
break;
case 100 ... 199:y=0.95*x;
break;
default:printf("输入错误。");
}
if(x>0)
printf("应付款数=%.2f",y);
return 0;
}
3.实验练习:
实验4-3-3
实验代码:
#include<stdio.h>
int main()
{
int year,month,days;
printf("Please enter year and mmonth:\n");
scanf("%d %d",&year,&month);
switch(month)
{
case 2:if(year%400==0||(year%4==0&&year%100!=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;
}
printf("%d年%d月有%d天。",year,month,days);
return 0;
}
出现问题:频繁的出现语法错误
解决方法:熟练在中文和英文输入法间及时的切换
4.实验练习:
实验4-3-4
实验代码:
#include<stdio.h>
main()
{
int x,n,y;
float sum=0.0;
printf("请选择:1.日用品 2.文具 3.食品\n");
scanf("%d",&x);
switch(x)
{
case 1:printf("请选择:1.牙刷(3.5元/支) 2.牙膏(6.2元/支)\n");
printf(" 3.肥皂(2元/块) 4.毛巾(8.6元/条)\n");
scanf("%d",&y);
printf("数量?");
scanf("%d",&n);
switch(y)
{
case 1:sum=3.5*n;
break;
case 2:sum=6.2*n;
break;
case 3:sum=2*n;
break;
case 4:sum=8.6*n;
break;
}
break;
case 2:printf("请选择:1.笔(3元/支) 2.笔记本(1.2元/本)\n");
printf(" 3.文件夹(12元/个) 4.文具盒(8.6元/个)\n");
scanf("%d",&y);
printf("数量?");
scanf("%d",&n);
switch(y)
{
case 1:sum=3*n;
break;
case 2:sum=1.2*n;
break;
case 3:sum=12*n;
break;
case 4:sum=8.6*n;
break;
}
break;
case 3:printf("请选择:1.白糖(3.6元/包) 2.盐(1元/包)\n");
printf(" 3.饼(2元/个) 4.方便面(3.6元/包)\n");
scanf("%d",&y);
printf("数量?");
scanf("%d",&n);
switch(y)
{
case 1:sum=3.6*n;
break;
case 2:sum=1*n;
break;
case 3:sum=2*n;
break;
case 4:sum=3.6*n;
break;
}
break;
}
printf("总计:%.2f元",sum);
return 0;
}
出现问题:break遗漏
解决方法:熟练
5.实验练习:
4-3-5
实验代码:
#include<stdio.h>
int main()
{
int num=20;
//出错5<num<10的原因是运算符优先级,先计算5<num的值为1 ,原式变为1<10
printf("%d",5<num<10) ;
if(5<num&&num<10)
printf("%d in range(5,10)!\n",num);
else
printf("%d out range(5,10)!\n",num);
double x=1000/3.0;
double y=x-333.0;
double z=3*y-1.0;
printf("x=%.64lf\n",x);
printf("y=%.64lf\n",y);
printf("z=%.64lf\n",z);
if(z==0) printf("z==0\n");
else printf("z不等于0\n");
return 0;
}
出现问题:无
解决方法:无
三、计算机设计
第一版
#include<stdio.h>
main()
{
float x,y,z;
char c,f;
do
{
printf("请输入依次数字、符号、数字:\n");
scanf("%f%c%f",&x,&c,&y);
switch(c)
{
case'+':z=x+y;
printf("计算结果为:%f\n",z);
break;
case'-':z=x-y;
printf("计算结果为:%f\n",z);
break;
case'/':z=x/y;
printf("计算结果为:%f\n",z);
break;
case'*':z=x*y;
printf("计算结果为:%f\n",z);
break;
default:printf("输入错误.\n");
}
printf("输入r继续,其他退出\n");
scanf("%c",&f);
}while(f='r')
}
问题:难以循环
第二版
#include<stdio.h>
#include<conio.h>
int main()
{
float x,y,z;
char c,f;
do
{
cxks:printf("请输入依次数字、符号、数字:\n");
scanf("%f%c%f",&x,&c,&y);
switch(c)
{
case'+':z=x+y;
printf("计算结果为:%f\n",z);
break;
case'-':z=x-y;
printf("计算结果为:%f\n",z);
break;
case'/':z=x/y;
printf("计算结果为:%f\n",z);
break;
case'*':z=x*y;
printf("计算结果为:%f\n",z);
break;
default:printf("输入错误.\n");
}
printf("按下任意键继续,Esc退出:\n");
while(getchar()!='\n');
//scanf("%c",&f);
f=getch();
}while(f!=27);
return 0;
}