C语言初阶(1) -- 初识C语言

   日期:2024-12-23     作者:caijiyuan       评论:0    移动:http://w.yusign.com/mobile/news/1565.html
核心提示:转义字符转义字符 释义 ? 在书写连续多个问号时使用,防止他们被解析成三字母词 ' 用于表示字符常量' “ 用于表示
转义字符 转义字符 释义
?
在书写连续多个问号时使用,防止他们被解析成三字母词
'
用于表示字符常量'
用于表示一个字符串内部的双引号
\
用于表示一个反斜杠,防止它被解释为一个转义序列符。
a
警告字符,蜂鸣
b
退格符
f
进纸符
换行
回车
水平制表符
v
垂直制表符
ddd
ddd表示1~3个八进制的数字。 如 130 X
xdd
dd表示2个十六进制数字。 如 x30 0

后面两个转义符代码演示

 
  

练一道笔试题

 
  

答案:14

分析: 算一个字符, 62算一个字符, 所以一共有14个字符。

5.3 注  释

1. 代码中有不需要的代码可以直接删除,也可以注释掉
2. 代码中有些代码比较难懂,可以加一下注释文字
 
   
注释有两种风格
  • C语言风格的注释
  • 缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx
  • 可以注释一行也可以注释多行
1.顺序结构

        顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行

2.选择结构

        顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用选择结构。选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。

         如果你好好学习,校招时拿一个好offer ,走上人生巅峰。
        如果你不学习,毕业等于失业,回家卖红薯。
        这就是选择
 
  
        //scanf 是C语言提供的一个输入函数
        //& - 取地址
        //stdio 标准输入输出头文件

        循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误。

        特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变,否则就可能成了一个死循环,这是初学者的一个常见错误。

        三个循环的异同点:用while和do…while循环时,循环变量的初始化的操作应在循环体之前,而for循环一般在语句1中进行的; while循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。

有些事必须一直做,比如我日复一日的工作,比如大家,日复一日的学习。
C 语言中如何实现循环呢
while 语句 - 讲解
for 语句
do ... while 语句
 
   

定义函数

       C程序是由一组变量或是函数的外部对象组成的。 函数是一个自我包含的完成一定相关功能的执行代码段。我们可以把函数看成一个“黑盒子”,你只要将数据送进去就能得到结果,而函数内部究竟是如何工作的,外部程序是不知道的。外部程序所知道的仅限于输入给函数什么以及函数输出什么。函数提供了编制程序的手段,使之容易读、写、理解、排除错误、修改和维护。

返回类型 函数名(函数形式参数

 例: int   Add   (int x, int  y)

 
  
上述代码,写成函数如下
 
   

函数的特点就是简化代码,代码复用。

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

arr[10] 数组中的10,表示要存储10个int类型的元素,当然不写也可以,程序会自动分配。

9.2 数组的下标

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

9.3 数组的使用

 
  
       比较特别的是比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。
        因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符=)和逗号运算符。
10.1 算术操作符
+    -     *    (得整数部分)   %(取模,得余数
 
     

10.2 移位操作符

>>      <<
10.3 位操作符
&     ^     |
10.4 赋值操作符
=   +=   -=   *=   /=   &=   ^ =    |=      >>=     <<=
a += 3   等同于   a = a + 3;
10.5 单目操作符
    ! 
逻辑反操作    - 负值    +正值&  取地址sizeof  操作数的类型长度(以字节为单位   ~   对一个数的二进制按位取反   --   前置、后置-- ++ 前置、后置++ *  
间接访问操作符 ( 解引用操作符 )
(类型)  强制类型转换
在C语言中0代表假,非0代表真。
1. 关于!的介绍
 
   

2.sizeof 的使用介绍

 
   

sizeof 也可用来统计数组的大小。

3. ++,-- 的使用

--的用法和++,同样的用法。

先说后置++,eg : a++, 后置++的原则:先使用,后++

 
   

前置++, eg : ++a, 前置++遵循一个原则:先++,后使用 

 
   

4. 强制类型转换

 
   

10.6 关系操作符

>
>=
<
<=
!=        用于测试 不相等
==       用于测试 相等

10.7 逻辑操作符
&&           逻辑与/并且
||              逻辑或/或者

10.8 条件操作符
exp1   ?   exp2   :   exp3
代码示例
 
    
分析:如果a>b(exp1)成立,则a(exp2)是对的,那么b(exp3)是错的,因此整个表达式就是exp2的结果,因为a=10,所以表达式的结果就是10,所以输出c=10。
但是这里显然b(exp3)是对的,又因为b=20,所以c=20,所以输出最大值为20.
10.9 逗号表达式
exp1 , exp2 , exp3 , …expN
逗号表达式就是用逗号隔开的一串表达式。
逗号表达式的特点是:从左向右以此计算,整个表达式的结果是最后一个表达式的结果。
 
   
10.10 下标引用、函数调用和结构成员
[]   ()   .    ->
下标引用
 
      
函数调用
 
      

  • 关键字又称为保留字,就是已被C语言本身使用,不能作其它用途使用的字。例如关键字不能用作变量名、函数名等标识符由ISO标准定义的C语言关键字共32个
  • auto | double | int | struct | break | else | long | switch  case | enum | register | typedef | char |  extern | return | union  const | float | short | unsigned | continue | for | signed | voiddefault | goto | sizeof | volatile | do | if | while | static | inlinerestrict _Bool _Complex _Imaginary _Generic
auto   break  case  char  const continue  defaultdodoubleelseenumexternfloat forgoto     ifint longregister  returnshort signedsizeof  staticstruct  switchtypedef unionunsigned  voidvolatile  while
  • 基本数据类型void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增
  • char:字符型类型数据,属于整型数据的一种。(K&R时期引入
  • int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入
  • float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入
  • double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入
  • _Bool:布尔型(C99标准新增
  • _Complex:复数的基本类型(C99标准新增
  • _Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增
  • _Generic:提供重载的接口入口(C11标准新增
  • 类型修饰关键字short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入
  • long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入
  • long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增
  • signed:修饰整型数据,有符号数据类型。(C89标准新增
  • unsigned:修饰整型数据,无符号数据类型。(K&R时期引入
  • restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增
  • 复杂类型关键字struct:结构体声明。(K&R时期引入
  • union:联合体声明。(K&R时期引入
  • enum:枚举声明。(C89标准新增
  • typedef:声明类型别名。(K&R时期引入
  • sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入
  • inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增
  • 存储级别关键字auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配。与static相反。当变量未指定时默认为auto。(K&R时期引入
  • static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。(K&R时期引入
  • register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。(K&R时期引入
  • extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(K&R时期引入
  • const:指定变量不可被当前线程改变(但有可能被系统或其他线程改变)。(C89标准新增
  • volatile:指定变量的值有可能会被系统或其他线程改变,强制编译器每次从内存中取得该变量的值,阻止编译器把该变量优化成寄存器变量。(C89标准新增

流程控制关键字

  • 跳转结构return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。(K&R时期引入
  • continue:结束当前循环,开始下一轮循环。(K&R时期引入
  • break:跳出当前循环或switch结构。(K&R时期引入
  • goto:无条件跳转语句。(K&R时期引入
  • 分支结构if:条件语句,后面不需要放分号。(K&R时期引入
  • else:条件语句否定分支(与if连用)。(K&R时期引入
  • switch:开关语句(多重分支语句)。(K&R时期引入
  • case:开关语句中的分支标记,与switch连用。(K&R时期引入
  • default:开关语句中的“其他”分支,可选。(K&R时期引入

编译

  • #define预编译宏#if 表达式 #else if 表达式 #else #endif条件编译#ifdef 宏 #else #endif 条件编译#ifndef 宏 #else #endif 条件编译与条件编译

11.1 关键字typedef

          typedef 顾名思义是类型定义,这里应该理解为类型重命名。
比如
 
   

11.2 关键字static

在C语言中: 
static是用来修饰变量和函数的
  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
  3. 修饰函数-称为静态函数

11.2.1 static 修饰局部变量

 
   

输出

分析:上面说过变量的生命周期从进入作用域开始创建,到出作用域销毁。

在第一遍调用test函数时,n这个变量从{开始创建,打印}出作用域开始销毁,然后中间n++,所以最终打印出来n=2,这个时候test函数调用完成,此时已经没有n这个东西了,因为已经销毁了,然后第二遍调用testh函数,然后从头开始创建n变量并赋值n=1,然后打印n=2,然后销毁n变量,所以最终打印效果:2 2 2 2 2 2 2 2 2 2.

下面时使用static关键词,来修饰局部变量

 
   
对比代码 1 和代码 2 的效果理解 static 修饰局部变量的意义。
结论
        static修饰局部变量改变了变量的生命周期
        让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

总结:static修饰局部变量的时候,局部变量出了作用域,局部变量不会被销毁。

本质上,static修饰局部变量的时候,改变了变量的存储位置。

内存时一块比较大的存储空间,在使用内存是会划分不同的功能区域。

在学习编程语言的时候,栈区、堆区、静态区。

变量被staic修饰后,此变量就从栈区移动到了静态区,但代码这里n直接就是在静态区了,不存在转换,这里只是特殊说明一下,所以说static修饰局部变量的时候,改变了变量的存储位置。

11.2.2 修饰全局变量

 
   
代码 1 正常,代码 2 在编译的时候会出现连接性错误。
结论
          一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

test.c ------------------------------------------> test.exe

            编译   --    链接    --    运行

  1. 一个全局变量在整个工程的其他文件内部能被使用,是因为全局变量具有(外部连接)属性.
  2. 当一个全局变量被 static 修饰的时候,这个变量的外部链接属性就变成了内部链接属性。
  3. 使得这个全局变量只能在自己所在的源文件内部使用,其他文件不能使用。 

         给我们的感觉是作用域变小了

11.2.3 修饰函数

 
   

结论

        一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

剩余关键字后续课程中陆续会讲解。
        
 
   
13.1 内存
        内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地
变量是创建内存中的(在内存中分配空间的,每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下
 
    
& - 取地址操作符
&a,取出的是所占4个字节空间的第一个字节的地址(地址小的那一个字节)。
那地址如何存储,需要定义指针变量。
 
    
指针的使用实例
 
     

以整形指针举例,可以推广到其他类型,如
 
    

13.2 指针变量的大小

 
    
结论 指针大小在32位平台是4个字节,64位平台是8个字节
结构体是 C 语言中特别重要的知识点,结构体使得 C 语言有能力描述 复杂类型。
比如描述学生,学生包含 名字+年龄+性别+学号 这几项信息。因为学生是需要这几个信息同时包含的,属于复杂对象,所以用char, short, int, long...等数据类型不能够单一去表示。所以为了解决相应的问题,C语言就给自定义类型的能力就是结构体。
结构体就是把一些单一类型组合在一起。
这里只能使用结构体来描述了。
例如
 
   
结构体的初始化
 
    

14.1 用结构体类型来创建一个变量,并打印信息。

我们知道创建一个变量很简单,都是数据类型+变量名, 比如

 
   

那同样上面的struct Stu 结构体也是个类型,然后他也能创建变量struct Stu s,这个s就是变量,可以发现struct Stu{...}int 的效果一样,只不过int 是解决单一变量问题的,而struct Stu解决复杂变量问题的,所以说struct Stu{...}int 一样是不占空间的,只有当struct Stu s动作发生,创建出来的s变量才占用一点空间。

那要如何使用变量呢

 
   

14.2 能不能用指针去实现打印信息的效果。

代码如下

 
   

15 【普及】关键字register - 寄存器

由于CPU处理数据速度非常之快,以至于内存赶不上CPU的速度,所以当处理数据时,内存中的数据向上一级存放,于是就放到高速缓存、寄存器里面。

那进入整体,在写代码时我们也可以写出寄存器变量

 
     
   

当把'3' 数据存放在寄存器里面了,这样在读取此数据时会更快,但是需要注意一点,这里只是建议存放,那到底最后是否存放在寄存器里面时编译器说了算。

(1)C语言是一门通用计算机编程语言,广泛应用于底层开发。那么什么叫做底层开发呢

         一般我们所购买的电脑都是硬件设备,需要在电脑上安装操作系统,比如windows / Linux / macos等,但是操作系统并不是直接控制电脑硬件,而是通过中间层-- - 驱动(各种驱动软件,来间接操控硬件设备。在操作系统安装完成后,如果我们需要丰富多彩的体验和功能,就需要安装应用软件,比如社交聊天用的QQ、微信、网络资源管理和共享的云盘网盘、娱乐放松的电脑游戏,这些都存在与应用层。通常我们将应用层往下称为底层。
(2)常见文件后缀.c-- - 源文件 (c语言格式source).h-- - 头文件(head).cpp-- - 源文件(c++格式).exe-- - 可执行程序
(3)一个工程中有且仅能有一个main函数(主函数,一个工程中可以有多个.c源文件,多个.h头文件,但是多个.c文件中有且仅能有一个main函数。分析理解:main函数是整个工程程序执行的入口,如果出现了多个main函数,那么程序就不知道该从哪个入口进去,不知道执行哪个main函数,就会出错
(4)变量的声明和定义、函数的声明和定义可以放到main函数外面,但是执行类的语句不能放到main函数外面
例如:全局变量a的声明和定义可以放到main函数外面,但是打印a的值这条执行语句不能放到main函数外面。

再补充
C语言-格式输入输出中“%d,%o,%x,%e,%f等的含义

格式说明由“%”和格式字符组成%d%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。不同类型的数据用不同的格式字符。 

格式字符有d,o,x,u,c,s,f,e,g等。 

如下所示

%d - 整型输出%ld - 长整型输出

%o - 以八进制数形式输出整数

%x - 以十六进制数形式输出整数

%u - 以十进制数输出unsigned型数据(无符号数)。

%c - 用来输出一个字符

%s - 用来输出一个字符串

%f - 用来输出实数,以小数形式输出(备注:浮点数是不能定义如的精度的,所以“%6.2f”这种写法是“错误的”

%e - 以指数形式输出实数

%g - 根据大小自动选f格式或e格式,且不输出无意义的零。

scanf(控制字符,地址列表)

格式字符的含义同printf函数,地址列表是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。如scanf("%d%c%s",&a,&b,str)

以下是运算符的优先级表

()、 []、 -> 、 .、!、 ++、 --圆括号、方括号、指针、成员、逻辑非、自加、自减++ 、 -- 、 * 、 & 、 ~ 、!单目运算符+、 - 、 sizeof、(cast)* 、 / 、%算术运算符+ 、 -算术运算符<< 、 >>位运算符< 、 <= 、 > 、 >=关系运算符== 、!=关系运算符号&位与^位异或|位或&&逻辑与||逻辑或? 、:条件运算符/= 、%= 、 &= 、 |= 、 ^=赋值运算符= 、 += 、 -= 、 *= 、,顺序运算符
     本文地址:http://w.yusign.com/news/1565.html    述古往 http://w.yusign.com/static/ , 查看更多
 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
资讯
点击排行
{