贵州大学C语言实验报告Ex04逻辑结构程序设计.docx
- 文档编号:24239693
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:14
- 大小:224.74KB
贵州大学C语言实验报告Ex04逻辑结构程序设计.docx
《贵州大学C语言实验报告Ex04逻辑结构程序设计.docx》由会员分享,可在线阅读,更多相关《贵州大学C语言实验报告Ex04逻辑结构程序设计.docx(14页珍藏版)》请在冰豆网上搜索。
贵州大学C语言实验报告Ex04逻辑结构程序设计
实验课程名称C语言实验报告
实验项目名称逻辑结构程序设计
专业班级电子信息科学与技术08级1班
学生姓名
学号
指导教师
理学院
实验时间:
2010年5月6日
实验4逻辑结构程序设计
1.实验目的
(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真")。
(2)学会正确使用逻辑运算符和逻辑表达式。
(3)熟练掌握if语句和switch语句。
(4)结合程序掌握一些简单的算法。
(5)学习调试程序。
2.实验内容和步骤
本实验要求事先编好解决下面问题的程序,然后上机输人程序并调试运行程序。
(1)习题5.5。
有一函数:
用scanf函数输人x的值,求y值。
程序如下:
#include
voidmain()
{
floatx,y;
printf("Pleaseinputx:
\n");
scanf("%f",&x);
if(x<1)
{
y=x;
printf("x=%f,y=x=%f\n",x,y);
}
elseif(x<10)
{
y=2*x-1;
printf("x=%f,y=y=2*x-1=%f\n",x,y);
}
else
{
y=3*x-11;
printf("x=%f,y=3*x-11=%f\n",x,y);
}
}
分析:
本程序用if-else语句的嵌套得到的,并且结合使用复合语句实现的。
运行程序,输人.x的值(分别为x
是否正确。
经计算,结果是正确的。
(2)给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。
90分以上为A,81~89
分为B,70~79分为C,60~69分为D,60分以下为E。
①事先编好程序,要求分别用if语句和switch语句实现。
运行程序,并检查结果是
否正确。
程序如下:
用if语句编写程序如下:
#include
voidmain()
{
floatscore;
chargrade;
printf("Pleaseinputascore:
\n");
scanf("%f",&score);
while(score>100||score<0)
{
printf("Yourinputiswrong,pleasereinput:
\n");
scanf("%f",&score);
}
if(score>=90&&score<=100)grade='A';
elseif(score>=80&&score<90)grade='B';
elseif(score>=70&&score<80)grade='C';
elseif(score>=60&&score<70)grade='D';
elsegrade='E';
printf("Thegradeforscore%5.2fis%c.\n",score,grade);
}
分析:
本程序是用if条件语句编写的,要注意的是if-else语句的嵌套使用if与else的配对关系。
else总是与它上面的最近的未配对的if配对。
用switch语句编写程序如下:
#include
voidmain()
{
floatscore;
chargrade;
printf("Pleaseinputascore:
\n");
scanf("%f",&score);
switch((int)(score/10))
{
case10:
case9:
grade='A';break;
case8:
grade='B';break;
case7:
grade='C';break;
case6:
grade='D';break;
case5:
case4:
case3:
case2:
case1:
case0:
grade='E';break;
}
printf("Thegradeforthescoreof%5.2fis%c.\n",score,grade);
}
分析:
本程序主要是练习使用switch语句,需要注意的是switch后括号里的是表达式,其值可以是整形、字符型、枚举型数据。
且case后必有一个空格,否则运行会出错。
还要注意一点是没有值的分支也要一一列出。
还有就是别忘记break结束分支选择。
②再运行一次程序,输人分数为负值(如一70),这显然是输人时出错,不应给出等
级。
修改程序,使之能正确处理任何数据。
当输人数据大于l00或小于0时,通知用户
“输人数据错”,程序结束。
在scanf语句后面加上如下语句即可:
while(score>100||score<0)
{
printf("Yourinputiswrong,pleasereinput:
\n");
scanf("%f",&score);
}
分析:
只曾加上述语句即可以完成以上要求,当然也可以换成其它的循环语句,如do-while或者是for都可以。
(3)给一个不多于5位的正整数,要求:
①求出它是几位数;②分别打印出每一位数
字;③按逆序打印出各位数字,例如原数为321,应输出lE3o(习题5.7)
应准备以下测试数据:
·要处理的数为1位正整数;
·要处理的数为2位正整数;
·要处理的数为3位正整数;
·要处理的数为4位正整数;
·要处理的数为5位正整数。
除此之外,程序还应当对不合法的输人作必要的处理。
例如:
·输入负数;
·输人的数超过5位(如123456)。
程序如下:
#include
voidmain()
{
longintnum;
intindiv,ten,hundred,thousand,ten_thousand,place;
printf("Pleaseinputainteger(0~99999):
\n");
scanf("%ld",&num);
if(num>9999)place=5;
elseif(num>999)place=4;
elseif(num>99)place=3;
elseif(num>9)place=2;
elseplace=1;
printf("Place=%d\n",place);
printf("Everyplaceis:
");
ten_thousand=num/10000;
thousand=(int)(num-ten_thousand*10000)/1000;
hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;
ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);
switch(place)
{
case5:
printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
printf("\nantitonenumberis:
");
printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);
break;
case4:
printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\nantitonenumberis:
");
printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
break;
case3:
printf("%d,%d,%d",hundred,ten,indiv);
printf("\nantitonenumberis:
");
printf("%d%d%d\n",indiv,ten,hundred);
break;
case2:
printf("%d,%d",ten,indiv);
printf("\nantitonenumberis:
");
printf("%d%d\n",indiv,ten);
break;
case1:
printf("%d",indiv);
printf("\nantitonenumberis:
");
printf("%d\n",indiv);
break;
}
}
分析:
看似这个程序有点长,但实际上应用的原理特别简单。
任意输入一个5位以内(含5位)的正整数。
先用if-else语句判断它的位数,这个算法很简单,就是比较所输入的数据在哪个区间,就得到相应区间的位数。
然后将位数输出。
再将各个位数的具体分离出来,算法也比较简单,就是将这个输入的数据减掉已求出的相应位数与该位对应权值的乘积,依次求出这些位上的值。
然后对位数进行分支选择,顺序输出各个位上的值,再将各个位的值倒序输出。
结果:
很明显,最后两个结果是我们不想要的,因此将程序的第6行后加入如下程序语句:
while(num>99999||num<0)
{
printf("Yourinputiswrong,pleasereinput:
\n");
scanf("%ld",&num);
}
得到了预期的结果。
(4)输人4个整数,要求按由小到大顺序输出(本题是教材第5章习题5.9)。
得到正确结果后,修改程序使之按由大到小顺序输出。
程序如下:
#include
voidmain()
{
intt,a,b,c,d;
printf("Pleaseinput4numbers:
\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(a>d){t=a;a=d;d=t;}
if(b>c){t=b;a=c;c=t;}
if(b>d){t=b;a=d;d=t;}
if(c>d){t=c;a=d;d=t;}
printf("thecompositorofthe4numberis:
\n");
printf("%d%d%d%d\n",a,b,c,d);
}
分析:
这个程序是用if语句实现的,要注意的是当满足相应条件时,要执行的语句不只一条时要用花括号将需要执行的语句括起来。
还要注意的是两个数交换的方法,要有条理,不要弄混。
若想按从大到小输出,再在printf("%d%d%d%d\n",a,b,c,d);语句后加上一条如下语句即可:
printf("thecompositorfromsmalltobigofthe4numberis:
\n");
printf("%d%d%d%d\n",d,c,b,a);
运行程序:
结果如上图所示,达到预期目的。
3.实验总结
本实验主要练习的有关系运算符、if-else语句、switch语句等。
在使用关系运算时要注意:
关系运算符都是双目运算符,其结合性均为左结合。
关系运算符的优先级低于算术运算
符,高于赋值运算符。
在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!
=,==
和!
=的优先级相同。
与运算符&&和或运算符||均为双目运算符。
具有左结合性。
非运算符!
为单目运算符,具有右结合性。
在使用if-else语句时应注意以下几点。
1)在三种形式的if语句中,在if关键字之后均为表达式。
该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。
2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。
3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。
但要注意的是在}之后不能再加分号。
在使用switch语句时还应注意以下几点:
1)在case后的各常量表达式的值不能相同,否则会出现错误。
2)在case后,允许有多个语句,可以不用{}括起来。
3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
4)default子句可以省略不用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贵州 大学 语言 实验 报告 Ex04 逻辑 结构 程序设计