C语言基础----(2)变量与循环

第二次

内容

  • 全局变量和局部变量
  • 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

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


C语言基础----(2)变量与循环_第1张图片
printf.png
scanf

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


C语言基础----(2)变量与循环_第2张图片
搜狗截图20191125222808.png

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 

你可能感兴趣的:(C语言基础----(2)变量与循环)