今天终于来了一个刺激的自动取款机运行设计,虽然比较low,但依然还是收获满满内容
1:switch
2:for循环
3:自动取款机书写
一.switch
1:与if else功能基本相同,区别主要是代码的可读性。
2:形式 switch(括号里面只能是已经确定了值的变量,而且只能是int或者char类型)
case 后加值或者一个字符再加:然后再加代码块
使用示例如下:
int a = 0;
printf("请输入一个数字1-3\n");
scanf("%d",&a);
switch(a){ //不要忘了大括号
case 1:
printf("我爱你\n");
break;//千万不要忘了break
case 2:
printf("你爱我\n");
break;
case 3:
printf("ok\n");
break;
default:
printf("ko");
break;
}
注意
1:不要忘了break
2:不要忘了case
3:不要忘了default
4:不要忘了大括号
5: 用之前最好把整体框架写出来,然后再一个一个地写,而不是一开始就一个一个地写
二.for循环
1:形式:for(循环控制变量;运行条件;控制变量的变化){}
2:注意:
①:运行条件必须要,其他部分可以省略。但是里面的分号不能省略,比如for(;1<2;)
②:执行顺序:初始值->条件->代码块->变化->条件->代码块。。。。
③:for()中()后面不要加;
④:变量的作用域:局部变量(局部变量优先级最大),全局变量(在main函数上面定义),静态变量。尽量不要扩大任何一个变量的作用域
用法示例如下(无限次输出1-10)
int a = 0;
for(a = 1; a<=10;a++){
printf("%d ",a);
if(a == 10){
a = a-10;
}
}
这里千万不要忘了是两个= 是 == 而不是1个=
⑤:break是结束循环。比如打印1-10中的1-5。而continue是结束本循环,进行下一循环。比如打印1-10中的1-5 7-10.
int a = 0;
for(a = 1; a<=10;a++){
if(a == 7){
continue;
}
printf("%d ",a);
}
但是如果将a++放在了()之外,则会出现下面的情况
int a = 0;
for(a = 1; a<=10;){
if(a == 5){
continue;//直接到for里面而不会再打印了。而且跳到for里面的时候a 没有执行操作。
}
printf("%d ",a);
a++;
}
会打印出
1 2 3 4
for的死循环for(;1<2;)
小项目:自动取款机
思路:
1:欢迎使用。
2:请输入密码。
3:密码错误,请重新输入。
4:次数过多,密码错误次数过多,请联系工作人员,然后退出。
5:如果成功,执行操作。
6:各种操作的设计。
下面是老师做的
int old = 123;//原始密码
int input;//输入密码
int wrongTime = 3;//错误次数
printf("***************************************\n");
printf("***************************************\n");
printf(" 欢迎使用建设银行\n");
printf("***************************************\n");
printf("***************************************\n");
printf("请输入密码:\n");
for(int i = 1;i <= 3;i++){
scanf("%d",&input);
//判断密码
if(input == old){
//密码正确
break;
}
if(i == 3){
printf("您错的太多了\n");
return 1;//注意这个返回值
}
//密码不正确
printf("密码输入错误,请重新输入\n");
}
printf("密码正确,请选择如下操作之一\n");
printf("****************************\n");
printf("****************************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.更改密码\n");
printf("4.查询余额\n");
printf("5.退出\n");
printf("****************************\n");
printf("****************************\n");
int performance = 0;
int cunKuan = 0;
scanf("%d",&performance) ;//又tm忘了写&
if(performance = 1){
printf("请输入存款金额\n");
scanf("%d",&cunKuan);
printf("存款成功,您的余额还剩:\n");
printf("%d\n",cunKuan+5000);
}
下面是switch版本(绝大部分是自己写的)
#include<stdio.h>
#include<stdlib.h>
int yue = 5000;
int shifoujixu;
int main (){
int old = 1;//原始密码
int input;//输入密码
int wrongTime = 3;//错误次数
for(;1<2;){
printf("***************************************\n");
printf("***************************************\n");
printf(" 欢迎使用建设银行\n");
printf("***************************************\n");
printf("***************************************\n");
printf("请输入密码:\n");
for(int i = 1;i <= 3;i++){//没有意识到把整个东西都放到for里面
scanf("%d",&input);
//判断密码
if(input == old){
//密码正确
break;
}
if(i == 3){
printf("你他妈错的太多了,能不能靠谱点,妈卖批!\n");
return 1;//注意这个返回值
}
//密码不正确
printf("密码输入错误,请重新输入\n");
}
printf("密码正确,请选择如下操作之一\n");
printf("****************************\n");
printf("****************************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.更改密码\n");
printf("4.查询余额\n");
printf("5.退出\n");
printf("****************************\n");
printf("****************************\n");
int performance = 0;
int cunKuan = 0;
int qukuanjine;
scanf("%d",&performance) ;//又tm忘了写&
switch(performance){
case 1://这和下面的performance都是双等于而不是一个等于号
printf("请输入存款金额\n");
scanf("%d",&cunKuan);
printf("存款成功,您的余额还剩:\n");
printf("%d\n",cunKuan+5000);
printf("继续执行请输入1,退出请按0");
scanf("%d",&shifoujixu);
if(shifoujixu == 1){//继续执行不会了 ,后来会了,原来是在最外面套一个最大的死循环
continue;//continue用的不熟练
}
if(shifoujixu == 0){
printf("感谢使用");
return 2;
}
break;
case 2:
//没有意识到把他放到一个死循环里面
int shifoujixu;
for(;1<2;){
printf("请输入取款金额\n");
scanf("%d",&qukuanjine);
if(qukuanjine <= 5000 ){//一开始写的时候,总是输出5000-取款金额 后来经过询问才知道应该用yue - qukuanjine 而不是用5000去减
printf("取款成功\n");
printf("您的余额还剩\n");
yue = yue-qukuanjine;//这里用yue 减而不是用5000减
printf("%d\n",yue);
if(yue == 0){
printf("您没钱了!请充钱,妈卖批!\n");
printf("由于你没钱了,所以请确定是否回到初始操作\n");
break;
}
printf("继续执行请输入1,退出请按0\n");
scanf("%d",&shifoujixu);//一开始忘了加逗号
if(shifoujixu == 1){
continue;
}
if(shifoujixu == 0){
break;
}
}
if(qukuanjine > 5000){
printf("您的余额不足,请重新输入\n");
continue;
}
}//小for循环的
printf("是否继续操作,如果继续,请按1,若退出操作,请按0.\n");
scanf("%d",&shifoujixu);
if(shifoujixu == 1){
continue;
}
if(shifoujixu == 0){
printf("感谢使用!\n");
return 3;
}
break;
//switch用的过程中也要加{}
case 3:
int xinmima;
int xinmima1;
for(;1<2;){
printf("请输入新密码\n");
scanf("%d",&xinmima);
printf("请确认密码\n");
scanf("%d",&xinmima1);
if(xinmima == xinmima1){
printf("更改密码成功,如果继续更改,请输入1,如果退出,请按0.\n");
if(shifoujixu == 1){//继续执行不会了
continue;
}
if(shifoujixu == 0){
printf("感谢使用!\n");
break;
}
}//小if的
if(xinmima != xinmima1){
printf("两次密码输入不一致,请重新操作\n");
continue;
}
}//小for循环的
printf("是否继续操作,如果继续,请按1,若退出操作,请按0.\n");
scanf("%d",&shifoujixu);
if(shifoujixu == 1){
continue;
}
if(shifoujixu == 0){
printf("感谢使用!\n");
return 4;
}
break;
case 4:
printf("您的余额为:%d\n",yue);
printf("如果继续,请按1,若退出,请按0\n");
scanf("%d",&shifoujixu);
if(shifoujixu == 1){
continue;
}
if(shifoujixu == 0){
printf("感谢使用!\n");
return 5;
}
break;
case 5:
printf("感谢使用!");
return 6;
break;
}//switch的
}//最外面的for的
system("pause");
return 0;
}
下面是老师写的
通过对比,收获最大的还是:写程序的时候,要由易到难
#include <stdio.h>
#include<stdlib.h>
int main(){
int old = 123;//原始密码
int input;//输入密码
int wrongTime = 3; //错误次数
int total = 1000;// 金额剩1000
char goon ;//是否继续
printf("**********************\n");
printf(" 欢迎使用建设银行系统\n");
printf("**********************\n");
//int i = 1;
printf("请输入密码:");
for(int i = 1;i <= wrongTime; i++){
scanf("%d", &input);
//判断密码
if(input == old){
//密码正确
break;
}
if(i == wrongTime){
printf("错误次数过多!\n");
return 1;
}
//密码不正确
printf("密码不正确,请重新输入密码:");
}
printf("密码正确!\n");
//主界面,在for循环里面
//接收用户选择
int choice;
for(;1<2;){
printf("****************************\n");
printf("****************************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.查询余额\n");
printf("4.更改密码\n");
printf("5.退出\n");
printf("****************************\n");
printf("****************************\n");
//提示用户选择
printf("请选择操作:");
scanf("%d",&choice);
//判断执行什么操作
//首选switch
switch(choice){//先把总体结构写出来再说,而不是一点一点地写,不然最后都忘了
case 1://存款
int cunkuanjine;
printf("请输入存款金额:");
scanf("%d",&cunkuanjine);
total += cunkuanjine;
printf("存款成功,您的余额为:");
printf("%d",total);
break;
case 2://取款
int temp2;
for(;1<2;){
printf("请输入取款金额:");
scanf("%d",&temp2);
if(temp2 > total){
printf("余额不足 ");
}
if(temp2 <= total){
total = total - temp2;//这个经常忘记
printf("您的钱够,现在还剩:%d",total);
}
break;
}
case 3://查询余额(也比较简单,所以第二个弄)
printf("当前余额为:%d",total);
printf("");
break;
case 4://更改密码
int n1;
int n2;
for(;1<2;){
printf("请输入新密码:");
scanf("%d\n",&n1);
printf("请确认密码:");
scanf("%d\n",&n2);
if(n1 == n2){
printf("密码设置成功!\n");
old = n1;
break;
}else{
printf("两次密码输入不一致,请重新输入 : \n");
}
}
break;
default://退出 (最简单,所以退出 exit(EXIT_FAILURE)错误退出
exit(EXIT_SUCCESS);//成功环里面,exit是在任何一种情况下都能退出程序,用之前必须导入一个头文件#include<stdlib.h>而return表示结束当前这个函数
break;//break之后退到for循先做这个)
} //而且这里的break不能省略 而且还是要放到最后面
//提示是否继续
for(;1<2;){
printf("是否继续(y/n):");
getchar();//把输入3的时候用的\n拿走 ,这个一定要注意
scanf("%c",&goon);
if (goon == 'y'){
break;
}
if (goon == 'n'){
printf("感谢使用!");
exit(EXIT_SUCCESS);
}
printf("输入无效 ");
}
//如果只有一次getchar,则上面的代码重复一次
}
return 0;
}
总结
1:其实for循环和while循环我在很早就预习了,当然也在上周末又复习了一下,所以这方面的收获不是特别大。
2:收获最大的还是这个小demo,其中收获最大的是对for循环的理解更深了。当然还有一些小的收获,比如用switch的时候别忘了default呀,判断的时候是==而不是=