第一单元 C++语言基础
1.1 程序结构
(1) 程序框架
注释:注释有两种,一种是“//”,另一种是“/* … */”。“//”必须单独放置一行,或代码所在行
的后面;而“/*”、“*/”成对存在,可以插入到代码的任意位置。
引用头文件:在代码开头写“#include <头文件名>”。如果想引用自己的头文件,需要把尖括号(表
示只从系统目录搜索头文件)换成双引号(表示先从 cpp 所在文件夹搜索,然后再到系统文件夹搜索)。
命名空间:很多 C++的东西都要引用 std 命名空间,所以代码中会有“using namespace std;”。
main():所有程序都要从 main()开始。
在所有的算法竞赛中,main()的返回值必须是 0,否则视为程序异常结束,得分为 0 分。
语句和语句块:
1. 语句:一般情况下,一条语句要用一个分号“;”结束。为了美观和可读性,可以把一条语句扩展成
几行,也可以把多个语句写到同一行上。
2. 语句块:用“{”和“}”包围的代码是语句块。无论里面有多少代码,在原则上,语句块所在的整体
都视为一条语句。
(2) 选择结构
1. if 语句:if 表示判断。如果条件为真,就执行接在 if 后的语句(语句块),否则执行 else 后的语句(语句块)。如果没有 else,就直接跳过。if 有以下几种格式
if (条件) // 如果条件成立,就执行if后面的语句或语句块。
语句或语句块
if (条件) // 如果条件成立,就执行if后面的A,否则执行B。
语句或语句块A
else
语句或语句块B
if (条件1) // 实际上,这是if语句内的if语句,即if的嵌套。所以else和if中间要有空格。
语句或语句块A
else if (条件2)
语句或语句块B
……
else
语句或语句块N
2. switch 语句:switch 表示选择。它根据条件的不同取值来执行不同的语句。格式如下:
switch (表达式)
{
case 值1:
代码段A
break;
case 值2:
代码段B
break;
……
default:
代码段N
break;
};
如果表达式的值是值 1,就执行代码段 A;如果表达式的值是值 2,就执行代码段 B……否则执行代码段 N。
注意:
default 一部分可以省略。
如果不使用 break,那么紧随其后的 case 部分代码也会被执行,直到遇到 break 或 switch 语句
结束为止!
switch 结尾要有一个分号。
3. if、switch 都可以嵌套使用。
【问题描述】输入一个日期,判断它所在年份是否为闰年,并输出所在月份的天数。闰年的判断方法:四年一闰,百年不闰,四百年又闰。
int year,month,day;
bool b=false;
cin>>year>>month>>day;
// 判断是否为闰年
if (n%400==0)
b=true;
else if (n%100!=0 && n%4==0)
b=true;
if (b)
cout<<y<<"是闰年。"<<endl;
else
cout<<y<<"不是闰年。"<<endl;
// 判断所在月份的天数
switch (month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
cout<<"这个月有31天。"<<endl;
break;
case 4: case 6: case 9: case 11:
cout<<"这个月有30天。"<<endl;
break;
case 2:
cout<<"这个月有"<<(b ? 29 : 28)<<"天。"<<endl;
break;
};
(3) 循环结构
1. while 语句:如果条件成立,就继续循环,直到条件不成立为止。格式如下:
while (条件)
循环体(语句或语句块)
2. do…while 语句:如果条件成立,就继续循环,直到条件不成立为止。它与 while 的最大区别在于,do…while 循环中的语句会被执行至少一次,而 while 中的语句可能一次都没有被执行。格式如下:
do
{
循环体
}
while (条件); // 注意分号
4. for 语句:for 分四部分,有初始条件、继续循环的条件、状态转移的条件和循环体。格式如下:
for (初始条件; 继续循环的条件; 状态转移的条件)
循环体
转换成 while 循环,即:
初始条件
while (继续循环的条件)
{
循环体
状态转移
}
for 后三个条件不是必需的,可以省略不写,但分号必须保留。
5. 在循环语句内部使用 break,可以跳出循环;使用 continue,可以忽略它后面的代码,马上进入下一轮
循环。
注意,这两个语句只对它所在的一层循环有效。
6. 写 for 循环时,一定要注意:
不要把计数器的字母打错,尤其是在复制/粘贴一段代码的时候。
根据算法要明确不等号是“<”、“>”,还是“<=”、“>=”。
逆序循环时,不要把自减“--”写成自增“++”!
【问题描述】输入 n,输出 n!(n!=1×2×3×4×……×n)。结果保证小于 long long 的范围。当输入值
为负数时结束程序。
int n;
long long r=1;
cin>>n;
while (n>-1)
{
r=1;
for (int i=1; i<=n; i++)
r*=i;
cout<<n<<"! = "<<r<<endl;
cin>>n;
}
(4) goto 语句
goto 语句用于无条件跳转。要想跳转,首先要定义标签(在代码开头的一段标识符,后面紧跟冒号),
然后才能 goto 那个标签。
很多教程不提倡使用无条件跳转,因为它破坏了程序结构,还容易给代码阅读者带来麻烦。不过,这不代
表 goto 没有使用价值。goto 的一个用途是跳出多层循环:
for (int j=0; j<9; j++)
for (int k=0; k<9; k++)
{
if (满足某种条件) goto __exited;
……
}
__exited:
(5) C 与 C++的区别
C++语言是以 C 语言为基础开发出来的,C 语言的大多数内容被保留了下来。在信息学竞赛领域,很多情
况下 C 和 C++可以互相转化,甚至不用对代码进行任何修改。
下面是信息学竞赛领域中 C 和 C++的重要区别:
C++支持用流输入输出,而 C 只能用 scanf 和 printf——再见了,%d!
C++非常支持面向对象编程,而 C 已经“out”了。
《资料》中的“高精度算法”就只能用 C++完成,因为在 struct 内定义了成员函数。
C++可以用更强大的 string 类处理字符串,而不必担心发生某些低级错误。
C++有强大的 STL,而 C 没有(有一个小小的 qsort 和 bsearch 算是补偿了)。
STL 是很多人从 C 转到 C++的重要原因。
C 的头文件名仍然可以用在 C++中,不过可能会收到警报——应该去掉“.h”,前面再加一个“c”。
如<stdio.h>应该改成<cstdio>。
C 程序运行速度稍优于 C++。不过也没快多少。
总之,C 能做的一切事情,C++也能做;C++能做的一切事情,C 不一定能做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)