C语言学习笔记(1

编程入门 行业动态 更新时间:2024-10-27 06:18:23

C语言<a href=https://www.elefans.com/category/jswz/34/1770117.html style=学习笔记(1"/>

C语言学习笔记(1

目录

一.初识

·计算机如何解决问题?

·计算机思维——程序的执行

·C语言用在哪里?

·编译->运行

·程序框架

二.常变量、IO及表达式

·输入输出

·变量

·常量

·赋值和初始化

·浮点数

·表达式

 ·交换变量(略)

·复合赋值和递增递减

三.判断

 ·判断的条件

·嵌套的判断

·级联的if-else if

·if常见错误

 ·switch-case语句

四.循环

·while循环

·do-while循环

·for循环

·判断素数

·break 和 continue

 ·输出整数

·最大公约数

五.数据类型

·C语言的类型

·区别

 ·sizeof()

·整数的范围

 ·整数的输入输出

·浮点类型

·字符类型

​编辑

·逃逸字符

·自动类型转换

 ·强制类型转换

·逻辑类型--bool

·逻辑运算

 ·条件运算符

·逗号

六.函数

·什么是函数?

·函数的定义

七.数组

·定义数组

·特点

·下标范围

·数组的集成初始化

·数组的大小

·数组的赋值

·二维数组

八.指针

九.字符串

十.结构类型

十一.全局变量,宏,头文件

十二.IO

十三.链表


一.初识C语言

·计算机如何解决问题?

  人:what to do

  计算机:How to do

  计算机是按照一步一步的步骤实现,而程序就是用编程语言告诉计算机如何做 

   算法:找出计算的步骤然后用编程语言写出来

·计算机思维——程序的执行

      计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。有两种转换方式:

  ·解释:是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低,如:Python

  ·编译:在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。C、C++、Objective等

(参考:编译型语言和解释型语言的区别? - Tsingke - 博客园 (cnblogs))

·C语言用在哪里?

操作系统

嵌入式系统

驱动程序

底层驱动

图形引擎、图像处理、声音效果

·编译->运行

   编译器 MinGW Cygwin(gcc/cc/g++)

   C语言需要编译才能运行,所以需要编辑器+编译器;或者IDE(集成开发环境)

·程序框架

到函数之前,所有的c程序都需要这一个框架

#include<stdio.h>int main(){return 0;
}

二.常变量、IO及表达式

·输入输出

printf

scanf

输入和输出同在终端,输入是以行为单位进行的,按下回车代表行结束。在按下回车前程序不会读到任何东西。

·变量

    保存数据的地方

类型名称  变量名称

int prince;

标识符

     字母 数字 下划线(不能以数字开头)

关键字(保留字) 

·常量

比如10,100

或者const int a=100;不能再被修改

·赋值和初始化

a=b 表示b的值赋值给a

int a=1初始化

·浮点数

带小数点的数值。(还有一种表示小数的,叫定点数,但是在c语言中看不到)

对于整数运算,结果也只能是整数 。当浮点数和整数放到一起运算时,c会将整数转换成浮点数,然后进行浮点数的运算。(翁恺 p15 2.1.6)

  • float单精度浮点数

          输入输出均用%f

  • double双精度浮点数

          输入用%lf输出用%f

·表达式

  • 运算符+算子
  • 运算符     + - * /  %(取余)
  • 算子        参与运算的值

·交换变量(略)

·复合赋值和递增递减

 复合赋值 +=  -=  /= *=

 递增递减  只能是在变量上 -- ++

                  注意:a++是先使用后加1,a++的值是a;

                             a--是先加1后使用,值是a+1

  最好不要组合到表达式中

三.判断

 if 语句

if(条件成立){.....
}else{.....
}

 ·判断的条件

      ·计算两个值的关系(关系运算)

   关系运算的结果  只能是0(不成立)或1(成立)

   所有的关系运算符的优先级比算术运算符都低,但比赋值高

·嵌套的判断

else 总是和最近的if配对

代码的缩进也不能暗示代码的配对

所以:在if和else后面总是用{}

·级联的if-else if

if(exp1){...}
else if(exp2){...
}
else{...}

·if常见错误

  • 忘记大括号
  • if后面加了分号
  • 错误使用==和=

 ·switch-case语句

switch( 控制表达式 ){case 1: .....;//可以添加break;case 2: .....;.....default: .....;}

控制表达式只能是int型,常数可以是常数也可以是常数计算表达式(1+1)。

考虑使用break语句,并且使用单一出口。

四.循环

·while循环

while(判断条件){循环体;}

·do-while循环

do
{循环体语句;}whlie(循环条件);

先进入循环再检查条件

·for循环

for(初始条件;判断;完成一次后做的)
{循环体
}

·判断素数

  int a;scanf("%d",&a);int isPrime = 1;for(int i = 2;i<a;i++){if(a % i == 0 ){isPrime = 0;break;}}if(isPrime == 1) printf("%d是素数",a);else printf("%d不是素数",a);return 0;

·break 和 continue

break 跳出循环

continue 跳过循环这一轮剩下的语句 进入下一轮循环

注:都只能对他所在的那一层循环做

要想跳出多层循环:

或者:goto语句

 ·输出整数

逆序

方法一

   每个数字依次输出

  int a,b;scanf("%d",&a);int t = 0;do{b = a%10;t = t*10 + b;a /= 10;}while(a>0);printf("%d",t);return 0;

方法二

可以排除末尾为0的情况,一次输出

  int a,b;scanf("%d",&a);while(a>0){b = a % 10;printf("%d ",b);a /= 10;}return 0;

正序

先算出整数的位数n,然后依次整除10^(n-1)输出

  int a;scanf("%d",&a);int copy = a;//计算位数int cnt = 0 ;while(copy>0){cnt++;copy /= 10;}printf("%d\n",cnt);//正序输出int b;for(int i = 1;i<=cnt;i++){int j = pow(10,cnt-i);b = a/j;printf("%d ",b);a %= j;}return 0;

·最大公约数

一.枚举(略)

二.辗转相除法

 

  

五.数据类型

    C是有类型的语言,变量在使用前必须:

    在使用前定义;并且确定类型。 

·C语言的类型

  • 整数

              char     1字节(8比特)

              short     2字节

              int         取决于CPU 通常一个字 4字节

              long      取决于CPU 通常一个字

              long long   8字节

  • 浮点数

             float      4字节

             double   8字节

             long double

  • 逻辑

             bool      1字节

  • 指针
  • 自定义类型

·区别

 ·sizeof()

       输出所占的字节

·整数的范围

数的范围

(最高位为符号位)

 整数的范围

 ·整数的输入输出

%d 和 %ld

%u 和 %lu

·浮点类型

              输入        输出

float       %f            %f 或%e(科学计数法)

double   %lf            %f或%e

%g:小数点右侧的尾数0不被显示;显示小数点仅当输出的小数部分不为0。

输出精度

    在%和f之间加上.n可以指定输出小数点后几位,这样做是四舍五入的

超过范围的浮点数

        printf输出inf表示超过范围的浮点数(无穷)

        printf输出nan表示不存在的浮点数

·字符类型

  char c = 1;char d = '1';if( c == d){printf("相等\n");}else{printf("不相等\n");}return 0;>>>不相等

整数和字符不相等

·逃逸字符

   用来表达无法印出来的控制字符和特殊字符,以\开头和另外一个字符组合

·自动类型转换

printf的时候 小于int的会自动转换成int;float会转换成double

而scanf的时候不会

 ·强制类型转换

(类型)值

一般是把一个量强制转换成另外一个类型(通常是较小的类型),要注意安全性

如(int)10.2  (short)32

他并不会改变变量,无论是值还是类型,只是计算出了一个新的类型的值

例如:将一个字符转换成ASCII码,可以强制类型转换成int

·逻辑类型--bool

要声明头文件 #include<stdbool.h>

      bool b = 6>5;

不过结果还是0或者1,实际上还是整型

·逻辑运算

 优先级   !>  &&> ||

·优先级

 ·条件运算符

count = (count >20)? count - 10 : count+10;

优先级仅高于赋值语句

·逗号

仅在for中使用

         for(i=1,j=2;....)

六.函数

·什么是函数?

函数是一块代码,接收零个或多个参数,做一件事情并返回零个或一个值。

·函数的定义

·函数的调用

     函数名(参数)

  • 参数要给出正确的结构,数量和顺序,即使没有参数也要加()
  • 如果调用的值和参数类型不匹配是c语言的漏洞,编译器会将类型转换好。但是可能不是预期的结果

从函数中返回值

  • return作用:停止函数的执行,并返回一个值
  • 一个函数可以出现多个return,不过不符合单一变量原则
return;return 表达式;

没有返回值的函数

  • void表示空类型的函数不需要返回,其他所有的函数都需要return来返回值
  • 不能使用带值的return
  • 不能将函数返回值进行赋值

区别:void可以直接进行输出(printf),但函数执行完成后不能再进行其他的操作;

           其他的可以将返回值返回给函数,然后可以进行赋值等后续操作

函数的原型声明

       程序是自上而下读取的的,如果函数在主函数后面就要声明。

函数原型:函数头,以分号结尾就构成了函数原型。

                 作用就是告诉编译器函数长什么样子(名称,参数,返回类型)

传过去的是什么?

        c语言在调用函数时,永远只能传递值

  • 因为每一个函数都有自己的变量空间,参数也位于这个空间,和其他函数无关
  • 形参 实参

本地变量

 

  •      函数的每一次运行,产生自己的变量空间。参数也位于这个空间,和其他函数无关。
  •      定义在函数内部的变量就是本地变量,参数也是

生存期和作用域 

       大括号内--块

规则

其他细节

  • 当没有参数的时候尽量在括号里面写void,否则可能会报错
  • C语言不允许函数的嵌套定义
  • 不要在return中加括号  return(i);
  • int main()也是一个函数,return 0;有意义。

七.数组

·定义数组

类型  变量名称[元素数量];

·特点

· 所有的元素具有相同的数据类型;

· 一旦创建 不能改变大小

· 元素在内存中连续依次排列的

·下标范围

     [ 0 , 数组的大小-1 ]

·数组的集成初始化

int a[ ]  = {1,2,3,5,6,3,4,5};  //此时编译器会计算数组大小

int a[10]  = {1};   //此时只有a [0]是1,其余全为0

int a[10]  = {0};   //全为0

集成初始化时的定位

       int a[10]  = { [0] = 1, [2]  = 3 , 4  };

·数组的大小

sizeof(a)表示数组整个所占的字节

sizeof(a [ 0 ])表示单个元素字节

则数组的大小 = sizeof(a)/ sizeof(a [ 0 ])

·数组的赋值

·数组变量不能被赋值

·要把一个数 组的所有元素交给另外一个数组,必须采用遍历

·二维数组

int a[i] [j];

       通常理解为a是一个i行j列的矩阵

初始化和一维数组类似

    int a[] [5]  = { {1,2,3,4,5},{1,2,3,5,6}}   //可以没有行数,必须要有列数

八.指针

九.字符串

十.结构类型

十一.全局变量,宏,头文件

十二.IO

十三.链表

更多推荐

C语言学习笔记(1

本文发布于:2024-03-10 02:45:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1726809.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!