第一章、C++的初步认识
一、最简单的C++程序
例1:输出一行字符串:“this is a C++ program.”程序如下:
#include"stdafx.h"
#include<iostream> //包含头文件iostream
using namespace std; //使用命名空间std
void main() {
cout << "this is a C++ program.";
}
例2:求a+b的值,程序如下:
#include"stdafx.h"
#include<iostream>
using namespace std;
void main() {
int a, b;
int sum;
cout << "请输入两个数:";
cin >>a >> b;
sum = a + b;
cout << "a + b = " <<sum << endl;
}
例3:给两个数x和y,求两个数的大者。
#include"stdafx.h"
#include<iostream>
using namespace std;
int max(int a, int b) {
return a>b? a: b;
}
void main() {
int x, y;
cout << "请输入两个数:";
cin >>x >> y;
cout << "你输入的两个数的最大值为:" <<max(x, y) << endl;
}
例4:包含类的C++程序:
#include<iostream>
using namespace std;
struct student
{private:
int num;
int score;
public:
void setdata(){
cin>>num;
cin>>score;
}
void display(){
cout<<"num="<<num<<endl;
cout<<"score="<<score<<endl;
}
};
student stu1,stu2;
int main(){
stu1.setdata();
stu2.setdata();
stu1.display();
stu2.display();
return 0;
}
类中包含两个成员:数据和函数。分别称为数据成员和成员函数。(包括私有的和公用的)
类:把一组数据和有权调用这些数据的函数封装在一起形成的数据结构。它可以体现数据的封装性和信息隐藏。(具有“类”类型特征的变量称为“对象”)
二、C++程序的构成与书写形式
1、C++程序的构成:一个程序单位或多个程序单位。
2、一个程序单位的组成:预处理命令、全局声明部分、函数(每个程序中必须有且只有一个主函数)。文件可以缺少某些部分。
3、函数的组成:函数首部和函数体(包括局部声明部分和执行部分)。
4、语句:声明语句和执行语句。
5、C++和程序总是从main函数开始执行。
6、类是C++新增的重要的数据类型,它可以实现面向对象设计方法中的封装、信息隐藏、继承、派生、多态等功能。
7、C++程序的书写格式自由。
8、记得加上必要的注释。
三、C++程序的编写与实现
运行过程如下:
1、用C++ 语言编写程序(源程序)。
2、对源程序进行编译(以源程序文件为单位分别编译)。它的作用是对源程序进行词法检查和语法检查。
3、将目标文件连接(生成.exe文件)。
4、运行程序。
5、分析运行结果。
02
—
第二章、数据类型与表达式
一、C++的数据类型
数据:计算机处理的对象,它是以某种特定的形式存在的。
数据结构:数据的组织形式。
C++可以使用的数据类型如下:
(1)、整型:long int、int、short int
(2)、整型的存储方式为二进制数形式存储。
(3)、在整型符号和字符型符号前面可以加修饰符signed或unsigned。
(4)、浮点型:float、double、long double.
一、常量
数值常量:也叫常数。常量无unsigned型。其中有整数、浮点数。
字符常量:普通字符常量:用单撇号括起来的一个字符。(只能包含一个字符,区分大小写、撇号是定界符,不属于字符常量的一部分)。
转义字符常量:以“\”开头的字符序列。
字符数据是以ASCII码存储的,存储形式与整数的存储形式类似。
例2.1 将字符赋给整型变量:
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int i, j;
i = 'A';
j = 'B';
cout <<i << ' ' <<j << endl;
return 0;
}
字符串常量:用双撇号括起来的部分。
符号常量:就是C语言中宏定义的常量。
二、变量
标识符:用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列。它只能由字母、数字和下划线3种字符组成、且第一个字符不能是数字。
定义变量:变量类型 变量名表列(一个或多个变量名的序列)
C++要求对变量做强制定义的目的是:
(1)、凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。
(2)、每一个变量被指定义为一确定类型,在编译时就能为其分配相应的存储单元。
(3)、指定每一变量属于一个特定的类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。
允许对变量进行初始化。
常变量:在定义变量时,前面加上const。这样的变量在程序运行期间值不能改变。(又称只读变量)
三、逗号运算符与逗号表达式
逗号表达式:又称顺序求值运算符。其一般形式是:表达式1,表达式2
例如:a=2,3*6
03
—
第三章、程序设计初步
一、面向过程的程序设计和算法
面向过程的程序可以描述为:算法+数据结构。
算法的表示:自然语言、流程图、伪代码。
二、C++程序和语句
组成部分:预处理命令、声明部分、函数。
程序应该包括数据描述(由声明语句来实现)和数据操作(由执行语句来实现)。
语句:C++程序中最小的独立单位。可以分为声明语句、执行语句、空语句、复合语句、赋值语句。
三、C++的输入与输出
C++的输出和输入是用“流(stream)”的方式实现的。
在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或’\n’,ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。
在用cout输出时,用户不必通知计算机按何种类型输出,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。
在输入流与输出流中使用控制符:(加上头文件iomanip)例子如下:
double a=123.4567890123456;
cout<
cout<
cout<
cout<
cout<
测试代码如下:
#include"stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
void main() {
double a = 123.456;
double b = 3.14159;
double c = -4754.45;
cout << setiosflags(ios::fixed) << setiosflags(ios::right) << setprecision(2);
cout <<setw(10) <<a << endl;
cout <<setw(10) <<b << endl;
cout <<setw(10) <<c << endl;
}
运行结果如下:
使用getchar和putchar函数进行字符的输入和输出:
(1)、putchar():向终端输出一个字符。
(2)、getchar():从终端(或系统隐含指定的输入设备)输入一个字符。
用scanf和printf函数进行输入和输出:和C语言一样。
一、编写顺序结构的程序
顺序结构的程序中的各执行语句是顺序执行的。
习题解答:
第一题:用公式PI/4=1-1/3+1/5-1/7...来计算PI的近似值(到10-7为止):
#include"stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
void main() {
double s, t, sum;
double i;
sum = 0;
t = 1;
for (i = 1; 1 / i >= 1e-7; i += 2) {
s = t * i;
sum += 1 / s;
t = -t;
}
cout << "PI的值为:" << setprecision(9)<<4 * sum << endl;
}
第二题:求Fibonacci数列前40个数。这个数列的特点为:第1、2个数都为1,从第3个数开始,每个数是前面两个数之和。
#include"stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
int Fibonacci(int x) {
if (x == 1)
return 1;
if (x == 2)
return 1;
else if (x >= 3)
return Fibonacci(x - 1) + Fibonacci(x - 2);
}
void main() {
int i;
long k;
cout << "Fibonacci数列的前40个数如下:" << endl;
for (i = 1; i <= 40; i++) {
k = Fibonacci(i);
cout <<setw(10) << k;
if (i % 8 == 0)
cout << endl;
}
}
运行结果如下图:
第三题:有一对兔子, 从出生后第 3个月起每个月都生一对兔子。 小兔子长到第3个月后每个月又生一对兔子。 。 假设所有兔子都不死,问每个月的兔子总数为多少?
#include"stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
int Fibonacci(int x) {
if (x == 1)
return 1;
if (x == 2)
return 1;
else if (x >= 3)
return Fibonacci(x - 1) + Fibonacci(x - 2);
}
void main() {
int i;
long k;
cout << "十二个月中的兔子数量如下:" << endl;
for (i = 1; i <= 12; i++) {
k = Fibonacci(i);
cout <<setw(10) << k;
if (i % 6 == 0)
cout << endl;
}
}
程序运行结果如下:
第四题:找出100-200间的全部素数:
#include"stdafx.h"
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int is_primeNumber(int x) {
int i;
if (x == 1)
return 0;
if (x == 2||x==3)
return 1;
else if (x >= 4) {
for(i = 2; i <= int(sqrt(x)); i++) {
if (x%i == 0)
return 0;
}
return 1;
}
}
void main() {
int i;
int count = 0;
for (i = 100; i <= 200; i++) {
if (is_primeNumber(i) == 1) {
cout <<setw(5) << i;
count++;
if (count % 6 == 0)
cout << endl;
}
}
cout << endl;
}
对于移位密码的程序,要注意最后一位的处理。(即大于z或Z的情况)。