黑马程序员-C语言-基本介绍和原理

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

C语言的基本介绍和原理
--计算机语言发展史
 1)机器语言   能够被计算机识别的语言(0101001)
 2)汇编语言   最贴切硬件的语言,vs高级==低级语言,直接通过cpu的若干个寄存器进行运算。
 3)高级语言   自然语言(1+1)

 C语言特点:

 1)丰富的运算符
 2)丰富的数据类型
 3)可以直接操作硬件
 4)高效的目标代码
 5)可移植性好
C语言重写了UNIX操作系统,Linux继承了UNIX,所以最里面的东西有C语言、在C语言中,以函数为基本单位。
在C语言中,以函数为基本单位(一个C语言程序由多个函数组成)多个函数中只有一个函数叫主函数。
主函数是我们C语言程序执行的入口,由系统调用。

//C语言中标准输入输出头文件
#include <stdio.h>
int main(){
//主函数从main函数开始入口,由系统调用。
   printf("Hello World");
   return 0;//表示此函数返回一个数字零,C程序在执行的过程中,遇到return 0表示程序正常退出。
   }
C语言的源程序(源代码)后缀是.c格式
C语言的执行流程:先写源程序文件.c->目标文件(.c)->连接系统库文件->可执行文件(.out)
多行注释 :Command + /,先选中内容,再按快捷键
左缩进快捷键 Command + [, 右缩进快捷键 Command + ]。
注意:
1)C程序源文件不能直接运行,因为计算机只能识别(0和1),所以C的源程序不能直接运行。
2)开发到运行的步骤
  ->写源程序->编译->链接->执行
3)拓展名.c,.o,.out分别是什么文件?在C程序开发的哪个阶段发生的。
  .c --> C源文件
  .O --> 编译的目标文件
  .out -->可执行文件
 
 关于Xcode使用的问题
 Main.c语言的源文件,他是不能直接打开后运行的,他必须在Xcode项目当中去运行。
 Xcode欢迎界面如果消失了,就在windows里面去找寻。

 关键字:
 -->在C语言当中,有32个关键字,在C语言当中,关键字被赋予了某种特殊功能
 auto double int struct break
 else long switch case enum
 registar typedef char extern return
 union const float short unsigned
 continue for signed void default
 goto sizeof volatile do if while static

 标示符:
 在程序中 命名规范是为了提高代码的可读性,公司对程序员的一种约束,可读性良好的的程序可以去降低程序的维护成本
 在标示符当中,如果标示符含有多个单词,可以使用驼峰标示原则(除开第一个单词后面每一个单词首字母得大写)
 命名规范:
 1.遵从一定的规范,良好规范可以提高程序的可读性
 2.驼峰命名法,如果多个单词一块用的话,(除开第一个单词后面每一个单词首字母得大写)
 注释:
     注释是给人看的,不是给计算机看的。
     main函数名称(int args,const char *argv[])标示符,description  注释是为了程序员之间的交流,不进行编译的
 注释的分类:
     使用两个"//"进行注释,表示在一行中两个斜杠开始往后都不会被编译,单行注释是可以嵌套多行注释的,不可以进行
     回车,多行注释可以嵌套单行注释,多行注释不可以嵌套多行注释,可以进行回车->多行注释。
     右键Build,编译、检查语法是否正确,不是的话进行运行操作。
 数据类型介绍:
 数据类型:分为基本类型[整型(短整型、整型、长整型)、字符型char、实型(单精度型float、双精度double) ]、构造类型
 [数组、结构体struct、共用体Union、枚举类型enum]、指针类型(void*)、空类型void、定义类型typedef。

 为什么要有数据类型呢?
 内存分为若干个存储单元,每个单元有固定大小,每个单元有自己的地址
 1)如果我们存储的数据种类很多,内存相应的提供大小的存储空间用于存储,所以我们要知道什么样的数据到底要分配多大
   的内存单元。
 静态数据和动态数据之间的转化
 静态数据到动态数据(也就是磁盘加载到内存)
 硬盘(C语言.MP4)--->内存(Mpayer)   举例子:手机拍照,对焦的存储在内存当中,当点击拍摄时,内存中存储的东西就会
 转入到相册中取存储,看硬盘中的文件的时候,其实就是一个静态到动态转化的一个过程。

 C语言中的常量分配:
 整型常量(int):包括了所有整数
 浮点型常量(float、double):小数
 字符常量(char):将一个符号用单引号括起来,这样构成的就是字符常量
 字符串常量:将一个或者多个字符用的引号("")括起来,这样就构成了字符串常量

 浮点型常量:1.double:双精度浮点型,其实就是小数
             比如:5.43, 23.00, 注意0.0也是一个小数
      2.float单精度浮点型,也是一个小数,比double精度低,也就是后面跟的小数位数比较少,后面加f来区分
      Double,注意只有小数后面跟f,例如10f是错误的,编译器会立马报错。汉子字符如'男',也是可以的,一个
      汉字占用3个字节。汉字是采用Unit编制。

 变量:常量表示的数据时不可以改动,而且变量表示的数据是可以经常修改的,当一个数据数值需要改变或者不确定的时候,
       就要开始使用变量。
       初始化:int a;//不会报错,a里面存放的是内容是:
       1.随机数,
       2.上次程序分配的存储空间,(存入的一些内容),
       3.系统正在用的一些数据。

 为什么要有变量的作用域?
 节省内存的空间,让变量使用完了以后可以及时回收。
 根据变量的作用域可以分为两类:
 全局变量:从程序开始运行到结束,变量一直都在。
 局部变量:从函数开始到函数结束,变量存在(或者在某一个代码块存在)
 注意:在块中可以访问全局变量
       在块中定义的局部变量,在快的外部不能访问-->error:'b' was not declared in this scape.表示b不在其左右范围内。

 printf函数和scanf函数
 printf(”%d,%d\n“,a,b);//在这里第一个占位符是%d,第二个占位符是%d\n,a,b分别是对应的参数。
 printf 输出格式:
 Type  Example
 char  %c
 short int %ld
 int  %d
 long int %ld
 float  %f
 double  %f
 关于整数数据打印的时候域宽的问题、%P打印一个变量的内存地址、%S打印一个字符串”XSSS“。
 %md-->m表示域宽,打印出来的时候,在控制台上显示m位。
 如果m为整数,则左对齐(左处补空格),如果m为负数,则右对齐(右处补空格),%0md表示,不足的时候,补0.

 格式控制符:%d表示输出一个整数(int)的变量或者常量。
 %e格式符:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
 %g格式符自动选格式或者e格式中较短的一种输出,且不输出无意义的零。
 %P格式:输出变量在内存中的地址(指针)。
 打印一个数的指针、打印一个%怎么去打,%%表示去打印一个%。
 关于%f输出的精度问题:
 1)实数型的数据输出的时候,默认的精度到小数点后6位。超出部分四舍五入。
 假设精确到小数点后3位,%.3f精确到小数点的后三位,而且四舍五入。%5.2-->总计显示5位,小数点后2位。
 如果两个单精度的数相加,尽量避免使用大数去加上特别小的数字。
 关于printf输出里面的缓冲区,系统程序首先经过缓冲区里面,再由系统导入到控制台上显示出来。

 Scanf 输入使用的方法
 调用Scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准的输入设备(比如键盘)输入数据的时候,并且将输入的
 数据赋值给地址所对应的变量。
 关于Scanf函数:
 作用:从键盘接受到用户输入的内容,并且保存的变量中,Scanf(”格式控制符“,地址列表);
 输入也在缓冲区: 12             int a = -1,b = -1;
    a   char ch;
    23   Scanf(”%d%c%d“,&a,&ch,&b);
     printf("a = %d\n,ch = %c\n,b = %d\n",a,ch,b);
     return 0;
     result : a = 12;
       c = _;
       b = -1;
 Scanf的缓冲区(Scanf的运行原理)
 如果缓冲区有内容的话,Scanf函数直接从缓冲区里面取了。如果缓冲区没有内容了,再提示用户输入。
 Scanf域宽的问题:
 %md ,m表示接受用户输入的列数,当用户输入的位数,大于我们设定的m时,只获取m位。
 Scanf函数不能写\n,常量存在于栈中。
 
 驼峰命名法:
 核心思想:可以使用英文单词也可以使用拼音,如果有多个单词组成的表示符,第一个单词首字母要小写,以后每一个单词的
 首字母都大写。firstName,firstCompanyName。
 变量的类型:
 因为要存储的数据的类型不同,并且大小,精度不同,为了合理利用内存,我们规定了数据类型。
 变量要使用哪些步骤?
 先定义--->初始化--->操作(赋值、计算、赋值等)
 int a = 10;
 {
     printf(“%d”,a);
     int a = 20;
     printf("%d",a);
 }
 //在块内部定义的变量如果外部的,全局变量重名了,内部的变量会屏蔽外部的。
 //flush(student);//强制转化缓冲区做一个清空v
 printf("格式控制',变量列表);//("%d",a);
 运算符的基本概念:
 告诉编程程序进行算术计算或者逻辑运算的符号。
 单目运算:只有一个操作数+运算符
 双目运算:操作数(a)运算符(+)操作数(b);
 特殊:三目运算符:
 表达式1?表达式2:表达式3,表达式:变量表达式、常量表达式。
 运算符的结合性:优先级的顺序
 算术运算符、赋值运算符(“=”作用,等号右侧的一定不能是常量)‘a’=10;附:优先级最低的是等号运算符。

 自增和自减的应用场合:
 1.在程序中让某个变量的值自动+1的时候,就可以自增++或者自减--;
 int a = 3;  a++; 表达式为3, a已经变成了4。
 sizeof
 sizeof可以用来计算一个变量或者一个常量,一种数据类型所占的内存字节数。
 逗号表达式一般的形式中的表达式1和表达式2也可以是逗号表达式
 eg:表达式1,(表达式2,表达式3);
 关于运算符都是双目运算符
 逻辑运算:&&,||,!; 逻辑运算的结果只有两个:“真”为1,“假”为0.

 什么是进制?
 二进制0,1  逢二进一
 八进制0~7  逢八进一
 十进制0~9  逢十进一
 十六进制0~9,A~F 逢十六进一,书写0x或者Ox开头
 十进制转二进制-->初二求余法,除到商为0
  八进制-->除八球余
  十六进制-->除十六求余
 概念:原码:将一个整数,转化成二进制,就是其原码、
      反码:正数的原码就是其原码、
     负数的原码、就是将原码中,除了符号以外,每一位取反
      补码: 正数的补码就是其原码
            负数的补码就是其反码+1
 对于有符号位的正数来说:
 最高位如果是零  表示是一个正数
 最高位如果是1   表示是一个负数
 正整数取反+1,就是对应负数。
 位运算:& 按位与      口诀:同1则1
  | 按位或      口诀:有1为1
  ~ 按位取反    口诀:1变0,0变1
  ^ 按位异或    口诀:相同为0,不同为1
  <<,>>         左移右移
 任何一个变量在内存中都有首地址,首地址就是变量存放的第一个低地址。
 long long(8个字节)主要是解决32位机器的问题
 左移一位可能会改变一个数的正负性的问题、%U打印一个无符号的数字、char类型的变量,是不可以存放中文的。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值