学习摘要
- switch语句
- for循环
- while循环
- 数组
- rand()与srand()函数
- demon 之 ATM机
- demon 之 记数字
- demon 之 不同随机数
一、switch语句
- switch语句又叫开关语句,与if功能类似,但switch语句每次都计算同一表达式的值,而if语句要分别计算各个if分支语句表达式的值。所以处理多分支问题时,switch语句更加便捷。
switch(表达式){ case 常量表达式 1: 语句块 1; break; case 常量表达式 2: 语句块 2; break; ...... default: 语句块 n; }
- 使用条件:
1. 表达式是一个常量,且是char、int、bool型(因为char类型有自己对应的ASKII码);
2. 表达式与常量表达式必须是相同数据类型。int main(){ int a=0 printf("请输入一个数字(1到4之间):"); scanf("%d",&a); switch (a){ case 1: printf("输入的是:1\n"); break; case 2: printf("输入的是: 2\n"); break; case 3: printf("输入的是: 3\n"); break; default: printf("输入的是: 4\n"); break; } return 0; } 显示: 请输入一个数字(1到4之间):3 输入的是: 3
- 解释:
1. 将表达式的值依次与case后的值相比较,若一致,则执行该case后的语句;
2. 遇到“break”,则语句中断,跳出switch语句;
3. 若表达式的值与与所有case后的常量都不相等,则执行default后的语句,若无default,则不执行任何语句。
4.break
--跳出当前switch或for等语句;
continue
--跳出本次循环,进入下一次循环,只用于while、for循环中。
二、for循环
- 语法格式:
for(定义变量;循环条件;循环变量增值){ 循环体; }
- 注意:
1. ( )里中间的执行条件不可省 ,三个分号不可省
eg:for(;i<=10;)
2. 全局变量-----作用于整个main函数
int i=0;
int main(){
......
3. 局部变量-----只作用于某一部分
for( int i=1;i<=10;i++){
......
}
这里的i是在for循环里起作用
4.for(; ; )
与while(1)
等价,是死循环
三、while循环
- 语法格式:
while(表达式){ 语句; }
- 解释:
1. 先计算表达式的值,当值为真,执行下面语句,执行完语句,再次计算表达式的值真则继续执行语句;
2. 直到值为假,退出循环。
四、数组
- 数组: 用于存储多个相同类型数据的集合
存储数据就要有内存和地址
数组名就是该数组的首地址- 数组声明
type arrayName [arraySize]; //type---数组类型 //arrayName---数组名 //arraySize---数组大小
- 举例
#include<stdio.h> int main(){ int array[4] ={1,2,3,4}; printf("%d\n",array); printf("%d\n",&array[0]); printf("%d\n",array); printf("%d\n",array+1); printf("%d\n",&array[1]); return 0; }
运行结果
五、rand与srand
- rand()
函数头文件:stdlib.h
函数功能:产生随机数
- srand()
头文件:stdlib.h
函数功能:设置种子
ps:可用time(NULL)(获取当前产生系统时间信息)来充当种子,使每次运行时种子不一样
六、ATM机
include <stdio.h>
int main(){
int old = 123;//原始密码
int input;//输入密码
int wrongTime = 3; //错误次数
printf("**********************\n");
printf(" 欢迎使用建设银行系统\n");
printf("**********************\n");
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(; 1 < 2;){
printf("*****************************\n");
printf(" 1.存款\n");
printf(" 2.取款\n");
printf(" 3.查询\n");
printf(" 4.更改密码\n");
printf(" 5.退出\n");
printf("*****************************\n");
//提示用户选择
printf("请选择操作:");
scanf("%d", &choice);
//判断操作
switch(choice){
case 1: //存款
int temp;
printf("请输入存款金额:");
scanf("%d", &temp);
total += temp;
printf("存款成功!可用余额为:%d\n",total);
break;
case 2: //取款
int temp2;
for(;1<2;){
printf("输入取款金额:");
scanf("%d", &temp2);
if(temp2 > total){
printf("余额不足 ");
}else{
total -= temp2;
printf("取款成功 余额为%d\n",total);
break;
}
}
break;
case 3: //查询余额
printf("当前余额为:%d\n",total);
break;
case 4: //更改密码
int n1 ;
int n2;
for(;1<2;){
printf("请输入新密码:");
scanf("%d",&n1);
printf("请确认新密码:");
scanf("%d,&n2);
if(n1==n2){
printf("密码设置成功");
old=n1;
break;
}else{
printf("两次不一致");
}
}
break;
default://退出
exit(EXIT_SUCCESS);
//exit(EXIT_FAILURE);
break;
}
//提示是否继续
for(;1<2;){
printf("是否继续(y/n):");
getchar();
scanf("%c", &goon);
if(goon == 'y'){
break;
}
if (goon == 'n'){
exit(EXIT_SUCCESS);
}
printf("输入无效 ");
}
result 0;
}
七、记数字
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
int main(){
int count=3;//记录每次生成多少个随机数
while(1){
unsigned int seed=time(NULL);
srand(seed);//设置种子
for(int i=0;i<count;i++) {
int temp=rand()%9+1;
printf("%d ",temp);
}
printf("\n");
//延时1s
Sleep(1000);
//刷新屏幕
system("cls");
int temp;
printf("请输入:") ;
//设置的种子和之前一样
srand(seed);
for(int i=0;i<count;i++){
scanf("%d",&temp);
int old=rand()%9+1;
if(temp!=old){
printf("错误,退出!\n");
exit(EXIT_SUCCESS);
}
}
printf("正确!\n");
count++;
}
return 0;
}
八、不同随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
当程序运行起来,系统自动产生一个种子
使用rand产生随机数之后
重新启动程序 再次使用 rand发现种子是一样的
总结:只要种子一样 产生的随机数就一样 1 2 3
如果需要每次重新运行都产生不一样的 随机数
就需要更改种子
时间: 1000 1001 1030
srand(time(NULL)) 导入头文件<stdlib.h> <time.h>
*/
int main(){
//不保存产生的随机数
//生产随机数和判断的时候种子一样 使用rand
//得到的结果和顺序是一样的
int array[4]={};
srand(time(NULL));
for(int i = 0; i < 4; i++){
int temp = rand() % 4;
if(I==0){
array[i]=temp;
}else{
int j=0;
for(;j<i;j++){
if(array[j]==temp){
printf("重复了:%d\n",temp);
break;
}
}
if(j==i){
array[i]=temp;
}else{
i--;
}
}
}
for(int i=0;i<4;i++){
printf("%d",array[i]);
}
return 0;
}