导图社区 计算机二级C语言
计算机二级c语言主要包括选择题,程序设计题,c语言知识点包括函数,顺序,结构,逻辑运算,选择结构,数组结构体,文件等,有需要的小伙伴可以看看。
编辑于2022-12-02 11:13:15 河北省计算机二级C语言·
选择题
公共基础
二叉树
树的节点数:为各度的结点数之和=树中所有结点的度数之和再加1
叶子结点数为度为零的结点
叶子结点数总比度为2的结点多一个
eg:度为3的树 3*度为三的节点个数+2*度为2的结点个数+1*度为1的结点个数+0*0的结点个数(即叶子结点数)+1=总结点数=度为3的结点数+度为2的结点数+度为1的结点数+度为0的结点数
qian前中后序题(不会背的口诀)
左子树右子树
前中一样,后序倒着写;中后一样前序倒着写
栈和队列
栈按先进后出的原则,队列按先进先出的原则
栈的顺序存储及其运算
S(1:m)作为栈的顺序存储空间
top=0是栈空 top=m是栈满
入栈运算
top=bottom=NULL时,栈为空;top=bottom且不等于NULL时,栈中存在一个元素
队列及其运算
入队运算(队尾指针rear) 在队列队尾插入一个元素
rear是在最后一位
退队运算(排头指针front) 在队列排头删除一个元素
front是在首位的前一位
当front=rear=m时,循环队列为空;当front=rear且不等于m时,循环队列可能为空,也可能为满
带链的队列中,front=rear时元素为空或是1
在关系的键是想要唯一确定一行,只要知道键,就能确定关系中的其他属性
等值连接、并、笛卡尔积、交
第一范式(1NF):其中的每个属性都已经不能再分为简单项(满足最低要求)
第二范式(2NF):没有非主性属性对主键的依赖传递
结构化程序的三种基本控制结构:顺序、选择和重复
查找次数
长度为n的线性表进行快速排序,最坏的情况需要比较n(n-1)/2次
长度为n的有序列表,在最坏情况下,二分法查找需要比较log2的n次
c语言(主要部分在左侧 嘻嘻)
标识符由字母、下划线、数字组成,且开头必须是字母或下划线,不能用关键字
c源程序中二进制不能用来表示整型常量
C程序在运行过程中的所有计算都以二进制方式进行
c语言中没有逻辑类型
C语言源程序名的后缀是.C
C语言中没有<>运算符
通过函数实现模块化
主要出题形式
公共基础部分10道
c语言基础知识基本概念题3-5道左右
剩下25道左右
文件题1道
基本运算赋值题
表达式判断真假题/改写
循环类
选择类
函数类
函数定义类
查考排序类
常见函数的用法
常考scanf
指针数组字符串类
结构体类
宏定义
位运算
文件类
程序设计题
设计函数
修改字符串
跳过空格
常用函数
pow(x,y) x的y次方
fp = fopen(filename, "rb");
len=strlen(s);
判断文件结束函数feof
开方函数 sqrt(sum)
题型
统计次数
排序
数学计算
肥波那次
阶乘
n次方
平均数
素数
转化类
字符串转化为数字
二维数组转化为一维
结构体
数组表示形式
a[i].s
指针表示形式
a->s
链表
删除类
数组指针类的令设一个指针 (这样不乱)通过移动新指针改变原值
移动类
查找类
返回值、下标
素数
公共基础
朗颂题 哈哈哈 确实
括号解释的一般是对的
算法程序的运行时间是有限的
计算机系统
计算机概述
第一台电子数字计算机ENIAC
冯诺依曼-存储程序控制
程序数据存放在存储器中
计算机硬件由运算器、控制器、存储器、输入设备和输出设备组成
计算机系统的基本组成
附图
计算机硬件系统
中央处理器 CPU
运算器
对数据进行加工
控制器
分析指令,控制,协调输入输出/对内存的访问
寄存器
性能指标:字长(越长越快),主频(越高越快),运算速度(百万次/秒)
存储器
主存储器(内存)
随机RAM
只读ROM
辅助存储器(外存)外存中的数据,被读入内存中才能被cpu读取
磁盘
光盘
U盘
高速缓冲存储器
快
性能指标
速度、容量、每位价格bit
外部设备
I/O方式(主机与外设交接)
程序查询方式
查询外设状态是否准备就绪
程序中断方式
子主题
DMA方式
开辟直接的数据通道
I/O通道控制方式
每个通道挂若干外设
总线
片内总线/内部总线
系统总线(将计算机硬件连接起来)
单总线结构
总双线结构
三总线结构
通信总线
性能指标:总线宽度,总线带宽(数据传输率),时钟同步/异步
计算机的工作原理
指令用一串二进制代码表示
操作码
操作数(地址码)l
从内存中取指令的最短时间为CPU周期;分析指令时没有,执行指令>=0
数据的内部表示
计算机内部,之灵数据都是以二进制01表示的
机器数
操作系统
进程管理
存储管理
子主题
地址重定位
文件
I/O设备管理
数据结构与算法
算法
是指解决问题的方法和步骤
算法的特征
确定性:含义明确
可行性
有穷性:有限时间,有限步骤内得到一个结果
拥有足够的情报(有足够的数据)
算法设计基本方法
列举法、归纳法、递推、递归、减半递推技术、回溯法
算法复杂度
时间复杂度
计算工作量(基本次数)
空间复杂度
执行时所占的内存空间(常用空间、临时空间)
内存运算速度块,容量小;外存(egU盘,手机内存卡)相反
数据结构(研究操作对象以及他们之间的关系)
逻辑结构(前后关系)
线性结构(一对一)
线性表、队列、栈、双向链表、链式队列
连续存储、不连续存储都可
顺序存储、链式存储都可
顺序表:线性表的顺序存储结构
插入运算:从尾元素开始移动,挪出地给插入的,时间复杂度是移动元素的个数
删除元素:从被删的下一个往前挪,时间复杂度同上
(特点:只有一个开端,每个结点前后都最多只能指向一个(前件后件)
非线性结构(一对多、多对一)
树、二叉树、二叉链表
连续存储、不连续存储都可
顺序存储、链式存储都可
物理结构(存储结构,怎么存放的)
顺序结构
链式结构
每个房间放数据和指针
数据运算
插入
删除
查找
排序
二叉树
从上往下,从左往右,每个节点见三次
前中一样,后序倒着写,中后一样,前序倒着写
找到根节点,找到左子树、右子树(字数也符合上条规则)
深度、满二叉树、完全二叉树、
完全二叉树的n1要么是0/1
满二叉树叶子结点只是最后一行
子主题
N=n0+n1+n2
n0=n2+1
链表
二叉链表
从根结点开始遍历到所有结点
双向链表
可从任意节点开始遍历到所有结点
具有多重指针域
循环链表
可从任意节点开始遍历到所有结点
线性单链表
不可以从任意节点开始遍历到所有结点
链表很难说长度
排序/查找
排序
快速排序
冒泡排序
n(n-1)/2
简单插入
堆
nlog2的n
有他选他
希尔
n1.5次方
找值(长度为n的数组)
二分查找(必须是顺序存储的有序表)
log2的n
找最大值
n-1
找最小值
n-1
找某个值(顺序查找)
n
队列和栈
栈按先进后出的原则,队列按先进先出的原则
带链的队列或栈,
初始 头=尾=NULL
top!=bottom 元素个数不确定
现在头=尾等于?1
没有初始
top=bottom 元素个数0/1
栈
栈的顺序存储及其运算
S(1:m)作为栈的顺序存储空间
top=0是栈空 top=m是栈满
入栈运算
栈是屁股不动 头动
top=bottom=NULL时,栈为空;top=bottom且不等于NULL时,栈中存在一个元素
注意top的起始位置
队列
循环队列
三种情况
循环队列的初始状态为空,即front=rear=m(最大存储空间)
rear=front!=m要么是空要么是满
rear-front 个数
rear<front:rear-front+m是循环队列的大小
是队列的顺序存储结构
循环链表 错
队列及其运算
入队运算(队尾指针rear) 在队列队尾插入一个元素
rear是在最后一位
退队运算(排头指针front) 在队列排头删除一个元素
front是在首位的前一位
带链的队列中,front=rear时元素为空或是1
程序设计基础
程序设计的方法和风格
程序的可读性好;易维护,易测试;减少读程序的时间提高软件开发的效率
良好的程序要考虑的要素
1、源程序文档化
符号命名、程序注释
2、数据说明的方法
数据说明要规范化
3、语句的结构
一行一句
程序编写要做到清晰第一,效率第二
避免使用临时变量降低程序的可读性
4、输入输出
结构化程序设计
顺序结构、选择结构、循环结构
结构化程序设计遵循的原则和方法
自顶向下
逐步求精
模块化
限制使用goto语句
特点
只有一个入口和出口
结构内每个部分都有机会被执行
结构内不允许出现死循环
面向对象的结构化程序设计
对象
特征
标识的唯一性
分类型
多态性
封装性
为了实现对象信息的隐藏和安全,通常借助对象的什么特性
模块独立性
类
消息:一个实体与另一个实体传递的消息
继承
多态性
软件工程基础
软件工程的基本概念
软件:程序数据及相关文档的完整集合
分类
系统软件
工具软件
应用软件
eg:教务管理系统、收费系统
软件工程
三要素:方法、工具、过程
软件过程与软件生命周期
生命周期
定义阶段
可行性研究、需求分析
开发阶段
概要设计、实现、测试、调试
维护阶段
使用...维护..退役
软件危机(计算机在开发和维护过程中遇到了一系列严重问题)
表现:需求增长得不到满足;质量难以保证、维护度低、生产率跟不上硬件发展需求
结构化分析方法
需求分析
工作:写不下去了 拜拜
内存
顺序存储
147
一定是连续的
链式存储(非连续空间)
1->4->7
用链连起来,三个数据用六个空间
效率比顺序的好
不一定是连续的
有序表
堆
最大堆
上边的比下边两侧的大
最小堆
上边的比下边两侧的小
对比记
支持子程序调用:栈
作业处理先进先出工作模式:队列
软件结构图
关系模型
一表(二维表)一关系
元组是行,属性是列
关系代数
差运算
交运算
并运算
笛卡尔积
投影运算
选择运算
除运算
连接运算
子主题
子主题
自然连接
子主题
范式
第一范式
每个属性都已不再分为简单项
第二范式
在第一范式的基础上,其中R中每个非主属性完全依赖于R的主键
有的关系主键是复合键,可能是非主属性对主键的部分依赖
第三范式
在第二范式的基础上,并且每个非主属性都不传递依赖R的主键
数据库的三级模式
C语言知识点
初步知识
语句
{a=0;b=0;}
变量需先定义再使用
注释方法:/*注释内容*/或//注释一行
变量没有初始值的情况下,默认值和编译器有关
复合赋值表达式
a+=18相当于a=a-18
算术运算
八进制整型常量开头是0;六进制整型常量开头是0x/0X;e/E后面的指数必须有整数,前边必须有数;115L表示115是长整型数据
算数运算符的优先级
由高到低:(),*,/,%,+,-,=/+=..
++与*运算级别相同 *p++按照自右向左d的方向结合
a/=k+k*m相当于a=a/(k+k*m)
int 1.9=1
/:除 %:求余
求余运算%的运算对象只能是整型
1/2是0.5如果是整型的结果就是0,是double/f型的就是0.5
x++:先使用x原值后自增(先用再加)eg:x=1;z=x++ 则z为1,x为2
--y:先减一后打印
强制类型转换表达式
(类型名)(表达式)
(int) 3.234
逗号表达式的值是最后一个表达式的值
eg:c=(a=5,b=6);则c的值为6
函数
一些函数
pow(n,x)为n的x次方;fabs()为绝对值;sqrt()为开根号;sizeof()判断数据类型长度(整形int占4个字节,double型数据占8个字节);exit(0)为正常退出,结束程序运行
函数的调用
函数调用中实参变量对形参变量的数据传递只能把实参的值传送给形参,而不能把形参的值反向传送给实参 它们是不同的单元
函数的定义
实际参数
在主调函数中调用一个函数时,函数名后面括弧中的参数
形式参数
在定义函数时函数名后面括弧中变量名
语法
函数首部省略函数返回值类型,默认为int
除函数返回值为int类型的函数外,函数必须先定义(或说明)后调用
对函数的进一步讨论
int(*fp )(int)
指向函数的指针变量的定义
int*fp(int)
fp是一个函数,函数的返回值类型是基类型为int的指针类型
函数名相当于函数的地址(和指针类似)
顺序结构
数据输出
printf函数中的格式字符
%c:输出一个字符,%d:输出带符号的十进制整数 %s:输出一个字符串
%8.6f:输出宽度为8(包括小数点),小数点后面保留6位小数
用%%来打印字符%
数据输入
scanf函数
%3d,3指定了数据宽度
%lf,%le可以用来输入双精度
输入数值数据
在输入整数或实数这类数值型数据时,输入数据之间必须用空格、回车符、制表符等间隔符隔开
按下回车即接受了这一行的数据
再格式控制字符串中插入其他字符
eg:scanf("%d,%d,%d",&x,&y,&z) 输入:12,34,56 带逗号
scanf("Please input x,y,z :%d%d%d",&x,&y,&z);
必须原封不动地输入Please input x,y,z :12 34 56
逻辑运算
与:&& 或:|| 非 :!
不等于:!=
逻辑与操作
if(a==1&&b++==2)需要诸个执行判断
if(b!=2||c--!3)若b!=2条件成立,整个表达式为真,就不再执行第二个运算
选择结构
if(表达式)语句一;else 语句二;
if(表达式) if(表达式) 即两个if都要满足
switch语句:switch(表达式) {case 常量表达式1:语句一; case 常量表达式2:语句二;}
先执行表达式,找到符合的case,然后执行后各语句,直到switch语句结束
switch后边的表达式可以是整型以及字符型表达式,不能是浮点型或long型
每当执行break语句,立刻跳出switch语句
如果没有找到相应的case,且有default,则从default开始执行,直到switch结束
条件表达式
表达式1?表达式2:表达式3
表达式1的值非零,执行表达式2,反之,执行3
循环结构
for(表达式1;表达式2;表达式3)eg:for(k=0;k<0;k++) printf("*");
顺序:计算表达式1,计算表达式2判断是否非0进而执行循环体,计算表达式3,进而转向计算表达式2
do {循环体;} while(表达式);
先执行do,再计算while判断是否继续执行do
while(表达式) 循环体
计算表达式,当值为非0时,执行,为0时退出while循环
break提前结束本次循环;continue跳过本次循环中余下尚未执行的语句,并没有使整个循环终止l
字符型数据
字符的输入和输出
输入
getchar函数输入字符,读入一个字符作为函数值,空格、回车符都将作为字符读入 和scanf挺像的
getchar()函数输入字符给字符变量,而不是字符指针
输出
putchar(ch)
ch可以是字符变量或是字符常量
字符常量
转义字符常量
\n:回车换行,\0:空值 \\:反斜杠字符 \ddd:八进制的表示形式
转义字符别看他长 它只代表一个字符
字符常量只能用单引号括起来,字符常量只能包含一个字符
'\101'只代表一个字符
字符变量
用char进行定义
地址和指针
指针
指针是用来存放地址的变量,定义形式:类型名*指针变量名
指针需要初始化,否则无效
两种表示形式
int k,*p;p=&k;
int k,*p=&k;
在定义语句中*是一个说明符,用来说明该变量是指针变量
地址:&x
传值和传址的区别
传址:&、数组名
通过指针进而改变指向的值的值,但是如果函数改变的是指针本身那就没什么作用了
数组
一维数组
初始化
N=10;x[N]是不对的,不能用变量定义数组长度;数组长度不能为空
a[4]包括a[0],a[1],a[2],a[3]
数组元素地地址
数组名认为是存放数组第一个元素的地址值的指针变量
不可以给数组名重新赋值
二维数组
初始化
二维数组定义的一般表示形式:类型说明符 数组名[常量表达式1][常量表达式2]
常量表达式1表示第一维下标长度,常量表达式2表示第二维下标的长度
赋初值时。第一维长度可以不给出,但第二维长度得给出
a[4][3]:四行三列的二维数组eg:{{1,2,3},{4,5,6},{7,8,9},{10,11,12}}
数组元素的地址
a[3][4]数组可视为由a[0],a[1],a[2]三个元素组成,他三又是由四个元素成的数组
对于二维,a[0]++是违法的
对于二维来说,a+1的值与a[1]的值一样,都表示第一行首地址
&a[0][1]可以用a[0]+1来表示
a[i][j]的表示形式
*(a[i]+j)
*(*(a+i)+j)
(*(a+i))[j]
注意
(*a)[81]和*a[81]运算顺序不同;
解释:int a[3][2], (*prt)[2];
prt是个指针变量与说明符[2]结合说明prt指向包含2个int元素的数组
数组名类似于一个指向数组首地址的指针常量,一旦定义就不能修改其内容
字符串
字符串常量
字符串常量应该用双引号表示 eg:"cd"
赋初值
char *sp;sp="Hello!';
含义:把heiilo字符串在内存中的首地址给了char类型的指针变量
给一维字符数组赋初值
char str[10]={'s','t','!','\0'};
别忘了\0
char str[10]="string!";
数组名不可重新赋值
char *sp,s[10] s='Hello!';是不合法的 sp='Hello!';是合法的,表示把字符串的首地址赋予给指针变量sp,是sp指向该字符串
字符串的输入和输出
输入
gets(str_ad); 从终端键盘读入字符串(包括空格符),直到读入下一个换行符为止
str_ad使存放输入字符串的起始地址
用于处理字符串的函数
strlen(s):计算出以s为起始地址的字符串的长度,返回。长度不包括结束标志"\0"
’\0’是判定字符数组结束的标识,表示这串字符到结尾了; 例如 定义char c[6]=“hello”,而在内存中字符数组 c 则是"hello\0"; 所以如果一个长度为10的字符串要放在字符数组里的话就应该把字符数组的长度定义为11
strcat:字符串连接函数
遇到\0表示一个字符串结束
strcpy:字符串拷贝函数
stract(s1,s2) 把s2所指字符串的内容复制到s1所指存储空间中
子主题
strcmp(s1,s2)是比较si和s2所指字符串的大小,自左向右逐个字符相比
s1>s2,函数值大于0;s1<s2,函数值小于0;s1=s2,函数值等于0
结构体
typedef:说明一种新类型名
typedef 类型名 标识符
eg: typedef int INTEGER
struct:结构体
结构体类型
struct 结构体表示名{ 类型名 1 结构成员名表1; 类型名 2 结构成员名表2 };
结构体变量
eg:typedef struct ss { char num[10]; int s; } STU;
对结构体变量成员的引用
结构体变量名.成员名
指针变量名->成员名
(*指针变量名).成员名
链表
链表是将一个个结点连接接起来,每一个结点是一个结构体
链表里面第一个格存放data,第二个格存放下一个结点的地址值
文件
打开文件
fopen(文件名,文件使用方式);
函数返回一个文件类型的指针
FILE *fp; fp = fopen(filename, "rb+");
常见文件使用方法
w:写 会覆盖上一次写的数据
文件定位
fseek(pf , offest , origin);
pf是文件指针,offest是以字节为单位的位移量,origin是起始点
写文件
fwrite(buffer,size,count,fp);
buffer是准备输出的数据块的首地址
fprint(文件指针,格式控制字符串,输出项表),输出的内容存放在文本文件中
fputs(str,fp);
把字符串输到文件中
读文件
fread(buffer, size, count, fp)
buffer是内存块的首地址,代表读入数据存放的地址
输入文件
fscanf(文件指针,格式控制字符串,输入项表)
将文本内容输到输入项表中
判断文件结束函数
feof(fp)
如果遇到文件结束,函数feof(fp)的值为1,否则为0
指针回到文件开头
rewind(fp)
编译预处理和动态存储分配
动态存储分配
pi = (short * )malloc(2);
使pi指向一个short int 类型的存储单元,short int型数据占两个字节
编译预处理
预处理命令都'#'开头
宏定义(注意末尾不需要分号)
不带参数
#define 宏名 替换文本
带参数
#define 宏名(形参表) 替换文本
注意运算顺序,最好先写下来再说,别想当然
作用域和存储类型
局部变量
静态局部变量 static:函数调用结束后其存储单元不释放,下一次调用时保留上一次结束时的值。
在开头会赋一个初值,但是只用一回,后边再用就跳过这个初值就行
auto:在调用该函数时系统会给它们分配空间,函数调用结束时自动释放存储空间
全局变量
extern:作用域从变量定义处开始至程序文件末尾
全局变量是在函数外部任意位置上定义的变量,他的作用域是从定义处到整个源文件结束
位运算
<<:左移 >>:右移
|:按位或
若两个数都为0该位结果为0;反之为1
&:按位与
当两个相应的位都为1,该位的结果是1;反之为0
^:按位异或
若两个数相同,则该位的结果位0;若数不同,则该位的结果为1
运算符两边相同为0
~:按位求反
把运算对象的内容按位求反
eg:c=a>>3; 表示c是a右移3位
ASCII
'\0'值为0;'0'值为48
65-90A-Z 97-122 a-z