C语言基础(二)

目的:掌握用C语言编程的基本技能
内容:1.全局变量与局部变量
   2.switch语句
   3.for循环
   4.while循环
   5.break与continue
   6. getchar()的运用
   7. 数组
   8. while训练之十进制转化为二进制
   9. 数组训练之产生不同随机数
   10. "最强大脑“小游戏实战
   11. ATM实战

全局变量与局部变量

根据变量的作用域不同,可分为全局变量和局部变量
1.全局变量:在所有函数外部定义的变量(即在main函数前面定义的变量),作用域为从声明开始到程序结束
局部变量:在函数内部定义的变量(即在代码块之间定义的变量),作用域仅限于函数内部,离开该函数后无效
2.在同一源文件中,允许全局变量与局部变量重名。重名时,在局部变量作用域内,起作用的是局部变量,同名的全局变量被屏蔽
3.允许在不同的函数中使用相同的变量名,因为它们代表不同的变量
4.局部变量不能赋值为同名全局变量的值

#include 

int a = 0;//全局变量 
int main(){
  int a = 1;//局部变量 
  printf("a = %d",a);//输出 a = 1 

 return 0;
}

switch语句

1.用于一个变量有多个确定的值,而不同的值对应的执行语句不同的情况,格式如下:

switch(表达式){
      case 常量表达式1:
           语句1:
      case 常量表达式2:
           语句2;
      ......
      case 常量表达式 n:
           语句n;
      default:
           语句 n + 1 ; 
  } 

2.注意:

  • 表达式必须是一个常量(如 int,char类型等)或者枚举类型,且表达式与常量表达式必须是相同的数据类型
  • 当表达式的值为某个常量表达式时,执行该表达式后的语句
  • 当语句中出现break时,语句中断并跳出switch;如果没有出现break,控制流将继续执行后面的case,直到遇到break才结束
  • 一个switch语句可以有一个出现在switch语句末端的default case
#include 

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;
} 

for循环

1.for循环的格式为:for(循环控制变量;运行的条件;控制变量的变化){语句块}
例如: for(int i=0;i<10;i++){printf("%d",i);}

  1. for循环中间条件是必须的,其他部分可以省略,但分号不可以省略
    如:for(;1<2;)

3.循环控制变量的定义和初始化只执行一次
4.循环控制变量什么时候变化?当这一次循环结束之后
5.for( ; ; )与while(1)等价,都时不停执行语句的死循环

int main(){
  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;
      }
  }//不断输出1-10之间的整数
  
  for(; ;) {
      
  }//死循环 

while循环

  1. while循环的格式为:while(表达式){语句块}
  2. 先计算表达式的值,当值为真时,执行语句块
  3. 执行完语句块后再次计算表达式的值,如果为真,继续执行语句块
  4. 重复执行这个过程,直到表达式的值为假再退出循环,执行while语句后的代码
#include 

//使用while循环计算1-10的和 
int main(){
  int a = 1;
  int sum = 0;
  while(a <= 10){
      sum += a;
      a++;
  }
  printf("%d",sum);

 return 0;
}

break与continue

  1. break:
    在switch语句中,当遇到break时,跳出switch;在while和for循环中,当遇到break时,会跳出循环而执行后面的代码
  2. continue(只用于while和for循环语句):
    跳过循环体中剩余语句而强制进入下一次循环

getchar()的运用

  1. getchar()用于从缓冲区取走一个字符
  2. 输入1,按下回车键后,缓冲区里为1\n,之后1被放到a的地址中,此时缓冲区剩下\n
    输入2,按下回车键后,缓冲区里为\n2\n,而getchar()从缓冲区取走一个\n,缓冲区剩下2\n,之后2被放到b的地址中,此时缓冲区剩下\n
    输入3,按下回车键后,缓冲区里为\n3\n,而getchar()从缓冲区取走一个\n,缓冲区剩下3\n,之后3被放到c的地址中,此时缓冲区剩下\n
#include 

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\n",a,b,c);


 return 0;
}
/*程序运行: 
请输入a:1
请输入b:2
请输入c:3
a=1 b=2 c=3*/

数组

  1. 数组:用于储存多个相同类型数据的集合
  2. 数组的声明格式: 数组储存类型+数组名字+[数组大小]
    例如:int array[3]
  3. 数组名就是数组的首地址
  4. 系统为数组分配内存空间的时候,必须明确知道数组元素的个数
  5. 在C语言中,可以逐个初始化数组,也可以使用一个初始化语句
  6. 数组的初始化:
  • 定义时要明确指定数组的大小,如:
int array1[4];
  • 如果省略了数组的大小,数组的大小则为初始化时元素的个数,如:
  int array[] = {1,2,3,4};
  • 大括号里,值的数目不能大于数组声明时在方括号里指定的数组大小,如:
int array2[2] = {1,2}; 
  1. 数组元素的赋值:
array[0] = 2;//将数组第1个位置赋值为2 
array[1] = 23;//将数组第2个位置赋值为23 

while训练之十进制转化为二进制

#include 

int main(){
  int num;
  printf("请输入一个数字:");
  scanf("%d",&num);
  
  //二进制
  int wei = 1;
  long long sum = 0; 
  while(1){
      //取余
      int yu = num % 2;
      num = num / 2;
      
      //目前的总和:当前位数的值 + 之前的值
      sum = sum + yu * wei;
      wei = wei * 10;
      
      if(num < 2){
          sum = sum + num * wei;
          break;
      } 
  }
  printf("%d\n",sum);

 return 0;
}

数组训练之产生不同随机数

#include 
#include 
#include  

//4.产生4个(不同)随机数 保存到数组 输出 
int main(){
  int array[4] = {};
  
  srand(time(NULL));
  
  /*生成数组  产生随机数的同时比较是否重复 
  如果重复就重新产生一个随机数 
  如果不重复就保存
  每次i的值正好可以用来判断已经有几个数了*/ 
  for(int i = 0;i < 4;i++){
      int temp = rand() % 100;
      
      if(i == 0){
          //第一个 直接保存
          array[i] = temp; 
      }else{
          //判断前面是否已经存在这个数
          int j = 0;
          for(;j < i;j++){
              //比较j对应的值和temp是否相同
              if(array[j] == 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;
}

"最强大脑“小游戏实战

#include 
#include //设置随机数需导入该头文件
#include //设置随机数需导入该头文件 
#include //设置延时需导入该头文件 

int main(){
  int count = 3;//记录每次生成多少个随机数 
  printf("欢迎来到最强大脑!游戏开始!\n");
  
  while(1){ 
  unsigned int seed = time(NULL);//1000
  //设置随机数的种子 
   srand(seed);
  for(int i = 0;i < count;i ++){
      //生成一个随机数 
      int temp = rand() % 9 + 1;
      printf("%d\n",temp);
  }
  
  //延时2s 
  Sleep(2000); 
  //for(int i = 0;i < 10000000000/15*2;i++)
  
  //刷新屏幕
  system("cls");
  /* mac: 
  for(int i = 0;i < 20;i++){
     printf("\n");
   }
   */
  
  int input;
  printf("请输入你看到的数字:");
  
  //重新设种子 和之前生成的种子一样
   srand(seed); 
  
  //接收用户输入 一个一个接收 
  for(int i = 0;i < count;i++){
      scanf("%d",&input);
      
      //获取对应生成的随机数
      int old = rand() % 9 + 1;
      
      //判断输入的数和随机数是否相同 
      printf("old:%d\n",old);
      if(input != old){
          printf("错误 退出!\n");
          exit(EXIT_SUCCESS); 
      } 
  }
  
  count ++; 
  } 

   return 0;
}

ATM实战

#include 
#include 

int main(){
  int password = 123;//原始密码 
  int input;//输入密码
  int wrongtime = 3;//错误次数
  int total = 1000;//余额 
   
  printf("*****************************\n");
  printf("      欢迎使用建设银行       \n"); 
  printf("*****************************\n");
  printf("请输入密码:"); 
  
   for(int i = 1;i <= wrongtime;i ++){
      scanf("%d",&input); //输入密码 
      //密码正确 
      if(input == password){
          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; 
      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("密码设置成功!\n");
                  password = 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;
}

你可能感兴趣的:(C语言基础(二))