沐浴c语言第二天

c语言的函数实现

学习目的

今天学习c语言中的函数。在上期中,我们学习了C语言基础,认识了条件语句和循环语。但是在完成项目时,给人感觉过程复杂、主函数冗长、阅读困难。针对这一问题C语言引进了函数,通过函数可以进行封装代码,让我们的代码更简洁更易读。

知识点解析

  1. 函数就是一系列C语句的集合,为了完成某个会重复使用的特定功能。
    需要该功能的时候,直接调用该函数即可,不用每次都堆叠一大堆的代码。需要修改该功能的时候,也只要修改和维护这一个函数即可。

  2. 函数两大点:

  • 为什么要函数:
  1. 代码结构太复杂,不利于阅读,不利于移植;
  2. 代码块:一个代码块解决一个问题(一个功能需要一个函数);
  3. 代码块就是 {}:封装代码,其中不能重复定义。
{
int a = 10;
int a = 20;
}
//是错误的
  • 要怎么用:
  1. 结构:返回值 函数名(参数:形式参数){代码块:局部变量
    }
int add(int a, int b)
{
    int result = a + b;
    return result;
}

函数也可以无参数无返回值

int add(int a, int b)
{
    int result = a + b;
    return result;
}
//break 跳出循环
//return 结束一个代码块
//无参数
void test() {
    if () {
//无返回值
        return;
    }
    else {

    }
}
int main(int argc, const char * argv[]) {
    //不要返回值
    add(1, 2);
    //要返回值
    int sum=add(1,2)
return 0;
}

2.实现方式:先声明 后实现

//声明
void test(void);
int main(int argc, const char * argv[]) {
    test();
    //实现
    void test()
    {
...
    }
    return 0;}

注意事项
在实现函数时,main函数因注意:
1.代码逻辑结构
2.搭框架,不做具体事情,具体事情给每一个函数去实现

上期课后参考代码

#include <stdlib.h>

int main(int argc, const char * argv[]) {
    //保存原始密码
    int password = 123;
    int inputPwd = 0;
    int totalTime = 4;
    int totalMoney = 1000;
    
    printf("**************\n");
    printf("   欢迎使用\n");
    printf("**************\n");
    
    //一个模块完成一个功能 耦合性降低
    printf("请输入密码:");
    while (1) {
        scanf("%d", &inputPwd);
        if (inputPwd == password) {
            //密码正确
            break;
        }else{
            totalTime--;
            if (totalTime == 0) {
                printf("此卡已冻结 请联系客服!\n");
                //退出
                exit(EXIT_FAILURE);
            }else{
                printf("密码不正确 请重新输入:");
            }
        }
    }
    
    
    //密码正确
    char choice;
    while(1){
        printf("**************\n");
        printf("1.取款\n");
        printf("2.存款\n");
        printf("3.设置密码\n");
        printf("4.退出\n");
        printf("**************\n");
        
        //判断输入是否合法
        char ch[20] = {};
        while (1) {
            //去掉上一次输入的回车符 \n
            printf("请选择操作:");
            int count = scanf("%s", ch);
            
            if (count != 1) {
                 printf("输入不合法 ");
            } else{
                //获取第一个字符
                choice = ch[0];
                
                if (choice == '1' || choice == '2' || choice == '3' || choice == '4') {
                    break;
                } else{
                    printf("输入不合法 ");
                }
            }
        }
        
        //检测到底选择的是什么操作
        char choice2;
        int newPassword1 = 0;
        int newPassword2 = 0;
        switch (choice) {
            case '1':
                //取款
                while(1){
                    int outMoney = 0;
                    printf("请输入取款金额:");
                    scanf("%d", &outMoney);
                    
                    if (outMoney > totalMoney) {
                       //金额不足
                        printf("余额不足是否继续(y/n):");
                        getchar();
                        choice2 = getchar();
                        if (choice2 == 'n') {
                            break;
                        }
                    }else{
                        totalMoney -= outMoney;
                        printf("取款成功 余额为:%d\n", totalMoney);
                        break;
                    }
                    
                }
                break;
            case '2':
                printf("请输入存款金额:");
                int inputMoney = 0;
                scanf("%d", &inputMoney);
                totalMoney += inputMoney;
                printf("存款成功 余额为:%d\n", totalMoney);
                break;
            case '3':
                
                while (1) {
                    printf("请输入新密码:");
                    scanf("%d", &newPassword1);
                    
                    printf("请确认密码:");
                    scanf("%d", &newPassword2);
                    
                    if (newPassword1 == newPassword2){
                        password = newPassword1;
                        printf("更改密码成功\n");
                        break;
                    }else{
                        printf("两次密码不一致 ");
                    }
                }
                break;
            default:
                printf("感谢你的使用 再见!!!\n");
                exit(EXIT_SUCCESS);
                break;
        }
    }
    return 0;
}

用函数实现上面代码

tps:此处应自己大量练习,反复摸索后,再进行参考。

//多写 多想 设计模式
/*
 代码的逻辑结构
 搭框架 不做具体的事情 具体的事情给每一个函数去实现
 */

/**
 登录
 login
 params:void
 return:bool true成功 false失败
 */
bool loginATM(void);
void welcome(void);
void exitATM(int status);
void showMenu(void);
char getChoice(void);
void withdraw(void);//取款
bool isContinue(void);
void deposit(void);//存款
void setPassword(void);

//定义一个全局变量
int orgPassword = 123;
int totalMoney = 1000;

/*
 自己创建一个 头文件.h
    .h文件用于函数的声明
 实现文件.c 封装操作
    .c文件用于实现某个头文件里面的函数
 */
int main(int argc, const char * argv[]) {
    //欢迎界面
    welcome();
    
    //登录
    bool result = loginATM();
    if (result == false) {
        //密码错误次数过多
        exitATM(EXIT_FAILURE);
    }
    
    //主要操作
    while (1) {
        //提示操作
        showMenu();
        
        //接收用户的选择
        char choice = getChoice();
        
        //判断用户的选择
        switch(choice){
            case '1':
                //取款
                withdraw();
                break;
            case '2':
                //存款
                deposit();
                break;
            case '3':
                //设置密码
                setPassword();
                break;
            default:
                exitATM(EXIT_SUCCESS);
                break;
        }
    }
    
    return 0;
}

bool loginATM(void){
    int password = 0;
    int wrongTime = 0;
    
    while(1){
        printf("请输入密码:");
        scanf("%d", &password);
        
        if (password == orgPassword) {
            return true;
        }else{
            wrongTime++;
            if (wrongTime == 4) {
                return false;
            }else{
                printf("密码错误,");
            }
        }
    }
}

void welcome(void){
    printf("***************\n");
    printf("   欢迎使用ATM\n");
    printf("***************\n");
}

void exitATM(int status){
    printf("*************************\n");
    printf("   感谢你的使用 再见!!!\n");
    printf("*************************\n");
    exit(status);
}

void showMenu(void){
    printf("**************\n");
    printf("1.取款\n");
    printf("2.存款\n");
    printf("3.设置密码\n");
    printf("4.退出\n");
    printf("**************\n");
}

char getChoice(void){
    //将输入的所有字符串全部从缓存里面读取出来
    char temp[20] = {};
    
    while (1) {
        printf("请选择操作:");
        int count = scanf("%s", temp);
  
        //确保值输入一个字符
        if (count != 1) {
            printf("输入不合法,");
        } else{
            //获取输入的字符
            char ch = temp[0];
            
            //虽然输入一个字符 也可能不正确
            if (ch == '1' || ch == '2' || ch == '3' || ch == '4') {
                return ch;
            }else{
                printf("输入不合法,");
            }
        }
        
    }
}

//取款
void withdraw(void){
    int outMoney = 0;
    
    while (1) {
        printf("请输入取款金额:");
        scanf("%d", &outMoney);
        
        if(outMoney > 0 && outMoney <= totalMoney){
            totalMoney = totalMoney - outMoney;
            
            printf("取款成功 余额为:%d\n", totalMoney);
            //提示是否继续
            bool ch = isContinue();
            if (ch == false) {
                return; //break;
            }
        }else{
            printf("余额不足,");
        }
    }
}

bool isContinue(void){
    printf("是否继续?(y/n):");

    getchar();
    char ch = getchar();
    if (ch == 'n') {
        return false;
    }else{
        return true;
    }
}

void deposit(void){
    int intputMoney = 0;
    while (1) {
        printf("请输入存款金额:");
        scanf("%d", &intputMoney);
        
        totalMoney = totalMoney + intputMoney;
        printf("存款成功,余额为:%d\n", totalMoney);
        bool ch = isContinue();
        if (ch == false) {
            return; //break;
        }
    }
}


void setPassword(void){
    int newPwd1 = 0;
    int newPwd2 = 0;
    
    while (1) {
        //输入原始密码
        bool result = loginATM();
        if (result == true) {
            while (1) {
                printf("请输入新密码:");
                scanf("%d", &newPwd1);
                
                printf("请确认密码:");
                scanf("%d", &newPwd2);
                
                if (newPwd1 == newPwd2) {
                    printf("设置密码成功!\n");
                    return;
                } else{
                    printf("两次密码不一致,");
                }
            }
            
        }
    }
}

自我感悟

今天学习了一天的函数,短短的定义和结构却死的难住了我。在使用函数时不知道什么时候切入函数,不知道怎么定义函数,理解不够深。函数的使用是至关重要的,需要大量的练习,努力奋斗。


0774012413a7acf25541bfeaa2ed866d.jpeg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容