C语言------switch语句、循环、数组、rand与srand函数

学习摘要

  • 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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。