标签:要求 字符 return com 微软 一个 ber 用户 mic
C程序设计实验报告
if语句的应用
switch···case语句的应用
switch···case语句嵌套if语句的应用
switch···case结构嵌套的应用
分析程序
简易计算器
一、实验目的与要求
if语句的应用
switch···case语句的应用
switch···case语句嵌套if语句的应用
switch···case结构嵌套的应用
分析程序
1、实验练习:4.3.1
问题的简单描述:
?读入3个表示箱子长、宽、高的整数值,判断并输出是正方体还是长方体。
实验代码:
#include<stdio.h>
int 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;
}
问题分析:
?这个实验中没出现什么问题,但是要注意的就是优先级,“等于”的优先级高于“与”,所以不需要括号。
2、实验练习:4.3.2
问题的简单描述:
?编写程序实现如下功能:商店有打印纸(18元/本)、墨盒(132元/个)、光盘(4.5元/片)出售,商店进行优惠酬宾活动。具体规则如下:顾客购买商品的总额超过100元,优惠5%;超过200元,优惠6%;超过300元,优惠7%;超过400元,优惠8%;超过500元,优惠10%。根据不同的购买量,计算应付货款。
实验代码:
#include <stdio.h>
main()
{
int dyz,mh,gp,a;
float yfk,sum;
printf("请输入打印纸、墨盒、光盘的数量:\n");
scanf("%d,%d,%d",&dyz,&mh,&gp);
sum=(dyz*18+mh*132+gp*4.5);
a=sum/100;
switch(a)
{
case 0:
yfk=sum;
printf("应付款=%f",yfk);
break;
case 1:
yfk=sum*0.95;
printf("应付款=%f",yfk);
break;
case 2:
yfk=sum*0.94;
printf("应付款=%f",yfk);
break;
case 3:
yfk=sum*0.93;
printf("应付款=%f",yfk);
break;
case 4:
yfk=sum*0.92;
printf("应付款=%f",yfk);
break;
default:
yfk=sum*0.90;
printf("应付款=%f",yfk);
break;
}
}
问题分析:
?在输入这个程序的时候会忘记break后面的分号,default打成了defeult,编译不会错误,但是结果会出错,大于500的金额不能正常输出。
3、实验练习:4.3.3
问题的简单描述:
?输入某一年、月的数值,输出该月的天数。
实验代码:
#include<stdio.h>
int 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)
days=29;
else
days=28;
break;
case 1:days=31;
case 3:days=31;
case 5:days=31;
case 7:days=31;
case 8:days=31;
case 10:days=31;
case 12:days=31;
case 4:days=30;
case 6:days=30;
case 9:days=30;
case 11:days=30;break;
}
printf("%d年%d月有%d天",year,month,days);
}
问题分析:
?输入代码的时候没有问题,编译没有出错,但是在运行的时候输入的是中文下的数字,导致输出的是某年0月有0天。检查代码,运行代码使用英文输入法下的数字,就可以得到正确得结果。
4、实验练习:4.3.4
问题的简单描述:
?编写一个自动售货机的程序。该程序具有如下功能:有两级菜单,一级菜单是商品类型的选择;二级菜单是具体的商品的选择(商品价格和品种可以自拟)。顾客先选择商品的类型,然后选择具体商品,输入购买数量。自动售货机根据选择的商品和输入的数量,计算并显示所选商品的总金额。
实验代码:
#include <stdio.h>
int 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.0*n;break;
case 4:sum=8.6*n;break;
}
break;
case 2:printf("请选择:1、笔(3元/支) 2、笔记本(1.2元/个)\n");
printf(" 3、文件夹(22元/个) 4、文具盒(8.6元/个)\n");
scanf("%d",&y);
printf("数量?");
scanf("%d",&n);
switch(y)
{
case 1:sum=3.0*n;break;
case 2:sum=1.2*n;break;
case 3:sum=22*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元/包)");
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 元\n",sum);
}
问题分析:
?这个实验有较多中文输入,在输入代码得时候,会忘记切换输入法,导致编译的时候第六行的printf那一句编译错误。将那句的分号改成英文输入法下的分号即可正常运行。
5、实验练习:4.3.5
问题描述:
实验代码1:
#include<stdio.h>
main()
{
double x=1000/3.0;
double y=x-333.0;
double z=3*y-1.0;
printf("x=%lf\n",x);
printf("y=%lf\n",y);
printf("z=%lf\n",z);
if(z==0) printf("z==0.\n");
else printf("z不等于0.\n");
}
运行结果如下:
问题分析1:
?这个代码的结果中z不等于0是因为z按双精度浮点数输出,z小于0并向0无限趋近,所以z的输出为-0.000000,则不等于0.
实验代码2:
#include <stdio.h>
int main()
{
int num=20;
if(5<num&&num<10)
printf("%d in range (5,10)!\n",num);
else
printf("%d out of range (5,10)!\n",num);
}
问题分析2:
?在表示某个数满足某个范围的时候,不能直接用数学上的关系式表达,需要用“&&”这个逻辑运算符。
设计思路:
?用switch结构实现不同情况下的运算,通过do-while结构实现循环计算
流程图:
?
设计过程中遇到的问题:
?数据和符号不能分开输入,输入非法符号会出现死循环
改进的方法:
?用多个语句提示用户分别输入字符和数字,
未改进代码:
?
#include <stdio.h>
main()
{
float a,b,c,d;
char e;
do{
printf("Please input number\n");
scanf("%f%c%f",&a,&e,&b);
switch(e)
{
case‘+‘:{c=a+b;printf("Result is:%f\n",c);
break;
}
case‘-‘:{c=a-b;printf("Result is:%f\n",c);
break;
}
case‘*‘:{c=a*b;printf("Result is:%f\n",c);
break;
}
case‘/‘:{c=a/b;
if(b=0)
printf("Result is erro\n");
else
printf("Result is:%f\n",c);
break;
}
}
printf("继续计算请输入1\n结束计算请输入2\n");
scanf("%f",&d);
}
while(d<2);
printf("Thank you!\n");
}
未改进代码运行结果:
改进后代码:
#include <stdio.h>
void menu()
{
printf("--------------------\n");
printf("请输入对应的运算符数字\n");
printf(" 1.+ \n");
printf(" 2.- \n");
printf(" 3.* \n");
printf(" 4./ \n");
printf("--------------------\n");
}
main()
{
int select=0;
float a,b,c;
do{
menu();
scanf("%d",&select);
printf("Please input number\n");
scanf("%f%f",&a,&b);
switch(select)
{
case 1:{c=a+b;printf("Result is:%f\n",c);
break;
}
case 2:{c=a-b;printf("Result is:%f\n",c);
break;
}
case 3:{c=a*b;printf("Result is:%f\n",c);
break;
}
case 4:{c=a/b;
if(b==0)
printf("Result is erro\n");
else
printf("Result is:%f\n",c);
break;
}
}
}
while(select);
printf("Thank you!\n");
}
??本次实验的操作使我对switch结构有好的认识,对运用switch结构情形也更了解了,并通过编写一个计算器代码对switch结构进行运算。在编写代码的过程中还是会出现将字符输入错误的问题, 在编写简易计算器的过程中,计算器出现非法输入死循环的情况,在解决这个问题的过程中,通过查找资料和同学的建议将代码进行了相应的改进,增加了菜单功能。此外,这次实验也让我认识到代码需要不断测验,从错误中不断学习。
标签:要求 字符 return com 微软 一个 ber 用户 mic
原文地址:https://www.cnblogs.com/JSZ-Angel/p/12561667.html