1 C语言基础
语言基础认识:二进制语言,汇编语言,高级语言
C语言优点:代码量小,执行速度快,简洁
缺点:自由易出错,实现周期长
开头的是预处理指令,在预处理阶段进行处理
include展开头文件,需要调用函数查找对应头文件
<>从系统路径查找
""先从指定路径查找,再从系统路径查找
system函数使用:system("calc")调计算器
system("notepad")调文本编辑器
C语言编译过程:预处理,编译,汇编,链接
2 常量和变量
声明:extern int a;
声明变量不为其开辟空间,而定义变量覆盖其空间
常量
定义:#define 变量名 变量值 (无分号)
const 数据类型 变量名 = 变量值;
变量
定义:数据类型 变量名 = 变量初始值;(计数用)
数据类型 变量名 ;
变量分为局部变量和全局变量
全局变量可以在任意位置使用(但当局部有与其同名变量,全局变量会被屏蔽)
局部变量一般指在循环结构或顺序结构中的变量
3 关键字与注释
注释:
// 单行注释
/**/ 多行注释
关键字:
由字母数字下划线组成(首字符不可为数字)
区分大小写
不可用标识符命名
4 数据类型
有符号数与无符号数:有符号数最高位为符号位,无符号数则全为数字位
整形:
长长整形 long long(8字节) 范围-2的63次方到2的63次方
长整形 long(4字节)
整形 int(4字节) 两者范围均为-2的31次方到2的31次方(一般使用,当出现数字过大相乘要longlong)
短整型 short (2字节)范围-2的15次方到2的15次方
实型:
单精度float(4字节) 六位小数(一般当double满足不了需求使用) 赋值要在后面加f不然默认双精度
双精度double(8字节) 十五到十六位小数
C++中保留n位小数:
头文件
使用:cout<<fixed<<setprecision(n)
cout<<a<<endl;
C++中的小数取整:
头文件
floor(x)向下取整
ceil(向上取整)
round(x)四舍五入
trunc(x)想0取整,小数为0
字符型:(1个字节的整形)
范围:-2的7次方到2的7次方
定义:char 变量名 = ‘’(单引号,单字符)
字符型变量中字母对应ASCII值:A为65,@为64
转整可以得到ASCII码值:cout<<(int)ch<<endl;(转整方法)
a = 97,b = 98,.......z
字符串型:
定义:头文件
理解举例:string s = "x,y,z"3个字符加一个字符串 一共4个字符
string s ="'x','y','z'" 3个独立字符 共3个
C++中的字符数组:
string s = ""
大小:s.length()
读取元素:cin
截取字符串:string s = substr(开始下标,多少个字符)
拆分并输出字符的方法:
isdigit() 判断是否为数字,不为数字返回字符
遍历字符数组:
for循环
范围for循环:
for(数据类型 变量(用来代替容器中的一个单位,如在字符数组中为字符变量):容器)
转义字符:
/t 输出并对齐
/n 输出并换行
// 输出/并换行
举例理解:
八进制转义字符“\ddd"
十六进制转义字符:”\xhhh“
八进制:”\37“
求内存:sizeof(容器,变量名,数据类型)
进制:
二进制,十进制,八进制,十六进制
十进制转其他进制:除以相应的数字,倒叙即可
二进制转十进制,直接2的多少次方×位上数字即可
八进制转十进制:每三位看作一位
十六进制转十进制:每四位看作一位
标准化输入输出:
%d,%u 有符号,无符号整形
%f,%lf 浮点型
%c %s 字符型,字符串型
%p 指针型
%e 科学计数法
%l_ 长
%m.n 数据最小宽度为m,不足补空格,保留n位小数
%- 左对齐,补空格
%0 不足位数补0
scanf中的c4996错误:(scanf遇到空格停止)
使用scanf_s strcpy_s
字符,字符串输入输出:
putchar() 输出字符
getchar() 接受字符
gets() 直到换行结束
puts() 自动换行结束
fgets (首地址,最大数,stdin)
fputs (首地址,stdout)
strlen() 长度
strcmp() 比大小(从第一个不同字符开始,ASCII)//返回0或ASCII码之差
strcat strncat 追加 后附带“\0"
5 运算符
优先级:算术>关系>赋值
算数运算符:+-*/
两个整数相除结果必为整数,除非两数都变为浮点数
注释:整数除法自动省略小数
小数除法会保留小数
%两个小数不能取模
赋值运算符: (int a=b=值 不可连续赋值,加逗号则可)(从右向左计算)
= += -= *=/=
比较运算符:(比较结果返回1或0)
<
= <=
== !=
逻辑运算符:(适用于各种数据类型)(结果返回1或0)
非!
与&&
或||
三目运算符
a?b:c
a真则b否则c
逗号运算符:最后一个值赋给变量
类型转化:
显示:(int)a;
隐式: a/(b*1.0);
6 程序结构:
顺序结构:主代码 从头到尾
选择结构:
if
单句if
多行if else分两路
多条件 if elseif else并列(简化版:三目运算符)
满足条件只有一条执行
嵌套:if内加if
多个if 多次判断
swith(整形 字符型)
swith(表达式(判断返回值是否位真或者说表达式结果是否是case)){
不同结果
case1: 执行 break;//不加break继续顺序执行
case2:执行
case3:执行
}
循环结构:
while do while
while(条件){执行}
dowhile先运行一次
for循环:
for(起始式;条件式;循环式){执行}
嵌套for 外层运行一次内层运行一周
原则:为了避免死循环,while和for条件不可永真
跳转语句:break 可以退出switch和循环结构(一层循环)
continue:跳出此次循环中未完成的部分,重新循环
goto语句:无条件跳转
定义一个标志flag =
go to flag;
7 数组:
定义:连续内存位置组成的(每个数据元素类型都相同)
一维数组:
定义:数据类型 + 数组名【元素个数】 = {列举}
查找:arr[]
遍历:for(int i =0;i<n;i++){}
求内存:sizeof(arr)
首地址: arr
求个数: sizeof(arr)/sizeof(arr[0])
某元素地址:&arr[]
二维数组:
定义:数据类型 数组名 【】【】 = {(),()}
查找:arr[][]
遍历:for(int i =0;i<n;i++)
{
for(int j =0;j<n;j++)
{
cout<<arr[][]
}
}
数组中调换首尾元素:
int start = 0;
int end = sizeof(arr)/sizeof(arr[0])-1;
互换代码:
int temp = arr[start]
arr[start] = arr[end]
arr[end] = temp;
数组中计算最大值:
int max = 0;
for(int i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
if(arr[i]>max)
{
max = arr[i]
}
}
冒泡排序:(降序)
比较相邻元素,如果前一个元素大于后一个元素,则调换位置,直到找到第一个最大值为止,之后每次比较次数减一,直到无需比较
排序总轮数 = 元素总数-1
每轮比较数 = 元素总数-轮数-1
for(int i =0;i<n-1;i++)
{
for(int j = 0;j<n-i-1;j++)
{
if(arr[i]>arr[i+1]
{
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
数组中统计总和:
int sum = 0;
sum+= ;
8 函数:
定义: 返回值类型 函数名 (形式参数)
{
函数体语句
return 表达
}
调用:函数名 (实参);
函数的值传递与地址传递:
值传递:输入实参到形参的位置,不改变实参数值
地址传递:形参为指针,实参输入元素地址
函数分类:
有参有返 return
有参无返
无参无返
无参有返
函数的声明:
在函数定义前出现调用样式,使用声明提前告知系统存在函数
函数的分文件编写:
创建后缀为.h的头文件
创建后缀为.cpp的源文件
头文件中写函数声明
源文件中写函数定义
头文件#include
源文件中#include"函数名.h"
引用:主文件中加#include"函数名.h"
头文件重复包含:
加#pragma once
ifndef_soMEFLE_H_
9 指针:
定义:储存元素地址编号的一个容器
指针变量可以通过地址得到数据
定义:数据类型 p = 元素(&a)
记录元素地址:p=&a
指针解释:p 返回对应位置数值
指针内存:sizeof(p)
空指针和野指针:
空指针:指向内存编号为0的位置
int*p = NULL
向空指针输入数据会导致程序崩溃
0-255的内存编号为系统占用,不可访问
野指针:指向非法位置的指针
const修饰指针:
常量指针:const int p指向可变,大小不变
指针常量:int constp指向不变,大小可变
常量:const int constp
指针与数组:
intp = arr;
for(int i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
cout<<p<<endl;
遍历数组
}
指针与函数----地址传递:
void f (intp,intp2)
f(&a,&b)
指针数组: int * p[];
数组指针: int(*p)[];
10 结构体
定义:使用者自定义的数据类型,包含多种元素
struct 结构体名 {结构体成员列表};
创建结构体变量:struct(C++中可省略) 结构体名 变量名
访问结构体变量:s.其中成员
结构体数组:
struct 数组名【】={{}{}{}}
赋值: arr[].
结构体指针:
structp =
访问: p ->
结构体嵌套:
结构体的一个成员为另一个结构体
结构体与函数:
结构体可以做形式参数:void f(structp或struct s)
const修饰结构体:
void f(const struct*p)
可以避免地址传递时实参被错误改变
浙公网安备 33010602011771号