C++及数据结构复习笔记(一)(数据类型与循环、选择结构)

第一章 C++基本知识

       本章主要介绍了C++基本的数据类型与表达式,面向过程的基本设计,函数与预处理命令,数组,指针,结构体,类和对象,继承与派生和多态性与虚函数。主要的总结均来自于谭浩强老师的《C++程序设计》,在每一小节的背后,给出了一些在网上总结的面试题,以加强我们对C++的理解。并且每一小节均给出了典型的C++程序代码,理解这些代码是读懂文章的关键。

1.1 C++的初步认识

       C++的特点:类与对象、封装、继承和多态。

       一个C++程序通常由以下部分组成:预处理命令,全局声明部分,函数。函数由函数首部和包含局部声明和执行的函数体构成。C++的语句分为声明语句和执行语句,执行语句用于实现用户指定的操作。一个C++程序总是从main函数开始执行的,不论main函数在整个程序中的位置如何。

1.2 数据类型与表达式

1.2.1 C++数据类型

       整形(int):可以分为长整型(long int)和短整型(short int),长整型和整形的复制范围是一样的,但是整形和短整型只占2字节,长整型占4字节。整形数据的存储方式为2进制。Signed和unsigned表示有符号和无符号,若为有符号,则数据以补码形式存放,无符号的存储范围比有符号大一倍。

       浮点型(float):分为单精度,双精度和长双精度。字母e表示其后数字都是以10为底,即e12表示1012。浮点型在内存中均已指数形式存储,存储单元分为存放数字的存储单元和存放指数的存储单元。

       字符常量:用单撇号括起来的一个字符就是字符型常量,如’a’,但只能包含一个字符,且区分大小写。转义字符中有几个关键的需要掌握,如下表:

表 1.1比较重要的的转义字符

\n

换行

\b

退格

\’

输出单撇号字符

\t

跳到下一个tab位置

\\

输出反斜杠字符”\”

\0

空字符

       字符数据是以ASCII码存储的,A的ASCII码是65,a的是97,中间差了32。

       字符串常量会在最后自动加一个’\0’作为字符串结束标志,但它并不是字符串的一部分,不会被输出,但是在内存中会多占用一个字节。字符串常量通过字符数组进行存放。

       用来标识变量、符号常量、函数、数组和类等实体名字的有效字符序列称为标识符。标识符只能由数字、字母和下划线3种字符组成。

1.2.2 常变量

Eg:

const int a=3;

const int a; a=3; (×)//常变量不能被赋值

       在定义变量时,如果加上关键字const,则变量的值在程序运行期间不能改变,这种变量称为常变量。且常变量必须在声明时进行初始化,此后其值不会再改变。

1.2.3 C++运算符

       &&与,||或,!非。sizeof求字节运算符(后面要重点讲一下)。%取余运算符。运算符的结合方向为自左向右。且在进行运算时,不同类型的数据需要先转化为同一类型,然后再进行运算,转化规则如下图所示:

图 1.1 运算时的数据转换

       ++i:使用i之前,先给i加1。(--i同理)

        i++:在使用i之后,使i的值加1.(i--同理)

       自增自减运算符只能用于变量,结合是自右向左的。如-i++相当于-(i++)。

例1.1.1 下列语句输出结果是什么。

int i=3;

cout<<i++<<i++;

输出为4和3.,因为输出是自右向左处理的。

 

例 1.1.2 下列语句什么意思:(程序员面试宝典)

x=3;y=3;z=(x&y);   

则z为3,&表示二进制按位与运算

1.2.4 C++赋值表达式

一般形式:变量 赋值运算符表达式

赋值运算符按照自右向左顺序结合

       C++的输入和输出是通过“流”的方式实现的。cout是输出流对象的名字,cin是输入流对象的名字。

       cout/cin语句的一般格式为:

       cout<<表达式1<<表达式2<<……<<表达式n;

       cin>>变量1>>变量2>>……>>变量n;

       关于输入输出流,有几个关键的控制符需要知道,见表1.2。调用他们需要包含头文件:

表 1.2 输入输出流的控制符

setprecision(n)

设置浮点数的精度为n位

setw(n)

设置字段宽度为n位

setiosflags(ios::fixed)

设置浮点数以固定的小数位数显示

setiosflags(ios::left)

输出数据左对齐

 

1.3 程序设计初步

1.3.1 putchar和getchar

       putchar()函数的作用是向终端输出一个字符,当然也可以输出ASCII码。

       getchar()函数是从终端输入一个字符。

1.3.2 关系运算符和逻辑运算符

       优先级高的关系运算符(它们之间优先级相同):<.<=,>,>=。优先级低的关系运算符(它们之间优先级相同):==,!=。

三种运算符之间的优先级关系:算术运算符>关系运算符>与和或>赋值运算符。

       优先级:非>与>或

       关系表达式的值是一个逻辑值,即“真”或“假”。1表示真,0表示假。

       逻辑型变量要用标识符bool来定义,故又称布尔变量。

       同或:相同为1,不同为0。a⊙b=ab+a'b'(a'为非a,b'为非b)。

       异或:不同为1,相同为0。a⊕b=ab'+a'b。

1.3.3 选择结构

if 语句

switch语句

if(表达式1) 语句1

   else if (表达式2) {语句2}

……

   else 语句n

switch(表达式)

case 常量表达式1:语句1;

  case 常量表达式2:语句2;

  ……

  default: 语句n+;

}

一、if语句

       if语句中,else总是与它上面最近的、且未配对的if配对。

       条件运算符,又称三目运算符(?:),形式如下:

       表达式1? 表达式2:表达式3;

       Eg:max(a>b)? a:b; //若括号内条件为真,则取a,否则取“:”后面的值,即b。

二、switch语句

       switch后面括号内的“表达式”允许为任何类型。case表达式的值不能相同,且case和default出现的顺序不影响执行结果。每执行完一个case子语句,流程就转移到下一个case子语句继续执行,会连续输出,若想跳出switch结构,需要在每个case子语句后加“break;”

1.3.4 循环结构

一、几种循环类型

        while(表达式) {语句}

        当满足括号内表达式条件时,执行循环体,上式称为当型循环。

       do

          语句

       while (表达式)

       先执行循环体,然后判断表达式。

       for (循环变量赋初值;循环条件;循环变量增值) {语句}

       Eg: for (i=1;i<=100;i++)sum=sum+i;

       for语句的第一个表达式可以省略,但需在for语句之前给循环变量赋初值、省略第2个表达式表示死循环。若想省略第三个表达式,需在循环体中做修改。

       for(;;)相当于while(1)。for语句功能更强,凡能用while循环的均可用for实现。

二、break和continute

       break语句不仅可以跳出switch结构,在循环体内,还可以跳出循环体。continue语句作用为结束本次循环,接着进行下一次循环的判定。即continue语句只结束本次循环,break语句结束整个循环过程。

例 1.3.1找出100~200间的全部素数

       判别m是否为素数的算法是这样的:让m被2~除,若m不能被其中的任一个整数整除,就可以确定m是素数。

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int m,k,i,n=0;
bool prime; //定义bool变量prime,以判定m是否为素数
for (m=101;m<=200;m=m+2)
{
  prime=true;//prime为真,即先默认m为素数
  k=int(sqrt(m));//k表示 的整数部分
  for (i=2;i<=k;i++)//让m被 除,检查是否能整除
  {
    if (m%i==0)//若能整除,表示m不是素数
    {
      prime=false;
      break;
    }
    if (prime)//若m为素数,则打印
    {
      cout<<setw(5)<<m;//字段宽度为5
      n=n+1;//n用来统计素数个数
    }
    if (n%10==0) cout<<endl;//输出10个数换一次行
  }
  cout<<endl;
  return 0;
}

猜你喜欢

转载自blog.csdn.net/lao_tan/article/details/80970817