acm学习前的忠告

acm学习前的忠告

ID:36277181

大小:251.81 KB

页数:29页

时间:2019-05-08

acm学习前的忠告_第1页
acm学习前的忠告_第2页
acm学习前的忠告_第3页
acm学习前的忠告_第4页
acm学习前的忠告_第5页
资源描述:

《acm学习前的忠告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一些初学者必须要知道的问题1.如何用C/C++处理输入输出2.复杂度和程序优化3.初学者如何进行修炼1.如何用C/C++进行输入输出相对次要的问题,但成为很多初学者的拦路虎C/C++(尤其是C)输入输出方法较复杂,需要一定时间实践才能精通我的任务:通过实例提供处理各种输入输出任务的方法,并讲解一些原则性的问题,同学们可以举一反三首先,几个基本概念什么是标准输入、标准输出?标准输入(stdin):键盘(scanf,cin)标准输出(stdout):屏幕(printf,cout)建议程序中只使用stdin和stdout要打开文件怎么办?fre

2、open(“input.txt”,“r”,stdin);freopen(“output.txt”,“w”,stdout);ACM/ICPC中基本上都是要求从键盘输入,屏幕输出是人工评测?否,测试前程序被做了重定向,就向上面一样,只不过重定向是外部的比如,LinuxShell下$./progoutput$diffoutputanswer所以,严格按照题目描述来进行输入输出,不要打印任何题目未做要求的信息ACM/ICPC的输入输出特点:流式、ASCII顺序输入、输出,避免使用文件定位函数(如:fseek)不需要把所有的输出放在一

3、处进行,随时都可以输出,只要顺序是对的,因为只有当你的程序终止了,与正确答案的比较才会开始字符格式,12345是5个字符‘1’,’2’,’3’,’4’,’5’构成所以,C中只能使用处理ACSII文件的输入输出函数(getchar,putchar,scanf,printf,gets,fgets,puts)使用C++进行输入输出cin,cout优点数据类型自识别,使用简单缺点速度慢!ACM/ICPC的测试数据规模非常大,cin/cout在这种情况下会成为性能瓶颈,引发超时除非输入规模小,否则不推荐使用cin!输出规模相对较小,在某些情况下使用

4、cout会很方便,但是cout控制输出格式不如printf灵活一个重要的误区不要在一个程序中同时使用cin和C输入函数(如:scanf)也不要同时使用cout和C输出函数(如:printf)但是,可以C输入函数和cout搭配使用,反之亦然违反以上原则可能导致输入/输出结果错误(会发生乱序)!推荐使用C函数进行输入输出输出:printf(putchar,puts),其用法请查阅相关书籍,比较简单,不做重点讲解每一行输出完后要打印回车’’,包括最后一行输入:scanf,fgets(gets),getcharscanf输入格式%d%lld%

5、c%s%lf对每种格式搞清楚一个重要问题是否自动跳过前导空白?什么是空白:空格,TAB,回车%d%lld%lf自动扫描前导空格比如:读入5个整数到A[5]输入文件中,数的排布是这个样子35267899206不管它,直接5次%dfor(inti=0;i<5;i++)scanf(“%d”,A+i);%lld用于输入和输出长整数(longlong,64位)%lf用于输入输出double%s读一个字符串,自动扫描前导空白,读到空白结束如:abcdefgh,将读出”abcd”%c读一个字符,但是不扫描前导空白如何读一个非空白字符呢?比如,读取某人的

6、信息,其性别用M/F表示NathanMFlyingClaireFSelf-healing名字和能力用%s读,性别怎么办,自己扫描空格?麻烦!读一个非空白字符,方法一charstr[2];scanf(“%1s”,str);//%s扫描前导空白,并且只读一个字符charc=str[0];方法二强制扫描空白在%前面加上一个空格表示“强制扫描前导空白”scanf(“%c”,&ch);前面那个读人物信息的完整scanf语句:scanf(“%s%c%s”,name,&gender,ability);同理,格式后面加一空格表示“读完这个变量后扫描空白”

7、,注意空白是包括回车的读一行:gets,fgetsgets会导致很讨厌的warningmessage,所以可改用fgetsfgets(str,sizeofstr,stdin)=gets(str)注意应使“下一个字符”处于这一行开头有n个整数在一行上,但是n不知,只知道整数是空格分开的,怎么读?拿getchar+ungetc扫描?麻烦!介绍一个函数:strtokstrtok示例538293828588258charstr[100];char*input=str,*token;gets(str);while((token=strtok(inp

8、ut,““))!=NULL){input=NULL;intnumber=atoi(token);//处理number}也可用istringstream处理istringstreamin(str

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。