C语言学习笔记---第一章

C语言学习笔记


文章目录

  • C语言学习笔记
  • 前言
  • 一、初识C语言
    • 1.初识数据类型
    • 2.初识常量变量
      • 1.变量的使用
      • 2.变量的作用域和生命周期
      • 3.常量
    • 3.初识字符串
    • 4.初识转义字符
    • 5.初识选择语句
    • 5.初识循环语句
    • 6.初识函数
    • 7.初识数组
    • 8.初识操作符
    • 9.初识关键字
    • 10.初识指针
    • 10.初识结构体
  • 二、分支与循环语句
  • 三、函数
  • 四、数组
  • 五、操作符详解
  • 六、指针
  • 七、结构体
  • 八、实用调试技巧
  • 九、git用法
  • 总结


前言

参考书:谭浩强,C程序设计(第4版),清华大学出版社
范围:
顺序程序设计
选择结构程序设计
循环结构程序设计
利用数组处理批量数据
用函数实现模块化程序设计
善于利用指针
对文件的输入输出


一、初识C语言

写代码
写出主函数(main函数)
C语言是从主函数的第一行开始执行的
C语言中必须有主函数,相当于入口
一个工程中可以有多个.c文件,但是只能有一个main函数
printf 库函数 在屏幕上打印信息的
printf的使用,需要引用头文件(别人写的,使用时候需要打招呼)

代码如下(示例):

#include  
 
int main()
{
	printf("hello world\n");
	return 0;
 } 

编译+链接+运行代码
快捷键fn+F11(DEV-C++)
\n代表换行

1.初识数据类型

计算机语言->写程序->解决生活问题
必须有能力来描述生活中的问题

char 字符数据类型 1字节
short 短整型 2字节
int 整型 4字节
long 长整型 4字节
long long 更长整型 8字节
float 单精度浮点型 4字节
double 双精度浮点型 8字节

计算机中的单位:
bit - 比特位 一个二进制位
byte - 字节 = 8 bit
kb - = 1024 byte
mb - = 1024 kb
gb - = 1024 mb
tb - = 1024 gb
pb - = 1024 tb

2.初识常量变量

生活中有些数据是不能变的,有些值是一定可变的,年龄,体重

C语言怎么描述:
常量 - 不能改变的量
变量 - 能被改变的量

%d 整型
%c 字符
%s 字符串
%f float
%lf double

变量分类:局部变量 全局变量
{}外是全局变量 {}内是局部变量
当局部变量和全局变量冲突时,局部优先
不建议把全局和局部的名字写一样的

1.变量的使用

求两个数的和

#include 
int main(){
	 
	int a = 0;
	int b = 0;
	int sum = 0;
	scanf("%d %d",&a,&b);
	sum = a+b;
	printf("sum = %d\n",sum);
	return 0;
	
} 

2.变量的作用域和生命周期

  • 作用域

局部变量作用域:变量在哪里可以使用,说明他的作用域就在哪
全局变量作用域:整个工程

执行性的代码必须在大括号里面
如果在一个工程,不同文件里面
需要声明一下 extern 。。。

  • 生命周期

变量的生命周期:变量的创建和销毁之间的时间段
局部变量的生命周期:进入局部范围生命开始,出去 生命结束
全局变量的生命周期:程序的生命周期

3.常量

  1. 字面常量
    “3.14” “abcd”

  2. const 修饰常变量
    //num是常变量 具有常属性(不能被改变)

const int num = 10;

int arr[10]={0};//对 
	
const int n = 10;
int arr2[n]={0};//n是变量 这里不对!!! 
  1. #define定义的标识符常量
#define MAX 100 
  1. 枚举常量

可以一一列举的常量

#include 
enum Sex{
	//枚举类型的变量未来的可能取值 
	Male=3,//附初值 
	Female,
	Secret
}; 
int main(){
	
	enum Sex s = Male; 
	printf("%d\n",s);//3 
	printf("%d\n",Male); //3 
	printf("%d\n",Female); //4 
	printf("%d\n",Secret); //5
	
	return 0;
	
}   

3.初识字符串

字符串就是一串字符 用双引号括起来的一串字符
注:字符串的结束标志是一个\0的转义字符。在计算字符长度的时候\0是结束标志,不算作字符串内容。

字符串在结尾的位置隐藏个\0的字符

	//里面其实有4个元素 a b c \0 
	char arr1[]="abc";
	//里面3个元素 打印可能会出现乱码 
	//可以在后面加‘\0’ 
	char arr2[]={'a','b','c'};
	printf("%s\n",arr1);
	printf("%s\n",arr2);
	//求一下字符串的长度 string length
	printf("%d\n",strlen(arr1));//3 求长度不算\0 
	printf("%d\n",strlen(arr2));//随机值 c向后一直找\0  

4.初识转义字符

转变了它原来的意思

	printf("C:\test\test.c") ;
	//输出:C:      est     est.c 
	printf("C:\\test\\test.c") ;
	//输出:C:\test\test.c
	printf("ab\ncd");
	//\n 转变为换行 
	printf("%c\n",'\130');
	//八进制的130是十进制的X
	//X ---ASCII码值是88 
	printf("%c\n",'\x30');
	//0 ---ASCII码值是48
转义字符 释义
? 在书写连续多个问号时使用,防止他们被解析成三字母词 例:??)解析为 ]
\‘ 用于表示字符常量’
\ " 用于表示一个字符串内部的双引号
\ \ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,峰鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符 tab键
\v 垂直制表符
\ddd ddd表示1-3个八进制数字
\xdd dd表示2个十六进制数字

例题:

printf("%d",strlen("c:\test\328\test.c"));
//答案:14

\t算一个 \328不能算一个,因为八进制数中不能出现8.所以算\32和8

5.初识选择语句

int main(){

	int input=0;
	printf("好好学习(1/0)?");
	scanf("%d",&input);
	if(input ==1)
		printf("上岸\n");
	else
		printf("失败\n");
	return 0;
}   

5.初识循环语句

int main(){
	
	int line = 0;
	while(line<100){
		printf("写代码:%d\n",line);
		line++;
	}
	if(line = 100){
		printf("上岸"); 
	}
	return 0;
}   

6.初识函数

正常写法

int main(){
	
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	scanf("%d%d",&num1,&num2);
	//scanf里面不能加\n 
	sum = num1 + num2;	
	printf("%d\n",sum);
	return 0;
}   

函数写法

int Add(int x, int y){
	int z = 0;
	z = x + y;
	return z;
} 
int main(){
	
	int num1 = 0;
	int num2 = 0;
	scanf("%d%d",&num1,&num2);
	//scanf里面不能加\n 	
	int sum = Add(num1,num2); 
	printf("%d\n",sum);
	return 0;
}   

7.初识数组

数组 --一组相同类型的元素的集合

	//10个整形 1-10 存起来
	//数组是用下标来访问的 
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	char ch[5] = {'a','b','c'};//不完全初始化,剩余的默认为0 
	int i = 0;
	while(i<10){
		printf("%d\n",arr[i]);
		i++;
	} 
	return 0;

8.初识操作符

算数操作符 + - * / %
移位操作符 >> <<
位操作符 &(按位与)
赋值操作符 = += -= *= /= ^=
单目操作符 ! - + & sizeof ~ – ++ (类型)强制类型转换
逻辑操作符 && 逻辑与 II逻辑或
条件操作符 exp1 ? exp2 :exp3
	//算数操作符 
	int a = 9/2;
	float b = 9/2;
	float c = 9/2.0;
	int d = 9%2;//取余数 
	printf("%d",a);//4 
	printf("%f",b);//4.000000
	printf("%f",c);//4.500000
	printf("%d",d);//1
	//移位操作符 
	int e = 2;
	int f = e<<1;//左移操作符,移动的是二进制位 
	printf("%d",f);//4
	//0表示假,非0就是真

	int arr [10]={0};
	printf("%d\n",sizeof(arr));//40
	//计算的是数组的总大小,单位是字节; 
	printf("%d\n",sizeof(arr[0])) ;//4 
	int sz = sizeof(arr)/sizeof(arr[0]);
	printf("%d\n",sz);//10

	int a = 0;
	printf("%d\n",~a);// -1 
	//~是按位取反 
	//把所有二进制位中的数字,1变成0,0变成1
	// 0的二进制是32个0
	// 整数在内存中存储的是补码 
	//一个整数的二进制表示有三种:原码,反码,补码
	// 正整数:原码、反码、补码相同 
	//符号位不变,其他位按位取反叫反码
	// 反码加一是补码 

	int a = 10;
	int b = ++a;//前置++  先++ 后使用 
	int c = a++;//后置++  先使用 后++ 
	printf("%d\n",b);//11
	printf("%d\n",a); //12
	printf("%d\n",c); //11
	return 0;

	int a = 0;
	int b = 3;
	int c = 5;
	int d = (a=b+2,c=a-4,b=c+2);
	// a=5  c=1  b=3 
	//逗号表达式,从左到右依次计算
	//整个表达式的结果是最后一个表达式的结果 
	printf("%d",d);//结果为3 

9.初识关键字

关键字不能做变量名
break case const continue default do
extern float goto if register(寄存器关键字)

10.初识指针

1.内存是怎么编号的?
32位 — 32根地址线 — 物理线 — 通电 —1/0
电信号转换成数字信号:1和0组成的二进制序列 例如:32个0 32个1 作为内存编号
共有2的32次方个序列作为内存编号,并将编号称为内存单元的地址。

2.一个这样的内存单元是多大空间?
2的32次方个内存单位
一个内存单位占1byte(字节)

指针就是地址
指针大小是相同的,指针是用来存放地址的,指针需要多大空间取决于地址的存储有多大

32位 32bit 4byte
64位 64bit 8byte

int main ()
{
	int a = 10;
	printf("%P\n",&a);//%p专门用来打印地址
	int * pa = &a;//pa用来存放地址的,在c语言中pa叫指针变量
	//* 说明pa是指针变量
	// int 说明这个pa执行的对象是int类型的
	*pa = 20//* 解引用操作 *pa就是通过pa里面的地址找到a  将a改成20
	char ch = "w";
	char * pc = &ch;
	return 0;
}

10.初识结构体

结构体使得C语言有能力描述复杂类型
比如描述学生,学生包括 :姓名+年龄+性别+学号 这几项信息

//学生
struct Stu
{
	char name[20];//成员变量
	int age;
	double score;
}
//书
struct Book
{
	char name[20];
	float price;
	char id[20];
}
int main()
{
	struct Stu s = {"zhangsan",20,90};//结构体的创建和初始化
	printf("1:%s %d %lf\n",s.name,s.age,s.score);
	//结构体变量.成员变量名
	struct Stu * ps = &s;
	printf("2:%s %d %lf\n",(*ps).name,(*ps).age,(*ps).score);
	printf("3:%s %d %lf\n",ps->name,ps->age,ps->score);
	//结构体指针->成员变量名
	return 0 ;
}

二、分支与循环语句

三、函数

四、数组

五、操作符详解

六、指针

七、结构体

八、实用调试技巧

九、git用法


总结

你可能感兴趣的:(c语言)