评论

收藏

[C++] C语言复习20210726

编程语言 编程语言 发布于:2021-07-27 10:05 | 阅读数:240 | 评论:0

ps:在上一篇的基础上添加笔记
C语言学习笔记
哔哩哔哩:https://www.bilibili.com/video/BV1oi4y1g7CF?p=2&spm_id_from=pageDriver
C语言基础

什么是C语言
C语言是人与机器交互的语言,是一门面向过程的计算机编程语言。

C语言主函数main基本构成
//包含头文件stdio.h
//standard input/output 标准输入输出include <stdio.h>
int main(void)//主程序-程序的入口-main函数有且仅有一个
{
//程序操作代码
//函数printf - print function - 打印函数
printf("hello world!\n");
return 0;
}
//int 是整型的意思
//main前面的int表示main函数调用返回一个整型值
数据类型
数据类型数据类型名打印方式数据长度/字节int整型%d4short短整型%d2long长整型%d4long long更长整型%d8char字符类型%c1float单精度浮点型%f4double双精度浮点型%lf8

  • char   字符数据类型
#include <stdio.h>
int main()
{
char ch = 'A';//申请一个char类型的空间存放‘A’
printf("%c,ch");//打印字符A %c-打印单个字符格式的数据
return 0;
}

  • int       整型
#include <stdio.h>
int main()
{
int age = 20;
printf("%d",age);//打印整形数据 %d
return 0;
}
short  短整型=short int
long    长整型=long int
long long  更长的整型=long long int
和整型差不多用法只是内存空间的差别
int main()
{
short age = 20;
//long age = 20;
//long long age = 20;
printf("%d",age);//打印整型都是用%d
return 0;
}

  • float 单精度浮点型
单精度浮点型默认显示小数点后6位小数
int main()
{
float f = 0.5;
printf("%f",f);
}
*当用%.nf时,小数点.+数字n就是设置打印数值的小数点后n位,且n值小于数值小数位时,自动四舍五入
int main(void)
{
float f = 5.155;
printf("%.2f\n", f);//%f-打印float
return 0;
}


  • double 双精度浮点型
//与单精度浮点型float的差别就是 double用%lf打印数据,用法相同
int main(void)
{
double f = 5.154;
printf("%.2lf\n",f);
return 0;
}
ps:其它不同类型数据的打印方式
%p  --  以地址的形式打印
%x  -- 打印16进制
%s  -- 打印字符串

常量、变量
常量--不会变的量,比如圆周率近似值3.14
变量--会变的量,比如年龄、岁数等
​       变量又分为局部变量、全局变量。
​       局部变量和全局变量可以同时存在,建议局部变量和全局变量的名字不要相同,容易产生误会,产生bug。如果存在局部变量和全局变量同名的情况,优先使用局部变量。
#include <stdio.h>
int num = 20;//全局变量-定义在代码块之外的变量
int main()
{
int num = 10;//局部变量-定义在代码块内的变量
return 0;
}

  • 变量的使用
    变量加 +
    //VS2019出现scanf函数用不了时,需要宏定义下面这句
    //加在源文件的第一行
    //或者把scanf函数改成scanf_s()
    //原因是scanf函数没有做空间越界的判断,所以被认为不安全
    //scanf是C语言提供的
    //scanf_s不是标准C语言提供的,是VS编译器提供的define _CRT_SECURE_NO_WARNINGS 1include <stdio.h>
    int main(void)
    {
    int num1 = 0;
    int num2 = 0;
    int sum = 0;//C语言语法规定,变量要定义在当前代码块的最前面
    scanf("%d%d", &num1, &num2);//&为取地址符
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
    }
  • 变量的作用域和生命周期
    *每一对{}大括号就是一个代码块,当变量处于一个{}内时,这个{}大括号就是变量的作用域。
    局部变量的作用域是变量所在的局部范围。
    全局变量的作用域是整个工程。
    int main()
    {
    //局部变量的作用域
    {
    int num = 0;
    printf("num = %d\n",num);
    }
    return 0;
    }
    include <stdio.h>
    //全局变量的作用域
    //1.局部变量的作用域是变量所在的局部范围。
    //2.全局变量的作用域是整个工程。
    int global = 2021;
void test()
{
printf("test() = %d\d",global);
}
int main()
{
test();
ptintf("%d\n",global);
return 0;
}
<p> <code>`c
//test2.cdefine _CRT_SECURE_NO_WARNINGS 1
int g_val = 2021;
int main()
{
return 0;
}
//test.cdefine _CRT_SECURE_NO_WARNINGSinclude <stdio.h>
int main(void)
{
//为声明的标识符
//声明:在使用外部全局变量时需要在函数内声明该变量
extern int g_val;
printf("g_val = %d\n", g_val);
return 0;
}

  • 生命周期 (跟作用域差不多)
    变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。(只认大括号里的)
    局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
    全局变量的生命周期是:整个程序的生命周期。
  • 常量=不变的量

    • 字面常量
      int main()
      {
      int num = 4;
      3;//字面常量
      100;//字面常量
      return 0;
      }
    • const修饰的常变量
      int main()
      {
      //const = 常属性
      //加了const的变量不可修改
      //num是一个具有常数属性的变量
      const int num = 6;
      printf("%d\n",num);
      num = 8;
      printf("%d\n",num);
      return 0;
      }
      int main()
      {
      //这里的n是变量不可放入数组
      //consts int n = 10;也不可以因为这里加了const的n还是一个变量,只是具有常数属性
      int n = 10;
      int arr[n] = {0};//数组长度不可定义为变量
      }
    • #define定义的标识符常量
      #include <stdio.h>
      define NUM 100
      int main()
      {
      int arr[NUM] = {0};//这里NUM就为100
      return 0 ;
      }
    • 枚举常量enum
      枚举:一一列举
      //性别:男、女、..
      //三原色:红、蓝、绿
      //星期:周一、二、......
      enum Sex
      {
      MALE,//0
      FEMALE,//1
      SECRET//2
      };//枚举常量-是有值的,且默认按顺序为1、2、3、...
      enum Color
      {
      RED,
      BLUE,
      GREEN
      };
      int main()
      {
      //enum Sex s = FEMALE;//通过函数定义了的枚举常量类型是可以改的
      enum Color c = BLUE;
      c = GREEN;
      printf("%d\n",MALE);//0
      printf("%d\n",FEMALE);//1
      printf("%d\n",SECRET);//2
      return 0 ;
      }


字符串、转义字符、注释

  • 字符串
    “hello world \n”
    双引号括起来的即为字符串字面值-简称字符串
    注:字符串的结束标志是一个\0的转义字符
    int main()
    {
    char arr1[] = "abc";//"abc"--'a','b','c','\0'
    char arr2[] = {'a','b','c',0};//不加结束符\0打印出乱码
    printf("%s\n",arr1);
    printf("%s\n",arr2);
    return 0 ;
    }
    #include <stdio.h>include <string.h>
    int main()
    {
    char arr1[] = "abc";
    char arr2[] = {'a','b','c'};
    char arr3[] = {'a','b','c','\0'};
    printf("%d\n",strlen(arr1));//3
    printf("%d\n",strlen(arr2));//15,随机值
    printf("%d\n",strlen(arr3));//3
    return 0;
    }
    ASCII码(百度都有)
  • 转义字符:用\改变某些字符的常规意思
    \n -- 把普通字符n的意思变成换行了
    int main()
    {
    printf("c:\test\32\test.c");
    //\t -- 水平制表符
    //\t 转义字符算一个字符大小
    //\32 -- 32是2个八进制数字
    //32作为8进制代表的那个十进制数字,作为ASCII码值,对应的字符
    //32(8进制) --> 10进制 26 --> 作为ASCII码代表的字符
    return 0;
    }
    int main()
    {
    //当要打印一串“are you ok??”时,得加转义字符\把??单独转义
    printf("(are you ok\?\?)\n");
    }
    转义字符(\后加任何东西都算一个字节大小)释义\?在书写连续多个问号时使用,防止他们被解析成三字母词\ '用于表示字符常量‘\ "用于表示一个字符串内部的双引号\\用于表示一个反斜杠,防止它被解释为一个转义序列符\a警告字符,蜂鸣\b退格符\f禁止符\n换行\r回车\t水平制表符\v垂直制表符\dddddd表示1-3个八进制的数字。如:\130 X\xdddd表示2个十六进制数字。如:\x30 0
    //   \xdd
    //  61(十六进制) --> 97(十进制)  'a'
    int main()
    {
    printf("%c\n",'\x61');
    return 0 ;
    }
  • 注释

    • 代码中有不需要的代码可以直接删除,也可以注释掉
    • 代码中有些代码比较难懂,可以加一下注释文字
    比如://注释掉单行代码
    ​            /**/ 注释掉多行代码
    C语言风格的注释 / xxxxxxxxx /
    ​    缺陷:不支持嵌套注释
    C++风格的注释  / xxxxxxxx /
    ​    可以注释一行也可以注释多行


选择语句
//if语句
int main()
{
int coding = 0;
printf("你会去敲代码吗?(选择1 or 0):>\n");
scanf("%d",&coding);
if(coding == 1)
 {
    printf("坚持,你会有好offer!");
  }
  else
  {
    printf("放弃,功亏一篑...");
  }
  return 0 ;
}
循环语句
//while语句
int main()
{
int line = 0;
printf("写一行代码 %d\n",line);
while(line<20000)
 {
    line++;
    printf("写满20000行代码  %d\n",line);
  }
  if(line&lt;20000)
  {
    printf("keep going!");
  }
  if(line&gt;=20000)
  {
    printf("successed~");
  }
  return 0 ;
}
函数
函数包括:自定义函数,库函数等等
//自定义函数
int Add(int x,int y)
{
int z ;
z = x+y ;
return z;//返回值z为int整型,所以函数应该是int Add()
}
int main()
{
int num1 = 10;
int num2 = 20;
int sum = 0;
int a = 100;
int b = 200;
//sum = num1 + num2;
sum = Add(num1,num2);
//sum = a+b;
sum = Add(a,b);
printf("sum = %d\n",sum);
return 0 ;
}
数组
int main()
{
//int a = 1;
//int b = 2;
//int c = 3;
//int d = 4;
//int e = 5;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//数组下标从0开始,即arr[0] = 1;
char ch[20];
while(1)
 {
    printf("%d\n",arr[i]);
    i++;
  }
  return 0 ;
}数组内一个元素大小为4字节
​   int arr[] = {1,2,3,4,5,6};
​   该数组内有6个元素,即数组大小为24字节
​   sizeof(arr)  =  24;
PS:  sizeof 和strlen 的用法区别
​   sizeof 和 strlen 这两个函数都可以用来计算大小,但又存在差别,sizeof计算该量的占用内存的大小,strlen计算字符串的长度。sizeof可以用于计算数组大小、字符串大小,而strlen不能用于计算数组大小。
当这两个函数同时用于计算字符串时,由于sizeof计算字符串时,字符串后会加上结束符\0所以相同的字符数量的字符串,用sizeof计算的会多1。

操作符

  • 算数操作符
  • 移位操作符
    << 左移操作符 : 乘2       >>右移操作符:除2
  • 位操作符
    &  按位与  (×)全1才1
    |   按位或   (+)有1就1
    ^   按位异或   同0异1
  • 赋值操作符
    =
    +=
    -=
    =
    /=
    &=
    |=
    ^=
    单目操作符
    !  逻辑反操作
    -:负值
    +:正值(可省略)
    &:取地址
    sizeof:操作数的类型长度、变量长度(以字节为单位)
    ~:对一个数的二进制按位取反
    --:<u>前置--:先--再赋值</u>、<u>后置--:先赋值再--</u>
    ++:<u>前置++:先++再使用</u>、<u>后置++:先使用再++(使用==赋值)</u>
    //前置++ :先赋值再自增++
    //a先赋值给b -- b = 10
    //a再自增 -- a = a+1 -- a = 11;
    int main()
    {
    int a = 10;
    int b = 0;
    b = ++a;
    printf("a = %d\n",a);
    printf("b = %d\n",b);
    return 0 ;
    }
    //后置++ : 先自增再赋值
    //a先自增 -- a = a+1 -- a = 11
    //a再赋值给b -- b = 11
    int main()
    {
    int a = 10;
    int b = 0;
    b = a++;
    printf("a = %d\n",a);
    printf("b = %d\n",b);
    return 0 ;
    }
    :间接访问操作符
    (类型):强制类型转换
    int a = (int)3.14 ;

关注下面的标签,发现更多相似文章