C程序设计——应用实例-“猜数”游戏

1 篇文章 0 订阅

问题:

先由计算机“想”一个1~100之间的教请玩家猜,如果猜对了,则显示“Right!”",并赞美一番;否则显示“Wrong !”,并提示所猪的数是大了还是小了。最多可以猜7次。如7 次仍未猜中,则停止本次猜数。每次运行程序可以反复猜多个数,直到玩家想退出时才结束。

解题思路:首先从整体把握,程序要完成的功能是“想数”、“猜数”和“是否继续猜”。如果继续猜,再重新开始“想数”、“猜数”......流程图如下:

其中,“生成数字”和“猜数字”是两个子模块,在做整体设计时只需要想它们应该做什么,而不用想怎么做。按此流程,编写程序的框架代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<assert.h>
#include<stdlib.h>
#define MAX_NUMBER 100
#define MIN_NUMBER 1
#define MAX_TIMES 7
int MakeNumber(void);
void GuessNumber(int number);
int main(void)
{
    int number;
    int cont;
    srand(time(NULL));
    //主功能开始
    do {
        number = MakeNumber();
        GuessNumber(number);
        printf("Continue?(Y/N):");
        cont = getchar();
        while (getchar() != '\n')//读走回车符及其之前的所有无用字符
        {
            ;
        }
    } while (cont != 'N' && cont != 'n');
    //主功能结束
    return 0;
}

在自顶向下完成程序框架之后,再对子模块逐个击破。先细化MakeNumber()。它的实现并不复杂,调用主函数rand()生成随机数,通过运算把数值控制在 MIN_NUMBER和MAX_NUMBER之间。

//函数功能:返回MIN_NUMBEER和MAX_NUMBER之间的一个随机数
int MakeNumber(void)
{
int number;
number = (rand() % (MAX_NUMBER - MIN_NUMBER + 1)) + MIN_NUMBER;
assert(number >= MIN_NUMBER && number <= MAX_NUMBER);
return number;
}

上面使用了assert()测试算法的正确性。然后,让我们再把目光转向GuessNumber()。弄清它的逻辑是关键。代码如下:

void GuessNumber(int number)
{
    int guess;
    int times = 0;
    assert(number >= MIN_NUMBER && number <= MAX_NUMBER);
    do {
        times++;
        printf("Round%d:", times);
        scanf("%d", &guess);
        while (getchar() != '\n')//读走换行符及其之前所有无用字符
        {
            ;
        }
        if (guess > number)
        {
            printf("Wrong!Too high.\n");
        }
        else if (guess < number)
        {
            printf("Wrong!Too low\n");
        }
    } while (guess != number && times < MAX_TIMES);
    //输出结果
    if (guess == number)
    {
        printf("Congratulations!You'ra so cool!\n");
    }
    else
    {
        printf("Mission failed after %d attempts.\n", MAX_TIMES);
    }
      




}

这样,通过三个相对独立思考过程,我们完成了这个程序。每个独立的函数都不复杂,但如果我们把它们都揉为一体,放入main(),那将是多重循环嵌套,复杂分支结构,程序的清晰性会大大下降。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java程序设计课程设计游戏的介绍: 1. 项目名称:游戏设计 2. 类的结构分布:请参考图1中的类的分布 3. 概要设计: 在设计标准考试设计时,编写了2个Java源文件:GuessShu.java,Dengru.java。游戏分为以下几个模块: - 随机数的获取模块 - 输入输出模块 - 判断模块 - 自动计数模块 具体实现细节如下: - 随机数的获取模块:使用Java中的Random类生成随机数。 - 输入输出模块:使用Java中的Scanner类获取用户输入,并使用System.out.println()方法输出结果。 - 判断模块:使用if语句判断用户输入的数与随机数的大小关系。 - 自动计数模块:使用Java中的变量记录用户测的次数。 以下是GuessShu.java的代码实现: ```java import java.util.Random; import java.util.Scanner; public class GuessShu { public static void main(String[] args) { Random random = new Random(); int num = random.nextInt(100) + 1; int guessNum = 0; Scanner scanner = new Scanner(System.in); System.out.println("游戏开始!"); while (true) { System.out.print("请输入一个1-100之间的整数:"); int guess = scanner.nextInt(); guessNum++; if (guess > num) { System.out.println("大了!"); } else if (guess < num) { System.out.println("小了!"); } else { System.out.println("恭喜你,对了!"); System.out.println("你一共了" + guessNum + "次。"); break; } } } } ``` 以下是Dengru.java的代码实现: ```java import java.util.Scanner; public class Dengru { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入用户名:"); String username = scanner.nextLine(); System.out.print("请输入密码:"); String password = scanner.nextLine(); if ("admin".equals(username) && "123456".equals(password)) { System.out.println("登录成功!"); } else { System.out.println("用户名或密码错误!"); } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值