2016级计算机C++助教工作(2)基本语法与资料查找方法
2016-10-14 22:32
288 查看
注意以下样例只是一个样例,还可以有很多别的实现方法
基本语法:
输入输出:
正常篇-输入问题:
作为一个freshman,更多的你们可能第一次接触编程。那么输入输出作为交互的一种方式,自然是非常重要的。那么我们学习的第一中输入输出的方法就是cin,cout这两个函数啦。
首先我们有第一种姿势:
int a; cin>>a;先定义个变量,然后输入。这个变量可以使double,float,int,char,bool等等类型。
在我们上机题中,如果输入告诉你要输入多少组case,每个case有多少输入了,那采用这个方法是自然没有问题的,因为我们可以用一个循环解决。
如第一次练习的C(题号,2076 The Drunk Jailer),
Sample Input
2 5 100
Sample Output
2 10
我们可以用以下代码解决输入问题。
int n,u; cin>>n; for(int i = 0;i < n; i++){ cin>>u; }
但是换一种情况,告诉输入某个数的时候输入结束,例如中文练习题C(4144 Simple String Transformation)
输入样例
3 abc 4 AAbc 0
输出样例
def aaef
我们可以采用如下代码解决
int n; while(cin>>n){ if(n == 0) break; ... //other code }
这样不停输入数字,直到输入为0结束,跳出循环即可。
不过以上都是通过输入判断是否结束了,如果遇到输入为EOF(end of file)就是文件结束才结束输入怎么办呢?
例如 第一次练习A (2015 Keep on Truckin')
Sample Input:
180 160 170
Sample Output:
CRASH 160
那我们的解决方法如下:
int a,b,c; while(cin>>a>>b>>c){ ... //other code }
以上解决的问题都是一个变量对应于一个输入的,对于一行是一个句子(字符数组)还有空格时该如何是好呢?
例如第一次练习 D(1153 Word Reversal)
方法1:我们利用string数组来保存输入
string a; int n; cin>>n; getchar(); //由于第一个整数输入后接了一个换行符'\n',这个字符我们要读入才能正常读取下一行 while(n--) { getline(cin,a); ... //other code }
有了这个就可以了吗?其实我们还有很多别的方法。
我们可以用char 数组(似乎还没学到,但是很快就学了,提前告诉你们)
方法2:
char a[100]; int n; cin>>n; getchar(); //理由同上 你需要使用到 cstdio 这个头文件 #include<cstdio> while(n--){ gets(a); ... //other code }
如果想获取数组a的长度,代码如下
int length = strlen(a)
so,到这里感觉自己会数组了,也是不错的,但是这样真的就完了么?
如何体现更高水平呢,秀一秀黑科技呢(哈哈,也就只能跟大一的说是黑科技了)
方法3:采用getchar()读入字符
char a[100]; int n; cin>>n; getchar(); //理由同上 while(n--){ int length = 0; while(true){ a[length] = getchar(); //getchar()函数就是获取一个字符输入 if(a[length] == '\n') // '\n' 表示换行符 break; length++; } a[length] = '\0'; // '\0'表示字符数组的终止字符 //cout<<a<<endl; ... //other code }所以到这里,感觉到一点点的梯度上升吗?
在方法三种,额外的知识是,你要知道一些编码知识,这里特指ASCII,'\0'对应空字符,也是表示字符数组结尾的标志,'\n'是换行字符
参考资料:http://baike.baidu.com/link?url=tSj0V1ALtbxUCo27_IozDqqT2MNrUk7zqxAbIlTrr3yt_m-eEzp24QskmKQFvHQoKsWEWOBC2ElPGLZfXOdN4q
如果明白了这个,那么任何的输入都不会难倒你的。
接下来是输出的问题:
正常篇-输出问题:
输出的格式有很多,我们用acm.hdu.edu.cn上几道简单题来作为例子,有兴趣的可以去做做1. 1089 A+B for Input-Output Practice (I)
Sample Input1 5
10 20
Sample Output
6
30
这事最简单的,一行输入,一行输出
2.1096A+B for Input-Output Practice (VIII)
Sample Input3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
Sample Output
10
15
6
这个输出要求每两个输出之间有一个换行,那我们该怎么做呢? ------------------ 在这里 告诉你们一个非常装B的话 (talk is cheap , show me the code)
int n; cin>>n; int flag = 0; // 这是一个非常常用的标记方法 while(n--){ if(flag == 1) cout<<endl; flag = 1; ... //other code }
这里我们可以看到新定义了一个flag标记的变量,如果flag==1,那么输出换行,因为此时,我们知道之前一定有一行输出的,进入这次循环的时候,一定会产生一次新的输出,那么我们有理由确定,这个时候需要输出一个空白行。
PS:1089-1096都是简单的a+b问题,就是输入输出控制的联系,非常建议大家去做一做。
3.5918 sequence I 这题别做啦,就是为了告诉你们还有别的要求的
Sample Input2
6 3 1
1 2 3 1 2 3
1 2 3
6 3 2
1 3 2 2 3 1
1 2 3
Sample Output
Case #1: 2
Case #2: 1
通常还有一种格式就是输出 Case # 数据组号: 答案
或者换个姿势:
Sample Input
2
3 2
1 2 3
1 3
2 3
3 2
3 3 3
1 1
2 2
Sample Output
Case #1:
3
1
Case #2:
2
3
无论哪种格式,实际按要求来即可,只是步骤麻烦了些罢。
输入输出到此结束。
循环:
对于D(1153 Word Reversal),我们可以用循环的姿势有以下几种Sample Input
2 5 100
Sample Output
2 10
第一种: int n; cin>>n; for(int i = 0;i < n; i++){ ... //other code } 第二种: int n; cin>>n; while(n--){ ... //other code } 第三种: int n; cin>>n; do{ }while(n--);
特别的:
例如中文练习题C(4144 Simple String Transformation)
输入样例
3 abc 4 AAbc 0
输出样例
def aaef
我们还可以有第四种姿势写循环
int n; while(cin>>n,n!=0){ ... //other code }是不是很神奇,判断条件写到while的括号中即可。
所以以上四种方式你们都可以尝试一下哈。
有了以上知识,做练习是没啥问题了吧,剩下的就是思考了。
但是这样够吗?
no~no~no~
我们知道大学的学习已经和高中不一样了,我们需要掌握的一个基本技能就是如何自学,如何查找资料,如何在学习的道路上渐行渐远~
如果你想成为一个ACM大神,如何超越高高在上的学长学姐,如何超越竞争的同年级同学,一年铜、两年银、三年金的步伐你能实现吗,或者你满足吗?
如果你想成为一个黑客,计算机网络,组成原理,密码学,体系结构,数据库,操作系统,linux指令........堆积如山的书。
如果你想成为一名科研人员,机器学习,数据挖掘,图形图像,神经网络.....(此处原谅我知之甚少)
.............
嗯好,以上内容都是吓吓你们的。我们这里要讲的是查资料。
百度搜索:
首先百度是大家都会的,那么我们要多多利用百度了搜索。有句话是这么说的:当你知道的越来越多,那你就会觉得自己越来越无知。你做的题目多了,你就会发现自己懂的太少了,于是你要从网上找题解(此处我强烈不建议从网上找练习题的答案,这么简单的题目,你们一定要独立思考),但是你会发现TOJ上的题,题解还是不那么好找的。所以我建议大家想刷题就用杭州电子科技大学的HDU(acm.hdu.edu.cn),北京大学的POJ(poj.org),CF(http://codeforces.com/gyms/)
如果英语是个大问题(热爱ACM,你迟早得面对),那么退而求其次,看中文题目吧,福州大学FZU(http://acm.fzu.edu.cn/)sjtu(http://acm.sjtu.edu.cn/OnlineJudge/problems)
其实你有很多平台可以去的,但是注意一点,选择一个平台不停的刷就行,不要经常换平台,因为简单题很多,但是它们确不能让你进步,你要尝试挑战自己。
HDU,POJ,CF网上有很多解题报告,当你不会的时候就看看别人怎么做的。
可以放一些例子(不好意思,又给自己打广告了)。多看几个不同的博客,你们就能懂更多了。
或者查询strlen函数的用法。
第二个:C++手册查询
http://www.cplusplus.com/reference/ (这个网站还是挺慢的)那这里我们看看 手册上可以查到什么
听说你对于string类不是很了解
在搜索框中输入string进行搜索
于是我们会得到string这个头文件的一些信息,往下拉,我们可以看到更多的介绍
有很多方法和操作,但是实际我们需要用到的很少。我们选择 length 进入查看
我们可以查看更多的说明,可以看到更多的例子。
最后以strlen函数的查询收尾
第二篇到此结束~~~~~~~
当然最好的成长的方式是找比你们厉害的人学习,你们的学长学姐就是非常不错的选择。
孤独是一个人的狂欢,狂欢是一群人的寂寞。祝你们在学习的不归路上,越走越深。
相关文章推荐
- 2016级计算机C++助教工作(1) codeblocks的汉化与相关操作
- 2016级计算机C++助教工作(3) 提问方式 和 发送邮件的方式
- 2016级计算机C++助教工作(6)OJ上各种返回结果以及代表意思和可能涉及的原因
- 2016级计算机C++助教工作(5) 第一次讲课内容
- 2016级计算机C++助教工作(12) 第二次上机解题报告
- 2016级计算机C++助教工作(7)第一次上机题
- 2016级计算机C++助教工作(11) 第三次上机解题报告
- 2016级计算机C++助教工作(8)第二次上课内容
- 2016级计算机C++助教工作(4)数组定义 与 优美的写代码的姿势
- 2016级计算机C++助教工作(9)第三次上课内容
- 2016级计算机C++助教工作(10)第三次第四次上机题注意事项
- C++利用std::forward_list查找插入数据方法示例
- 【小宝解惑】C++调试过程中常见语法错误及解决方法
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 第一部分.C++基本语法
- c++标准模板库STL【快速查找】【最全】【常用】【语法】
- 学习笔记11-OC基本语法和构造方法
- js的基本语法与方法的使用
- C++基本语法(上)(精品)
- swift 初步接触 基本语法 方法命名 !和?区别 as!和as?区别 let和var区别 extension override private (一)