C语言基础

学语言:逻辑,基本算法,基本数据结构

学c基础不是目的,就个开端

没有最好的语言,只有最合适的

C语言简介

  • 计算机:(电脑)
    - 电脑执行需要运行程序,执行程序都是由程序员进行编写。
    - 人与计算机交互:机器码:
    - 二进制数:计算机识别的最基础的语言。0 1码
    - 纸带:交互能力太差
    - 利用计算机语言:B语言–》unix(操作系统)
    - 一定的编程语法
    - 缺点B语言:可读性,可维护性太差
  • C语言之父(unix):
    • 肯.汤普逊和丹尼斯.里奇
    • 自己写了C语言–

程序结构

- 基本结构- 预处理指令,函数,变量,语句&表达式,注释
- 注释:- 单行注释://注释内容- 多行注释:/*注释内容*/- 注释的用途:1.表明函数或者代码用意  2.版本说名等有用信息
- 打印函数:结果的输出
- 库/包- #include <stdio.h>  面粉- 提供基础的接口(基础应用)
- 主函数(main函数)- 注意;每一个C语言工程中有且只能有一个main()函数- main函数是我们程序的入口
- C语言中有严格的大小写区分
- int数据类型
#include <stdio.h> //预处理,帮助你加载已有包/库
#include <stdlib.h> int main()
{// 注释:注释在程序执行是不参加工作 帮你标注你的代码//第一个c语言程序/*多行注释qwerdf*/printf("Hello world!\n");//打印函数。return 0;
}
  • c语言各个令牌的组成,令牌可以是关键字,标识符,常量,变量。字符串或者一个符号
  • 分号的意义:
    • 意义重大。每一行代码的结束,都是由分号结果,如果每一行代码末尾没有分号,程序会报错
      #代码规范
  • 错落有致
  • 函数体内定义变量时,要将定义过程函数体中最顶端。

C语言标识符

  • 概念:

    • 标识符是用来标识变量,函数,或者其他的自定义项目名称。一个标识符以字符A-Z或者a-z或下划线开始,然后跟零个或者多个字母,下划线数字(0-9)
    • 注意标识符不能以除字符下划线以外的的字符作为开头,不能以数字开头,否则程序会把他认为是一个数据,不是一个标识符。
    • 注意:在进行函数命名或者变量命名或文件命名时不要以数字作为开头

数据类型

序号 数据类型 描述
1 基本数据类型 算术数据类型(整数类型和浮点类型)
2 枚举数据类型 常用来被定义程序中只能赋予其一定的离散整数型的数值
3 void数据类型 缺省型
4 派生数据类型 指针

整数类型:

整形(关键字) 字节数(bytes) 范围值
short 2字节 -3万~3万
long 4字节 -215次方-215
int 2字节(32位操作系统)/4字(64位操作系统) 。。
char(带符号) 1字节 -128~127/ 0~255
unsigned char(无符号类型) 1 0-255
unsigned int(无符号类型) 2字节/4字节
unsigned long(无符号类型) 4字节
unsigned short(无符号类型) 2字节 0~4294967295

浮点型

类型 存储大小 精度 整数位个数 小数位个数
float(单精度浮点) 4字节 小数据点后6位 8位 23位
double(双精度浮点) 8字节 小数点后15位 11位 52位
long double 16字节 小数点后19位
#include <stdio.h>//预处理 加入库/包
#include <float.h>int main()
{//主函数,程序运行的入口,花括号中的内容为函数体//声明变量——变量的声明/定义要放在函数体的最顶端float i;printf("float max size = %d\n",sizeof(float));//输出float类型的最大字节数printf("float max value = %E\n",FLT_MAX);//%E 以指数形式输出单,双精度实数。printf("float min value = %E\n",FLT_MIN);printf("float 精度:%d\n",FLT_DIG);//输出float数据类型 %fprintf("float  %f",i);
}
  • 注意:
    - float:
    - 数据类型当小数点后第七位有数据值时符合四舍五入的原则讲数据整合到第六位进行输出。

          - 如果float后只是一个整数时,输出结果会讲其精度进行补全
    

缺省型void

  • 概念:void是指没有确定的或者可指向的值

  • 一般有以下三种情况

    1. 函数返回为空。C语言中各个函数都拥有返回值,如果说不具有返回回值时,函数名使用void进行修饰。
    2. 函数的参数为空,c语言当中各函数接收任何参数,你就可以在函数的参数列表中写入void
    3. 指针指向void:执行的类型为void* 表达的时对象的地址,而不是类型。***内存管理

二进制数据

二进制数据:

  • 概念:

    • 最基本的机器语言是二进制码。—》机器是不是由一堆电路和电子元器件。

    • 二进制码机器是如何识别的?机器对于输入输出(信号):电信号(逻辑电平)—》有电/没电 0 1

    • 二进制对比十进制:(短除法)

      二进制 十进制
      0 0
      1 1
      10 2
      100 4
      1000 8
      1100 12
      1 0010 18

      二进制到十进制:

      二进制数 十进制数
      10000 16
      11100 1x4+1x23+1x22+0x21+0x2^0 28

      计算机都是按位运算存储的。

变量

  • 变量其实就是程序员在编码过程中器起的一个名字,名字的作用就是帮助程序员进行识别和使用。
  • 定义内存,并且给内存进行命名
  • 变量:
    • 1.数据类型
    • 2.变量名
      • 注意:变量名的命名规则

        • 1.符合标识符的规则:变量不能以数据开头和除下划线,字母这样的
        • 2.不能使用已有关键字。错误例子:char int;//会报错
        • 3.尽量不要和已有函数名重复。
  • char i; i = 10;
  • 变量的使用:
    • 1.变量的声明-注意变量在不声明是无法使用,也就说变量想要使用必须进行声明。
    • 2.变量的定义,也可以叫变量的初始化。
  • C语言是一种编译型语言,面向过程开发的,编译型就是指程序只有全部的代码都正确才会输出结果,
  • 在变量声明时,其实就是将变量和某一个内存相关连,而没有经过初始化的变量也就是说你这个变量表示的内存没有经过初始化,然后会将内存中原有的指直接输出,这个输出得结果时不一定的。
//引入头文件/包
#include <stdio.h>int main()  //主函数
{//1.变量的声明  数据类型(空格)变量名;(最后以分号结尾)int i;//整数数据类类型 i;short a;//char b;//整数类型中的字符型数据 b;float c;//单精度浮点型数据int d;//做一个定义int j;//j只做声明不做定义直接将其输出//我们的 i ,a ,b ,c其实在计算眼中就是在给内存起名字,方便于直观进行内存的数据存放和管理//变量在声明时就可给它一个初始值,将其定义/*多行注释注意大家在编码时要以分号结尾*///2.变量的定义,实际实在给变量进行赋值i = 10;a = 233;b = 'L';//字符的写法都是由char 类型定义 字符的表示方法就是英文状态下单引号中写。切记char 只是单字符c = 80.233;//变量在使用前必须声明。可以不进行定义但是必须进行声明d = 100;printf("i = %d\n",i);//%d针对整型数据输出的printf("a = %d\n",a);//printf("b = %c\n",b);//%c是单个字符输出使用使用的printf("c = %f\n",c);//%f是输出浮点数时使用printf("j = %d\n",j);//j直接输出没有经过定义}

赋值操作

  i = 10;//正确的读法为:将10赋给变量i//注意在赋值操作中一般分为左值和右值。切记左值不能为 常量

常量

  • 概念:常量就是指固定值,在程序的执行期间这个值时不会改边的,又称为字面量
  • 常量可以时10进制,可以是八进制,可以是16进制, 0x开头的就代表时16进制,0开头的代表为8进制,不带前缀的就是默认的10进制数
  • 整数常量
212 //十进制数
215U //U代表无法号整数-unsigned
21L //代表的长整数
0x001// 16进制数
020// 8进制数
  • 浮点数常量
10.2 //浮点数产量
  • 字符常量

    转义字符 \ 含义
    " "
    \t 制表符:多个空格
    \n 换行符
    \r 回车
    \v 垂直制表符
  • 字符串

    • 概念:在C语言中由字符数组组成的称为字符串
    • ‘a’ —> 字符a
    • “hello world” —>就是由多个字符构成的。
    • 注意:字符串使用双引号包含的。

如何定义常量

#define 常量名 常量值

  • 注意:经过#define操作之后 变量名 就代表了一个常量,在之后的程序中不可以将这个变量名作为左值进行赋值操作。 不能#define的末尾添加分号
  • 左值就是在赋值操作时(a=b)中的a的位置就是左值
//常量举例#include <stdio.h>
//常量的定义方法#define  value  20 //注意没有分号 value 现在是一个常量
//赋值时常量不能为左值int main()
{int a;a = value;printf("a = %d \n",a);
}

运算符

算术运算符

a = 10 ,b = 2

运算符 描述 实例
+ 加法 a+b 12
- 减法 a-b 8
* 乘法 a*b 20
/ 取整除法 a/b 5
% 取余/取模除法 a%b 0
++ 自增 ++b 前加 b++后加
自减 –b 前减b-- 后减

a+=2 运行过程为a = a+2;

关系运算符

//放到将条件语句的时候给大家讲

运算符 描述 实例
== 是否相等:判断左值与右值的数值是否相同
> 是否大于
< 是否小于
>= 是否大于等于
<= 是否小于等于
!= 是否不等于

逻辑运算符

运算符 描述 实例
&& 逻辑与:A条件&&B条件,当两个都为真是结果为真,有一个条件为假时即为假AB都为真,A&&B 结果为1 ,否则A&&B,有一个假的或者都是假的结果为0 A&&B
|| 逻辑或:A || B,只有一个为真即为真,都为假才为假 A||B
!(英文状态下的!) 逻辑非:!(A&&B(假)) 就变成真的了,非真条件为假,非假条件为真 !A
#include <stdio.h>#define value 100int main()
{//主函数int i;int j;i = 10;if(i==value && i < value)//逻辑与都为真才为真 //if的条件判断就两种真或者假, 布尔值(bool)0 / 1{//执行内容printf("条件满足\n");}j = (i==value && i<value);printf("逻辑与结果为:%d\n",j);
}
#include <stdio.h>#define value 100int main()
{int i = 10;if(i>value||i<value)//这个条件中有一个为真{printf("条件满足\n");}printf("程序结束\n");
}

位运算符

运算符 描述 例子
&
|
^ 异或
>> 右移
<< 左移

赋值运算符

判断

  • 概念:判断结构要求程序指定一个或者多个测试条件,以及通过条件之后要执行的内容(内容是必须要有的,不可为空)

  • if(条件)中的条件结果为0 和非0。结果为0时代表条件为假,否则条件为真

  • if(条件)
    {满足条件的执行内容}#include <stdio.h> //基础头文件的引入#define Value 18 //这是的作用是什吗? ----》常量的定义int main()
    {//主函数int i;//变量的声明i = 18;//变量的定义,赋值操作if(i == Value)// i是否和value相等{//条件通过之后执行的内容printf("1. i和value值相等\n");}//判断体之外的语句。不受判断体的影响cprintf("2. 程序结束\n");
    }
    • 规则:如果条件满足时的执行语句只有一行代码时,可以不需要加大括号将执行内容包裹起来。如果执行内容时多行时,必须使用花括号将其包裹起来

    • #include <stdio.h>#define value 100int main()
      {int i;i = 10;//代码格式if(i == value)printf("1.i和value 相等\n");if(i >= value)printf("2.i大于等于value\n");printf("这是插入的语句\n");if(i<=value)printf("3.i小于等于value\n");if(i != value)printf("4.i不等于value\n");printf("2.程序结束\n");}
      
语句 描述
if 语句 if(条件)
if … else语句 if(条件1)else(除了条件1不满足其他的都满足)
if的嵌套式语句 if(条件1) else if(条件2)
switch语句 switch(条件) case…break…default…break
A?B:C 三元运算符,B,C都是执行语句。A是条件语句,A满住时执行B,不满足执行C
#include <stdio.h>int main()
{int age;age = 40;if(age<18)//if 。。else 条件只有两个{printf("1.年纪为%d岁不可以谈恋爱,要多学习\n",age);}else if(age>=18 && age<=25)//如何实现  10<a<20{printf("2.年纪为%d岁,正是大好年华\n",age);}else if(age>25 && age<35){printf("3.年纪为%d岁,爱情事业双丰收\n",age);}
}
#include <stdio.h>int main()
{int money;money = 30;printf("我有%d块钱,能吃:\n",money);switch(money)//money是结果 //条件{case 10://case value 注意只有条件和value 相等时才会执行printf("吃一碗面条\n");//切记需要在每一个case的执行内容中加入一个break;break;//帮助你跳出执行体  打破case 30:printf("面条加啤酒\n");break;case 40:printf("面条加啤酒加一盘小菜\n");break;case 50:printf("面条加啤酒加一盘小菜加两鸡蛋\n");break;default: //以上条件都不满足时。执行 elseprintf("以上都不满足\n");break;}printf("程序结束\n");
}
  • 注意1:switch(条件) { case 结果1 break … default …break} 只有当条件和结果相等时才执行内容。
  • 注意2:break;跳出当前内容也就是直接到最近的一个花括号尾部。打破。。

三元运算符

#include <stdio.h>
int main()
{int number;number = 11;number%2==0?printf("偶数"):printf("奇数");
}

课堂小练习:

​ eg:用三元运算符和if…else 。写出两个数值比较大小,

循环