深圳大学-电信院-C程序设计实验-循环结构设计

实验目的

熟悉和掌握循环结构程序的编程方法;

实验要求

本次实验不要求提交正式实验报告,但要求实验完成后,将每个程序及程序的运行结果依次拷贝到一个word文档中,统一形成一个.doc文档后提交至Blackboard,文档名可用你的姓名+你的学号。

实验内容

程序一内容

使用循环和选择结构编写一个猜数游戏程序。程序功能如下:
1) 能产生一个1-100之间的随机数;
2) 使用循环结构while(1){…}进行猜数。循环体有以下功能:
能从键盘输入一个数;
如果输入的数大于所产生的随机数,显示“错误,太大!”;
如果输入的数小于所产生的随机数,显示“错误,太小!”;
如果输入的数等于所产生的随机数,显示“恭喜你,猜中数字!”,然后退出循环体。
提示:随机数的产生用
srand( (unsigned)time( NULL ) );
num1 = rand( ) %100 + 1;
其中,函数srand只可执行一次,应放至循环体外, 循环体之前。为了使上面一段程序能够正常编译连接,在程序开始应该包含下面的头文件:
#include “stdlib.h”
#include “time.h”
因需用到scanf和printf程序还应包含头文件stdio.h
#include “stdio.h”

程序一代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand((unsigned)time(NULL));
    int num = rand() % 100 + 1;
    int guess; 
    printf("欢迎来到猜数游戏!\n");
    printf("我已经想好了一个1-100之间的数字,请猜一猜吧!\n");
    while (1)
    {
        printf("请输入你猜测的数字:");
        scanf("%d", &guess);
        if (guess > num)
        {
            printf("错误,太大!\n");
        }
        else if (guess < num)
        {
            printf("错误,太小!\n");
        }
        else
        {
            printf("恭喜你,猜中数字!\n");
            break; 
        }
    }
    printf("游戏结束!\n");
    return 0;
}

程序一结果

在这里插入图片描述

程序二内容

编写一个有关概率统计实验的程序。具体要求如下:

  1. 编写一个掷 10000 次骰子的程序,分别统计在这10000 次的投掷中 1 点、2 点、3 点、4 点、5 点、6 点出现的次数,计算出现的概率;
  2. 统计在这10000 次的投掷中, 连续三次投掷,顺序出现 1、2、3 点的次数,计算出现的概率。
  3. 掷骰子的模拟程序段可以参考实验四中的第3个程序;但要注意,随机数的初始化函数srand( (unsigned)time( NULL ) );
    只能在程序运行时(循环体外,循环体之前)执行1 次,否则会产生错误的结果;
  4. 需要定义7 个整型变量,分别对投掷后出现的不同点数进行计数。其中,前面6 个变量分别存储出现1 点、2点、3 点、4 点、5 点、6 点的次数,最后1 个变量存储顺序出现 1、2、3 点的次数;
  5. 需要定义7 个浮点变量,分别存储在不同情况下的概率;
  6. 程序输出为:各个点数出现的次数、以及各个点数出现的概率;
  7. 程序调试正确,运行以后的一个可能结果如下:

在这里插入图片描述
编程提示:关于“连续三次投掷,顺序出现 1、2、3 点的次数”的问题,可以采用两种方法解决。
第一种方法:因为每次循环只产生一个随机数,而判断是否会“顺序出现 1、2、3 点”需用到三个循环所产生的随机数,因此可用二个变量将前两个循环所产生的数记录下来。用a0和a1分别表示前两次循环所产生的随机数,其初值均为0,用n表示当前循环所产生的随机数。若a0=1且a1=2且n=3,就“顺序出现 1、2、3 点”。判断结束后,让a0=a1,a1=n,这样相对于下一次的循环,a0和a1为仍前两个循环所产生的随机数。

第二种方法:使用标志变量flag, 其初值为0。同样用n表示当前循环所产生的随机数,若n=1,置flag为1,表明出现1点;否则若n=2且flag=1,置flag为2,表明出现1、2点;否则若n=3且flag=2,就“顺序出现 1、2、3 点”,重置flag为0;否则,重置flag为0。

产生1到6的随机数用
n = rand( ) %6 + 1;

程序二代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand((unsigned)time(NULL));
    int n, cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0, cnt5 = 0, cnt6 = 0, cnt123 = 0, flag = 0;
    float p1,p2,p3,p4,p5,p6,p123;
    int i;
    for (i = 0; i <=9999; i++) {
        n = rand() % 6 + 1;
        if (n == 1) {
            flag = 1;
            cnt1++;
        }
        if (n == 2) {
            if (flag == 1) flag = 2;
            else flag = 0;
            cnt2++;
        }
        if (n == 3) {
            if (flag == 2) {
                cnt123++;
            }
            flag = 0;
            cnt3++;
        }
        if (n == 4) {
            cnt4++;
            flag = 0;
        }
        if (n == 5) {
            flag = 0;
            cnt5++;
        }
        if (n == 6) {
            flag = 0;
            cnt6++;
        }
    }
    p1= (float)cnt1 / 10000;
    p2 = (float)cnt2 / 10000;
    p3 = (float)cnt3 / 10000;
    p4 = (float)cnt4 / 10000;
    p5 = (float)cnt5 / 10000;
    p6 = (float)cnt6 / 10000;
    p123 = (float)cnt123 / 10000;
    printf("这是一个掷骰子的统计程序\n\n在10000次的投掷中:\n");
    printf("\n点1出现了%d次,出现概率为%f\n", cnt1, p1);
    printf("\n点2出现了%d次,出现概率为%f\n", cnt2, p2);
    printf("\n点3出现了%d次,出现概率为%f\n", cnt3, p3);
    printf("\n点4出现了%d次,出现概率为%f\n", cnt4, p4);
    printf("\n点5出现了%d次,出现概率为%f\n", cnt5, p5);
    printf("\n点6出现了%d次,出现概率为%f\n", cnt6, p6);
    printf("\n连续三次投掷,点1、2、3顺序出现了%d次,出现概率为%f\n", cnt123, p123);
    return 0;
}

程序二结果

在这里插入图片描述

PS

老师的批改:第二个程序中计算“点 1、2、3 顺序出现概率”时,除数应为9998.

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值