c语言srand作用域,C语言相关使用

学习内容

全局变量与局部变量

switch语句

for循环

while循环

Break与Continue关键字

printf与scanf相关

数组

rand() 与 srand()函数

循环训练demon之ATM

循环训练demon之记数字

数组训练之不同随机数

1.全局变量与局部变量

因为变量作用域的不同,分为了局部变量与全局变量

全局变量

在所有函数外部定义的变量

作用域是从声明时刻开始,到程序结束

局部变量

函数内部定义的变量

作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错

在同一源文件中,允许全局变量和局部变量同名,在局部变量作用域内,同名的全局变量不起作用

允许在不同的函数中使用相同的变量名,他们代表不同变量

当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉

局部变量不能赋值为同名全局变量的值

#include

int a = 3;//全局变量

int main(){

int a = 4;//局部变量

printf("a = %d",a);

return 0;

}

输出:

a = 4

2.switch语句

一个变量有多种值的情况下,不同值对应的情况不同,根据不同的值执行不同的语句

switch(表达式){

case 常量表达式1:

语句 1;

case 常量表达式2:

语句 2;

......

case 常量表达式n:

语句 n;

default:

语句 n+1;

}

表达式必须是一个常量(int,char类型等)或者枚举类型

表达式与常量表达式必须都是相同的数据类型

当表达式的值等于某个常量表达式的值之后,执行该表达式之后的语句

当语句中出现 break 的时候,语句中断,并跳出 switch

如果 case 语句不包含 break,控制流将会继续后续的 case,直到遇到 break 为止

一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾

//通过输入1-3来判断输入的结果

int main(){

int a = 0;

printf("请输入一个数1-3:");

scanf("%d", &a);

switch(a){

case 1:

printf("你输入的是1

");

break;

case 2:

printf("你输入的是2

");

break;

default:

printf("你输入的是3

");

break;

}

return 0;

}

输出:

请输入一个数1-3:3

你输入的是3

3.for循环

for( init ; condition ; increment ){

语句

//   init  : 循环变量赋初值(表达式1)

//condion  : 循环条件(表达式2)

//increment : 循环变量增值(表达式3)

}

循环控制变量的定义和初始化只执行一次

表达式1、表达式2和表达式3之间是用分号 ; 隔开的

for(表达式1;表达式2;表达式3)的后面不要加(;)分号

for 循环的循环条件(condition)是决定循环的次数

for( ; ; )与while(1) 等价,都是死循环,不停的执行语句

int main(){

//输出1-10 之间的整数

for(int i = 1; i <=10; i++){

printf("i = %d

", i);

}

//输出不停输出1-10之间的整数

for(int i = 1; i <= 10; i++){

printf("i = %d

", i);

if(i == 10){

i = 0;

}

}

//死循环

for(; ;) {

}

return 0;

}

输出:

第一个循环输出 i = 1 到 i =10;

第二个循环持续输出 i = 1 到 i =10 ;

第三个循环死循环,一直加载,从未停止;

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,for 循环当中,当遇到 break 时,会终止循环而执行整个循环语句后面的代码

Continue

跳过循环体中剩余的语句而强制进入下一次循环 (只用于 while、for 循环语句当中)

6.printf与scanf相关

缓冲区:输入输出流

printf

向终端输出字符串

先将字符串内容输入到缓冲区,之后再依次输出缓冲区内容

062f25367a695d8a2646489d008612c0.png

printf

scanf

接收终端的输入

在缓冲区里读数据,当缓冲区里有对应类型数据,就从缓冲区里面取数据

如果没有对应类型数据,就等待用户输入数据

033c87396bea9abaf753a4a96185027f.png

scanf

getchar(): 从缓冲区读取一个字符

#include

int main(){

char a;

printf("请输入a:");

scanf("%c", &a);

char b;

printf("请输入b:");

getchar();

scanf("%c", &b);

char c;

printf("请输入c:");

scanf("%c", &c);

printf("

a=%c b=%c c=%c

",a,b,c);

return 0;

}

输出

请输入a:A

请输入b:B

请输入c:

a=a b=b c=

输入 A ,按下回车之后,缓冲流里面为 A

之后取出 A 放到 a 的地址里面,此时缓冲区还剩下

输入 B,按下回车之后,此时缓冲区里面为 B

getchar()从缓冲区里面拿走一个

,缓冲里还剩下 B

之后取出 B 放到 b 的地址里,此时缓冲区还剩下

因为缓冲区里面有字符 ,scanf就将缓冲里的内容放到 c 的地址里

所以当我们输入A,B之后,就直接输出了结果

7.数组

数组:用于储存多个相同类型数据的集合

数组相关

能够存储数据 就必须要有内存

如何定义一个数值的同时为他分配内存

数组定义时必须明确知道数组的大小

数组名就是数组的首地址

声明数组

在C 语言中,声明一个数组,需要指定元素的类型和元素的数量

//数组声明格式

type arrayName [arraySize];

//arrayName:数组名字

//[]:数组标识

//type:数组存储类型

//arraySize:数组大小

初始化数组

C 语言当中,可以逐个初始化数组,也可以使用一个初始化语句。大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。

int a[4] = {2,45,21,45};

如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。

int a[] = {2,3,564,7};

在定义时期明确指定数组的大小

int temp[5];

数组元素赋值

a[3] = 56;

//将数组第4个位置的值赋为56

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;i < 5;i++){

//产生1-10以内的数字

int temp = rand()%9 + 1;

printf("%d ",temp);

}

printf("

");

srand(time(NULL));//播种

for(int i = 0;i < 5;i++){

int temp1 = rand()%9 + 1;

printf("%d ",temp1);

}

return 0;

}

输出:(第一次结果)

6 9 8 5 9

5 3 1 4 6

输出:(第二次次结果)

6 9 8 5 9(与第一次相同)

5 2 1 7 2

9.循环训练demon之ATM

#include

int main(){

int old = 123;//原始密码

int input;//输入密码

int wrongTime = 3; //错误次数

printf("**********************

");

printf("  欢迎使用建设银行系统

");

printf("**********************

");

printf("请输入密码:");

for(int i = 1;i <= wrongTime; i++){

scanf("%d", &input);

//判断密码

if(input == old){

//密码正确

break;

}

if(i == wrongTime){

printf("错误次数过多!

");

return 1;

}

//密码不正确

printf("密码不正确,请重新输入密码:");

}

int choice;//接收用户选择

char goon;//是否继续

for(; 1 < 2;){

//主界面

printf("*****************************

");

printf("1.存款

");

printf("2.取款

");

printf("3.查询

");

printf("4.更改密码

");

printf("5.退出

");

printf("*****************************

");

//提示用户选择

printf("请选择操作:");

scanf("%d", &choice);

//判断操作

switch(choice){

case 1: //存款

int temp;//存款金额

printf("请输入存款金额:");

scanf("%d", &temp);

total += temp;

printf("存款成功!可用余额为:%d

",total);

break;

case 2: //取款

int temp2;//取款金额

for(;1<2;){

printf("输入取款金额:");

scanf("%d", &temp2);

if(temp2 > total){

printf("余额不足 ");

}else{

total -= temp2;

printf("取款成功 余额为%d

",total);

break;

}

}

break;

printf("当前余额为:%d

",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);//成功退出

break;

}

//提示是否继续

for(;1<2;){

printf("是否继续(y/n):");

getchar();

scanf("%c", &goon);

if(goon == 'y'){

break;

}

if (goon == 'n'){

exit(EXIT_SUCCESS);

}

printf("输入无效 ");

}

}

return 0;

}

10.循环训练demon之记数字

#include

#include

#include

#include

int main(){

int count = 3;//记录每次生成多少个随机数

while(1){

unsigned int seed = time(NULL); //设置产生种子的时间固定

//设置随机数的种子

srand(seed);

for(int i = 0; i < count; i++){

//生成一个随机数

int temp2 = rand() % 9 + 1;

printf("%d ",temp2);

}

printf("

");

// 延时2s

Sleep(2000);

//刷新屏幕

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("错误 退出!

");

exit(EXIT_SUCCESS);

}

}

printf("正确!

");

//增加产生数字的个数

count++;

}

return 0;

}

11.数组训练之不同随机数

#include

#include

#include

int main(){

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

//比较j对应的值和temp是否相同

if(array[j] == temp){

//重复了 打印重复了的数字

printf("重复了:%d

",temp);

break;

}

}

//判断是怎么出来的

if (j == i){

//将i前面的比较一遍都没发现重复的

//保存temp值

array[i] = temp;

}else{

//重复了

//重新回到当前这一次

i--;

}

}

}

//输出

for (int i = 0; i< 4; i++){

printf("%d ", array[i]);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值