C语言学习笔记第三天

C语言学习笔记第三天

  • 类型转换

    • 只有类型相同的数据才能运算,如果类型不同的数据需要先转换为相同的类型后在进行计算。

      自动类型转换:

      转换规则:

      以不丢失数据为基础,可以适当地牺牲一些空间,

      • 字节少的向字节多的转换(优先级最高)
      • 有符号的向无符号的转换(优先级次高)
      • 整型向浮点型转换(优先级最低)

      注意:char short 如果与不同类型的数据运算时,会提升为int类型后参与运算

      sizeof运算符里面的表达式不会进行计算

    • 强制类型转换:(新类型名)数据:这种方法可能会丢失数据

  • switch分支语句

    • 格式

      switch(n)//n可以是数值、表达式、运算结果必须是整数
      {
          case val1: 语句表达式 ;break;//如果val1==n,则打开执行开关
          case val2: 语句表达式 ;break;//value 必须是常量
          default:break;// case a ... b 可以表示[a,b],但是只有GNU编译器才支持该语法,不建议使用
      }
      
    • 注意:如果case语句后面没有break语句,那么满足case条件后,接下来的语句乃至后面case语句的代码也会执行,知道遇到break,或者执行完所有剩下语句。

      int num=0;
      switch(num)
      {
      	case 0:
      		printf("====0====\n");// 1
      	case 1:
      		printf("====1====\n");// 2
      	case 2:
      		printf("====2====\n");// 3
      	default:
      		printf("=default=\n");// 4
      }
      

      该程序会执行1 2 3 4 语句

    • 练习1:输入一个月份,判断是什么季节

      1 2 3春 4 5 6夏 7 8 9秋 10 11 12冬

      other 月份有误

      练习2:练习输入一个月份,判断该月有多少天忽略润平年问题

      练习一:

      #include <stdio.h>
      
      int main(int argc,const char* argv[])
      {
          int month;
          printf("输入一个月份:");
          scanf("%d",&month);
          switch(month)
          {   
              case 1:
              case 2:
              case 3:printf("春\n");break;
              case 4:
              case 5:
              case 6:printf("夏\n");break;
              case 7:
              case 8:
              case 9:printf("秋\n");break;
              case 10: 
              case 11: 
              case 12:printf("冬\n");break;
              default:printf("月份有误\n");break;
          }   
      }
      
      

      练习二:

      #include <stdio.h>
      
      int main(int argc,const char* argv[])
      {
          int month;
          printf("请输入月份:");
          scanf("%d",&month);
          if(month<1||month>12)
          {   
              printf("输入不合法\n"); 
          }else
          switch(month)
          {   
              case 1:
              case 3:
              case 5:
              case 7:
              case 8:
              case 10: 
              case 12: 
                  printf("该月有31天\n");
                  break;
              case 2:
                  printf("该月有28天\n");
              default:
                  printf("该月有30天\n");
                  break;
      
          }   
      }
      
  • for循环语句

    循环就是一种可以让代码反复执行的方法,到达你想要的效果

    for循环是一种非常灵活,变化多样且危险(相比于其他循环)的循环

    for一般使用一个变量来引导循环的执行,该变量叫做循环变量i

    格式:

    for([1];[2];[3])
    {
    	[4]
    }
    

    [1]给循环变量赋初值,c99标准以上才可以在此定义循环变量,在编译的时候需要加上 -std=gnu99

    [2]判断变量是否到达边界,如果没到达,进入循环

    [3]改变循环变量,防止出现死循环,一般对循环变量进行自加躲着自减

    [4]被反复执行的代码,成为循环体

    一般用法:

    for(int i=0;i<10:i++)
    {
    	printf("%d\n",i);
    }
    

    练习三:计算出所有的三位水仙花数

    水仙花数:abc == a * a * a + b * b * b + c * c * c

    练习三:

    #include <stdio.h>
    
    int main(int argc,const char* argv[])
    {
        int a,b,c;
        for(int i=100;i<1000;i++)
        {   
            a = i/100;
            b = i/10%10;
            c = i%10;
            if(i == a*a*a+b*b*b+c*c*c)
            {
                printf("%d\n",i);   
            }
        }   
        return 0;
    }
    
    

    练习四:输入一个正整数,判断是否为素数

    #include <stdio.h>
    
    int main(int argc,const char* argv[])
    {
        unsigned int num;
        printf("请输入一个正整数:");
        scanf("%d",&num);
        for(int i=2;i<num/2;i++)
        {   
            if(num%i==0)
            {
                printf("不是素数\n");
                return 0;
            }
        }   
        if(num==1)
        {   
            printf("这个数不是素数\n");
        }else
            printf("这个数是素数\n");
        return 0;
    }
    
    
  • while循环语句

    while(表达式)

    {

    ​ //循环体

    }

    当表达式为真时执行循环体,执行完后重新判断表达式,以此类推,直到表达式为假,结束循环

    while循环相当于for的精简版本 for(;表达式)

    for循环专门负责解决明确知道循环次数的问题

    while循环专门负责解决不确定循环次数的问题

  • do while循环语句

    do{
        //这里写循环执行语句
    }while(表达式);
    

    先执行循环体,在判断循环条件,该循环体至少执行一次,适合先干活,后检查的特殊情况,例如输入密码,文件内容判断

    问for\while\do-while区别?

  • 循环嵌套

    循环语句中包含了循环语句

    外层循环执行一次,内存循环执行n次

    练习五:输入一个正整数,判断是否为回文数

    回文数格式: 12321 123321

    练习六:模拟输入6位密码,输入的密码正确显示“登录成功”,输入错误提示还剩几次机会,并继续输入密码,最多错三次,否则显示“账号已锁定,请联系柜台”,并结束程序

    123456

    123 2次,请继续

    123 1次

    123 锁定,结束

    练习五

    #include <stdio.h>
    
    int main(int argc,const char* argv[])
    {
        int a,b,c;
        scanf("%d",&a);//a是源数据
        b=a;//创建一个a的副本
        c=0;//存放a反转后的数据
        do{ 
            c*=10;
            c+=a%10;
            a=a/10;
        }while(a);
        if(c==b)
        {   
            printf("yes\n");
        }else
        {   
            printf("no\n"); 
        }   
    }
    

    练习六

    #include <stdio.h>
    
    int main(int argc,const char* argv[])
    {
        int password=123456;
        int ans;
    
        int i=0;
        for(;i<3;i++)
        {   
            printf("请输入密码:");
            scanf("%d",&ans);
            if(ans==password)
            {
                break;
            }
            if(i==0)
            {
                printf("还剩两次机会,请继续……\n"); 
            }
            if(i==1)
            {
                printf("还剩一次机会,请继续……\n"); 
            }
            if(i==2)
            {
                printf("系统已锁定,请联系柜台\n"); 
            }
        }   
        if(i<3)
        {   
            printf("登录成功\n");   
        }   
    
        return 0;
    }
    
    

作业1:打印99乘法表
作业2:编程解决百钱百鸡问题
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
双层for语句
作业3:计算出100~1000之间所有素数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值