C语言 day01 基础知识学习

一、写第一个c语言
   1.创建c语言流程
     a.打开终端,创建.c文件
      b编辑.c文件
       vi +文件名    ; gedit +文件名.c
     c.写c语言代码
     d. 编译  gcc xxx.c -o 可执行程序名字
     e. ./可执行程序名    默认是a.out

  2.解释c语言代码
   #include <stdio.h>     预处理:头文件-包含函数定义。
   //第一个c语言程序       注释--给人看,编译器当做空白,多行注释 /*xx*/
   int main()                    入口函数(main函数)--程序执行的入口
   { 
        int i = 0;                 定义变量----定义一个i变量
        printf("hello huqing\n");  打印--屏幕上照常输出
        return 0;                 返回值: 返回给main的外部
     }

二、常量
   1.常量:不可以改变的量,不可以修改的量 (建筑物高度,地球直径)
                一般时候,常量是给变量赋值使用。
   2.整形常量: -1 , 0 ,100   所有的值都是整数
      表示方式:10进制-满10进1, 16进制满16进1,用0到9+ABCDEF组成,加前缀0x或者H后缀。2进制常量只有1和0,8进制1到7表示,一般用0的前缀
    3.浮点型常量:表示小数 -1.2, 1.0, 12.56 ,在内存中存储方式特殊。有误差。浮点型和0比较  float x =0;   不可以 x == 0
    4.字符型常量: 'a', '1', '\0', ascii表
    5.指针常量:指向某一个位置的常量(以后重点)
    6.字符串常量: 多个字符用双引号串一起 “abc”

 三、2进制计算
    1.进制关系
    十进制: 用0到9表示,满10进1,9+1=10,99+1=100 ,100-1 =99
    二进制:用0和1表示:满2进1,借1当2. 10 -1 = 1; 1 + 1 = 10
    十六进制:用0到9和ABCDEF表示,满16进1, 9 +1=0XA   F+1=0X10
    八进制:用0到7表示,满8进1,借1当8 ;7+1=10;7-1=6 ;77+1=100
  
    2.二进制计算
    移位运算:算数左移  <  ,把左边第一个删除,右侧添加0
              10010010  < 1  =   00100100
              10010010 < 8  =  0
              10010010 < 3 = 10010000    
             算数右移: >   ,把右侧删除一个,左侧添加0  
             10010010  > 3  =   00010010

       与: & ,相同位上都是1则结果为1,否则为0. (有0则0)
           10010  & 1011                                           00010010
                                                                      &     00001011
                                 ------------------
                                                                             00000010

      或: | ,相同位上有1则结果位1,否则为0,(有1则1)案例:    10010 | 1011 = 11011

     取反:~,如果是1则取反的结果位0,如果是0则取反的结果位1,案例   ~100110 = 011001
    
   3.进制转换
    十六进制和二进制转换
     2进制转16进制:二进制的4个位,表示16进制中的1位。 案例:1000 1001 =  0x89
             案例: 11011 --> 0001 1011  =0x1B
     16进制转2进制:一个16进制位表示4个2进制位  案例: 0xA0B = 1010 0000 1011  

     十六进制和10进制转换:
     10进制     0~9  10   11  12  13  14  15   16
     16进制   0~9  A    B    C   D     E    F     0X10
    8进制和2进制的计算
    2进制转8进制,3个2进制位转换成1个8进制位
          011 011 010  --> 332
     8进制转2进制,1个8进制位转换成3个二进制位
        7024 = 111 000 010 100
    10进制转换成2进制,把10进制短除法2后直到商0后得到的余数从下往上写就是2进制
    2进制转10进制,用1 2 4 8 16   1101011 = 64+32 +  8+  2+1 = 107
oxcd   --(八) 011 001 101 --315
0x9d   --(八)010 011 101     ---235


四、变量:可以变的量,可以修改的量(64为系统)
   1、整形是   int    ,表示整数如-20, 0, 1。 总共是4字节可以用sizeof(int)打印,表示的数值范围是-21亿~+21亿
        短整形   short ,表示短整数。 总共是2字节16位,表示的数值范围是65535
        长整形   long, 表示长整数。 总共是8字节。对long类型赋值,需要在常量后加L  ,long x = 10L;
   2.  浮点型: float ,4个字节,单精度,表示6位小数,表示小数类型,1.2,-2.3,  0.0,总共多少位,给float类型复制需要加f。
                    double,8个字节,双精度,表示12位小数,总共多少位
   3.字符类型: char ,表示字符如‘a’,'b', 在内存中占1个字节。范围是0~255,sizeof(char) = 1;
            ascii:是把字符和整形对应的一个表 '0'---48 ,'A'---65,  'a'---97, ' '---32 ,  '\0'---0      
            转义字符: 和原本意思不一样了。 \n ---换行     \t----teb    \\---一个\   %%---表示一个%   \"  ----表示双引号
   4.字符串类型:没有对应变类型,“aa”,char* p = "asdfgasdg";
    5.每个类型都分为有符号和无符号
       正数是无符号,负数是有符号,如果只想表示正数则用无符号。关键字     unsigned   
       例如:unsigned int  x = 123;
    补充: 1字节 = 8位
               1KB = 1024B
               1MB = 1024KB
               1GB = 1024MB
               1TB = 1024GB
               1EB = 1024TB
五、输入和输出  加上#include<stdio.h>
       1.在屏幕上输出,printf
        格式: printf("照常输出部分 占位符 ",变量);
        格式: printf("照常输出 %d %c\n",变量1,变量2);
                  printf("int = %10d \nfloat = %10.5f\n",x,z);
        占位符:  %d      --------打印int整形的值 ,%10d 总共显示10位,不够的部分用空格替换,右对齐
                        %o(字母o) 打印8进制
                        %x------------打印16进制
                        %hd   --------打印short的值
                        %ld   ---------打印long的值
                        %u    ---------打印无符号数据的值
                        %c  --------- 打印字符类型
                         %f   --------- 单浮点型,%5.3f总共5位,小数点占3位。
                        %lf   --------- 双精度浮点型
                         %s  ----------字符串 
                        %p ------------指针
                       

           2.输入  scanf
           格式: scanf("占位符",&变量);
                      scanf("占位符,占位符",&变量1,&变量2);如果是逗号,则输入的时候也要用逗号隔开
                      scanf("占位符 占位符",&变量1,&变量2);如果是空格,输入的时候也是空格隔开
         练习:输入年龄和姓名(姓名用一个字符表示),把输入的内容打印出来。(代码day01/04test.c)

五、运算符
     1.算数运算符
          + 加法     计算两个数的和,例如 int a = 10 ;int b = 20; a + b ,其中a和b的值不变,a+b得到的是a和b的结果。如果a修改需要赋值
           - 减法    同上
            *乘法   同上
           /  除法  整除,所有的小数部分丢弃。 12/21 = 0   12 / 4 = 3; 12/5=2
           %  取模,余数,得到相除后的余数  12%21=12 ,12%4 = 0; 12%5=2 ,值1%值2把结果限定在值2范围内,123%5=3
     
   2.赋值运算符
      格式: 左值= 右值; 把右值给到左值
      复合赋值运算符:+=  ,*= ,-=,/= ; %=; |= ; &=; >>=;<<= (算数运算符,二进制运算符)     
      例如: int x = 10;  int y = 20;   y *=x+2; 等价于 y = y*(x+2);是240
      注意: 左值不可以是常量  ,只可以是变量。不可以有其他的运算。

   3.关系运算符
       关系运算符的结果只有两个,真或者假,非0为真,0表示假。
       >   如果左值大于右值,结果为真,否则为假
       >= 如果左值大于或者等于右值,结果为真
       <    如果左值小于右值结果为真
       <=  如果左值小于等于右值,结果为真
        ==  如果左值和右值相同则结果为真,否则为假
       !=    如果左值和右值不相同则结果为真
       注意:一般情况用于判断语句,比如说if语句中。
                在比较运算符==时候,需要把常量放前面,以防出现赋值运算符
                关系运算符连用是不正确的,例如:10 < time < 15

   4.逻辑运算符:(双目)
     && : 表达式左值和右值都为真则结果为真,否则为假 。&表示按位与
        ||   :表达式左值或者右值有一个为真则结果为真。|表示安位或。
        ! :逻辑非,如果表达式为真则结果为假, !(2>6)
     注意:&&有截取功能,如果第一个表达式(左值)为假,右侧的值不计算。
               || 也有截取功能,如果第一个表达式为真,则第二个表达式不会计算。
     案例1:请输入你的年龄,和金钱。如果年龄小于18岁,并且钱大于10000,则是高富帅,否则为屌丝。(代码day01/gaofushuai.c)
     练习2:输入三个数,请判断哪个值最大,打印出最大值。

   5.自增自减运算符 (单目)
      前加加:++x; 表示x= x+1;是先自己加1后再做其他事情
      后加加:x++; 表示x = x+1;是先计算完其他操作再自己加1(暂时理解遇到分号加1)
      前减减:--x:
      后减减:x--:表示x = x-1;是先计算完其他操作再自己减1(暂时理解遇
  到分号减一)
 
  6.三目运算符 (运算符有三个值)
   格式: 表达式1 ? 表达式2:表达式3
   执行:如果表达1为真则执行表达式2,如果表达式1为假则执行表达式3.
   三目运算符可以代替简单的if语句使用。并且三目运算符可以嵌套使用。

  7.运算符的优先级
  优先级:先计算的运算符优先级高,否则优先级低
  优先级顺序:括号-->单目-->算术运算符-->移位运算符-->关系运算符-->位运算符-->逻辑运算符-->三目运算符-->赋值运算符-->逗号运算符。

六、分支语句
   1.if分支语句
     if格式:
      if(条件判断)
      {
         语句1
      }
     else
     {
       语句2
     }
   2.执行:如果条件1满足则执行语句1,不满足执行语句2;
   3.格式2:
          if(条件判断1){
                语句1;
          }
          else if(条件判断2)  {
              语句2;
         }
         else  {
              语句3;
          }
    执行: 先判断条件1是否满足,如果满足则执行语句1后结束if语句,如果条件1不满足继续判断条件2,如果条件2满足则执行语句2,否则执行语句3;
    注意:有if不一定有else if和else 但有else必定有if ,有else if也必定有if。
    练习: 判断某一个数是不是回文:12321  22222,32123 (day01/10same.c)

自学部分 getc putc, gets  puts getchar putchar sprintf sscanf的使用(了解)
getc 指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
getchar()--从控制台输入字符
 putchar()--输出字符到控制台
 gets()--从控制台获得字符串
 puts()--输出字符串到控制台
 sscanf()--从字符串读取数据
     sprintf()--数据输出到字符串
     strlen()  计算字符串长度
     strcpy()  字符串拷贝
     strcat()  字符串拼接
     strcmp()  字符串比较
自学部分: 浮点类型在计算机中怎么存储的,存储格式是什么样子,double类型呢?(画图讲明白)9点罗鸣之给大家讲解作业
作业1:判断水仙花数,三个数的立方和等于水仙花数本身。

    /*        
    //水仙花计算
    int a,b,c;
    int num,i;
    for(i=100;i<1000;i++)
    {
        a=i/100;
        b=i%100/10;
        c=i%10;
        num=(a*a*a)+(b*b*b)+(c*c*c);
        if(num==i)
        {
            printf("水仙花有:%d\n",i);
        }
    
    }
*/


/*


作业2:请使用三目运算符的嵌套,比较三个数中的最大值是多少。

   //三目运算符 三位数比大小
    int a,b,c,d;
    printf("请输入三个数来判断大小:");
    scanf("%d%d%d",&a,&b,&c);
    d=a>b?(a>c?a:c):(b>c?b:c);
    printf("最大的值为:%d\n",d);
*/    

作业3:选做题--从键盘上输入一个字母存入变量中,然后转换大小写后打印出来,例如输入A则屏幕上输出a,如果输入A屏幕上输出a

    
    /*
    ///大小写的转换
    char a;
    printf("请输入一个字符变量:");
    scanf("%c",&a);
    if(a>65 && a<90)
    {
        a=a+32;
    }
    else
    {
        a=a-32;
    }
    printf("转换之后的字符:%c\n",a);
    */


 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值