C语言基础知识

目录

一:什么是c语言???

 1   第一个C语言程序:打印hello world

2 数据类型

(1) printf函数输出时类型表示

3 常量与变量

        (1) 定义变量的方法

       (2)  变量的分类

      (3)  局部变量和全局变量

(4) scanf输入语句

 常量的定义

 4 字符串

5 转义字符

6 注释

7 选择语句 if

(1).if(表达式)

(2).if-else语句

(3).多重if-else语句

(4).嵌套if-else语句

8  循环语句

(1) while;

(2) for循环

 9 函数

10 数组

11  操作符‘

12 常见关键字



一:什么是c语言???

可自行百度:简单

来说如下

    C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
    C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

  •  1   第一个C语言程序:打印hello world

#include<stdio.h>
int main()
{
    printf("hallo world!\n");
    return 0;
}
//#include 是预处理过程  <stdio.h> 头文件 // 函数(printf)在使用前需要声明才能使用;
//主函数main函数,它是程序的入口,一个工程中主函数(main)有且仅有一个;

        int main()
        {
           ;
        }

这是基本写法,在未来编程中,无处不在main函数;

接下来我们来看看 基础数据类型

  • 2 数据类型

char                //字符数据类型

short               //短整型

int                   //整型

long                //长整型

long long        //长长整型

float                //单精度浮点型  小数

double            //双精度浮点型  小数

定义一个数的时候 int a;此时a的数据类型为整型;类比其它也一样;

为什么出现这么多类型???

是为了更好的处理数据,去表达生活中的各种值

那,这些类型的大小是多少呢??我们可以使用sizeof函数来计算它们的大小;

 讲完数据类型 我们来看看 常量与变量

(1) printf函数输出时类型表示

”%lld"      64位

"%d"           十进制  整数

"%o"           八进制  整数

"%x"          十六进制  整数

"%u"          无符号十进制  整数

"%f/e"       实型数 小数 指数

"%c"          单个字符

"%s"          字符串

"%*"          跳过字符

"%ld"        长整型数据

"%lf"         双精度浮点数

  • 3 常量与变量

    生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)--> 常量
    有些值是可变的(比如:年龄,体重,薪资) --> 变量

         常量很容易理解;所以我们来讲讲变量

        (1) 定义变量的方法

        

int age = 150; //定义 age 为 整型 初始化为150 //值可变
float weight = 45.5; //定义 weight 为 浮点型 初始化为45.5
char ch = 'w'; //定义 ch 为 字符 初始化为w
//在编程中尽量使用英语来编写

       (2)  变量的分类

      (3)  局部变量和全局变量

#include<stdio.h>

int a = 100;//全局变量

int main ()
{
    int b = 666;//局部变量
    int a = 200;
    printf("a = %d\n",a);//思考此时输出的  a  的值是多少
    return 0;
}

//答案是200  ; 在全局变量和局部变量同名时 局部优先;

变量的使用;在你需要使用一个数时即可定义一个变量来存储这个数;、

既然前面介绍了printf输出语句这里介绍是scanf输入语句;

(4) scanf输入语句

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);//scanf 在键盘上输入数 存储到num中
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}

        变量的作用域和生命周期
        作用域
        作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的
而限定这个名字的可用性的代码范围就是这个名字的作用域。
        1. 局部变量的作用域是变量所在的局部范围。
        2. 全局变量的作用域是整个工程。
        生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
        1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
        2. 全局变量的生命周期是:整个程序的生命周期。


int b =0;//整个工程都可使用
int main()
{
    int a =0;//  a  进入main函数创建  出了main函数销毁
    return 0;
}

 常量的定义

分类 1 . 字面常量

        2 . const修饰的常变量

        3 . #define定义的标识符常量

        4 . 枚举常量

#include <stdio.h>
//举例
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};
    //括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    //字面常量演示
    3.14;    //字面常量
    1000;    //字面常量

    //const 修饰的常变量
    const float pai = 3.14f;     //这里的pai是const修饰的常变量
    pai = 5.14;    //是不能直接修改的!

    //#define的标识符常量 演示 
    #define MAX 100
    printf("max = %d\n", MAX);

    //枚举常量演示
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);

    //注:枚举常量的默认是从0开始,依次向下递增1的
    return 0;
}
  • 字符串+转义字符+注释

 4 字符串

”hallo world“这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
 

 其中arr2中没有\0所以打印时并没有在bit时停止而是继续识别bit后面的值来打印直到找到\0为止

5 转义字符

转义字符          释义

      \?             在书写连续多个问号时使用,防止他们被解析成三字母词

      \'              用于表示字符常量' 

      \“            用于表示一个字符串内部的双引号

      \\             用于表示一个反斜杠,防止它被解释为一个转义序列符。

      \a             警告字符,蜂鸣

      \b             进纸符

      \n             换行 

     \r               回车 

     \t              水平制表符 

     \v             垂直制表符 

     \ddd        ddd表示1~3个八进制的数字。 如: \130 X

     \xdd        dd表示2个十六进制数字。 如: \x30 0

 可以看见 \t   在输出时变成了   水平制表符 

6 注释

有两种风格: C语言风格的注释 /*xxxxxx*/ 缺陷:不能嵌套注释 

                            C++风格的注释 //xxxxxxxx 可以注释一行也可以注释多行

接下来,我们看看我们的选择语句 if

  • 7 选择语句 if

简单if语句的基本结构如下:

(1).if(表达式)

{

        执行代码块;

}

其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。

注意:if()后面没有分号,直接写{}

(2).if-else语句

简单的if-else语句的基本结构:

语义是: 如果表达式的值为真,则执行代码块1,否则执行代码块2。

(3).多重if-else语句

C语言中多重if-else语句,其结构如下:

语义是:依次判断表达式的值,当出现某个值为真时,则执行对应代码块,否则执行代码块n。

注意:当某一条件为真的时候,则不会向下执行该分支结构的其他语句。

(4).嵌套if-else语句

C语言中嵌套if-else语句。嵌套if-else语句的意思,就是在if-else语句中,再写if-else语句。其一般形式为:

#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    if(coding == 1)
    {
        prinf("坚持,你会有好offer\n");
    }
    else
    {
        printf("放弃,回家卖红薯\n");
    }
    return 0;
}
  • 8  循环语句

 先讲讲 while循环语句 

(1) while;

while(表达式)
{
    语句;
}

#include<stdio.h>

int main()
{

    int i = 0;
    while(i<=9)   // (  )内为循环条件 为真进入循环 为假跳出循环 
    {
    printf("为了部落");
    i++;
    }
    return 0;

}
//    i 从 0 开始;
//    i++ 每次循环 i+1 并且打印 “为了部落”;
//    直到 i= 10 时 不成立i<=9 为假 跳出循环 循环10次
  • (2) for循环

for;
for(表达式1;表达式2;表达式3)
        循环语句;
表达式 1
表达式 1 初始化部分 ,用于初始化循环变量的。
表达式 2
表达式 2 条件判断部分 ,用于判断循环时候终止。
表达式 3
表达式 3 调整部分 ,用于循环条件的调整。
#include<stdio.h>

int main()
{

    int i = 0;
    for(i=0;i<10;i++)
    {
        printf("为了部落\n");
    }
    return 0;

}
//    i 从 0 开始;
//    i++ 每次循环 i+1 并且打印 “为了部落”;
//    直到 i= 10 时 不成立i<=9 为假 跳出循环 

  •  9 函数

函数的知识甚多;这里简单介绍函数

函数分为 自定义函数(自己定义的函数) 和  库函数(c语言提供的函数)

首先我们先写一个加法代码;

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}

那么,我们如何用函数的写法来写加法;

函数 需要 类型 ,参数 和 返回值;

#include <stdio.h>
int Add(int x, int y)  // 类型为int 形参x,y 返回 z 
{
    int z = x+y;
    return z;
}
//如果一个函数不需要返回值 可以写成 void 形式
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);  //调用Add函数;计算完将 值z 赋值 给 sum;
    printf("sum = %d\n", sum);
    return 0;
}

函数的特点就是简化代码,代码复用。
在函数中我们只需调用Add函数就可以实现加法,而不使用函数每次都要写一个加法代码;

  • 10 数组

 要存储1-10的数字,怎么存储?
 C语言中给了数组的定义:一组相同类型元素的集合

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
// int 为类型 arr是数组名 []是元素个数
  •  数组的访问

 C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。

  • 数组的使用
#include <stdio.h>
int main()
{
    int i = 0;
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    for(i=0; i<10; i++)
    {
        printf("%d ", arr[i]); //从arr[0]开始访问并且输出 通过循环 访问完整个数组 遍历数组
    }
    printf("\n");
    return 0;
} 
  • 11  操作符‘

 简单介绍有哪些操作符,但不做深入讲解

算术操作符

 + 加  - 减   *  乘  /  除  %  模

移位操作符

 >>      <<   

 位操作符

&   ^    |
赋值操作符

=   +=     -=      *=      /=      &=      ^=      |=     >>=     <<=
单目操作符

!
-
+
&
sizeof
~
--
++
逻辑反操作
负值
正值
取地址
操作数的类型长度(以字节为单位)
对一个数的二进制按位取反
前置、后置--
前置、后置++

*                             间接访问操作符(解引用操作符)
(类型)                    强制类型转换

关系操作符
>
>=
<
<=
!=                 用于测试“不相等”
==                 用于测试“相等”

逻辑操作符

&&
||
逻辑与
逻辑或

条件操作符

exp1 ? exp2 : exp3


逗号表达式

exp1, exp2, exp3, …exp4


下标引用、函数调用和结构成员
[]         ()         .         ->

  • 12 常见关键字

autobreakcasecharconstcontinuedefaultdodouble elseenum
extern floatforgotoifintlongregisterreturnshortsigned
sizeofstatic structswitchtypedef unionunsignedvoidvolatilewhile