C语言基础
C语言有哪些数据类型?整型、实型、字符型。
为什么程序中的变量使用前必须先定义?C程序用到的变量都必须进行定义,即事先定义其类型。变量一经定义,系统就给分配存储空间,以存放相应常量。
算法和程序的区别是什么?算法是有穷的,程序是无穷的;算法和程序的描述方法不一样,程序是用计算机语言描述的;算法一般不可执行,程序可以执行
思路。
C语言源程序的文件的后缀是
经过编译后生成文件的后缀是
经过连接后生成文件的后缀
C
数学式sin35°+xcos60的C语言表达
式为
表达式
3*9%2+9%2*5
表达式
6.0*(1/2)
变量代表内存中具有特定属性的一个存储单元,
它用来存放也就是
符
若a是实型变量,在执行了a=5
后,
若a和b类型相同,在执行了a=b
编制C语言程序并上机运行的一般过程是编辑、编译、连接、运
行。
C
且第一个字符
C语言的关键字。
顺序结构、选择结构和循环结构
的程序设计
请写出switch语句的一般格式及
注意事项。
一般格式:
Switch(表达式)
{case常量表达式1:语句
组1;break;
Case常量表达式2:语句
组2;break;
……
Case常量表达式n:语句
组n;break;
Default:语句组n+1;}
1switch中表达
式可以是任意类
型,常用的是字
符或整型。2每
个常量表达式的
值不能相同。3
语句组可以为任
意语句。4break
可以省略,然后
执行完本组语句
后紧接着执行其
后的i+1组语
句。5多个case
可以用一组执行
语句。6break的
作用是跳出
switch,执行
switch下面的语
句。
试说明while语句和do-while
语句的异同:二者相同点在于都可
以进行次数确定的循环体的次数。
不同点在于do-while现执行循环
中的语句,然后再判断条件是否为
真,若为真则继续循环;若为假则
终止循环。因此,do-while循环
至少要执行一次循环语句。而
while则是先判断条件后执行循
环体
简述for语句的执行过程及注意
事项:
计算机表达式1
表达式2非0?
执行语句s
计算机表达式3
循环结束,执行下面的语句
注意事项:for语句中的3个表达
式可以省略但后面的分号不能省
略。
试说明continue语句和break语
句的作用及区别:break的功能是
跳出本层循环(对多层循环而言),
接着执行下面的语句。continue
语句的作用是执行continue时,
循环体中continue下面的语句都
不执行,重新进行循环判断以决定
是否继续进行下次循环。Break和
continue的区别在于:continue
只结束本次循环重新进行下次循
环判断,而break结束整个循环。
结构化程序的三种基本结构包括
C语言提供的选择结构语句有
有一段程序为:while(表达式)
语句1;语句2;
…
…
当表达式的值为非零时,
do-while语句中while
后的表达
才能正常
退出循环。
在C语言程序的循环体内,
若遇到
则立即停止当前循
结束本次循环,进行下一次循环判
断。
C语言中,唯一的三目运算符
&.&.
C语言中,
运算符优先级最高的是
C
C语言中,要求运算符数据必须是
整型的运算符是%
C语言中,语句x=!a==b;
的执行
3个关于C语言的结论:可以用
while语句实现的循环一定可以
用for语句实现;可以用for语句
实现的循环一定可以用while语
句实现;可以用do-while语句实
现的循环一定可以用while语句
实现。
C
语言程序中,continue语句只能
C
语言中,if和switch语句属于清明节的名言
C
语言中,语句while后一对圆括
C语言中,关于scanf()函数正
C语言中,与语句while(!E)括
号中的表达式含义
等价的是
C语言程序中,for循环语句中的
表达式2为一非零常数且循环体
内无
break语句及goto语句,则
设i是int型变量,f是float型
变量,用下面的语句给这两个变量
输入值:scanf(“i=%d,f=%f”,
&i,&f);为了把100和765.12
分别赋给i和f
,
正确的输入为
魔兽地图天龙八部设变量m,n,a,b,c,d均为0,
执行(m=a==b)∣∣(n=c==d)后,
m
,n
设变量m,n,a,b,c,d均为1,
执行“(m=a﹥b)&&(n=a﹥b)”后
m,n
若x和y都是int型变量,x=100,y=200,且有下面的程序片段:printf(“%d”,(x,y));此程序片段的输出结果是200。
当执行以下程序段时
x=-1;
do{x=x*x
}while(!x)
执行语句:for(i=1;i++﹤4;)后;变量i的值是5。
数组
若定义“int a[5];”,试说明引用a、a[0]和&a[1]的含义。a代表数组名,a[0]代表数组的第一个元素,&a[1]代表数组第二个元素的地址。
在C语言数值表示中,‘a’“a”相同吗?不同,‘a’表示一个字符,而“a”表示一个字符串。
已知:int s[2][3];试说明数组s在内存存储所占的字节数。因为变量的数据类型int在使用内存空间的时候一个数据占用2个字节的存储空间。而数组s[2][3]内部有6个整型的数据,所以一共要占用12个字节。
C
在C语言中,
二维数组元素在内存
若定义了一个二维数组int[3][4];且改数组的起始地址英雄联盟段位
为1000,则元素a[1][3]
的地址为
一个整型变量占两个字节)已知:char str[15];str
数组的
一维数组定义中表示数组长度的
同一数组中的所有元素所占字节
引用数组元素越界时,
C
Static char str[]=“ok”;与
static char c[]={‘o’
‘k’}
在定义int a[5][4];之后,对
a
在执行char str[10]=“China\0”;
strlen(str)的结果是5。
在C
语言中,引用数组元素时,其
字符串“That”小于字符串“The”。
若有说明:inta[][4]=
{1,2,3,4,5,6,7,8,9,10,11,12}
;,则数组第一维的大小为3。
若数组a有m列,则a[i][j]之前
的数组元素个数为i*m+j。
函数调用:strcat(strcpy(str1,
str2),str3)的功能是将串str2
复制到串str1中后再将串str3
连接到串str1之后。
函数
写出函数定义、函数声明、函数调
用的一般格式及注意事项。
函数定义:
函数类型函数名(形式参数列表)
﹛说明部分;
高速免费端午节语句部分;
﹜
函数声明:
其形式为:函数类型函数名();
函数的调用:主要函数通过传递一
定的信息来使用被调函数的功能。
(1)无返回值的函数调用格式(2)
有返回值的函数调用格式
在调用一个函数之前,应考虑哪
些问题?若被调函数和主调函数
在一个编译单位中,在书写顺序上
被调函数在主调函数之前出现;或
者被调函数虽然在主调函数之后
出现,而被调函数的数据类型是整
数型或字符型,可不对被调函数加
以说明。
试说明实参和形参的关系。形参
和实参的关系总的来说是一一对
应的关系。具体是:1个数相等2
顺序一致3类型相符(或实参可以
给形参正确的赋值)。
从用户角度看,
若有一下函数调用语句:func
(a+b,(x,y),fun(n+k,d,(a,
b));在此函数调用语句中实现的
个数是3。
输入带空格的字符串时,应该用
gets
()函数。
求字符串长度的函数是
到字符数组中。
变量的作用域是指变量的有效范
围,在作用域内可以引用该变量。
从函数形式看,
函数的返回值是通过函数体中的
被调函数不带回任何值。
一
般要对被调用函数做函数声明。
C语言规定不能嵌套定义函数,
但
在不同的函数中定义的变量名若
C
语言总是从主函数开始执行。
在进行函数调用时,被调函数的形
若函数类型和return语句中表达
若以数组元素作为函数的实参,则
C语言中,当用数组名做形参时,
形参数组改变可以使实参数组随
之改变。
允许函数递归调用。
函数形参的作用范围只是局限于
所定义的函数内。
一个C
源程序至少包括一个函数,
C
函数定义的形参可以有一个、多
个,也可以没有。
C语言程序总是从main函数开始
执行。
C
构成。
在一个源程序文件中定义的全局
指针
对指针变量做自加1操作后,一
定增加一个字节吗?为什么?不
一定,和数据的类型有关。
分析“*”在定义指针和引用指针
变量时有什么不同?定义语句中
“p”前面的“*”是说明p的类型
是指针变量。而除定义语句外的其
他语句中出现的“*p”里的“*”
是对p所指变量的引用,即代表它
指向的变量。
试说明指针变量可以进行哪些运
算。指针变量可以进行赋值和简单
的加减运算。
才能
将另一个变量的地址存放在改变量中。
若指针变量p指向整型变量i,则i
若指针变量p指向float型数组a[10],且a的首地址为1000,则执行p+3后,p应该指向地址为1012单元。
一个指定长度的存储空间。
C语言中,若int a[5],i,*p=a;,则与&a[i]等价的指针表示是
a[i]
已知:int a[]={1,3,5,7,9},
*ip=a;表达式*ip+2
已定义的一个指针变量可以存放
指针变量作为形参时,
指针说明时指定的数据类型是指
型。
指针变量赋值时,
赋的值是一般变
若有定义:int x,*pb
;
则正确的
若有定义:char ch;(1)使指针p可以指向变量ch的定义语句是char *p=&ch。(2)使指针p指向变量ch的赋值语句是p=&ch。(3)通过指针p给变量ch读入字符的scanf函数调用语句是scanf (“%c”,p)。(4)通过指针p给变量ch赋字符的语句是ch=*p。(5)通过指针p输出ch中字符的语句是putchar(*p)。
数据结构概论
通常将数据结构表示为一个二元组(D,R),其中D和R分别表示
什么?D代表数据节点的集合,R
是D上的关系。
什么是数据的逻辑结构?什么是
数据的物理结构?一般情况下,
两者之间有什么关系?这种关系
是如何反映的?数据的逻辑结构
是数据间的外在联系(与计算机存
储无关);数据的物理结构是数据
在计算机中的存储表示,也称数据
的存储结构。一般情况下,二者的
关系是相互运算,如何把逻辑结构
数据存入计算机;如何把机内表示
的数据取出来参加运算,在逻辑结
构和物理结构之间转换以及其他
运算过程中,数据如何组织才能即
节省时间,又节约空间,更重要的
是机内表示的数据取出来后要完
全体现其逻辑结构。
什么是算法?算法与程序有何区
别与联系?算法就是解决特定问
题的的方法。而程序是通过某种语
言将算法的具体实现手段。
算法的时间复杂度仅与问题的规
模相关吗?不是。算法的时间复杂
度还与算法中的语句频度、数据的
状态等因素有关。
选择合适的存储结构,
通常考虑的
因素。
数据结构按节点间的关系,
可分为
4
树形结构反映节点间的关
网状结构反映节点
数据的逻辑结构是数据之间的外
在联系(与计算机存储无关)。
数据的逻辑结构与数据元素的相
对位置相关。
数据的逻辑结构与其所含数据元
素的个数无关。
数据元素之间的逻辑关系与存储
单元的相邻关系无关。
在数据结构中,从逻辑上可以把数
数据结构是一门研究操作对象以
科。
线性表
简述单链表、循环单链表、循环
双链表的结构特点。(1)单链表的
结构:由节点构成,每个节点有两
个成员:数据域和指针域。单链表
的特点:每个节点都只有一个指向
直接后继节点的指针,最后一个节
点的指针域为空,单链表是只有一
个链域的链表。(2)循环单链表结
构:由节点构成,每个节点有两个
成员:数据域和指针域。循环单链
表特点:链表中最后一个节点的指
针域指向头结点,整个链表形成一
个环。(3)循环双链表结构:由节
点构成,每个节点包括三个域:数
据域、前驱指针域和后继指针域。
循环双链表特点:节点的next指
针域指向后继节点,prior指针域
指向前驱节点。
简述顺序表和链表的主要优、缺
点及适用范围。(1)顺序表用一组
地址连续的存储单元存放线性表
中的数据,表中元素的物理关系和
逻辑关系是一致的。表中元素可以
随机存取,但在程序执行之前必须
给出空间长度,容易造成空间浪费
或者空间不够的情况。链表用一组
任意的存储单元存储线性表的数
据元素,利用指针实现了用不相邻
的存储单元存放逻辑上相邻的元
素。存储空间动态分配,不会产生
溢出,但空间利用率低,节点访问
需要从表头开始依次访问。(2)顺
序表适用于经常进行查运算的
数据,或者对数据量事先固定的问
题。链表适用于经常进行插入、删
除等数据量变化较大的动态问题。
比较线性表的顺序存储结构与链
式存储结构存储空间开销大小,
并说明理由。顺序存储结构存储空
间开销小,链式存储结构存储空间
开销大。存储空间开销大小可以用
存储密度衡量。存储密度=节点数
据域所占空间/节点所占空间。节
点存储密度越大,空间利用率越
高,则存储空间开销越小。顺序存
储结构每个节点占一个空间,即存
储数据域的空间,而链式存储结构
每个节点所占两个空间,即存储数
据域的空间和存储指针域的空间。
对于线性表的顺序存储结构与链
式存储而言,若线性表的长度基
律师写遗嘱本稳定,且很少进行插入与删除
操作,但要尽快地存取表中的数
据元素,则应该选择哪种存储结
构?为什么?应该选择顺序存储
结构。因为线性表的长度基本稳
定,可以预先进行分配,且要求尽
快地存取表中的数据元素,而顺序
表中元素可以随机存取。
若频繁地对线性表进行插入与删
除操作,该线性表应该采取什么
存储结构?为什么?应该选择链
式存储结构。对线性表进行插入与
删除操作,顺序表需要大量移动元
素,而链表只需要修改需要相应的
指针域就可以了。
有哪些链表可仅由一个尾指针来
唯一确定,即从尾指针出发能访
问到链表上任意一个节点?循环
单链表和循环双链表。
在单链表、循环单链表和循环双
链表中,若仅知道指针p指向某
节点,不知道头指针,能否将节
点*p 从相应的链表中删除?若可以,且时间复杂度各为多少?单链表不可以。循环单链表、循环双链表可以。单链表时间复杂度O (n ),循环单链表时间复杂度O (n ),循环双链表时间复杂度O (1)。
访问一个线性表中具有定值元素
对于一个为n 的顺序存储的线性表,
在表头插入元素的时间复杂性
一个线性表是限序列。
在一个顺序表的表尾插入一个元在一个单链表中,若要在p 所指向
的节点插入一个新节点,则需要相 在一个单链表中,若要在p 所指向的节点插入一个新节点,
则此算法在一个带头节点的双向循环链表
中,若要在p 所指向的节点之前插
入一个新节点,
一个根节点,它无前件;有且只有一个终端节点,它无后件;除根节点和终端节点以外,
其他节点有且只有一个前件,也有且只有一个后件。 在单链表中,
增加头节点的目的是
在线性表的顺序存储中,
元素之间
决定的;在线性表的链接存储中,
在双向链表中,
每个节点包含两个指针域,
另一
在线性表的顺序存储中,若一个元
素的下标为i ,则它的前驱元素的
下标为一个线性表中,第一个元素的存储地址是100,每个元素的长度是
黑石塔上层2,栈、队列和数组
简述栈和队列的相同点和不同点。相同点:都是存储数据的线性表。不同点: 栈为LIFO (后进线出)
线性表,插入、删除操作均在表尾进行。队列为FIFO (先进先出)线性表,插入在表尾进行、删除在表头进行。
若进栈的数据元素序列依次为1、2、3、4、5、6,能否得到4、3、5、6、1、2和1、3、5、4、2、6的出栈列?并举例说明为什么不能得到或如何得到。(1)不能得到4、3、5、6、1、2的出栈列。最先出栈的是4,则此时栈底元素为最先入栈的1、然后依次向上为2、3、4、4、3出栈后;5入栈,再出栈;6入栈,再出栈;这时得到序列为4、3、5、6;这时栈顶元素为2,2出栈后,1才能出栈,所以1不可能先于2出栈,因此不能得到此序列。(2)可以得到1、3、5、4、2、6的出栈列。1入栈,再出栈,1为第一个出栈元素;2入栈;3入栈,再出栈,3为第二个出栈元素;4、5一次入栈,此时,栈底元素为1,5成为栈顶元素,则5出栈,然后4出栈,然后2出栈;之后6入栈,再出栈;因此可以得到此出栈序列。
向一个顺序栈加一个元素时,
首先
从一个顺序栈删除元素时,
一个顺序栈存储于一维数组a[m]中,栈顶指针用
top 表示,当栈顶
在一个链栈中,若栈顶指针等于NULL
在一个链队列中,若队首指针与队尾指针的值相同,在具有n 个单元的循环队列中,
队
已知二维数组A[1:4][1:6]采用行序为主序方式存储,每个元素占用三个存储单元,并且A[2,2]的存储地址为1200,元素
A[3,4]的若将n 阶三对角矩阵A 按照行序为主序方式将所有非零元素存放在一个一维数组B 中,
则该三对角矩阵在B 队列只能在队首进行删除,在队尾进行插入。
队列属于数据结构中存取受限制的线性结构。
链栈的所有操作都限制在表头进行,所有没有必要设置头结点。 链栈与顺序栈相比,通常不会出现栈满的情况。
顺序栈是线性结构,链栈也是线性结构。
一个栈的入栈序列是a 、b 、c 、d
、e ,则栈的不可能的输出序列是
向顺序栈中压入新元素时,当利用大小为N 的数组顺序存储一个栈时,假定用top==N 表示栈
空,则向这个栈插入一个元素时,top 指针。
假定利用数组a[N]顺序存储一个栈,用top 表示栈顶指针,top==-1
表示栈空,并已知栈未满,当元素x 进栈时所执行的
操作为假定一个链式栈的栈顶指针用top 表示,每个节点的结构为
一个队列的入队顺序是1、
2、3、
4假定一个顺序队列的队首和队尾指针分别用front 和rear 表示,
则判断对空的条件为判定一个循环队列
Q (最多元素为m0)为空的条件
是
判定一个循环队列
Q (最多元素为m0)为队满的条件是若将n 阶对称矩阵A 按照行序为主序方式将包括主对角线在内的下三角形的所有元素存放在一个一维数组
B 中,则该对称矩阵在B
判定一个栈(最多元素为m )为空
判定一个栈ST (最多元素为m )为栈结构通常采用的两种存储结构
在一个链队中,假设f 和
r 分别为队首和队尾指针,则插入s 所指节
在一个链队中,假设f 和r 分别为
队首和队尾指针,则删除一个节点
树和二叉树
对于一颗具有n 个节点的树,该树
在一颗二叉树中,假定度为2的节点数为5个,度为1的节点数为6
具有40个节点的完全二叉树,它
已知
8
个数据元素为
34,76,45,18,26,54,92,65,按照
依次插入节点的方法生成一颗二
二叉树的
5
若由3、6、8、12、10作为叶子节点的值生成一颗哈夫曼树,则该树
任意一颗有n 个节点的二叉树,若它有
m 个叶子节点,则二叉树上度为1若一颗二叉树叶子树为n
,在该二叉树中,左、右子树皆非空的节点由一个二叉树的先序和中序或后序和中序遍历结果可以唯一地确定一颗二叉树。
二叉树中,任何一个节点的度数为2。
一颗哈夫曼树中存在度为1的节点。
树的先根遍历顺序与其对应的二叉树的先根遍历序列相同。
按二叉树的定义,具有3个节点的
已知某二叉树的后序遍历序列是
dabec ,中序遍历序列是debac ,
树中所有节点的度等于所有节点在一颗度为3的树中,度为3的节
点数为2个,度为2的节点数为1个,度为1 的节点数为
2个,则度为0已知某二叉树的后序遍历序列是
DACBE ,中序遍历序列是DEBAC ,
在一颗二叉树上第8层的节点数在深度为
5的满二叉树中,叶子节
设一颗完全二叉树共有500个节点,节点。
若某二叉树的前序是stuwv
,中序是uwtvs
任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对若T2是由有序树T
转化而来的二叉树,那么T 中节点的前序就是T2若T2是由有序树
T 转化而来的二叉树,那么T
中节点的后序就是T2
深度为
5
在一非空二叉树的中序遍历序列中,
在一颗具有n 个节点的二叉树中,
某二叉树的前序序列和后序序列正好相反,
在有n 个叶子节点的哈夫曼树中,
从概念上讲,树与二叉树是两种不同的数据结构,
将树转化为二叉树图
一个带权联通图的最小生成树是否唯一?说明在什么情况下最小生成树有可能不唯一。一个带权联通图的最小生成树不一定唯一。若是图中同时存在若干个权值相同的边,选择不同点起点,可得到不同的最小生成树,但这些最小生成树边上权值之和均为定值。 用邻接矩阵表示图时,矩阵元素的个数与
顶点个数是否有关?与边的条数是否有关?矩阵元素的个数与顶点个数有关,顶点个数为n ,则矩阵元素的个数为n*n ;矩阵元素的个数与边的条数无关。 简述图的连通分量和图的生成树的区别。图的连通分量是这个图的最大连通子图,就是其本身。图的生成树是含有该连通图的全部顶
点的有关极小连通子图。 在一个图中,所有顶点的度数之和
n 顶点的无向连通图至少
在利用表示有向图的邻接矩阵中,对第i 行的元素进行累加,
可得到第i 而对第j
列元素进行累加,可得到第
j 个顶点的
n 个顶点,则它的生成树有一个无向图有
n 个顶点和e 条边,当无向图
G 的顶点度数的最大值G 至少有一条回路。
已知一个图的邻接矩阵表示,删除所有从第i
个节点出发的边的方
在图的邻接表示存储结构上执行
在图的邻接表示存储结构上执行
在一个具有n
个顶点的有向完全
n 个顶点的连通图中边的条数至
对于一个具有
n 个顶点和e 条边的有向图和无向图,
在其对应的邻接表中,所含边节点分别有
在一个图中,所有定点的度数之和
在一个有向图中,所有定点的入度之和等于所有顶点的出度之和的
一个有n
常用的查方法
假定对节点个数
n=50的有序表进行折半查,则对应的折半查判
最后一层的节点个
对于节点个数为n 的线性表,若顺序查关键字为k
的节点,则成功
在插入排序和选择排序中,
若原始数据已基本有序,
在最好情况下,对于具有n
个元素的正序序列,若采用冒泡排序,所
对有序表进行折半查的过程可用判定树来描述,
其判定树的形态
表,若采用折半查,则查第15 在一颗深度为h 的具有n 个节点的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论