C语言课程准备
1. 博客
a. 写博客是对所学知识的总结
b. 写博客是记录学习的过程和心得,给面试官了解你的机会增加面试谈资
c. 注册博客(技术博客)
i. Csdn(用户多,但多为学生)
ii. 51cto(推荐)
iii. 博客园
iv. 开源中国
2. GitHub
a. GitHub注册账户创建代码仓库例如c-code自己写代码上传,公开后其他人可以调用
b. 简历中可以贴上GitHub简介可以查看每天代码记录一天代码就是一个绿点,日积月累
3. 笔记软件OneNote
a. 方便检索
b. 便于携带
c. 不易丢失
4. 思维导图Xmind
a. 便于总结串联知识
b. 生动形象展示知识点
5. 编程
a. 语言:C/C++/Java
b. 算法
c. 数据结构Ds
d. 操作系统
e. 计算机网络
C语言初识
1. 什么是C语言
a. C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序
b. 语言发展
二进制语言--->B语言---->C语言---->C++ java
c. C语言标准
i. C89 /C90 (ISO国际标准)很接近
ii. C99/ C11 (不少编译器不支持)
d. 常见C语言编译器
Clang / Gcc /win-tc/SUBLIME/MSVC/Turbo C
2. 第一个C语言程序
写c代码
1.创建工程
2.添加源文件
.c 源文件
.h 头文件
3.写代码
基本框架
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
main()主函数–程序的入口,一个c语言代码不能没有main函数,且有仅有一个main函数。
int 整型 main前面的int表示main函数调用之后返回一个整数值
printf 打印函数 print function
库函数–C语言提供给我们使用的函数
调用#include
#include <stdio.h>
std-标准 standard input output
stdio-标准输入输出
使用#define _CRT_SECURE_NO_WARNINGS 1屏蔽vc对某些函数不安全报错。
3.数据类型
chart //字符类型
int //整型
short //短整型
long //长整型
long long//更长整形
float//单精度浮点数
double//双精度浮点数
使用示例
#include <stdio.h>
int main(){
char ch='h';//向内存申请空间存放变量
short num1=1;//向内存申请两个字节存放1
long num2=2021;
float f=3.1;
double d=3.14;
int age=19;
printf("%c\n",ch);
printf ("%d\n",num1);
printf ("%d\n",num2);
printf ("%f\n",f);
printf ("%lf\n",d);
printf ("%d\n",age);
return 0;
}
chart 为单个字符不是字符串
%c 打印字符
%d 打印整型
%f 打印浮点型
%lf 打印双精度浮点数
%p 打印地址%s打印字符串
int short long的区别
1、定义不同
int类型称为整型;
short类型称为短整型;
long类型称为长整型;
2、占用字节数不同
short int型变量两个字节(两个字节);
int类型四个字节(32位机中);
long int取值为8个字节(32位机中);
3、数据范围不同
short int型变量取值为-(2的16次方)+1 到 (2的15次方)-1;
int类型变量取值为-(2的32次方)+1 到 (2的31次方)-1;
long类型变量取值为-(2的64次方)+1 到 (2的63次方)-1;
扩展资料
1、具体占用几个字节C语言并没有规定,C语言做了宽泛的限制:
1)short int类型至少占用2个字节。
2)int类型建议为一个机器字长。32位环境下机器字长为4字节,64位环境下机器字长为8字节。
3)short类型的长度不能大于 int,long类型的长度不能小于 int。
float和double区别
区别:
1、精度不一样,float是单精度,double是双精度;
2、表示小数的范围不一样,double能表示的范围比float大;
3、double在内存中,占8个字节,float在内存中,占4个字节。
float:
浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 二进制指数和一个 23 位尾数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -3.4E+38 ~ 3.4E+38 之间的范围。
double:
双精度浮点型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是double float数据类型,C/C++中表示实型变量的一种变量类型。
扩展资料:
浮点型数据
1、float型
编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。
2、double型
为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字。
3、long double型
不同的编译系统对long double型的处理方法不同,Visual C++6.0对long double型和double一样处理,分配8个字节。
每种类型的大小
#include <stdio.h>
int main(){
printf("%d\n",sizeof(char));//1byte
printf("%d\n",sizeof(int));//4byte
printf("%d\n",sizeof(short));//2byte
printf("%d\n",sizeof(long));//4或8byte
printf("%d\n",sizeof(long long));//8byte
printf("%d\n",sizeof(float));//4byte
printf("%d\n",sizeof(double));//8byte
return 0;
}
sizeof计算内存大小
计算机中计量存储容量计量单位:
bit - 比特位 储存二进制0 1
byte - 字节 一个字节等于八个比特位
kb mb gb tb pb
4.变量与常量
定义变量
类型 + 变量名 + 赋值
short age=18;
float weight=100.1f;
chart ch='w';
//f明确强调该值为单精度浮点值,防止因精度问题报错
变量分类
变量分类:全局变量和局部变量
#include <stdio.h>
int num1=1;//全局变量
int main(){
int num2=2;//局部变量
printf("%d\n",num2);
return 0;
}
全局变量:定义在代码块{}
之外的变量
局部变量:定义在代码块{}
之内的变量
全局变量和局部变量最好不用相同的变量名容易误会产生bug,当重复时已局部变量为准,优先使用局部变量。
变量的使用
以两数相加为例:
#include <stdio.h>
int main(){
int num1=0;
int num2=0;
int sum=0;
scanf("%d%d",&num1,&num2);
//int sum=0;
sum=num1+num2;
printf("%d",sum);
return 0;
}
scanf输入数据-使用输入函数
&取地址(传址)变量储存内存地址
C语言语法规定,变量要在当前代码框的最前面定义,不能需要变量时直接定义如上若在注释处定义变量sum就会报错缺少;号。
补充资料:
为什么scanf函数在vc编译器中不安全?
vs的编译器一些函数如果调用不当会造成内存泄漏、非法访问、溢出等问题,因此会出这么个警告,scanf就是其中之一 不用理会他,或者把警告关闭即可,scanf只有在参数有%s的时候才有不安全的问题,还是可避免的。
变量作用域和生命周期
作用域
作用域(scope),程序设计概念,通常来说,一段程序所用到的变量并不是总是有效/可用的,而限定这个变量的可用性的代码范围就是这个变量的作用域。
1.局部变量的作用域是变量所在代码块范围内。
2.全局变量的作用域是整个工程。
#include <stdio.h>
int main(){
extern int global;
printf("global=%d\n",global);
return 0;
}
extern 声明外部符号
当所使用的变量为同工程外部源文件全局变量时只需要使用extern声明即可使用。
生命周期
变量的生命周期指的是变量的创建到到变量的销毁之间的一个时间段。
1.局部变量的生命周期是进入作用域生命周期开始,出作用域生命周期结束。
2.全局变量的生命周期是整个程序的生命周期。
3.变量作用域和生命周期是相辅相成的。
常量
C语言中的常量和变量的定义有所差异。
C语言的常量分为以下几种:
- 字面常量
- const修饰的常变量
- #define定义的标识符常量
- 枚举常量
字面常量
直观写出的值
const修饰的常变量
#include <stdio.h>
int main(){
const int num=4;
printf("%d\n",num);
//num=8;此时再修改变量值就会报错
return 0;
}
const 常属性,当给变量加上const,此变量值就不可修改相当于一个“常量”,其本质是一个具有常属性的变量。
#define定义的标识符常量
当需要使用常量时可以使用#define定义标识符常量。
#include <stdio.h>
#define MAX 10
int main(){
int arr[MAX]={0};
printf("%d\n",MAX);//10
return 0;
}
枚举常量
枚举常量:可以一一列举的值。枚举关键字-enum
#include <stdio.h>
enum Sex{
MALE,
FEMALE,
SECRET
};
//MALE,FEMALE,SECRET即为枚举常量
int main(){
enum Sex sex=MALE;
printf("%d\n",sex);
printf("%d\n",MALE);
printf("%d\n",FEMALE);
printf("%d\n",SECRET);
sex=SECRET;
return0;
}
枚举变量不能更改,枚举类型创建的变量是可以改变的。
5.字符串,转义符,注释
字符串
“hello world\n”
这种有双引号(double quote)引起来的一串字符称为字符串字面值(string literal)简称字符串。
注: 字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算做字符串内容。
C语言里面没有专门的字符串类型。在C语言中,字符串是被当做字符数组来处理的。
字符数组初始化
char arr1[]="hsf";
char arr2[]={'h','s','f','\0'};
字符数组初始化时可以直接使用字符串字面常量进行初始化此方式不需要添加\0结束默认有一个隐藏的\0结束字符串。使用{}初始化字符数组时需要添加\0结束字符串,否则会出现数组越界产生随机值,越界后的值是无意义的。
#include <stdio.h>
#include <string.h>
int main(){
char arr1[]="hsf";
char arr2[]={'h','s','f','\0'};
printf("%d\n",strlen(arr1));//3
printf("%d\n",strlen(arr2));//3
return 0;
}
strlen string length字符串长度检测函数,使用需要引入string.h文件。
若使用{}初始化字符数组不添加结束转义符将会打印出无意义的随机值。
转义字符
转义是将有多种含义的字符进行转换。
转义字符 | 释义 |
---|---|
? | 在书写连续多个问号时使用,防止他们被解析为三字母词 |
\‘ | 用于表示字符常量’ |
\“ | 用于表示字符串内部的双引号 |
\\ |
用于表示一个反斜杠,防止他被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示一个1-3个八进制数字如\130X |
\xdd | dd表示一个1-2个十六进制数字 |
问题:
printf(“%d\n”,strlen(“c:\test\32\test.c”))的值为多少?
除去转义符 (\t ,\32,\t)共有十个字符每个转义符算一个字符,\32需要转换由八进制32转换为十进制数字作为ASCII码值对应的字符即一个向右的箭头符号,另外\x61也是一个转义字符对应为a。
常见的ASCII码值
48:0 65:A 97:a
注释
1.代码中有些不需要的代码可以直接删除也可以注释掉。
2.代码中有些比较难懂的地方,可以加上注释文字方便日后查看。
如:
#include <stdio.h>
int Add(int x, int y)
{
return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int main()
{
//C++注释风格
//int a = 10;
//调用Add函数,完成加法
printf("%d\n", Add(1, 2));
return 0;
}
注释有两种风格:
- C语言的注释风格
/*xxxxxxx*/
- 缺陷: 不能嵌套注释
- C++风格注释
//xxxxxxx
- 可以注释多行也可以注释单行
6.选择语句
示例
#include <stdio.h>
int main()
{
int input=0;
printf("hello world\n");
printf("你要好好学习吗?(1/0)>: ");
scanf("%d",&input);
if(input==1){
printf("good offer\n");
}
else {
printf("gg");
}
return 0;
}
7.循环语句
C语言中如何实现循环呢?
- while语句-讲解
- for语句(后期讲)
- do … while语句(后期讲)
//while实例,两万行代码量
#include <stdio.h>
int main()
{
int line=0;
printf("hello world\n");
while(line<20000)
{
printf("%d敲一行代码\n",line);
line++;
}
printf("good offer\n");
return 0;
}
8.函数
以4.变量-变量的使用为例若使用函数方法可以写为
#include <stdio.h>
int Add(int x,int y){
int z=x+y;
return z;
}
int main(){
int num1=0;
int num2=0;
int sum=0;
scanf("%d%d",&num1,&num2);
//int sum=0;
sum=Add(num1,num2);
printf("%d",sum);
return 0;
}
函数的特点就是简化代码,代码复用。
9.数组
要存储1-10的数字,怎么存储?
C语言中给了数组的定义:一组相同类型元素的集合
数组定义
int arr[10]={1,2,3,4,5,6,7,8,9,10}//定义一个整型数组,最多放十个元素
数组的使用
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
10.操作符
简单介绍为主,后续重点学习。
算术操作符
+ - * / %(取模)
移位操作符
<< >>
位操作
& | ^