C语言实验报告14

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验目的
1.掌握关系运算符和逻辑运算符的运算规则,学会使用关系表达式和逻辑表达式正确描述选择结构的判断条件。

2.熟练掌握if语句,能够正确使用if语句和if语句的嵌套编写选择结构程序,正确理解程序的执行流程。

3.掌握switch语句的格式和功能。

实验内容
1.实验4_1.
设整型变量a、b、c分别存放从键盘输入的三个整数。

编写C程序,按从大到小排列这三个数,使a成为最大值,c成为最小值,并且按序输出这三个数。

(《C语言程序设计教程-习题解答与实验指导》第125页,实验4,实验内容1)
(1)请将.c源程序文本复制粘贴到下框中
(2)请将运行结果截图粘贴到此处:
(3)思考并回答:
①从键盘输入三个整数需要用到scanf函数,和在源程序中直接赋值有什么区别?
答:scanf函数提供一种交互输入方式,在程序运行工程中,需要从键盘输入数据,可以实现一种程序进行多次不同数据的运算,在一定程度上减少了程序出错的可能性,而在源程序中直接赋值只能够进行固定的数据处理,若想进行其他数据的处理,则需要修改程序。

②使用条件表达式实现求两个数中的最大(小)值,如何书写表达式?
答:求最大值:(a>b)?(max=a):(max=b);
求最小值:(a<b)?(min=a):(min=b);
2.实验4_2.
编写C 程序,计算下面分段函数的值。

(《C 语言程序设计教程-习题解答与实验指导》第126页,实验4,实验内容2)
要求:
①用scanf 函数输入x 的值。

②运行程序时分别按照x 的值小于0,x 的值在0和15之间,x 的值大于15这三种情况输入数据,检查输出的y 值是否正确。

(1)请将.c 源程序文本复制粘贴到下框中
y =
x+10,
(x<0)3x+5,
(0≤x<15)
2x-10,(x ≥15)
(2)请将运行结果截图粘贴到此处:
(3)思考并回答:
判断x的值在0和15之间可否使用表达式“0<=x<15”?为什么?正确的表示方法是什么?
答:不能,关系运算符具有左结合性,“0<=x<15”等价于“(0<=x)<15”,该运算结果会出现错误,若x的值只要是大于0的数,表达式的运算结果都为1,即逻辑真,并不能判断x的值是否符合要求。

正确的表示方法应该是:0<=x&&x<15.
3.实验4_3.
从键盘输入一个小于六位的正整数,判断它是几位数,并按照相反的顺序输出各位上的数字,例如输入1234,输出为4321。

要求:
①用scanf输入正整数。

②运行程序时,分别输入5位数、4位数、3位数、2位数和1位数,检查结果是否均正确。

(1)请将.c源程序文本复制粘贴到下框中
(2)请将运行结果截图粘贴到此处:
(3)请详细说明你的编程思路。

选择if…else语句实现程序的选择控制。

判断一个数是否为小于的正整数,使用n/100000,来进行判断,如果结果不为0则表明不是小于六位的数。

在倒序输出个位数字时,得到最后一位数字用n%10,倒数第二位n/10%10,倒数第三位n/100%10,倒数第四位n/1000%10,最后一位n/1000%10.在输出时按顺序输出即可。

(4)使用数组会使程序变得简单:
#include<stdio.h>
main(){
int n,m[6],i,j=0;
scanf("%ld",&n);
while(n!=0)
{m[j]=n%10;
n=n/10;
j++;}
for(i=0;i<j;i++)
{printf("%d",m[i]);}
}
4.实验4_4.
输入某学生的考试成绩,如果在90分以上,输出A;80~89分输出B;70~79分输出C;60~69分输出D;60分以下则输出E。

要求:
①使用if语句或者switch语句实现。

②运行程序时分别输入成绩为90分以上、80~89分、70~79分、60~69分、60分以下,以及大于100分和小于0等情况,检查输出结果是否正确。

(1)请将.c源程序文本复制粘贴到下框中
(2)请将运行结果截图粘贴到此处:
(3)思考并回答:
在处理多分支选择结构时,既可以选用switch语句结构处理,也可以选用嵌套if和if……else语句处理,但是switch语句使用时有些限制,请说明switch 语句使用中需要注意的问题。

答:switch后面表达式两边有圆括号;各case和default子句必须用一对花括号括起;case和常量表达式之间必须有空格,case后面必须是整型、字符型常量或者常量表达式,在同一个switch语句中任何两个case的常量表达式的值不能相同。

switch语句本身属于等值判断,使用时应注意与break语句的搭配使用才能正常实现选择功能。

5.实验4_5.
输入三个数字,判断它们是否能构成三角形,如果不能,输出提示信息“NO”;否则判断它是直角、等边、等腰或一般三角形。

注意:请合理描述各类三角形的判断条件。

程序算法N-S结构图如下:
(1)请将.c源程序文本复制粘贴到下框中
(3)思考并回答:
①判断三角形的类型时需要用到各种判断条件,如等边三角形的判断条件是三条边相等,该判断条件可否描述为“a=b=c”?为什么?
答:不可以,“a=b=c”这个表达式不表示a等于b等于c,表示的是将才c的值赋给b,再将b的值赋给a,是一个赋值运算式。

正确的表示应为(a==b&&b==c).
②程序中使用多重分支语句,来判断各类三角形的逻辑关系,请分析能否用其它if结构代替?
答:可以使用if的简单结构来代替。

程序如下:
main()
{float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
if(a<=0||b<=0||c<=0||a+b<=c||a+c<=b||b+c<=a)
{printf("No");}
else
{if(a==b==c)
{printf("It is a equilateral triangle");}
else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
{printf("It is a right-angled triangle");}
else printf("It is a triangle");
}
}
6.附加题.
编写程序,计算逻辑表达式的值。

假设int a=0,b=1,c=1,d=3;
①表达式a*b&&c-d、c-d&&a*b是多少?为什么?
答:这两个表达式的值都为0,逻辑与具有左结合性,由于逻辑运算的短路性质,并不是所有的操作数都会被执行到。

第一个表达式的左操作数的值为0,已经可以确定整个表达式的值为0,右操作数就不会被执行到。

第二个表达式由于其左操作数为非零值,故计算右操作数的值为0,整个表达式的值为0
②表达式--a||++b&&--c的值是多少?变量a,b,c的值分别是多少?为什么?答:表达式的值为1,变量a,b,c的值为-1,1,1,由于逻辑运算的短路性质
和严格的左结合性,按照从左至右的顺序计算,逻辑或||的左操作数--a为非0值-1,此时就不必再求++b&&--c,表达式的值已经确定为1。

同时a为-1,后面的操作数未被执行到,因此b与c的值保持不变。

③表达式++b&&--c||--a的值是多少?变量a,b,c的值分别是多少?为什么?答:这个表达式的值为1,由于在运算过程中,并不能计算某个逻辑运算符确定整个表达式的最终结果,所以每个操作数都会被执行到,因此a,b,c的值为-1,2,0。

相关文档
最新文档