考研综合应用题中算法设计部分的代码书写规范
头文件
- 头文件部分如果题目没有特殊说明可以去掉。
常量
- 如果题目中要用到一个常量,则在用的地方加上一句注释,说明某某常量已定义即可,不必在前面补上#define XXXX。
主函数
- 写出自己的函数说明(函数体)
- 写清楚函数的接口
- 何为函数接口
- 可以理解为函数的入口和出口
- 函数定义中的形参表可以理解为函数入口。
- 函数体中的输出语句和返回值部分可以理解为函数出口。
- 何为函数接口
C与C++语言基础
数据类型
基本数据类型
- 整形
- int、long、…考研中涉及整数的题目,如果没有特殊要求用int
- 字符型char
- 浮点型float、double、…对于处理小数的题目,在题目没有特殊要求的情况下用float
结构型
结构型可以理解为用户用已有数据类型(int,char,float)为原料制作的数据类型。
- 结构体
- 结构体是系统提供给程序员制作新的数据类型的一种机制,即可用系统已有的不同的基本数据类型或用户自定义的结构型,组合成用户需要的复杂数据类型。
例
typedef struct
{
int a;
char b;
float c;
}TypeA;
指针型
指针型变量里装的是变量的地址,通过它可以找出这个变量在内存中的位置,故名为指针型。
'*‘相当于取变量内容,*a就是取变量a存储的地址所在内存单元上的内容。’&'相当于取变量地址,&b就是取变量b的地址。
例
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
int a=0;
int b=1;
int *c;
int *d;
cout<<"a和b的地址:"<<&a<<" "<<&b<<endl;
cout<<"未給c和d赋值时c,d随机指向的地址:"<<c<<" "<<d<<endl;
c=&a;
d=&b;
cout<<"c,d指向的地址即a和b的地址:"<<c<<" "<<d<<endl;
cout<<"a和b的值:"<<*c<<" "<<*d<<endl;
cout<<"c和d的地址:"<<&c<<" "<<&d<<endl;
cout<<"取c和d的地址上的存储的值即a和b的地址:"<<*&c<<" "<<*&d<<endl;
cout<<"取c和d的地址上的存储的值即a和b的地址,并取该地址上的值即a和b的值:"<<*(*&c)<<" "<<*(*&d)<<endl;
}
结点的构造
链表节点的定义
设结点有两个域:一个是数据域,用来存放数据;另一个是指针域,用来存放下一个结点的位置。
链表结点的结构型如下:
typedef struct Node
{
int data;
struct Node *next;
}Node;
二叉树结点的定义
例
typedef struct BTNode
{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
Typedef别名的知识回顾
Typedef关键字的作用就是为变量类型起个别名。
typedef struct Node
{
int data;
struct Node *next;
}Node;//别名位置
此结构体变量类型实际的名字应为:struct Node
使用此变量类型定义一个名为"stu1"的变量
struct Node stu1;
使用typedef为此变量类型定义别名"Node"后,“Node"等价于"struct Node”
用别名为此变量类型定义一个名为"stu2"的变量
Node stu2;
malloc()函数的使用
用以定义的结构体类型来制作新的结点,以二叉树为例
① BTNode BT;
② BTNode *BT;
BT=(BTNode*)malloc(sizeof(BTNode));
sizeof()计算结点类型所占空间大小的运算符,malloc()申请结点的内存空间。方法②过程:先利用sizeof计算结点所需的内存空间大小,再交给malloc取申请内存,最后将BT指针指向该内存。
使用malloc()函数模板
p=( *)malloc(sizeof( ));
将任意类型填入括号内即可生成新结点,此方法天勤考研建议熟记!
- 方法②的优点
- 方法②中的BT必要时可以离开这个结点转向其他结点,而方法①则不行。
- 方法①和②的用法不同点
- 方法①取值域:BT.data;
- 方法②取值域:BT->data;或(*BT).data
函数
考虑被传入是参数是否发生改变
例
int a;
void f(int x){
++x;
}
a=0;
f(a);
此例中a的值是不会发生改变的,在f(a)函数入口a只是把值赋给了形参x,随后函数只对内部变量形参x进行了++x操作,所以a的值没有发生改变。
如何使传入参数发生改变?
普通变量引用型传参
int a=0;
void f(int &x)
{
++x;
}
f(a);
相当于a取代了x的位置(此时x就没有实际内存空间只是a的别名),函数f()就是在对a本身进行操作。
指针型变量引用型传参
要对传入的指针进行改变
void f(int *&x)
{
++x;
}
执行完函数后,指针x的值自增1。可以这样理解:&x取出指针x自己的地址,*&x取出指针x的内容。
地址传参
void Exchg2(int *px, int *py)
{
int tmp = *px;
*px = *py;
*py = tmp;
}
Exchg2(&a,&b);
三种传参实例
#include<stdio.h>
#include<iostream>
using namespace std;
void f(int &x)//引用传参
{
++x;
}
void ff(int *&x)//指针传参
{
++x;
}
void Exchg2(int *px, int *py)//地址传参
{
int tmp = *px;
*px = *py;
*py = tmp;
}
int main(){
int a=0;
int b=2;
int *c;
int *d;
c=&a;
d=&b;
cout<<"a和b的值:"<<*c<<" "<<*d<<endl;
cout<<"c和d的地址:"<<&c<<" "<<&d<<endl;
cout<<"取c和d的地址上的存储的值即a和b的地址:"<<*&c<<" "<<*&d<<endl;
cout<<"取c和d的地址上的存储的值即a和b的地址,并取该地址上的值即a和b的值:"<<*(*&c)<<" "<<*(*&d)<<endl;
f(a);
ff(d);
cout<<"a和b的值:"<<a<<" "<<b<<endl;
cout<<"c和d的地址:"<<&c<<" "<<&d<<endl;
cout<<"取c和d(自增后)的地址上的存储的值即a和b(自增后)的地址:"<<*&c<<" "<<*&d<<endl;
Exchg2(&a,&b);
cout<<"a和b的值:"<<a<<" "<<b<<endl;
}