实验4 选择构造程序设计
一、实验目的:
1、熟悉C语言逻辑值“真〞、“假〞的表示;
2、掌握关系运算符的种类、运算优先级、运算结果的类型,清楚一个关系表达式对应的相反式;
3、掌握逻辑运算符的种类、运算优先级、结合性、操作数与运算结果的类型,能根据要求构建相应的逻辑表达式,理解逻辑运算中“短路〞现象;
4、掌握if语句的用法,可以根据要求纯熟使用单分支、双分支、多分支(嵌套)构造;
5、掌握switch语句的格式、功能及本卷须知;
6、熟悉条件运算符和条件表达式的根本用法;
7、初步学习随机函数rand()的使用。
二、实验内容
1、(根底题)分析、运行以下程序,验证逻辑值、关系运算相关内容,并答复相关问题:
#include <stdio.h>
int main()
{
int x=15,y=5,z=50;
printf("x=%d, y=%d, z=%d\n",x,y,z);
printf("x>y? %d\n",x>y);
printf("x<=y? %d\n",x<=y);
printf("x+y<z? %d\n",x+y<z);
printf("z-30>=x+y? %d\n",z-30>=x+y);
printf("y==z-30>x? %d\n",y==z-30>x);
return 0;
}
问题:
(1)C语言逻辑值“真〞、“假〞如何表示?输入、输出时有什么不同?
(2)关系运算符包含哪几个? 它们的优先级如何?
(3)关系表达式的运算结果是什么?
(4)哪些关系运算符互为相反式?它们的运算结果有什么关联?
2、(根底题分析、运行以下程序,验证逻辑运算的相关内容,并答复相关问题:
#include <stdio.h>
int main()
{
int a=3, b=4, c=5;
int x,y,z;
printf("a=%d, b=%d, c=%d\n",a,b,c);
printf("a+b>c&&b==c ? %d\n",a+b>c&&b==c);
printf("!a||!c||b ? %d\n",!a||!c||b);
printf("a||b+c&&b>c ? %d\n",a||b+c&&b>c);
printf("a*b&&c+a ? %d\n\n",a*b&&c+a);
printf("执行x=a<b||c++后,x=%d,a=%d,b=%d,c=%d\n",x=a<b||c++,a,b,c);
printf("执行y=a>b&&c++后,y=%d,a=%d,b=%d,c=%d\n",y=a>b&&c++,a,b,c);
printf("执行z=a||b++||c++后,z=%d,a=%d,b=%d,c=%d\n",z=a||b++||c++,a,b,c);
return 0;
}
问题:
(1)逻辑运算符包含哪几个? 它们的优先级如何?它的运算级别高于算术运算符、赋值运算符吗?
(2)逻辑表达式的操作数、运算结果是什么?
(3)什么是逻辑运算中“短路〞现象?这会带来什么影响?
3、(根底题以下程序的功能是:输入学生四门课程的成绩,然后根据要求构建相应的逻辑表达式,之后计算这些表达式的值并输出。请根据程序相关提示填写所缺代码,再运行该程序予以验证,最后答复相关问题:
#include <stdio.h>
int main()
{
double sc1,sc2,sc3,sc4;
printf("请输入学生的门课程成绩:\n");
scanf("_______________________",_____________________);
printf("sc1=%f, sc2=%f, sc3=%f, sc4=%f\n",sc1,sc2,sc3,sc4);
printf("四门课程的平均成绩大于等于80? %s\n",___________________?"是":"否");
printf("四门课程中每门的成绩均大于等于80? %s\n",_________________?"是":"否");
printf("四门课程中至少有一门的成绩大于等于80? %s\n",_____________?"是":"否");
printf("四门课程中没有一门的成绩大于等于80? %s\n",_____________?"是":"否");
printf("四门课程中至少有两门的成绩大于等于80? %s\n",___________?"是":"否");
return 0;
}
问题:
(1)在程序中的什么位置使用了“条件运算符〞?
(2)条件运算符有几个操作数?条件表达式如何执行?
4、(根底题)编写一个程序:输入一个正整数,先判断其是奇数还是偶数,再进一步判断能否被3整除,运行界面如下所示:
(提示:(1)判断奇偶性是指能否被2整除,可考虑用%运算符取余数;(2)程序运行有4种可能结果,可用if…else…嵌套处理:在外层考虑奇偶性,在内嵌的if…else…中考虑能否被3整除。)
5、对于以下函数:
编写程序,要求输入x的值,输出y值。
(提示:可以选择如下方法之一来编写程序:
⏹多个if语句(不含else部分);
⏹嵌套的if语句;
⏹if…else if….语句;
⏹条件运算符和条件表达式。)
6、(进步题)以下程序实现的功能是:利用系统函数rand()产生两个0~99的随机整数,之后进展算术四那么运算(加、减、乘、除),用户先输入运算符,再输入对应运算的结果,最后由程序来判断是否正确,并输出相应信息。printf和scanf有什么不同
分析、运行该程序,体会switch语句和随机函数的用法,并答复相关问题。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a,b,result=-1,input=0;
char op;
/* 系统函数rand():产生0-32767随机整数,头文件是
系统函数srand(int seed):seed一样,产生随机数中也一样,头文件是
系统函数time(0):返回系统时间的总秒数,头文件是
*/
srand(time(0));
a=rand()%100;
b=rand()%100;
printf("输入算术运算的运算符(+、-、x、/):");//'*'不可用
op=getchar();
switch(op)
{
case '+':
result=a+b;
printf("%d + %d = ",a,b);
scanf("%d",&input);
break;
case '-':
result=a-b;
printf("%d - %d = ",a,b);
scanf("%d",&input);
break;
case 'x':
result=a*b;
printf("%d * %d = ",a,b);
scanf("%d",&input);
break;
case '/':
if(b!=0)
{
result=a/b;
printf("%d / %d = ",a,b);
scanf("%d",&input);
}else
{
printf("除数为0,不能进展除法运算\n");
}
break;
default:
printf("输入的运算符不正确!\n");
}
if(result==input)
printf("输入答案正确 加油!\n\n");
else
printf("输入答案错误 加水!\n\n");
return 0;
}
问题:
(1)switch语句由哪些部分构成?case子句、default子句有什么作用?该语句如何执行?
(2)switch语句中的break子句有什么作用?
(3)rand()、srand()各有什么作用?使用时应导入什么头文件?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论