当前位置:首页 > 技术 > 正文内容

随机数生成与简单交互程序设计

访客 技术 2026年6月29日 1
示例1:随机数据生成器
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define STUDENT_COUNT 5
#define MAJOR_ID_1 80
#define MAJOR_ID_2 35

int main() {
    int index, majorRandom, studentID;

    srand((unsigned)time(NULL));

    for(index = 0; index < STUDENT_COUNT; ++index) {
        majorRandom = rand() % 2;

        if(majorRandom) {
            studentID = rand() % MAJOR_ID_1 + 1;
            printf("2025634%04d\n", studentID);
        } else {
            studentID = rand() % MAJOR_ID_2 + 1;
            printf("20256136%04d\n", studentID);
        }
    }
    return 0;
}
实验结论1:无图说明。 问题1:srand函数用于初始化随机数发生器。 问题2:此程序旨在生成一系列随机学号。 示例2:自动售卖机模拟器
#include <stdio.h>

int main() {
    int selection, quantity;
    float totalPrice = 0.0, payment, change;

    while(1) {
        printf("\n饮料选择菜单:\n");
        printf("1. 可乐 - 3元/瓶\n");
        printf("2. 雪碧 - 3元/瓶\n");
        printf("3. 橙汁 - 5元/瓶\n");
        printf("4. 矿泉水 - 2元/瓶\n");
        printf("0. 结束购买\n");
        printf("请选择饮料编号:");
        scanf("%d", &selection);

        if(selection == 0)
            break;

        if(selection < 1 || selection > 4) {
            printf("无效的选择,请重新输入。\n");
            continue;
        }

        printf("请输入数量:");
        scanf("%d", &quantity);
        
        switch(selection) {
            case 1:
            case 2: totalPrice += 3 * quantity; break;
            case 3: totalPrice += 5 * quantity; break;
            default: totalPrice += 2 * quantity;
        }

        printf("请支付金额:");
        scanf("%f", &payment);
        change = payment - totalPrice;
        printf("总价:%.2f元\n", totalPrice);
        printf("找零:%.2f元\n", change);
        totalPrice = 0.0;
    }
    printf("感谢您的光临,期待下次再见!\n");
    return 0;
}
实验结论2:无图说明。 问题1:需要确保每次购买后重置总价。 问题2:使用break可以立即退出当前循环。 示例3:红绿灯状态机
#include <stdio.h>

int main() {
    char command;
    
    while ((command = getchar()) != EOF) {
        if (command == '\n') continue;
        
        switch(command) {
            case 'r': printf("停止!\n"); break;
            case 'g': printf("前进!\n"); break;
            case 'y': printf("稍等片刻...\n"); break;
            default: printf("未知指令...\n");
        }
        while(getchar() != '\n');
    }
    return 0;
}
实验结论3:无图说明。 示例4:日常开销记录器
#include <stdio.h>

int main() {
    float expense, totalExpenses = 0.0, maxExpense = 0.0, minExpense = 20000.0;
    
    printf("输入每日开销,输入-1结束录入。\n");
    
    while(1) {
        scanf("%f", &expense);
        if(expense == -1) break;
        
        totalExpenses += expense;
        if(expense > maxExpense) maxExpense = expense;
        if(expense < minExpense) minExpense = expense;
    }
    
    printf("总开销:%.1f元\n", totalExpenses);
    printf("最高单笔开销:%.1f元\n", maxExpense);
    printf("最低单笔开销:%.1f元\n", minExpense);
    return 0;
}
实验结论4:无图说明。 示例5:三角形类型判断器
#include <stdio.h>

int main() {
    int sideA, sideB, sideC;
    
    while(scanf("%d %d %d", &sideA, &sideB, &sideC) != EOF) {
        if(sideA + sideB > sideC && sideA + sideC > sideB && sideB + sideC > sideA) {
            if(sideA == sideB && sideB == sideC)
                printf("等边三角形\n");
            else if(sideA == sideB || sideB == sideC || sideA == sideC)
                printf("等腰三角形\n");
            else if(sideA*sideA + sideB*sideB == sideC*sideC || sideA*sideA + sideC*sideC == sideB*sideB || sideB*sideB + sideC*sideC == sideA*sideA)
                printf("直角三角形\n");
            else
                printf("普通三角形\n");
        } else {
            printf("无法构成三角形\n");
        }
    }
    return 0;
}
实验结论5:无图说明。 示例6:幸运日猜测游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand((unsigned)time(NULL));
    int luckyDay = rand() % 30 + 1, guess, attempts = 0;
    
    printf("猜一猜哪一天(1-30)是你的幸运日吧!\n");
    printf("开始吧,你有三次机会。\n");
    
    while(attempts < 3) {
        scanf("%d", &guess);
        attempts++;
        
        if(guess == luckyDay) {
            printf("恭喜你,猜对了!\n");
            break;
        } else if(guess > luckyDay) {
            printf("太大了,试试更小的数字。\n");
        } else {
            printf("太小了,试试更大的数字。\n");
        }
        
        if(attempts < 3) printf("再试一次(1-30):");
    }
    
    if(attempts == 3 && guess != luckyDay)
        printf("机会用完了。告诉你吧,你的幸运日是%d号。\n", luckyDay);
    return 0;
}
实验结论6:无图说明。 实验总结:注意代码块的作用域对循环行为的影响。在处理用户输入时,正确管理状态非常重要。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。