会有考察语句规范性的题目,一定要看清再作答
先写编程题
目录
-
C语言数值规范
-
数学类函数
在C语言中
- 对浮点数求绝对值使用fabs()函数。
- abs()仅对整型求绝对值
-
程序执行语句
- exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统。
- exit(0) 表示程序正常退出,exit⑴/exit(-1)表示程序异常退出。
- exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束。
-
字符串输入
- 运用scanf输入字符串在遇见空格是会停止读入
-
字符串及其表示问题
- \0于字符串中表示的ASCII码为0x00
- for循环终止条件是数组的值的等于0时而0的ASCII码应该是'0'
-
关于变量储存类别
-
读取二进制文件的函数
-
关于文件操作
三个函数的声明源代码(翻译后):
- FILE * fopen(const char * path,const char * mode);
- int fwrite(const void* ptr, int size, int count, FILE* fp);
- int fseek(FILE *stream, long offset, int fromwhere);
-
循环队列
队头指针:指向队首元素的前一个位置
队尾指针:指向队尾元素
- 定义:为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向
- 量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。
- 注:此处b为排头元素,队列头指针只是指向了头元素之前一个位置
- 循环队列的长度的计算:
- 情况一:Tail>Head,循环队列的长度:Tail - Head
- 情况二: Tail<Head,循环队列的长度:(0+Tail) + (MAXQ - Head)
-
关于循环队列的运算
-
带链栈
- 带链栈是单链表的一种是特殊的单链表,由于栈的特性只能先进后出
-
二分法查找
- 定义:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
- 比较次数:
计算公式:
当顺序表有n个关键字时:
查找失败时,至少比较a次关键字;查找成功时,最多比较关键字次数是b。
注意:a,b,n均为正整数。
-
二维数组(指针偏移表示法)
- 先贴上错误代码:
void fun( char (*t)[M], int *a ,int *c)
{
int i=0,j=0;//循环统计的下标
*a=0;//初始化a字符统计个数
*c=0;//初始化c字符统计个数
for(i=0;i<M;i++)//行
{
for(j=0;j<M;j++)//列
{
if(*(t + i)[j]=='A')//字符是a,计数
(*a)++;
if(*(t + i)[j]=='C')//字符是c,计数
(*c)++;
}
}
}
- 正确代码:
void fun( char (*t)[M], int *a ,int *c)
{
int i=0,j=0;//循环统计的下标
*a=0;//初始化a字符统计个数
*c=0;//初始化c字符统计个数
for(i=0;i<M;i++)//行
{
for(j=0;j<M;j++)//列
{
if(t[i][j]=='A')//字符是a,计数
(*a)++;
if(t[i][j]=='C')//字符是c,计数
(*c)++;
}
}
}
很明显在遍历判断字符时两者用了不同的表示方式去表示数组的元素
在使用指针偏移的时候看似很正确的使用方法实际上时错误的:
#include "stdio.h"
#include "stdlib.h"
#define M 3
int main()
{
int a[M][M] ={
{1, 2, 3},{4, 5, 6},{7, 8, 9}
};
int i, j;
int (*t)[M] = a;
for(i = 0;i < M; i ++)
{
for(j = 0; j < M; j ++)
{
printf("%d ", t[i][j]);
printf("%d ", *(t + i)[j]); // printf("%d ", (*(t + i))[j]);
printf("\n");
}
}
return 0;
}
如果使用注释外的表示方法:
注释内的表示方法:
细微之处见真章
-
语句定义问题
- 定义指针的指针应为int **p
- 还是那句话注意细节
-
函数声明问题
- 函数声明可以只声明类型不定义形参变量
-
数据库管理系统
- 数据库拥有三级模式(概念模式、外模式、内模式)和两级映射(概念模式到内模式、外模式到概念模式)
-
线性结构定义辨析
- 双向链表节点有两个指针域但它是线性结构。
-
二叉树的遍历
- 研究二叉树遍历时需要抓住各种遍历的特点进而推得问题答案
-
变量名定义
- 在C语言中预定义标识符可以被重定义可以作为变量名(虽然最好不要这么做)(预定义标识符是C语言中系统预先定义的标识符,如系统类库名、系统常量名、系统函数名。)
-
字符串的定义和初始化
- 字符串的结束标志(\0)是判断其是否为字符串的重要标志
-
叶子结点数的计算
树中节点数=树中所有结点度之和
-
二叉树的三种序列遍历
前序:根左右
中序:左右根
后序:左右根
-
关系模型中的元组
-
二叉树节点数的计算: