天天看点

c语言实战开发(杀死比尔?) 2019-11-27 Day7小demo简述

今天的内容就是做一个小demo,详细讲解如下

小demo简述

1:请输入参与人数 比如输入7

2:每个人就编一个号

3:请输入杀人编号比如 3

4: 没死的人 只要报到3的人就死 直接输出最后没死的人的编号

#include<stdio.h>
#include<stdlib.h>
#define KILLED 0//宏定义(取别名):想给一个特殊的数字 字符串 表达式 以特殊的意义时,就取个别名。注意这里没有分号 
//好处1:增强可读性 2:更方便改变 可操作性更强  
int main (void){
    /*//先输入一个数字
    //然后利用循环给数组每个元素赋值
    //输入杀人编号
    //for循环,拿掉第三个数,当最后的数组元素个数变成1时,输出这个元素
    int shuru = 0;
    scanf("%d",&shuru);
    int a[shuru];
    for(int i = 0;i < shuru;i++){
        a[i] = i+1;
    } 
    for(int i = 0;i < shuru;i++){
        printf("%d  ",a[i]);
    }
     
    int naqu = 0;
    scanf("%d",&naqu);
    while(1){
        //int del(int a[],int n, int x)//删除长度为n的数组中值为x的元素 
        int del(int a[],int n, int x)//删除长度为n的数组中值为x的元素
    }
    //12457*/
    int count ;//保存输入的人数
    int num[90] = {};//保存每个人的编号
    int killNum;//被杀的人的编号 
    printf("请输入参与人数:");
    scanf("%d",&count); 
    //开始编号
    for(int i = 0;i < count ;i++){
        num[i] = i+1;
    } 
    printf("请输入杀人的编号:");
    scanf("%d",&killNum);
    //开始游戏 比如1234567 去掉3后 后面依次往前面替换 成了1245677  但是效率低,频繁地删除/增加 但是可以将被选中的数赋值为0 比如 1204507 
    int current = 0;//记录当前报数的位置 
    int totalKilled = 0;//记录当前死亡人数 
    for(int i = 0;i < count;i++){
        if(num[i] != KILLED){ //可能以前已经死的人 又被杀死了 
            current++;
        } /*else{
            printf("这是已经死亡的编号%d",num[i]);
            continue;
        } *///问题所在 
        //判断当前编号是不是死亡编号
        if(current == killNum){
            printf("被杀死的人是:%d\n",num[i]); 
                //杀掉
                num[i] = KILLED; //这里弄成KILLED,就是能让别人看懂 
                current = 0;//还原current 
                totalKilled++;
                //当还剩一个的时候就退出循环 
                if(totalKilled == count - 1){
                    break;
                }
            }
        //判断是否到末尾 
        if(i == count - 1){
            i = -1;//这一点很重要,一开是没想出来。命名为-1 
        } 
        } 
    for(int i = 0;i < count;i++){
        printf("%d ",num[i]);//最后再输出一下 
    }
        

    
    system("pause");
    return 0;
}
           

下面是自己课下写的

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main (void){
    //输入参与人数
    //给每一个参与的人附上编号
    //输入杀人编号3
    //依次显示被杀死的人的编号
    //将最后的数组显示出来
    printf("游戏开始\n");
    Sleep(2000);
    system("cls") ;
    int count;//记录参与人数
    int a[500] = {};
    int current = 0;
    int killed = 0;//记录杀人编号 
    int totalkilled = 0;//记录总共被杀死的人,这一点尤为重要,后来自己写的时候忘了 
    scanf("%d",&count);
    for(int i = 0;i < count;i++){
        a[i] = i + 1;
        printf("%d",a[i]);
    }//给每个人附上编号
    printf("\n");
    printf("请输入杀人编号:");
    scanf("%d",&killed);//输入杀人编号
    for(int i = 0;i < count;i++){
        
        if(a[i] != 0){
            current++;
        }
        if(killed == current){
            printf("被杀死的人是:%d\n",a[i]);
            a[i] = 0;
            current = 0;//将次序归为0 
            totalkilled++;
            if(totalkilled == count - 1){//这里不能用while因为while也是一个循环,用break是退出它的循环而不是退出外面的for循环 
            break;
        }
        }
        if(i == count - 1){
            i = -1;
        }
    } 
    for(int i = 0;i < count;i++){
    printf("%d",a[i]);
    }
    system("pause");
    return 0;
}
           

总结:

今天倒是没有学什么新知识,只是在老师带领下做了一个小demo,但是在做的过程中有很多收获,尤其在课下再做一遍的时候,会遗忘很多步骤和思路(具体见上面代码的注释)这时再和老师写的代码做对比就会找到很多问题。还有一个很大的收获就是在写小demo的过程中要在最上面以注释的形式把所有的步骤一步一步地写出来,这样便于使我的思路清晰,知道下一步需要干什么课下作业

游戏:

猜数字 游戏开始 产生四个0-9之间的不重复的从小到大排序的数字。

比如 2348

请输入猜测数字 :

如果猜测的数字正确且位置正确 那么输出A 数字正确 位置不正确 B

比如 2589 则输出1A1B

继续阅读