C语⾔程序报告3
C语⾔程序实验报告III
实验项⽬:C语⾔程序设计教程实验4.3.1,4.3.2,4.3.3,4.3.4,4.3.5
姓名:陈 思杰    实验地点:家    实验时间:2020.03.25 ——————————————————————————————————————————————————————————⼀、实验⽬的与要求
⽬的:
☀ 1.掌握C语⾔逻辑值的表⽰⽅法(0代表"假",1代表"真")
☀ 2.学会正确地使⽤关系表达式和逻辑表达式
☀ 3. 掌握各种形式的if语句语法和使⽤⽅法。if语句中if和else的匹配关系,以及if语句的嵌套。
☀ 4.熟练掌握switch语句的语法和使⽤⽅法,注意在switch语句中break语句的⽤法及switch语句的嵌套
要求:
⼆、实验的内容
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)
printf("该箱⼦是正⽅形。");
else
printf("该箱⼦是长⽅形。");
return 0;
}
问题分析:lwh互等要分开写。
2.实验练习4.
3.2
问题的简单描述:编写程序实现如下功能:商店有打印纸( 18元/本)墨盒( 132元/个)、光盘(4.5元/⽚)出售,商店进⾏优惠酬宾活动。具体规则如下:顾客购买商品的总额超过100 元,优惠5%;超过200元,优惠6%;超过300元,优惠7%;超过400元,优惠8%;超过500元,优惠10%。根据不同的购买量,计算应付货款。
实验代码:
#include<stdio.h>
main()
{
float a,b,c,sum;
int d;
printf("请输⼊打印纸、墨盒、光盘的数量:");
scanf("%f,%f,%f",&a,&b,&c);
sum=18*a+132*b+4.5*c;
d=sum/100;
switch(d)
{
case 0:break;
case 1:sum=0.95*sum;break;
case 2:sum=0.94*sum;break;
case 3:sum=0.93*sum;break;
case 4:sum=0.92*sum;break;
default:sum=0.9*sum;
}
printf("应付款数=%f",sum);
}
问题分析:不要忘记case 0也有意义,这⾥case 5可以直接与default合并。
3.实验练习
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;
default:printf("⽉份输⼊有误");
}
if(month<13&&month>0)
printf("%d年%d⽉有%d天",year,month,days);
}
问题分析:并不是每条case都需要break; 增加了⽉份输⼊有误时的处理⽅法
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;
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;
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;
}
printf("总计:%.2f元",sum);
return 0;
}
问题分析:注意每个switch与case的对应。
5.实验练习4.3.5
问题的简单描述:运⾏下列程序,分析错误的原因并修改程序,使其输出正确的结果,然后写⼊实验报告。实验代码:
#include<stdio.h>
main()
{
int num;
scanf("%d",&num);
if(num>5&&num<10)
printf("%d in range(5,10)!\n",num);
else
printf("%d out of range(5,10)!\n",num);
}
问题分析:错误原因对于5<num<10要分成num>5&&num<10
三、项⽬实训:计算器的实现 (究极改动)
1、设计思路
可以实现多步运算,即接着前⾯的结果进⾏⼆次计算
可实现现实中计算器的归零操作,即开始新⼀轮计算
当除数为零时进⾏系统报错,并允许开始新⼀轮计算
当运算符不对时进⾏系统报错,允许重新输⼊运算符
2、←点这超链接查看
3、设计过程中遇到的问题及改进的⽅法
键⼊字符型变量的scanf函数会因为前⼀句末存在的\n⽽导致运⾏时会直接跳出对该scanf函数的运⾏
多步计算与归零操作如何使两者⽤最简短的代码同时表达出来
4、代码
#include<stdio.h>
main()
{
float m,n ,jg;
char ch;
int a,b;
printf(" ********************************\n");
printf(" ** 简易计算器            **\n");
printf(" ** 操作说明                  **\n");
printf(" ** 运算:输⼊运算符+-*/      **\n");
printf(" ** 模式1:开始新⼀轮计算(归零)**\n");
printf(" ** 模式2:接着上⼀轮计算(继续)**\n");
printf(" ** 模式3:退出计算器程序(退出)**\n");
printf(" ********************************\n\n");
for((a=0,b=1);a<1;)
{
switch(b)                                      //b=1,case 1执⾏完继续执⾏case 2,实现归零
{                                              //b=2,case 2执⾏完跳出switch,实现继续
case 1: {
printf("**请输⼊数字        ");        //b=3,case 3执⾏完跳出switch,实现退出
scanf("%f",&m);
}                                      //这⾥不⽤break;  可以实现case 1执⾏完继续执⾏case 2
case 2: {
printf("**请输⼊运算符      ");
getchar();
scanf("%c",&ch);
for(;ch!='+'&&ch!='-'&&ch!='*'&&ch!='/';)  //此for循环解决了运算符出错的问题
{
printf("**出错,请重新输⼊    ");    //不输⼊符合要求的+-*/就会⼀直卡在这循环下去
getchar();
scanf("%c",&ch);
}
printf("**请输⼊数字        ");
scanf("%f",&n);
switch(ch)
{
case '+':jg=m+n;break;
case '-':jg=m-n;break;
case '*':jg=m*n;break;
case '/':(n==0)?(printf("**除数不能为零,请重新计算\n")):(jg=m/n);break;
}
if(ch!='/'&&n!=0)                        //此if保证了除数为0时,不会有结果输出
printf("%f%c%f=%f\n",m,ch,n,jg);
m=jg;                                    //这步为接着前⼀次的结果继续做计算做准备
printf("**模式选择          ");
scanf("%d",&b);
for(;b!=1&&b!=2&&b!=3;)                  //此for循环解决了模式选择出错的问题
{
printf("**出错,请重新输⼊    ");        //不输⼊符合要求的模式选择就会⼀直卡在这循环下去
getchar();
scanf("%d",&b);
}
}break;
case 3: a=1;break;
}
switch的用法c语言}
}
5、程序运⾏结果
    ←点这超链接查看
四、实验⼩结(剖析个⼈得失)
关于笔记的澄清:Onenote笔记的编号列表的功能允许内容的折叠与隐藏,所以折叠起来就是个思维导图啊 
关于程序:语句的嵌套⼀定要弄清楚每⼀个语句代码的对应关系,条件关系。从上帝视⾓观察程序的运⾏流程,进⼀步美化及化简程序,避免冗杂!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。