信息学竞赛中可能用到的C++语法

上传人:洪易 文档编号:40516791 上传时间:2018-05-26 格式:DOC 页数:9 大小:50KB
返回 下载 相关 举报
信息学竞赛中可能用到的C++语法_第1页
第1页 / 共9页
信息学竞赛中可能用到的C++语法_第2页
第2页 / 共9页
信息学竞赛中可能用到的C++语法_第3页
第3页 / 共9页
信息学竞赛中可能用到的C++语法_第4页
第4页 / 共9页
信息学竞赛中可能用到的C++语法_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《信息学竞赛中可能用到的C++语法》由会员分享,可在线阅读,更多相关《信息学竞赛中可能用到的C++语法(9页珍藏版)》请在金锄头文库上搜索。

1、1信息学竞赛中可能用到的 C+语法冯文科虽然我们总是习惯写“C/C+” ,其实大家都知道 C 与 C+是两种不同的语言:C+是 C 的“超集”它“几乎”完全兼容 C 的语法,同时也提供非常多特有的语法与概念。 本文并不想全面介绍 C+的语法与概念那足够写一本一寸多厚的专业书籍只 是将信息学竞赛中可能要用到的 C+语法做个简要介绍,它们的加入将使您原有的 C 程序 更简洁、清晰,书写更方便。 首先要说明的一点是:C+程序源文件的扩展名是“cpp” ,而不是 C 程序的“c” ,这 也是多数编译器识别一个源程序是 C+程序还是 C 程序的标准。由于 C+是 C 的“超集” , 因此您可以在“*.c

2、pp”文件中原样书写 C 程序而且“几乎”不会遇到什么问题。特别强调: 本文中介绍的语法,都是只能在“*.cpp”文件中使用的 C+语法,C 语言的编译器不会编 译通过。 (本文中所有源程序都在 Dev-C+中编译通过。 )一、输入输出流。 C+中对输入输出部分做了很大的修改,C 语言中使用 scanf、fscanf、printf、fprintf 进 行的输入输出工作都由对“流(stream)”的操作代替了。您可以向一个输出流中用“”符号从一个输入流中“提取”一些 内容相当于输入。例 1 (从键盘读入及向屏幕输出)从键盘读入两个整数,由小到大排序后输出,用空格 分开。 源程序#include

3、/要使用输入输出流必须的头文件,注意没有“.h” using namespace std; /要使用 cin 与 cout 必须包括的命名空间int main(int argc, char *argv) int a, b;cinab; /cin 是标准输入流,此语句从键盘输入两个整数,依次存入 a、b 中if(a /要使用文件输入输出流必须的头文件 using namespace std; /要使用 ifstream 与 ofstream 必须的命名空间ifstream inf(“in.txt“); /定义文件输入流 inf,并关联到 in.txt ofstream ouf(“out.txt“

4、); /定义文件输出流 ouf,并关联到 out.txtint main(int argc, char *argv) int a, b;infab; /从 inf 中输入两个整数if(a using namespace std;#define N 10ifstream inf(“in.txt“); ofstream ouf(“out.txt“);struct stu /定义结构体 stu char name20;int score; ;int main(int argc, char *argv) int i;stu data10; /结构体名称“stu”可以直接用于定义变量for(i=0;id

5、atai.namedatai.score;int j; /在使用前定义变量for(i=0;ii;j-)if(dataj.scoredataj-1.score)stu t;t=dataj;dataj=dataj-1;dataj-1=t;for(i=0;i using namespace std;int main(int argc, char *argv) int *p;p=new int; /为指针 p 申请一个整数的空间,new 后的类型必须与*p 的类型一致*p=3;cout using namespace std;ifstream inf(“in.txt“); ofstream ouf(“

6、out.txt“);struct stu char name20;int score; ;int main(int argc, char *argv) int i, n;stu *data; /定义一个 stu 的指针,用于分配数组infn;data=new stun; /分配 n 个 stu 的空间,由 data 指向for(i=0;idatai.namedatai.score; /使用时与静态数组没区别int j;for(i=0;ii;j-)if(dataj.scoredataj-1.score)stu t;t=dataj;dataj=dataj-1;dataj-1=t;for(i=0;i

7、 using namespace std;void swap(int t=a; /交换变量的值a=b;b=t; int main(int argc, char *argv) int a, b;cinab;cout=10000)个整 数,然后查找 m(m=5000)个整数是否在其中,并将结果输出到 out.txt 中。in.txt 的结构: 首行两个整数,分别表示 n 和 m,其后是 n+m 行,每行一个整数。前 n 行是原始整数,后7m 行是待查整数。out.txt 中输出 m 行,每行一个整数,表示待查的整数,空格后是“IN” 或“OUT” ,表示该数是否在原始集合中,输出时请保持输入时 m

8、 个数的前后次序。 算法分析 由于原始集合较大,采用顺序查找明显是不行的。因此决定使用二叉搜索树(BST, 当然也可以考虑快速排序后的二分或用哈希表) 。 源程序#include using namespace std;struct node /二叉树结点结构体 int data;node *left, *right;node() /构造函数,使初始化工作自动完成,函数名与结构体名相同left=NULL;right=NULL;node() /析构函数,使清理工作自动完成,函数名为结构体名前加“”left=NULL;right=NULL; ;node *root=NULL; /BST 的根 in

9、t n, m; ifstream inf(“in.txt“); ofstream ouf(“out.txt“);void build() /构造 BST int i, d;infd;root=new node; /先读入一个,建个“最小的树”root-data=d;for(i=0;id;node *temp;temp=root;while(true)8if(dtemp-data)/向右枝查找if(temp-right!=NULL)temp=temp-right;elsetemp-right=new node; /插入temp=temp-right;temp-data=d; /只处理 data

10、即可,left 与 right /已经在 new 时通过构造函数自动设置为 NULL 了。break;else if(ddata) /向左枝查找if(temp-left!=NULL)temp=temp-left;elsetemp-left=new node; /插入temp=temp-left;temp-data=d;break;else /出现相同整数,则不再处理break; bool search(int d) /查找 BST node *temp;temp=root;while(temp!=NULL)if(d=temp-data)/找到break;else if(dtemp-data)/

11、向右枝查找temp=temp-right;else/向左枝查找temp=temp-left;if(temp=NULL)return false;else9return true; void clear(node *clear(root-left);clear(root-right);delete root;/归还空间,自动执行析构函数 int main(int argc, char *argv) infnm;build();int i, d;for(i=0;id;if(search(d)oufd “IN“endl;elseoufd “OUT“endl;clear(root);return EXIT_SUCCESS; 以上是在编写 OI 程序时可能会用到的 C+语法,虽然并不复杂,却可以使编写过程 更加方便,减少出错的概率。2005 年 9 月 7 日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号