day6笔记

四、C语言基础

1.第一个c语言程序

Inc tab 键 补全头文件
main tab 键 补全主函数
#include <stdio.h>
#include "stdio.h"
int main ( int argc , const char * argv [])
{
printf ( "hello world\n" ); // 打印hello word
return 0 ;
}
# 预处理标识符
#include 包含头文件的固定格式 (/usr/include)
stdio . h 头文件
<> c 语言的标准库查找头文件
"" 从指定目录下进行文件的查找如果查不到,我就去库函数中继续查找
int 函数的返回值类型
main 主函数 , c 语言程序有且只有一个主函数,是 c 程序的入口
int argc , const char * argv [] 是一个外部传参
{} 函数体,所有的代码都在里面写。
printf () 打印函数
"hello world" 字符串常量
\n 换行
; 分号 c 语言代码这一行的结束的标志,必须有,没有分号会 报错
// 单行注释 多行注释 /* */ #if 0 # endif
return 退出函数
return 0 退出函数并且返回一个数据 0
return 的作用 :
1. 函数的返回值
2. 终止后续代码的执行
1. 回答 吃 return sum
2. 回答 我选亚索 return 1
3. 不回答 return 终止后续代码的执行。
2.gcc 编译器
2.1 直接编译
gcc 文件名 .c 会自动生成一个可执行文件 ( 二进制文件、机器码 ) 默认是 a.out
运行程序 ./a.out
2.2 分布编译 第一个面试题 40%~60%
ESc . iso
1. 预处理 E . i
代码 : gcc - E 文件名 . c - o 文件名 . i
作用 : 1. 头文件的展开 2. 宏的替换 ( ? ) 3. 删除注释 ( 提高代码运行速度 ) 4. 不会检查语法
错误
2. 编译 S . s
代码 : gcc - S 文件名 . i - o 文件名 . s
作用 : 需要检查语法错误 , 会生成一个汇编文件
3. 汇编 c . o
代码 : gcc - c 文件名 . s - o 文件名 . o
作用 : 将汇编文件转换为二进制文件,但是没有链接到库,不可执行
4. 链接库
代码 : gcc 文件名 . o - o 可执行文件
运行 . / 可执行文件

3.宏定义

3.1 无参宏定义

格式:

#define 宏名 宏体
示例:
#define N 2

3.2有参宏定义

等到后面讲函数,重新拿出来
格式
#define 宏名 ( 参数 1, 参数 2) 宏体
示例
#include <stdio.h>
#define N 2
#define ADD(a,b) a+b
int main ( int argc , const char * argv [])
{
printf ( "hello\n" );
printf ( "%d\n" , N );
printf ( "%d\n" , ADD ( 1 , 2 ));
return 0 ;
} 

3.3注意事项

1. 将宏定义放置在头文件之下
2. 宏名必须大写 ( 默认的潜规则 --- 为了区分函数 )
3. 宏定义不需要加分号
4. 宏就是一个简单的替换 , 如果传入的参数要优先运行,必须加上括号 #define SUB ( a , b , c , d ) a * ( b + c ) + d
5. 面试中的一半      预处理阶段
6. 宏体一定是一个表达式

3.4练习  

#include <stdio.h>
#define M(x,y,z) x*y+z
int main ( int argc , const char * argv [])
{
int a = 1 , b = 2 , c = 3 ;
printf ( "%d\n" , M ( a + b , b + c , c + a ));
return 0 ;
}
注意 简单的替换
计算步骤 :
1 + 2 * 2 + 3 + 3 + 1 = 1 + 4 + 3 + 3 + 1 = 5 + 7 = 12
一个水分子的质量是 3 . 0 * 10 ( - 23 ) g , 1 夸克脱水大约有 950g ,写一个程序
要求输入水的夸克数,计算这么多水中包含多少水分子?
科学计数法 3.0e-23 % e
2 * 950 / ( 3.0e-23 )
#include <stdio.h>
#define G 950
#define K 3.0e-23
#define S(a) (a)*G/(K)
int main ( int argc , const char * argv [])
{
printf ( "%e\n" , S ( 2 ));
return 0 ;
}
4. 数据类型及变量
1. 计算机的单位转换
1 Tb = 1024 Gb
1 Gb = 1024 Mb
1 Mb = 1024 Kb
1 Kb = 1024 byte
1 byte ( 字节 ) = 8 bit
1 bit 位 只能存储一个 0 或者 一个 1

2.常量的数据类型  

1. 整形常量 % d
1 0 100 3
2. 浮点型常量 % f
PI 3.1 9.8 - 3.4 1.1 . 2.3 ( 错误 )
3. 字符类型的常量 ---- 由单引号包含起来的单个字符 % c
'1' '-' '0' 'a'
ascii 国际通用的编码方式 man ascii
'0' ~ '9' 48 ~57 '0' 48
'A' ~ 'Z' 65 ~90 'A' 65
'a' ~ 'z' 97 ~122 'a' 97
'\n' 10
4. 字符串常量 由双引号包含起来的一个或多个字符。
"asdsafga" "a" "!@#$%%"
5. 标识符类型的常量
#define N 1 # define STR "1234"

3.基本数据类型

4. 变量
4.1. 申请变量
格式 :
单个变量的声明 存储类型 数据类型 变量名 ( 标识符 )
多个变量的声明 存储类型 数据类型 变量名 1 , 变量名 2 ....
auto int a <-----> int a

4.2.存储类型  

auto 默认类型
extern 引用其他文件的变量
static 静态变量 ( 网络编程、 IO )
底层课程
volatile 去内存中获取变量
register 寄存器变量

4.3.变量名

语义化命名
1. 变量的初始化以及赋值
int a ; a 的值是一个随机值 , 但是
int b = 1 ; 用常量进行初始化
int c = b ; 用其他变量进行初始化
int d ; // 先定义一个变量整形变量 b, 所占空间大小为 4byte
d = 4 ; // 给这个变量 d 赋值常量 4
2. 标识符的命名规则
2.1 不能以数字开头
2.2 由字母、数字、下划线组成
2.3 严格区分大小写
2.4 不能以关键字重名
3. 关键字
32 -- 由系统定义的语法,有特殊的含义
auto for if
extern long long short
static char
volatile double
register int
float

4.4.修饰的关键字

1. 常用的修饰数据类型的关键字
有符号 signed
可以区分正负的 , 可以修饰 int char ,且是一个默认的类型
int a = - 10 ; <----> signed int a = 10 ;
char c = 10 ; 10 是字符所对应的 ascii 码值
无符号 unsigned
没有负数 , 只能为正数,可以修饰 int char
unsigned int a = 10 ;
unsigned int b =- 10 ; // 肯定是一个正数

4.5.取值范围

1. char
所占空间大小 1 byte = 8 bit
unsigned char 最小值 0 最大值 2 ^8 - 1 [ 0 , 255 ]
signed char 符号位 0 正数 1 负数 [ - 128 , 127 ]
2. int

4.6.原、反、补

正数的原、反、补都是本身
原码 : 人脑能够识别出来的二进制形式
+ 0 = 0000 0000
- 0 = 1000 0000
反码 :
正数 : 反码就是原码本身
负数 : 符号位不变,其他位取反
+ 0 = 0000 0000
- 0 = 1111 1111
补码 :
正数:补码就是原码本身
负数 : 补码就是在反码的基础上 , 最后一位 + 1
+ 0 = 0000 0000
- 0 = 1000 0000 原码 1111 1111 补码 1 1000 0000 补码 1000 0000 - 128 的结果一样

4.7.占位符  

% d 以有符号的十进制格式输出 int char
% ld 以有符号的十进制格式输出 long int
% nd n 代表的是宽度,不够的补空格
% f 单精度浮点型输出
% lf 双精度输出
% . mf m 代表的保留几位数字
% c 以字符形式输出
% s 以字符串输出
% p 以变量的地址形式输出
% e
% o 八进制
5 、基本输入输出函数
5.1 单个字符的输入与输出
1. 输入
getchar ()
功能 : 从终端输入单个字符
原型 : int getchat ( void ); //void 代表为空
示例 :
char c ;
c = getchar (); // 假设我这里输入 hello , 只能拿出第一个字符 h
int d = getchar ();
2. 输出
putchar ()
功能 : 从终端输出字符
int putchar ( int x )
示例: 5.2 格式化输入与输出
5.4 练习
5.4 转义字符
putchar ( 'a' ); //a
putchar ( '\n' ); // 换行
putchar ( 'c' ); //c
putchar ( 10 ); // 换行
putchar ( 97 ); // 字符 a
putchar ( 10 );

5.2格式化输入与输出  

1. 输出
printf ();
原型 : int printf ( const char * format ,...)
printf ( "hello world %d %f" , 1 , 1.1 );
注意 :
1.1 . 双引号中填入要输出的数据,填什么输出什么,除了格式符和转义字符
1.2 . 占位符的个数,要去后面不定参数 (...) 个数一致,不定参数之间,需要用逗号隔开
2. 格式化的输入
功能 : 终端输入
原型 : int scanf ( const * format ,...)
scanf ( " 格式符 , 格式符 " , & ( 取地址符 ) 变量名 );
示例 :
scanf ( "%d%d" , & a , & b );
注意事项 :
2.1 scanf () 一次只能识别到空格 , tab 键, \n 之前
2.2 需要格式符和存储的数据类型保持一致
2.3 & 加上
2.4 不要在 scanf () \n
2.5 终端输入时一定要和 scanf () 里面的格式符的格式保持一致

 5.4练习 

scanf 先从终端获取一个 int 的数据类型,打印结果 ;
然后再用 scanf 从终端获取一个字符类型的变量,打印他们的结果

5.4转义字符

\n 换行
\t 水平制表符 tab 键的大小
%% 打印 %
\ " 打印 "
\\ 打印 \

 

 报错信息 

bash : cd : 111 : No such file ( 文件 ) or directory ( 目录 )
bash : cd : root : Permission denied 访问被拒绝
mkdir : cannot create directory ‘day1’ : File exists ( 存在 )
rmdir : failed to remove 'day2' : Directory not empty ( )
cp : - r not specified ( 规定、指定 ); omitting ( 省略 ) directory './day2'
1. c : 6 : 2 : error : expected ( 期望 ) ; before ( ... 之前 ) ‘return’
error : ‘k’ undeclared ( 未定义、未声明 ) ( first use in this function ( 函数 ))
format ‘ % c’ expects argument ( 参数 ) of type ‘char * , but argument 2 has type ‘int’ [ - Wformat = ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值