广州大学学生实验报告,程序设计基础,实验4 程序设计基础应用实验

广州大学学生实验报告

开课学院及实验室:计算机学院/电子信息楼              202x年  月  日

  

计算机

年级/专业/

计科

姓名

Great

Macro

学号

实验课程名称

程序设计基础

成绩

实验项目名称

实验4  程序设计基础应用实验

指导老师

(***(1)报告只能为文字和图片;(2)实验项目名称不能有任何改动;(3)必须填写正确的姓名和学号;否则会影响最后成绩的统计,后果自负***)

一、实验目的及要求

1.培养学生将实际问题转化为数学模型再用C语言编程解决该问题的综合应用方法;

2.训练学生灵活掌握本课程所学的有关章节知识;

3.掌握基本的数据结构知识和更多的计算方法;

4. 掌握模块化程序设计的方法。

二、实验设备与平台

1. 实验设备:计算机;

2. 平台:Windows操作系统,Visual C++ 6.0或Microsoft Visual Studio 2005/2008/2010/2012/2013/2015/2017/2019;或适合的C/C++编程环境。

三、实验内容

(下面3题选做2题)编写程序,解下列问题,然后把编写的程序代码和运行结果截图复制到题目后面的空白处。

1、掷骰子游戏

编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。

#include <iostream>
#include <ctime>
using namespace std;

int main()
{
    int i, a[3], M;

    srand(time(0));
    cout << "下面开始掷骰子游戏" << endl;

    a[0] = rand()%6 + 1;
    a[1] = rand()%6 + 1;
    a[2] = a[0] + a[1];
    cout << "本次掷出点数分别为:" << a[0] <<"," << a[1] << endl;

    if(a[2] == 7 || a[2] == 11)
    {
        cout << "恭喜你,胜利了" << endl;
    }
    else if(a[2] == 2 || a[2] == 3 || a[2] == 12)
    {
        cout << "很遗憾,你输了" << endl;
    }
    else
    {
        M = a[2];
        for(i = 0; i < 7; i++)
        {
            a[0] = rand()%6 + 1;
            a[1] = rand()%6 + 1;
            a[2] = a[0] + a[1];
            cout << "本次掷出点数分别为:" << a[0] <<"," << a[1] << endl;

            if(a[2] == M)
            {
                cout << "恭喜你,胜利了" << endl;
                break;
            }
        }
        if(i >= 7)
        {
            cout << "很遗憾,你输了" << endl;
        }
        
    }
    
    return 0;
}

 

 

 

2、如果将游戏规则改为:计算机“想”一个数作为一个骰子掷出的点数(在用户输入数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请重新编写该程序。

#include <iostream>
#include <ctime>
using namespace std;

int main()
{
    int i, a[3], M;

    srand(time(0));
    cout << "下面开始掷骰子游戏" << endl;

    a[0] = rand()%6 + 1;
    cout << "请输入点数(1~6):";
    cin >> a[1];

    a[2] = a[0] + a[1];
    cout << "本次掷出点数分别为:" << a[0] <<"," << a[1] << endl;

    if(a[2] == 7 || a[2] == 11)
    {
        cout << "恭喜你,胜利了" << endl;
    }
    else if(a[2] == 2 || a[2] == 3 || a[2] == 12)
    {
        cout << "很遗憾,你输了" << endl;
    }
    else
    {
        M = a[2];
        for(i = 0; i < 7; i++)
        {
            a[0] = rand()%6 + 1;
            cout << "请输入点数(1~6):";
            cin >> a[1];

            a[2] = a[0] + a[1];
            cout << "本次掷出点数分别为:" << a[0] <<"," << a[1] << endl;

            if(a[2] == M)
            {
                cout << "恭喜你,胜利了" << endl;
                break;
            }
        }

        if(i >= 7)
        {
            cout << "很遗憾,你输了" << endl;
        }
        
    }

    return 0;
}

 

 

3、要求能够运用多文件程序完成一个完整的程序功能操作流程。

输入一串字符,再输入一个指定字符,将字符串中删去指定字符再显示出来。要求程序把输入字符串、删除指定字符和显示字符串的功能分别在各自单独的.cpp文件中由外部函数来处理,主文件中的主函数只作调用各外部函数实现程序功能。

注意:由于分文件演示很复杂在博客表示出来,这里使用单文件,根据所学知识自行修改

#include <iostream>
#include <cstring>

using namespace std;

// 输出函数
void input(char *s, char *a)
{
    cout << "请输入一串字符:";
    cin >> s;

    cout << "请输入一个指定要删除的字符:";
    cin >> a;
}

// 删除函数
void del(char *s, char a)
{
    int i, j, len;
    len = strlen(s);

    for(i = 0; i <= len; i++)
    {
        // 如果从是s[i]后面开始的字符往前挪完后,还有s[i] == a,需要重复进行
        while(s[i] == a)
        {
            // 所有从s[i]后面开始的字符往前挪一个单位
            for(j = i; j <= len - 1; j++)
            {
                s[j] = s[j + 1];
            }
        }    
    }
}

// 输出函数
void output(char *s)
{
    int i = 0;

    while(s[i])
    {
        cout << s[i];
        i++;
    }

    cout << endl;
}

int main()
{
    char a, s[50];

    input(s, &a);
    del(s, a);
    output(s);

    return 0;
}

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值