明解C语言 中级篇 第三章答案

练习3-1

/* 猜拳游戏(其四:分割函数/显示成绩)*/

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int human;        /* 玩家的手势 */
int comp;        /* 计算机的手势 */
int win_no;        /* 胜利次数 */
int lose_no;    /* 失败次数 */
int draw_no;    /* 平局次数 */

char* hd[] = { "石头", "剪刀", "布" };        /* 手势 */

/*--- 初始处理 ---*/
void initialize(void)
{
    win_no = 0;        /* 胜利次数 */
    lose_no = 0;        /* 失败次数 */
    draw_no = 0;        /* 平局次数 */

    srand(time(NULL));    /* 设定随机数种子 */

    printf("猜拳游戏开始!!\n");
}

/*--- 运行猜拳游戏(读取/生成手势)---*/
void jyanken(void)
{
    int i;

    comp = rand() % 3;        /* 用随机数生成计算机的手势(0~2)*/

    do {
        printf("\n\a石头剪刀布 ···");
        for (i = 0; i < 3; i++)
            printf(" (%d)%s", i, hd[i]);
        printf(":");
        scanf("%d", &human);        /* 读取玩家的手势 */
    } while (human < 0 || human > 2);
}

/*--- 更新胜利/失败/平局次数 ---*/
void count_no(int result)
{
    switch (result) {
    case 0: draw_no++; puts("平局。");     break;                        /* 平局 */
    case 1: lose_no++; puts("你输了。");     break;                        /* 失败 */
    case 2:  win_no++;  puts("你赢了。");   break;                    /* 胜利 */
    }
}

/*--- 确认是否再次挑战 ---*/
int confirm_retry(void)
{
    int x;

    printf("再来一次吗···(0)否 (1)是:");
    scanf("%d", &x);

    return x;
}

int main(void)
{
    int judge;                /* 胜负 */
    int retry;                /* 再来一次?*/

    initialize();                        /* 初始处理 */

    do {
        jyanken();                        /* 运行猜拳游戏 */

        /* 显示计算机和玩家的手势 */
        printf("我出%s,你出%s。\n", hd[comp], hd[human]);

        judge = (human - comp + 3) % 3;    /* 判断胜负 */

        count_no(judge);                /* 更新胜利/失败/平局次数 */

        retry = confirm_retry();        /* 确认是否再次挑战 */

    } while (retry == 1);

    printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);

    return 0;
}

练习3-2

/* 猜拳游戏(其五:先赢满3局者胜)*/

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int human;        /* 玩家的手势 */
int comp;        /* 计算机的手势 */
int win_no;        /* 胜利次数 */
int lose_no;    /* 失败次数 */
int draw_no;    /* 平局次数 */

char* hd[] = { "石头", "剪刀", "布" };        /* 手势 */

/*--- 初始处理 ---*/
void initialize(void)
{
    win_no = 0;        /* 胜利次数 */
    lose_no = 0;        /* 失败次数 */
    draw_no = 0;        /* 平局次数 */

    srand(time(NULL));    /* 设定随机数种子 */

    printf("猜拳游戏开始!!\n");
}

/*--- 运行猜拳游戏(读取/生成手势) ---*/
void jyanken(void)
{
    int i;

    comp = rand() % 3;        /* 用随机数生成计算机的手势(0~2)*/

    do {
        printf("\n\a石头剪刀布 ···");
        for (i = 0; i < 3; i++)
            printf(" (%d)%s", i, hd[i]);
        printf(":");
        scanf("%d", &human);        /* 读取玩家的手势 */
    } while (human < 0 || human > 2);
}

/*--- 更新胜利/失败/平局次数 ---*/
void count_no(int result)
{
    switch (result) {
    case 0: draw_no++;     break;                        /* 平局 */
    case 1: lose_no++;     break;                        /* 失败 */
    case 2: win_no++;   break;                        /* 胜利 */
    }
}

/*--- 显示判断结果 ---*/
void disp_result(int result)
{
    switch (result) {
    case 0: puts("平局。");     break;     /* 平局 */
    case 1: puts("你输了。");   break;     /* 失败 */
    case 2: puts("你赢了。");   break;     /* 胜利 */
    }
}

int main(void)
{
    int judge;                /* 胜负 */
    int cnt;
    printf("要猜赢几次?");
    scanf("%d", &cnt);

    initialize();                        /* 初始处理 */

    do {
        jyanken();                        /* 运行猜拳游戏 */

        /* 显示计算机和玩家的手势 */
        printf("我出%s,你出%s。\n", hd[comp], hd[human]);

        judge = (human - comp + 3) % 3;    /* 判断胜负 */

        count_no(judge);                /* 更新胜利/失败/平局次数 */

        disp_result(judge);                /* 显示判断结果 */

    } while (win_no < cnt && lose_no < cnt);

    printf(win_no == cnt?"\n□你赢了。\n" : "\n■我赢了。\n");

    printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);

    return 0;
}

练习3-3

/* 猜拳游戏(其四:分割函数/显示成绩)*/

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int human;        /* 玩家的手势 */
int comp;        /* 计算机的手势 */
int win_no;        /* 胜利次数 */
int lose_no;    /* 失败次数 */
int draw_no;    /* 平局次数 */
char* hd[] = { "石头", "剪刀", "布" };        /* 手势 */

/*--- 初始处理 ---*/
void initialize(void)
{
    win_no = 0;        /* 胜利次数 */
    lose_no = 0;        /* 失败次数 */
    draw_no = 0;        /* 平局次数 */

    srand(time(NULL));    /* 设定随机数种子 */

    printf("猜拳游戏开始!!\n");
}

/*--- 运行猜拳游戏(读取/生成手势)---*/
void jyanken(void)
{
    int i;
    comp = rand() % 3;        /* 用随机数生成计算机的手势(0~2)*/
    do
    {
        comp = rand() % 3;
    } while (comp == 1);

    do {
        printf("\n\a石头剪刀布 ···");
        for (i = 0; i < 3; i++)
            printf(" (%d)%s", i, hd[i]);
        printf(":");
        scanf("%d", &human);        /* 读取玩家的手势 */
    } while (human < 0 || human > 2);
}

/*--- 更新胜利/失败/平局次数 ---*/
void count_no(int result)
{
    switch (result) {
    case 0: draw_no++;     break;                        /* 平局 */
    case 1: lose_no++;     break;                        /* 失败 */
    case 2: win_no++;   break;                        /* 胜利 */
    }
}

/*--- 显示判断结果 ---*/
void disp_result(int result)
{
    switch (result) {
    case 0: puts("平局。");     break;     /* 平局 */
    case 1: puts("你输了。");   break;     /* 失败 */
    case 2: puts("你赢了。");   break;     /* 胜利 */
    }
}

/*--- 确认是否再次挑战 ---*/
int confirm_retry(void)
{
    int x;

    printf("再来一次吗···(0)否 (1)是:");
    scanf("%d", &x);

    return x;
}

int main(void)
{
    int judge;                /* 胜负 */
    int retry;                /* 再来一次?*/

    initialize();                        /* 初始处理 */

    do {
        jyanken();                        /* 运行猜拳游戏 */

        /* 显示计算机和玩家的手势 */
        printf("我出%s,你出%s。\n", hd[comp], hd[human]);

        judge = (human - comp + 3) % 3;    /* 判断胜负 */

        count_no(judge);                /* 更新胜利/失败/平局次数 */

        disp_result(judge);                /* 显示判断结果 */

        retry = confirm_retry();        /* 确认是否再次挑战 */

    } while (retry == 1);

    printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);

    return 0;
}

练习3-4

/* 猜拳游戏(其四:分割函数/显示成绩)*/

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int human;        /* 玩家的手势 */
int comp;        /* 计算机的手势 */
int win_no;        /* 胜利次数 */
int lose_no;    /* 失败次数 */
int draw_no;    /* 平局次数 */
char* hd[] = { "石头", "剪刀", "布" };        /* 手势 */

/*--- 初始处理 ---*/
void initialize(void)
{
    win_no = 0;        /* 胜利次数 */
    lose_no = 0;        /* 失败次数 */
    draw_no = 0;        /* 平局次数 */

    srand(time(NULL));    /* 设定随机数种子 */

    printf("猜拳游戏开始!!\n");
}

/*--- 运行猜拳游戏(读取/生成手势)---*/
void jyanken(void)
{
    int i;
    static int cnt = 0;
    if (cnt == 0) {
        comp = 0;
        cnt++;
    }
    else
    {
        comp = rand() % 3;
    }        /* 用随机数生成计算机的手势(0~2)*/

    do {
        printf("\n\a石头剪刀布 ···");
        for (i = 0; i < 3; i++)
            printf(" (%d)%s", i, hd[i]);
        printf(":");
        scanf("%d", &human);        /* 读取玩家的手势 */
    } while (human < 0 || human > 2);
}

/*--- 更新胜利/失败/平局次数 ---*/
void count_no(int result)
{
    switch (result) {
    case 0: draw_no++;     break;                        /* 平局 */
    case 1: lose_no++;     break;                        /* 失败 */
    case 2: win_no++;   break;                        /* 胜利 */
    }
}

/*--- 显示判断结果 ---*/
void disp_result(int result)
{
    switch (result) {
    case 0: puts("平局。");     break;     /* 平局 */
    case 1: puts("你输了。");   break;     /* 失败 */
    case 2: puts("你赢了。");   break;     /* 胜利 */
    }
}

/*--- 确认是否再次挑战 ---*/
int confirm_retry(void)
{
    int x;

    printf("再来一次吗···(0)否 (1)是:");
    scanf("%d", &x);

    return x;
}

int main(void)
{
    int judge;                /* 胜负 */
    int retry;                /* 再来一次?*/

    initialize();                        /* 初始处理 */

    do {
        jyanken();                        /* 运行猜拳游戏 */

        /* 显示计算机和玩家的手势 */
        printf("我出%s,你出%s。\n", hd[comp], hd[human]);

        judge = (human - comp + 3) % 3;    /* 判断胜负 */

        count_no(judge);                /* 更新胜利/失败/平局次数 */

        disp_result(judge);                /* 显示判断结果 */

        retry = confirm_retry();        /* 确认是否再次挑战 */

    } while (retry == 1);

    printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);

    return 0;
}

练习3-5

/* 猜拳游戏(其四:分割函数/显示成绩)*/

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int human;        /* 玩家的手势 */
int comp;        /* 计算机的手势 */
int win_no;        /* 胜利次数 */
int lose_no;    /* 失败次数 */
int draw_no;    /* 平局次数 */
char* hd[] = { "石头", "剪刀", "布" };        /* 手势 */

/*--- 初始处理 ---*/
void initialize(void)
{
    win_no = 0;        /* 胜利次数 */
    lose_no = 0;        /* 失败次数 */
    draw_no = 0;        /* 平局次数 */

    srand(time(NULL));    /* 设定随机数种子 */

    printf("猜拳游戏开始!!\n");
}

/*--- 运行猜拳游戏(读取/生成手势)---*/
void jyanken(void)
{
    static int cnt=0;
    int i;
    comp = rand() % 3;        /* 用随机数生成计算机的手势(0~2)*/
    cnt++;
    do {
        printf("\n\a石头剪刀布 ···");
        for (i = 0; i < 3; i++)
            printf(" (%d)%s", i, hd[i]);
        printf(":");
        scanf("%d", &human);        /* 读取玩家的手势 */
    } while (human < 0 || human > 2);
    if (cnt % 5 == 0) {
        comp = (human + 2) % 3;
    }

}

/*--- 更新胜利/失败/平局次数 ---*/
void count_no(int result)
{
    switch (result) {
    case 0: draw_no++;     break;                        /* 平局 */
    case 1: lose_no++;     break;                        /* 失败 */
    case 2: win_no++;   break;                        /* 胜利 */
    }
}

/*--- 显示判断结果 ---*/
void disp_result(int result)
{
    switch (result) {
    case 0: puts("平局。");     break;     /* 平局 */
    case 1: puts("你输了。");   break;     /* 失败 */
    case 2: puts("你赢了。");   break;     /* 胜利 */
    }
}

/*--- 确认是否再次挑战 ---*/
int confirm_retry(void)
{
    int x;

    printf("再来一次吗···(0)否 (1)是:");
    scanf("%d", &x);

    return x;
}

int main(void)
{
    int judge;                /* 胜负 */
    int retry;                /* 再来一次?*/

    initialize();                        /* 初始处理 */

    do {
        jyanken();                        /* 运行猜拳游戏 */

        /* 显示计算机和玩家的手势 */
        printf("我出%s,你出%s。\n", hd[comp], hd[human]);

        judge = (human - comp + 3) % 3;    /* 判断胜负 */

        count_no(judge);                /* 更新胜利/失败/平局次数 */

        disp_result(judge);                /* 显示判断结果 */

        retry = confirm_retry();        /* 确认是否再次挑战 */

    } while (retry == 1);

    printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);

    return 0;
}

练习3-6

/* 猜拳游戏(其五:先赢满3局者胜)*/

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int human;        /* 玩家的手势 */
int comp;        /* 计算机的手势 */
int win_no;        /* 胜利次数 */
int lose_no;    /* 失败次数 */
int draw_no;    /* 平局次数 */
int v[128];
int x[128];
int m[128];
int cnt = 0;
int i;

char* hd[] = { "石头", "剪刀", "布" };        /* 手势 */
char* result[] = { "平局", "你输了", "你赢了" };        /* 手势 */

/*--- 初始处理 ---*/
void initialize(void)
{
    win_no = 0;        /* 胜利次数 */
    lose_no = 0;        /* 失败次数 */
    draw_no = 0;        /* 平局次数 */

    srand(time(NULL));    /* 设定随机数种子 */

    printf("猜拳游戏开始!!\n");
}

/*--- 运行猜拳游戏(读取/生成手势) ---*/
void jyanken(void)
{
    int i;
    comp = rand() % 3;        /* 用随机数生成计算机的手势(0~2)*/
    v[cnt] = comp;
    do {
        printf("\n\a石头剪刀布 ···");
        for (i = 0; i < 3; i++)
            printf(" (%d)%s", i, hd[i]);
        printf(":");
        scanf("%d", &human);
        x[cnt] = human;

    } while (human < 0 || human > 2);
    cnt++;

}

/*--- 更新胜利/失败/平局次数 ---*/
void count_no(int result)
{
    switch (result) {
    case 0: draw_no++;     break;                        /* 平局 */
    case 1: lose_no++;     break;                        /* 失败 */
    case 2: win_no++;   break;                        /* 胜利 */
    }
}

/*--- 显示判断结果 ---*/
void disp_result(int result)
{
    switch (result) {
    case 0: puts("平局。");     break;     /* 平局 */
    case 1: puts("你输了。");   break;     /* 失败 */
    case 2: puts("你赢了。");   break;     /* 胜利 */
    }
}

int main(void)
{
    int judge;                /* 胜负 */
    i = 0;
    initialize();                        /* 初始处理 */

    do {
        jyanken();                        /* 运行猜拳游戏 */

        /* 显示计算机和玩家的手势 */
        printf("我出%s,你出%s。\n", hd[comp], hd[human]);

        judge = (human - comp + 3) % 3;    /* 判断胜负 */
        m[i] = judge;
        count_no(judge);                /* 更新胜利/失败/平局次数 */

        disp_result(judge);                /* 显示判断结果 */
        i++;
    } while (win_no < 3 && lose_no < 3);
    printf(win_no == 3 ? "\n□你赢了。\n" : "\n■我赢了。\n");

    printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);
    for (i = 0; i <cnt; i++) {
        printf("第%d次猜拳,玩家出%s,计算机出%s,结果是%s\n",i+1,hd[x[i]],hd[v[i]],result[m[i]]);
    }

    return 0;
}

原文地址:https://www.cnblogs.com/nightswatch-candle/p/11986674.html

时间: 2024-08-28 00:00:34

明解C语言 中级篇 第三章答案的相关文章

明解C语言 中级篇 第四章答案

练习4-1 /* 珠玑妙算 */ #include <time.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /*--- 生成4个不同数字的组合并存入数组x ---*/ void make4digits(int x[]) { int i, j, val; for (i = 0; i < 4; i++) { do { val =

明解C语言 入门篇 第七章答案

练习7-1 #include <stdio.h> int main() { int n; printf("%d\t%d\t%d\n", sizeof 1,sizeof(unsigned)-1,sizeof n+2 ); //此行显示结果为 4 3 6 因为1的字节就是为4,而-1的字节也是4再减去-1所以显示为3,最后是n+2为6 printf("%d\t%d\t%d\n", sizeof +1, sizeof(double) - 1, sizeof(n

明解C语言 中级篇 第一章答案

练习1-1 #include <stdio.h> #include<stdlib.h> int main() { srand(time(0)); int anw = rand() % 7; printf("您的签运是:"); switch (anw) { case 0:printf("大吉"); break; case 1:printf("吉"); break; case 2:printf("小吉");

明解C语言 入门篇 第二章答案

练习2-1 1 #include <stdio.h> 2 3 int main() { 4 int x; 5 int y; 6 int percent; 7 8 puts("请输入两个整数"); 9 printf("整数x:"); 10 scanf("%d", &x); 11 printf("整数y:"); 12 scanf("%d", &y); 13 percent = (x

明解C语言 入门篇 第十二章答案

练习12-1 /* 用表示学生的结构体来显示高尾的信息 */ #include <stdio.h> #define NAME_LEN 64 /* 姓名的字符数 */ /*=== 表示学生的结构体 ===*/ struct student { char name[NAME_LEN]; /* 姓名 */ int height; /* 身高 */ float weight; /* 体重 */ long schols; /* 奖学金 */ }; int main(void) { struct stud

明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示

#include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typedef struct { char name[20]; int height; float weight; } student; void swap(student *x,student *y) { student tmp = *x; *x = *y; *y = tmp; } void sort(student

明解C语言pdf

下载地址:网盘下载 <明解C语言>图文并茂,示例丰富,设有190段代码和164幅图表,对C语言的基础知识进行了彻底剖析,内容涉及数组.函数.指针.文件操作等.对于C语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰.通俗地进行讲解. 柴田望洋(Shibata Bouyou) 1963年出生,日本福冈工业大学信息工程学院副教授.在日本IT界家喻户晓,编写了一些列极富影响力的计算机教材和参考书,如<明解C++>.<明解Java>等,本书于2000年荣获日本工学教育协

算法竞赛入门经典(刘汝佳)课后习题前三章答案

本文转载: 第一章习题1-1#include <stdio.h>int main(){int a,b,c;double d;scanf("%d%d%d",&a,&b,&c);d=(double)(a+b+c);printf("%.3lf\n",d/3.0);return 0;} 习题1-2#include <stdio.h>int main(){int f;double c;scanf("%d",&

《明解c语言》读书笔记

1-3 输入和显示 puts函数只接受 一个 实参,并且在结尾自动换行 2-1运算 求商运算符  :除法运算符" / ",如果是两个整数相除结果为整数如果需要保留小数时 必须将其中一个除数转换为浮点数.5/3=1 3/5=0 6.0/4=1.5   (List01) 求余运算符 int%int 用printf函数打印%时,要避免使用转换功能,必须写成%%,printf(“5%%3=%d\n”,5%3):当使用不具备转换说明功能的puts函数时,写一个%即可. 练习:显示读取整数的最后一