实验选择构造程序设计
一、实验目的
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种可能结果,可用ifelse嵌套处理:在外层考虑奇偶性,在内嵌的ifelse中考虑能否被3整除。)
5、对于以下函数:
编写程序,要求输入x的值,输出y值。
(提示:可以选择如下方法之一来编写程序:
多个if语句(不含else部分);
嵌套的if语句;
ifelse 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小时内删除。