C++ Primer 第五版:第1 章
*****C++ Primer 第五版第1章学习笔记*****
*****实验代码在Red Hat 6.6或VS 2013中调试*****
*****文章内容依据当前知识撰写,存在认识的局限性*****
1.1 编写一个简单的C++程序
函数:依据我个人理解,C/C++的函数是一个能够完成一个功能的模块。
完整函数的组成:
①返回类型:不一定有返回值,故不一定有返回类型
②函数名:根据名字标识完成特定功能的模块,必须存在
③形参列表:可能没有参数传入,不一定存在
④函数体:一个完整的函数应该是有函数体的,里面包含要实现的功能。
下面为一个完整函数的例子:
int main() { return 0; }
1.1.1 编译、运行程序
正如书上所说,先将精力集中于C++语言本身,而后再来学习IDE,此处略过。
1.1节练习
练习 1.2:改写程序,让它返回-1。返回值-1 通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main 返回的错误标识。
解答:在Red Hat下没办法成功编译,一直报这样的错误:
在VS 2013中可以编译成功,但是与return 0是一模一样的,没有观察到效果。
1.2 初识输入输出
输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。
C++标准输入输出定义了4个IO,分别为:CIN(标准输入)、COUT(标准输出)、CERR(标准错误)、CLOG,这四个是自动与当前程序打开关联的。
标准输入输出存在缓冲和非缓冲的概念,但印象中标准错误是非缓冲的,一旦出现错误,就立马输出错误。
练习 1.3:编写程序,在标准输出上打印Hello, World。
解答:
int main() { std::cout << "Hello,World." << std::endl; return 0; }
练习1.4:我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符*,来打印两个数的积。
解答:
int main() { int v1 = 0, v2 = 0; std::cout << "input two numbers:" << std::endl; std::cin >> v1 >> v2; std::cout << "the product of " << v1 << " and " << v2 << " is " << v1*v2 << std::endl; return 0; }
练习 1.5:我们将所有输出操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。
解答:
#include<iostream> int main() { int v1 = 0, v2 = 0; std::cout << "input two numbers:" << std::endl; std::cin >> v1 >> v2; std::cout << "the product of "; std::cout << v1; std::cout << " and "; std::cout << v2; std::cout << " is "; std::cout << v1*v2; std::cout << std::endl; return 0; }
练习 1.6:解释下面程序片段是否合法。
std::cout << "The sum of " << v1; << " and " << v2; << " is " << v1 + v2 << std::endl;
如果程序是合法的,它输出什么?如果程序不合法,原因何在?应该如何修正?
解答:
std::cout << "The sum of " << v1; //合法,假定v1=1,则输出The sum of 1
<< " and " << v2; //不合法,因为没有标准输出IO,应修正为std::cout << " and " << v2;
<< " is " << v1 + v2 << std::endl; ////不合法,原因同第二个语句,没有标准输出IO,应修正为 std::cout << " is " << v1 + v2 << std::endl;
1.3 注释简介
C++有2种注释风格,一种单行双斜杠注释,如 //这是一个注释
另外一直是多行界定符注释,如/*注释内容*/,这种注释不能相互嵌套,比如注释/* 第一层注释 /* 第二层注释 */ 第一层这是 */,这种情况下从第一个界定符到第三个界定符视为注释,最后一个*/则视为不能识别的代码。
1.3节练习
练习1.7:编译一个包含 不正确的嵌套注释的程序,观察编译器返回的错误信息。
int main() { std::cout << "test of comments!"; /* /* test */ */ return 0; }
VS 2013报错: 1>------ Build started: Project: return, Configuration: Debug Win32 ------ 1> return.cpp 1>c:\users\pluse\documents\visual studio 2013\projects\return\return\return.cpp(4): warning C4138: ‘*/‘ found outside of comment 1>c:\users\pluse\documents\visual studio 2013\projects\return\return\return.cpp(4): error C2059: syntax error : ‘/‘ ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Red Hat报错: 1.7.cpp: In function ‘int main()’: 1.7.cpp:4: error: expected primary-expression before ‘/’ token 1.7.cpp:5: error: expected primary-expression before ‘return’ 1.7.cpp:5: error: expected ‘;’ before ‘return’
练习1.8:指出下列哪些输出语句是合法的(如果有的话):
std::cout << "/*"; std::cout << "*/"; std::cout << /* "*/" */; std::cout << /* "*/" /* "/*" */;
预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。
解答:
双引号里面包含的内容是直接输出的,不做注释用,因此前3个语法都是正确的,除了最后一个错误。应该修改为:
std::cout << /* "*/" /* /*";
while(condition) //注意括号 statement
#include<iostream> int main() { int val = 50, sum = 0; while (val <= 100) { sum += val; val++; } std::cout << "Sum of 50 to 100 inclusive is " << sum << std::endl; return 0; }
#include<iostream> int main() { int val = 10; while (val >=0) { std::cout << val<<" "; val--; } std::cout << std::endl; return 0; }
解答:
#include<iostream> //目前还未学习其他的循环和判定,因此仅使用while来实现 int main() { int a,b; std::cout << "input two numbers:"; std::cin >> a >> b; while (a<=b) { std::cout << a << " "; a++; } while (a > b) { std::cout << b << " "; b++; } std::cout << std::endl; return 0; }
for(INITIALIZATION;CONDITION;INCREMENT) //注意分号! statement;
int sum = 0; for (int i = -100; i <= 100; ++i) sum += i;
解答:
练习 1.14:对比for 循环和while 循环,两种形式的优缺点各是什么?
练习 1.15:编写程序,包含第16 页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
#include<iostream> //书上的程序并不能很好的工作,没有提供结束的方法 int main() { int sum = 0, value = 0; std::cout << "enter q to quit:"; //输入字母q来退出,实际上,任何字母都能退出,这是因为value是一个int类型,输入的q属于char类型, while (std::cin >> value) //因此std::cin >> value会返回false从而结束循环 sum += value; std::cout << "Sum is: " << sum << std::endl; return 0; }
if(expression) </span>//注意if后面的括号!! statement;
#include <iostream> #include "Sales_item.h" int main() { Sales_item item1, item2; std::cin >> item1 >> item2; std::cout << item1 + item2 << std::endl; return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。