第二次
内容
- 全局变量和局部变量
- switch语句
- for循环
- while循环
- break和continue作用
- printf和scanf的联系
- 数组基础学习
- rand()与srand()函数
- 循环实践demo之记数字游戏
- 循环实践demo之ATM系统
- 数组实践demo之输出四个不同的随机数
1、全局变量与局部变量
根据变量作用域的不同,我们将变量分为全局变量和局部变量
全局变量
在所有函数之外被定义的变量并且所有函数都可以使用的变量
从声明的时刻开始直到程序结束局部变量
在某个函数内部被定义的变量并且只在该函数内部使用,而出了该函数就没有了意义
注意
1、允许全局变量和局部变量同名,但是在使用时,在局部变量作用域中起作用的是局部变量,而全局变量被屏蔽,不起作用
2、允许不同函数中的局部变量同名,只是他们代表的变量不同
3、局部变量不能被赋予全局变量的值
2、switch语句
一个变量有多种值的情况下,不同值对应的情况不同,根据不同的值执行不同的语句
switch(表达式){ case 常量表达式1; 语句 1; case 常量表达式2; 语句 2; ······ case 常量表达式n; 语句 n; }
注意
- 表达式必须是一个常量(int char类型等)或者枚举类型
- 表达式与常量表达式必须是同一种数据类型
- 当表达式的值等于某个常量表达式的值时,执行相应的语句
- 如果在表达式中遇到berak时,语句中断,并且跳出switch语句
- 如果case语句中不包含break的话,在执行了该case语句后将继续执行下一个case语句,直到遇到break,跳出switch语句
#include
int main() { int a = 0; printf("请输入一个数:"); scanf("%d",&a); switch(a) { case 1 : printf("你输入的是 1\n"); break; case 2: printf("你输入的是 2\n"); break; default: printf("你输入的是 3\n"); break; } return 0; }
3、for循环
基本内容
for(循环控制变量;运行的条件;控制变量的变化)
for循环中间条件是必须要,其他部分可以省略
分号不能省略
例子:
for(; 1 < 2; )
for(int i = 0; i < 10; i++)注意
- 循环控制变量的定义和初始化只执行一次
- for(;表达式;)后面不能跟;
- 循环条件是用来决定循环次数的
- for(; ;)与while(1)是等价的
#include
/** for(循环控制变量;运行的条件;控制变量的变化) for循环中间条件是必须要,其他部分可以省略 分号不能省略 for(; 1 < 2; ) for(int i = 0; i < 10; i++) */ int c = 10; int main(){ //输出1-10 之间的整数 for(int i = 1; i <=10; i++){ printf("i = %d\n", i); } /* 循环控制变量的定义和初始化只执行一次 变量的作用域: 局部变量 :{ int a { int a; printf(a); } } 全局变量 静态变量 循环控制变量什么时候变化/执行? i++ i-- j++ j-- i+=2 当这一次循环结束之后 再变化/执行 */ //int i = 1; for(int i = 1; i <= 10; i++){ printf("i = %d\n", i); if(i == 10){ i = 0; } //i++; } //不断输出1-10之间的整数 return 0; }
4、while()循环
while(表达式){ 语句块 } //表达式:循环条件 //语句块:循环体
- 先计算表达式的值,当值为真才执行语句块
- 执行完语句块后再计算表达式的值,如果为真继续执行语句块
- 重复执行这个语句块,直到表达式的计算值为假时就退出循环,执行while后面的语句
//使用while循环打印1-100的和 int main(){ int i = 1;//控制循环条件 int sum = 0;//总和 while(i <= 100){ sum+=i; i++; } printf("sum = %d",sum); return 0; } 输出: sum = 5050
5、break与continue的作用
Break
在switch语句中遇到break时不在执行switch中的任何语句
在while循环和for3循环中遇到break时,会终止循环,执行整个循环后面的语句;
Continue
在循环中遇到continue时则将强行结束本次循环,执行下一次循环(而continue只能够在while循环和for循环中才能使用
6.printf与scanf相关
缓冲区:输入输出流
printf
向终端输出字符串
先将字符串内容输入到缓冲区,之后再依次输出缓冲区内容
scanf
接收终端的输入
在缓冲区里读数据,当缓冲区里有对应类型数据,就从缓冲区里面取数据
如果没有对应类型数据,就等待用户输入数据
getchar():从缓冲区读取一个字符
#includr
int main(){ char a; printf("请输入a:"); scanf("%c",&a); char b; printf("请输入b:"); getchar(); scanf("%c",&b); char c; printf("请输入c:"); getchar(); scanf("%c",&c); printf("a=%c,b=%c,c=%c",a,b,c); return 0; } 在这个程序里面getchar的作用是将上一次输入后剩余在缓冲区里的回车字符\n取走,以达到清空缓冲区的作用,否则,即使我们从终端输入一个新字符,但是取字符是按照顺序来的,回车符\n在我们输入的新字符之前,所以取走的仍旧是回车符\n
7.数组
数组:用于储存多个相同类型数据的集合
数组相关
- 能够存储数据 就必须要有内存
- 如何定义一个数值的同时为他分配内存
- 数组定义时必须明确知道数组的大小
- 数组名就是数组的首地址type arraytlone [arraysize)
- 在C 语言中,声明一个数组,需要指定元素的类型和元素的数量
初始化数组
- 可以逐个初始化数组,也可以使用一个初始化语句。大括号{ }之间的值的数目不能大于我们在数组
声明时在方括号[]中指定的元素数目- 如果省略数组的大小,数组的大小则为初始化时元素的个数。
- 在定义时期明确指定数组的大小
- 数组元素赋值
在给数组元素赋值时,下标表达式是从0开始的,如果有n个元素,则:a[0]=要赋予的值,a[1]=要赋予的值····a[n-1]=要赋予的值
8.rand() 与 srand()函数
- rand()函数
函数头文件:stdlib.h
函数定义:int rand(void)
函数功能:产生一个随机数
返回值: 返回0至RAND_MAX之间的随机整数值- srand()函数
函数头文件:stdlib.h
函数定义:void srand(unsigned int seed)
函数功能:设置随机数种子
函数说明:通常可以用getpid()(获取当前进程的进程识别码)或者time(NULL)(获取当前系统的时间信息)来充当
种子,保持每次运行时种子是不一样的#include
#include #include int main(){ for(int i=0;1<5;i++){ int temp=rand()%9 +1; printf("%d",temp); printf("\n"); } srand(time(NULL)); for(int i=0;i<5;i++){ int temp1 = rand()%9 +1; printf("%d",temp1); return 0; } }
9循环实践demo之记数字游戏
规则:随机输出四个数字,两秒过后数字消失,玩家输入数字,如果对了,就输出多一位的随机数,如果错了就继续输出四位随机数;
代码块
#include
#include #include #include #include /* 当程序运行起来,系统自动产生一个种子 使用rand产生随机数之后 重新启动程序 再次使用 rand发现种子是一样的 总结:只要种子一样 产生的随机数就一样 1 2 3 如果需要每次重新运行都产生不一样的 随机数 就需要更改种子 时间: 1000 1001 1030 srand(time(NULL)) 导入头文件 */ int main() { int n=4; printf("数学快速记忆小游戏:\n"); //不保存产生的随机数 //生产随机数和判断的时候种子一样 使用rand //得到的结果和顺序是一样的 for(;1<2;){ unsigned int seed = time(NULL); srand(seed); for(int i = 0; i < n; i++){ int temp = rand() % 9 + 1; printf("%d ",temp); } Sleep(2000); system("cls"); srand(seed); printf("请输入:"); int a; int count = 0; for(int i = 0; i < n; i++){ int temp = rand() % 9 + 1; scanf("%d", &a); printf("%d ",temp); //printf("%d\n",temp); if (a == temp){ count++; } } if (count == n){ printf("\n全对\n"); Sleep(1000); system("cls"); n++; }else{ printf("错误\n"); } } return 0; } //问题:因为时间种子改变,导致前后两次的结果不相同,所以导致判断结果错误;
10 循环实践demo之ATM系统
代码块
#include
int n;
int l;
int main()
{
int a=9000;
int i,m;
int j,k;
scanf("%d",&i);
printf("***************************************\n");
printf(" 欢迎使用建设银行系统\n");
printf("***************************************\n");
printf("请输入密码:");
for(k=0;k<3;)
{
scanf("%d",&j);
if(i==j)
{
break;
}
if(i!=j&&k<2)
{
printf("密码错误,请重新输入:");
}
k++;
if(k==3)
{
printf("错误次数太多,请联系工作人员!");
return 1;
}
}
while(1)
{
printf("请选择操作:\n");
printf("*************************************************\n");
printf(" 1、存款 2、取款\n");
printf(" 3、更改密码 4、查询余额\n");
printf(" 5、退出\n");
printf("*************************************************\n");
scanf("%d",&m);
switch(m)
{
case 1 :
printf("请输入存款金额:");
char b;
scanf("%d",&n);
l=l+n;
printf("存款成功!\n");
printf("余额为:%d\n",l);
printf("是否继续(y/n):\n");
scanf("%s",&b);
for(int d=0;d>=0;d++)
{
if(b=='y')
{
printf("请输入存款金额:");
scanf("%d",&n);
l=l+n;
printf("存款成功!\n");
printf("余额为:%d\n",l);
printf("是否继续(y/n):");
scanf("%s",&b);
}
else
{
break;
}
}
break;
case 2 :
int q;
int s;
printf("请输入取款金额:");
scanf("%d",&q);
for(s=0;s>=0;s++)
{
if(q<=a)
{
printf("取款成功!\n");
l=l-q;
printf("余额为:%d\n",l);
break;
}
else
{
printf("余额不足,请重新输入:");
scanf("%d",&q);
}
}
break;
case 3:
printf("请输入旧密码:");
int r,c1,c2,g1;
scanf("%d",&r);
for(int x=0;x>=0;x++)
{
if(r!=j)
{
printf("密码错误,请重新输入:");
scanf("%d",&r);
}
else
{
printf("\n请输入新密码:");
scanf("%d",&c1);
printf("请再次确认密码:");
scanf("%d",&c2);
for(g1=1;g1>0;g1++)
{
if(c1==c2)
{
printf("密码修改成功!");
old=c1;
break;
}
else
{
printf("两次输入不一致,请重新输入新密码:");
scanf("%d",&c1);
printf("请再次确认密码:");
scanf("%d",&c2);
}
}
break;
}
}
break;
case 4:
printf("余额为:%d\n",l);
break;
case 5:
return 1;
}
}
return 0;
}
11数组实践demo之输出四个不同的随机数
代码块
#include
#include
#include
//4.Demo - 产生4个(不同)随机数 保存到数组 输出
int main(){
int array[4] = {};
srand(time(NULL));
//生成数组
//产生随机数的同时去比较是否重复
//如果重复就重新再产生一个随机数
//如果不重复就保存
//每次i的值正好可以用来判断已经有几个了
//1
//i = 1
// 2
for (int i = 0; i < 4; i++){
int temp = rand() % 4;
if (i == 0){//第一个 直接保存
array[i] = temp;
}else{
//判断前面是否已经存在了
int j = 0;
for(; j