c语言lesson4-------大蟒蛇客串本节,高手勿喷!

本节内容
1.#define 宏定义
2.排序:冒泡排序,选择排序,插入排序
3.用排序写个逻辑游戏
4.函数
5.ATM函数版
6.python脚本,让你不动脑,轻松玩转逻辑游戏

1.#define 宏定义

语法:#define 标识符 带定义内容
宏定义的作用就是用标识符代替带定义内容,以后需要使用带定义内容的时候可直接用标识符代替带定义内容。带定义内容过于复杂或实际意义难懂时,可以用宏定义给它取个别名,简化代码或增强可读性。

2.排序

冒泡排序:

int main(){
    int array[10]={3,4,5,6,8,7,1,2,0,9};
    for(int i=1;i<10;i++){
        for(int j=0;j<10-i;j++){
            if (array[j]>array[j+1]){//相两个数比较,小的排前面,大的排后面邻
                int temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
            }
        }//一轮比较结束可将最大的数排到最后
    } 
    
    for(int i=0;i<10;i++){
        printf("%d  ",array[i]);
    }
    
    return 0;
}

选择排序

#include 

int main(){
    int num[10] = {3,0,1,8,7,2,5,4,9,6};
    
    for(int i = 0; i < 10-1; i++){//每次将数组中第i个元素选出
        for(int j = i+1; j < 10; j++){
            if(num[j] < num[i]){//依次与后面的元素比较,若大于相比较的元素,则交换两数的值,继续与后面的比较
                int temp = num[j];
                num[j] = num[i];
                num[i] = temp;
            } 
        }//每轮可选出最小的元素
    }
    for(int i = 0; i < 10; i++){
        printf("%d ", num[i]);
    } 
    return 0; 
}

插入排序

#include 
int main(){
    int num[10] = {3,0,1,8,7,2,5,4,9,6};
    for(int i = 0; i < 10-1; i++){
        if(num[i] > num[i+1]){
            int temp = num[i];
            num[i] = num[i+1];
            num[i+1] = temp;
            for (int j = i; j > 0; j--){
                if(num[j] > num[j-1]){
                    break;
                } else{
                    int temp = num[j];
                    num[j] = num[j-1];
                    num[j-1] = temp; 
                } 
            } 
        } 
    }//将数组中第i+1个元素依次与前面的每一个数比较,小于则向前排,大于则不动,并进入下一轮排序
    for(int i = 0; i < 10; i++){
        printf("%d ", num[i]);
    } 
    return 0;
}

用排序写个逻辑游戏

游戏规则:程序会随机生成四个已经从小到大排好序的0~9数字,用户输入四个数字,用户输入数字,程序自动比对,返回一个提示,如:2A1B,代表有两个数字正确并且位置正确,一个数字正确但位置不正确;又如0A2B,代表没有一个位置和数字都正确的数,有两个数数字正确但位置不正确。

#include 

int main(){
    printf("**********************************\n");
    printf("欢迎来到猜数游戏,回车开始游戏!\n");
    printf("**********************************\n");
    //生成随机数 
    int array[4];
    int temp;
    srand(time(NULL));
    for(int i=0;i<4;i++){
        temp = rand() % 10;
        if (i==0){
            array[0]=temp;
        }else{
            for(int j=0;j<=i;j++){
                if (temp == array[j]){
                    i--;
                    break;
                }else{
                    if (j == i){
                        array[i] = temp;
                        break;
                    }
                }
            }
        }
    }
    
    
    //排序,看看这是什么排序,你也可以用其他排序方法
    for(int i = 0;i<3;i++){
        for(int j = i+1;j<4;j++){
            if (array[i]>=array[j]){
                temp = array[i];
                array[i]=array[j];
                array[j]=temp;
            }
        }
    }
    
    //程序自动对比
    int counter=5;
    while(counter--){
        int guessNum[4];
        int countA=0;
        int countB=0; 
        printf("请输入你猜的数字:");
        for(int i = 0;i<4;i++){
            scanf("%1d",&guessNum[i]);
        } 

        for(int i=0;i<4;i++){
            if (array[i]==guessNum[i]){
                countA++;
            }
        }
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                if(array[i]==guessNum[j]){
                    countB++;
                }
            }
        }
        if (countA==4 && countB==4){
            printf("你猜对了!\n");
            return 0;
        }else{
            printf("你输入的数字中%dA%dB\n",countA,countB-countA);//返还提示
        }
    }

    printf("正确答案是:");
    for(int i = 0;i<4;i++){
        printf("%d ",array[i]);
    } 
    gechar();
    return 0;
}

实现结果:


image.png

4.函数

函数:一组执行同一个任务的语句块。
函数声明:告诉编译器函数的名称及返回类型和函数参数。
函数的定义:告诉编译器函数名称并提供一个主体,改主体能实现某种功能。
下面将以ATM的例子讲解函数。

ATM函数版

#include 
#include 
//1.部分为函数的声明
/*********************************************1.********************************************/
void login(void);//声明了一个登录函数,用于验证登录密码void表示该函数没有参数
int Choice(void);//声明了一个选择操作函数,用于记录选择的操作
void straw(int *pacBlance,char yN);//声明了一个存款函数,函数有两个参数
void store(int *pacBlance,char yN);//声明了一个取款函数
int check(int *pacBlance,char yN);//声明了一个查询余额的函数
void change(int *pacBlance,int *ppassword);//声明了一个更改密码的函数
/*****************************************************************************************/
//2.部分是函数要用到的参数声明
/********************************************2.*******************************************/
int acBlance;
int password;
int *pacBlance = &acBlance; 
int *ppassword = &password;
/****************************************************************************************/
//3.部分是整个ATM的主体
/****************************************3.*********************************************/
int main(){
    printf("**********************\n"); 
    printf(" 欢迎使用建设银行系统\n");
    printf("**********************\n");
     
    char yN;//声明常用的yes和no 
    int choice;
    
    login();//登录函数 
    
    while(1){
        choice = Choice();//选择操作函数 
        /*执行操作*/
        switch(choice){
            case 1:
                straw(&acBlance,yN);break;//传参并调用函数
            case 2:
                store(&acBlance,yN);break;
            case 3:
                check(&acBlance,yN);break;
            case 4:
                change(&acBlance,&password);break;
            case 5:
                exit(EXIT_SUCCESS);
            default:
                printf("输入有误!\n");break;
        }
    }
    return 0;
}
/*******************************************************************************/
//4.部分是函数的定义
/************************************4.*****************************************/
void login(){//这是一个函数,里面包含了实现该函数功能的语句块
    acBlance=100000;
    password=123;
    int input; 
    int wrongTime = 3;
    
    printf("请输入密码:");
    for(int i = 1;i <= wrongTime; i++){
        scanf("%d", &input);
        
        if(input == *ppassword){
            break;
        } 
        else if(i == wrongTime){
            printf("错误次数过多!\n");
            exit(EXIT_SUCCESS);
        }
        printf("密码不正确,请重新输入密码:");
    } 
}

int Choice(){
    int choice = 0;
    printf("*****************************\n");
    printf("1.存款\n");
    printf("2.取款\n");
    printf("3.查询\n");
    printf("4.更改密码\n");
    printf("5.退出\n"); 
    printf("*****************************\n");
    printf("请选择操作:");
    scanf("%d",&choice);
    getchar();
    return choice;
}

void straw(int *pacBlance,char yN){
    printf("请输入存款金额:");
    while(1){
        int storeMoney=0;
        scanf("%d",&storeMoney);
        getchar();
        *pacBlance += storeMoney;
        printf("存款成功,余额为%d\n",*pacBlance);
        printf("是否继续存款(Y/N):");
        scanf("%c",&yN);
        getchar(); 
                        
        if (yN == 'n'||yN == 'N'){
            break;
        }
        printf("请输入存款的金额:");
    }
}

void store(int *pacBlance,char yN){
    printf("请输入取款金额:");
    while(1){
        int drawMoney=0;
        scanf("%d",&drawMoney);
        getchar();
                            
        if (*pacBlance >= drawMoney){
            *pacBlance -= drawMoney;
            printf("取款成功,余额为%d\n",*pacBlance);
        }else{
            printf("余额不足!请重新输入:");
            continue;
        }
        printf("是否继续取款(Y/N):");
        scanf("%c",&yN);
        getchar(); 
                            
        if (yN == 'n'||yN == 'N'){
            break;
        }
        printf("请输入你要取款的金额:");
    }
}

int check(int *pacBlance,char yN){
    printf("你的余额为%d\n是否继续操作(Y/N):",*pacBlance);
    scanf("%c",&yN);
    if (yN == 'n'||yN == 'N'){
        exit(EXIT_SUCCESS);
    }else{
        return 0;
    }
}

void change(int *pacBlance,int *ppassword){
    int old;
    printf("请输入你的原密码:");
    int count=3;
    while(count){
        scanf("%d",&old);
        if(old == password){
            break;
        }else{
            printf("密码错误!请重新输入:");
        }
        count--;
    }
    printf("请输入你的新密码:");
    while(count){
        int pword;
        scanf("%d",ppassword);
        printf("请再次输入你的密码:");
        scanf("%d",&pword);
        if (pword == *ppassword){
            printf("密码更改成功!\n");
            break;
        }else{
            printf("两次密码不一致!请重新输入:");
        }
    }
}
/*********************************************************************************/

实现结结果:


image.png

大蟒蛇脚本,让你不动脑,轻松玩转逻辑游戏

python“客串”,不多说,大佬勿喷!

def builtdict():
    i = 0
    j = i + 1
    k = j + 1
    l = k + 1
    m = 0
    n = 0
    count = 0
    num = []
    while i < 7:
        while j < 8:
            while k < 9:
                while l<10:
                    number=str(i)+str(j)+str(k)+str(l)
                    num.append(number)
                    count += 1
                    l += 1
                k += 1
                l = k + 1
            j += 1
            k = j + 1
            l = k + 1
        i += 1
        
        j = i + 1
        k = j + 1
        l = k + 1
    print(count)
    return num,count
#对比函数
def CompareNumber(guessNumber,tips,num,count):
    j = 0
    guess = list(guessNumber)
    newcount = 0
    newnum = []
    while j < count:
        string = num[j]
        number = list(string)
        i = 0
        counterA = 0
        counterB = 0
        while i != 4:
            if guess[i] in number:
                if guess[i] == number[i]:
                    counterA += 1
                else:
                    counterB += 1
            i += 1
        if (str(counterA) == tips[0]) and (str(counterB == tips[2]):
            newnum.append(string)
            newcount += 1
        j += 1
    return newnum,newcount

result = builtdict()
num = result[0]
count = result[1]
thecounter = 0
while count != 1:
    if thecounter == 0:
        guessNumber = '0123'
        print("请输入: 0123")
    elif thecounter == 1:
        guessNumber = '5678'
        print("请输入: 5678")
    else:
        guessNumber = num[0]
        print("请输入:",num[0])
    tips = input("请输入提示:")
    result = CompareNumber(guessNumber,tips,num,count)
    count = result[1]
    num = result[0]
    thecounter += 1
print("答案就是",num[0])
input()

实现如下:


image.png

你可能感兴趣的:(c语言lesson4-------大蟒蛇客串本节,高手勿喷!)