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\n");
          break;
      case 2:
          printf("你输入的是2\n");
          break;
      default:
          printf("你输入的是3\n");
          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\n", i);
  } 
   //输出不停输出1-10之间的整数
  for(int i = 1; i <= 10; i++){
      printf("i = %d\n", 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\n",sum);
   return 0;
}

输出:
   sum = 5050

5.Break与Continue关键字

  • Break

在 switch 语句,当遇到 break 时,不再执行 switch 中的任何语句
在 while,for 循环当中,当遇到 break 时,会终止循环而执行整个循环语句后面的代码

  • Continue

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

6.printf与scanf相关

缓冲区:输入输出流

  • printf

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

C语言相关使用_第1张图片
printf
  • scanf

接收终端的输入
在缓冲区里读数据,当缓冲区里有对应类型数据,就从缓冲区里面取数据
如果没有对应类型数据,就等待用户输入数据

C语言相关使用_第2张图片
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("\na=%c b=%c c=%c\n",a,b,c);
  return 0;
}

输出
请输入a:A
请输入b:B
请输入c:
a=a b=b c=

输入 A ,按下回车之后,缓冲流里面为 A\n
之后取出 A 放到 a 的地址里面,此时缓冲区还剩下 \n
输入 B,按下回车之后,此时缓冲区里面为 \nB\n
getchar()从缓冲区里面拿走一个\n,缓冲里还剩下 B\n
之后取出 B 放到 b 的地址里,此时缓冲区还剩下 \n
因为缓冲区里面有字符 \n,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("\n");
  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("**********************\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("密码不正确,请重新输入密码:"); 
  } 
  
  int choice;//接收用户选择
  char goon;//是否继续 
  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;
              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("密码设置成功!\n");
                      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("\n");
  
      // 延时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("错误 退出!\n");
              exit(EXIT_SUCCESS); 
          } 
      }
      printf("正确!\n"); 
      //增加产生数字的个数 
      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 

你可能感兴趣的:(C语言相关使用)