标准c程序设计学习(1)

感谢老师的教导,这份笔记是老师所讲的,再加上一些本人的见解,因为是初学者,知道的只是概念,请各位大神多多指导,力求做个最为详细的记录,本篇大幅度引用上课笔记,同时此为本人的第一篇博客,之后会不断地完善和改进。

文章目录

  • 标准c程序设计学习(1)
    • 学习C语言
    • C语言学习纲要:
      • C语言的优势:
    • C语言中的基本数据类型:
    • 进制:
    • 转义字符:
    • 编码:
    • printf :格式化输出 :按照想要的格式输出
    • 变量:
      • 1、变量的定义 声明
        • 标识符规则:
      • 2、变量的初始化(赋值)
      • 3.变量的操作
      • 4.变量的作用域
        • (1)、局部变量
      • 5.变量的生命周期
      • 6.变量的存储位置
    • C语言的语法规则::
      • 左值(lvalue):
      • 右值(rvalue):
    • 操作符(运算符)
      • 1.算术运算符
        • 注意:
      • 2.自增减运算符
        • 注:
      • 3.关系运算符 比较运算符
      • 4.逻辑运算符
        • 短路特性:
      • 5.位运算符
        • 推论:
      • 6.赋值运算符
        • 运算符的优先级:
      • 7.三目运算符
      • 8.sizeof
  • 9.其它

学习C语言

​ 学的不只是一种技术,更是一种思想,它能够培养我们的计算思维,提高我们的分析问题和解决问题的能力
​ C语言是提供问题解决的一种工具。
​ 只有懂得程序设计,才能进一步懂得计算机,真正了解计算机是怎么工作的

C语言学习纲要:

​ 1、C语言概述,学习方法,开发环境的搭建,常量与变量;
​ 2、数据类型,数据类型转换,数据的输出与输入;
​ 3、C语言运算符,C语言操作符;
​ 4、C语言表达式,表达式优先级;
​ 5、C语言流程控制,分支,顺序,循环逻辑控制;
​ 6、函数概述及引用,简单递归,简单嵌套,C语言调用函数示例
​ 7、数组,二维数组,高维数组,详细案例;
​ 8、指针,指针与地址,指针与数组;
​ 9、指针与字符串,指针与函数,多重指针;
​ 10、结构体,共用体,枚举,typedef;
​ 11、宏定义,预编译,文本包含,条件编译;
​ 12、内存分析,作用域,生存期,可见域;
​ 13、高级指针
​ 14、文件

C语言的优势:

​ C语言功能丰富,表达能力强,使用灵活方便。
​ C语言是一种既高级又低级的程序设计语言,
​ 高级是指它具有高级程序设计语言的所有特征,
​ 低级是指它可以代替机器语言或汇编语言编写高速运行的软件程序
而本报告的实验是在Ubuntu上通过命令行来运行的

32位和64位的区别:
32根数据总线 i386 32位 操作系统 对应32位软件
64根数据总线 x64 64位 操作系统 对应64位软件但软件 和 操作系统有 向下兼容 的特性
因而通常32/64位皆可

C语言中的基本数据类型:

 字符类型charASCII码整数短整型   short整型     int长整型   long 长长整型 long long浮点数单精度浮点类型双精度浮点类型无符号的数据类型unsignedsigned内存的最小的内存单位是: 字节(Byte)1Byte = 8Bit(比特,二进制位)1T = 1024G1G = 1024MB1MB = 1024KB1KB = 1024B  BYTE


字符类型 char 1字节 [-27 ~27-1] [-128,127]
无符号字符类型 unsigned char 1字节 [0,28-1] [0,255]
短整数类型 short 2字节 [-215 ,215-1] [-32768,32767]
unsigned short [0,27-1] [0,65533]
short int
unsigned short int
整数类型 int 4字节 [-231, 231 -1]
unsigned int [0,232 -1]
长整数类型 long int 4字节/8字节
long
unsigned long int
注意:在不同的操作系统和平台上,long int字节数是不确定的
windows i386 x64 —> 4
linux i386 —> 4
linux x64 —> 8

 长长整数类型       long long int   8字节单精度浮点类型     float           4字节           +-3.4*10^38双精度浮点类型     double          8字节           +-1.78*10^308单精度浮点类型的取值范围的研究:单精度浮点类型        4个字节  32位二进制大小(1个符号位  8个指数位  23个尾数位)首位为符号位,不计数 1为负数,0为正数八位指数位取值(-2^7,2^7-1)即(-128,127)二十三位位数为1.xxxxx……*2^??  通常首位都为1.某,因而二十三位都可记为小数点后的值则小数点后取最大为 (1-2^(-23)),则单精度浮点类型最大值为(1+(1-2^(-23))*2^127)即:2^128-2^105 ≈   +-3.4*10^38精度(有效数字)主要看尾数位:float的尾数位是23bit,而2^23是8388608,有7位所以小数点后6~7位但是小数点后五位肯定是精确的(6~7可能有进位)同理双精度浮点类型      8字节 64位(1个符号位  11个指数位  52个尾数位)首位为符号位,不计数   1为负数,0为正数八位指数位取值(-2^10,2^10-1)即(-1024,1023)则小数点后取最大为 (1-2^(-52)),则单精度浮点类型最大值为(1+(1-2^(-52))*2^1023)即:2^1024-2^971 ≈ +-1.78*10^308精度范围 小数点后 15-16位后14位肯定是精确的C语言浮点类型的错误显示3f  //错误形式      必须是小数才能加fe18    //错误形式      科学计数法前面必须要有数值3.1e3.2        //错误形式      //科学技术的指数不能为小数

进制:

​ 二进制: 每一位都是0或者1 C语言中不能直接表示二进制
​ 十进制: 每一位都是0-9任意一个数字
​ 八进制: 每一位都是0-7任意一个数字 0开头 054
​ 十六进制: 0-9或者a-f A-F 0x/0X 0x34af

 十进制 转 二进制  的图示方法 354    --->   除2求余的 方式1024  512  256   128   64   32  16   8    4    2    1354        98-64 34-32 0     0     1    0     1    1   0    0    0    1    0

转义字符:

 空白‘\n'     换行'\r'        回车'\t'        水平制表符’\v‘       垂直制表符           ’\a’        响铃'\b'        退格'\0'        NUL     字符串的结束标识'\\'      表示反斜杠字符         ‘\表示转义字符'\f'      换页'\060'      ‘0’     \0八进制'\x41'       'A'       \x十六进制

编码:

gbk  utf-8   unicode(万国码)utf-8 中文汉字    2-4个字节gbk       中午汉字    2个字节            65536把一个整数赋值给char类型变量,只会把整数最低8个二进制(最低一个字节)数据赋值给char变量char如果要以%d %u的格式输出 进行扩展 补最高位(符号位)char变量赋值给 int/unsigned 扩展位 补符号位
unsigned char如果要以%d %u的格式输出 进行扩展    补0  unsigned char 变量赋值给 int/unsigned 扩展位 是0

printf :格式化输出 :按照想要的格式输出

​ %c char
​ %d int
​ %u unsigned
​ %hd short
​ %hu unsigned short
​ %ld long int
​ %lu unsigned long int
​ %f float
​ %lf double
​ %g float/double 不显示多余的0
​ %e 科学计数的形式显示浮点数
​ %E
​ %o 八进制
​ %x 十六进制
​ %p 地址格式显示
​ %s 字符串
​ %% 输出一个% %是格式点位符的开始

变量:

1、变量的定义 声明

​ 变量只有定义之后 才能使用
​ 在同一个作用域下变量不能重复定义
​ 一条语句中可以定义多个变量,变量之间用逗号隔开即可

​ 数据类型 变量一,变量二…………

​ 数据类型 变量名;
​ 变量名 称为 标识符

标识符规则:

​ 1、由字母、数字、_字符 组成
​ 2、不能以数字开头
​ 3、不能和关键字冲突

2、变量的初始化(赋值)

​ 局部变量定义之后如果不初始化,这个变量里面保存的是垃圾值(随机值)

​ 定义变量的本质: 其实是程序分配了一块内存,通过变量名可以操作该内存区域的值
​ 所以在编程的过程中,如果不确定该变量需要保存什么数据,一般初始化为0
​ 通过赋值就是使变量保存所要的数据

3.变量的操作

4.变量的作用域

(1)、局部变量

我们最先是在main函数内部定义了一些变量并使用它们
int main(int argc, char *argv[])
{
int a,b,sum;
a = 123;
b = 456;
sum = a + b;
printf(“sum is %d\n”,sum);
return 0;
}
若将int a,b,sum;放到main前,则为全局声明,在函数外面声明的变量称为全局变量,则在整个源程序文件范围有效
在函数范围内声明的变量是局部变量,只在函数范围内有效。

5.变量的生命周期

6.变量的存储位置

C语言的语法规则::

​ 1、所有的标识符 只能是 英文字符 代码中不能出现中文字符(除非用“”引入)
​ 2、语句以;结尾
​ 3、一般一行放一条语句
​ 4、语句块是以{} 为边界
​ 5、用缩进来表示语句块
​ 6、用空行和空格来保持书写优美
​ 7、标识符遵循 驼峰式 下划线的 命名方式
​ 驼峰式:首字母小写,后面其他单词首字母大写,其余小写
​ int age;
​ int studentAge
​ 下划线:单词之间用 _ 连接
​ 见名知意
​ 见名知类型
​ 单纯的英文单词为名或者直接用拼音

8、保持一种编程风格

  1. 注释
    注释的内容不会被编译 更不会被执行
    //单行注释
    /*
    多行注释
    多行注释不能嵌套
    */
    写项目过程中必须要有注释 越详细越好

    不能删代码
    //注释就行了

左值(lvalue):

可以被修改的值称为左值 可以放在=左边的

​ 变量

右值(rvalue):

不可以被修改的值 不能放在=左边的值称为右值
字符常量 整数常量 浮点常量
表达式 a+b +a ++a

操作符(运算符)

1.算术运算符

+  -  *   /   %
+  算术加   (正数)   333 + +322;  int + int  结果是 int 类型例如:21 0000 0000 + 21 0000 0000;自动识别long,但是两者之和,溢出,为long long int。注意数据溢出
-  算术减   (负数)
*  算术乘
/  算术除对于int类型来说 整除   int/int 结果只会是  intfloat f = 10/4;        2.00除数不能为0  但允许是0.0
%  取余运算符取余两边的操作数必须都是 整数 (不可以是浮点数)任何数据不能对0取余(%右边不能为0)

注意:

1.整数字面值如果是[-231,231 -1] 默认是int类型
int类型数据运算时得到的结果是int类型
2.不同的数据类型进行运算
低字节的数可以隐式转换成高字节的数据
对于有符号的数扩充 符号位
对于无符号的数扩充 0
3.unsigned 和 signed类型数据进行运算时 把 signed 数据转换为 unsigned
(//划重点 考试时 一定是 考这个知识点)
int a = -16;
unsigned int b = 10;
if(a+b>=0){// 恒成立的 int+unsigned 结果为 unsigned

}

2.自增减运算符

本质上算术运算符

​ ++ –
​ 自增减运算符的操作数必须是左值
​ 操作数可以是任意类型,但一般都用于整数类型

注:

​ 不要在同一个表达式中对同一个变量进行多次+±-

​ 不要在调用函数时对实参进行+±-

前加加 ++a
b = ++a; 本质上等于: a=a+1; b=a;
操作数先自增,然后再拿自增之后的结果计算表达式
后加加 a++
b = a++; 本质上等于: b=a;a=a+1;
先计算表达式的结果,然后操作数自增

如果是++a; a++;这样两个表达式没有区别的,甚至a++会被编译器优化成++a;
+++a; ++++a; 错误的
+a; ++a;
a+++b;//错误的
a + ++b; //正确的 三个加号 必须有空格
+ ++a;//正确

注意:不要在同一个表达式中对同一个操作数进行多次自增减运算不同的编译器或者操作平台会有不同的解释

前减减
–a
后减减
a–

3.关系运算符 比较运算符

​ < <= > >= == !=
​ 关系运算符的结果只有两个 0 或者 1 代表 不成立(假) 或者 成立(真)
​ 在C语言中,一个=是赋值语句,两个=才是判断是否相等(比较运算符)
​ if(0==a){//避免写成 a=0而引发错误 0=a直接编译报错

 }if(a=0){//编译不会报错  运行时该分支永远执行不到  }
关系运算符如果出现在同一个表达式中,从左往右计算每一个关系运算符的结果
int a = 5;
int f = 1<a<3; //恒为1  1<a 要么是0, 要么是1     [0,1] < 2

4.逻辑运算符

​ 逻辑是一个数学概念
​ 真假命题 真为1 假为0 true false(c89中没有true和false)
​ 但是在<stdbool.h> 里用 宏定义了 true 和 false 本质上就是1和0
​ 逻辑运算符用于连接多个逻辑值 或者 关系表达式的,最终表达式的结果为1或者0
​ && || !

if(1<a && a<5) 才是表示  a在(1,5)区间
&&   逻辑与a    b    a&&b1    1     11  0     00    1     00    0     0||   逻辑或a    b    a&&b1    1    11    0    10    1    10    0    0
!    逻辑非a   !a1    00    1C语言中表示假:
逻辑假: 0   0.0000  ‘\0'   NULL0   0.0000        '\0'        NULL 除以上任何值都表示真1   3.14   'a'      0x3    '\r'

短路特性:

&&连接的两个表达式,如果&&前面的表达式的结果为假,则后面的表达式不再计算
||连接的两个表达式,如果||前面的表达式的结果为真,则后面的表达式不再计算
因为 假&&X 真||X 无论X的结果如何都与最终结果无关,为了效率干脆不算
&&优先级高于||
int a = 0,b = 0,c = 0;
int x = ++a>0||b++>0&&++c>0;
相当于 x = ++a>0||(b++>0&&++c>0)
a = 0,b = 0,c = 0;
x = a++>0&&++b>0||++c>0;
相当于 x = (a++>0&&++b>0)||++c>0

5.位运算符

(适用于整数char,short,int,long) 不适用于浮点类型

​ & | ^ ~ >> <<
​ 位运算符是指对数据按二进制位进行运算
​ & 按位与
​ 如果有二进制 0 和1
​ 1&0 = 0
​ 1&1 = 1
​ 0&1 = 0
​ 0&0 = 0

推论:

​ ~num = -(num+1)
​ 负数在计算机内存中是以补码形式存在, 等于其正数按位取反+1

6.赋值运算符

​ =
​ 混合赋值运算符
​ += -= *= /= %= &= |= ^= >>= <<=
​ 混合赋值运算符 除了= 剩下的那个运算符必须是双目运算(有两个操作数)
​ a = b; 等同于 a = ab;
​ a = 10;b = 10;
​ a = b += 20;

运算符的优先级:

​ 算术运算符 > 位运算符(~除外)
​ 算术运算符 > 关系运算符 > 逻辑运算符

7.三目运算符

​ ?:
​ expr?expr1:expr2
​ expr结果如果为真则取expr1的值,否则为expr2的值

8.sizeof

​ sizeof是操作符,不是函数
​ sizeof求变量或者类型或者表达式结果所占内存的字节大小

sizeof()  误认为是函数
char  short  int  long(4/8)  long long  float  double
注意:1. sizeof是操作符,不是函数2. sizeof如果操作数是类型一定得加上()   3. sizeof只关心表达式结果类型,并不会计算表达式4. sizeof('a')   4char c = 'a';sizeof(c)     1sizeof(c+'a') 4'a' + 'a' ===> 结果类型为 int 5. sizeof(expr) expr是一个多类型表达式时,只关系最宽的字节类型6. sizeof(函数名)   函数名没有小括号    始终为 17. sizeof(函数名()) 函数名有小括号   结果等于 函数数返回值类型的字节宽度8. sizeof(指针)   结果为 4 指针 == 内存地址

9.其它

​ [] *(取值) & . -> ,
​ , 逗号运算符 分隔一条语句中的多个表达式,多个表达式都会从左往右逐一计算
​ int a,b
​ int a=0,b=0,c=0;
​ c = (++a,b++,a+b);
​ a+=1,b=a+3;
​ .结构体 或者 联合 成员访问运算符
​ [] 数组下标访问运算符
* 指针取值 运算符
& 变量取址 运算符

1、所有的数据都是有字节宽度大小的    在赋值在运算过程中   都可以发生变化
2、隐式类型转化char -- > int --> long --> double float --> doubleshort--> intsigned --> unsigned1、所有的数据都是有字节宽度大小的    在赋值在运算过程中   都可以发生变化
2、隐式类型转化char -- > int --> long --> double float --> doubleshort--> intsigned --> unsigned

c程序设计总结,第一周相关推荐

  1. 20175317 《Java程序设计》第一周学习总结

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

  2. 20172318 2016-2017-2 《Java程序设计》第一周学习总结

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

  3. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  4. 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

    20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...

  5. # 2019-2020.3 《java程序设计》第一周学习总结

    2019-2020-3 <Java 程序设计>第一周学习总结 在本周的学习中,学习到了好多也收获了好多,从最基础的安装虚拟机开始,根据老师的博客中的教程一步一步的进行,在这过程中也遇到了好 ...

  6. 20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第一周学习总结 教材学习内容总结 -第一章Java入门要点: -Java的地位:具有面向对象,与平台无关,安全稳定和多线 ...

  7. 20165203 2017-2018-2 《Java程序设计》第一周学习总结

    20165203 2017-2018-2<Java程序设计>第一周学习总结 教材学习内容总结 (一)Java的地位 Java是面向对象编程,并涉及网络.多线程等重要的基础知识,是一门很好的 ...

  8. 20175221 2018-2019-2 《Java程序设计》第一周学习总结

    20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...

  9. 2014025650《嵌入式程序设计》第一周学习总结

    2014025650<嵌入式程序设计>第一周学习总结 教材学习总结 本周开始上嵌入式程序设计课,在开始学习的时候,老师带领我们复习一下Linux操作系统的一些命令操作符. 教材学习中的问题 ...

  10. 20155229 2016-2007-2 《Java程序设计》第一周学习总结

    20155229 2016-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 1~18章的提问: 第一章:怎样撰写Java才不会沦于死背API文件.使用"复制. ...

最新文章

  1. oracle 开链,欧链OracleChain开启Dapps应用新时代
  2. C# 读取网页源码的三种办法WebClient、WebRequest、HttpWebRequest
  3. 14.查看信息深入讲解
  4. 电话号码的字母组合Python解法
  5. java g1 gc ref proc_深入理解垃圾收集器的G1及日志分析
  6. mysql linux设置密码_Linux下第一次使用MySQL数据库,设置密码
  7. java成绩前五名的代码_一个 JAVA 程序,实现输出考试成绩的前三名
  8. SpringCloud Config详解
  9. 今天react开发遇到个比较恶心的问题
  10. 【WEB服务器】什么是WEB服务器
  11. IBUS-WARNING **: 09:23:08.407: The owner of /home/cl/.config/ibus/bus is not root!
  12. 什么是二进制,进制之间是如何转换的,浅显易懂的,一看就会
  13. 计算机网络的组成和主要功能,计算机网络的组成与功能
  14. 孩子学python_小孩子的内心世界
  15. Unity用Animation组件制作简单的动画
  16. 企业简介和公司介绍快闪PPT模板
  17. Python图片批量自动抠图去背景
  18. Linux数据库管理与应用
  19. 【编程练习】3*3 的矩阵,值限定为1-9不重复,已知横竖的和,和一个斜着的值,求这个矩阵
  20. Oracle的基本练习:登陆、查看连接、管理登陆用户、修改进程数

热门文章

  1. 手把手 教你把H5页面打造成windows 客户端exe 软件
  2. 软件工程实验二:测试
  3. 浏览器急速模式跟兼容模式导致网站显示不同的问题
  4. echarts 地图去除点击事件_echarts 取消图例上的点击事件和图表上鼠标滑过点击事件...
  5. vs配置freeglut+glew
  6. 《张量》的另一种理解
  7. linux如何查看磁盘碎片,如何整理Linux磁盘碎片,竟与Windows的方式大不同
  8. Pycharm中对sqlite数据库的可视化操作——详细步骤一目了然
  9. HEVC学习之CTU划分
  10. 在 Heroku 部署 PHP,部署在 Heroku 云