C++ 第二章 C++ 简单程序设计

2.1 C++ 语言概述
1、程序示例

//2_1.cpp
#include <iostream>
using namespace std;
void main(void)
{
     cout<<"Hello!\n";
     cout<<"Welcome to c++!\n";
}

运行结果: Hello!
                  Welcome to c++!

2、C++字符集

大小写的英文字母:A~Z,a~z
数字字符:0~9
特殊字符: 空格    !    #    %    ^    &    *   
                   _(下划线)    +    =    -    ~    <    
                  >    /    \    '    "    ;    .    ,    ()    []    {}

3、词法记号

关键字    C++预定义的单词
标识符    程序员声明的单词,它命名程序正文中的一些实体
文字    在程序中直接使用符号表示的数据
操作符    用于实现各种运算的符号
分隔符   ()   {}   ,    :    ;           用于分隔各个词法记号或程序正文
空白符    空格、制表符(TAB键产生的字符)、换行符(Enter键所产生的字符)和注释的总称

2.2 基本数据类型和表达式

2.2.1基本数据类型

2.2.2 常量 

  • 整型常量:正整数、负整数、零。表示形式有:十进制、八进制和十六进制
  • 实型常量:一般形式和指数形式,如 0.345E+2
  • 字符常量:'a', 'D', '?', '$'
  • 字符串常量:一对双引号括起来的字符序列
  • 布尔常量:false 和 true

2.2.3 变量

变量的存储类型:

  • auto 属于一时性存储,其存储空间可以被若干变量多次覆盖使用。
  • register 存放在通用寄存器中。
  • extern 在所有函数和程序段中都可引用。
  • static 在内存中是以固定地址存放的,在整个程序运行期间都有效。

2.2.4 符号常量

const 数据类型说明符  常量名=常量值 ; 

数据类型说明符   const 常量名=常量值  ;
例如:以声明一个代表圆周率的符号常量

const float PI= 3.1415926:

注:符号常量在声明时一定要赋初值,而在程序中闯不能改变其值

2.2.5 运算符与表达式

  • 基本算术运算符   +       -       *       /  (若整数相除,结果取整)   %(取余,操作数为整数)
  • 优先级与结合性 先乘除,后加减,同级自左至右
  • ++, --(自增、自减)    例:i++;    -- j;



2、逗号运算和逗号表达式
格式:表达式1,表达式2
求解顺序及结果:先求解1,再求解2,最终结果为表达式2的值
3、条件运算符与条件表达式:

  • 一般形式:表达式1?表达式2:表达式3   (表达式1 必须是 bool 类型)  例: x=a>b? a:b;
  • 执行顺序:
    • 先求解表达式1,
    • 若表达式1的值为true,则求解表达式2,表达式2的值为最终结果
    • 若表达式1的值为false,则求解表达式3,表达式3的值为最终结果

注意:条件运算符优级高于赋值运算符,低于逻辑运算符
4、sizeof运算符
语法形式  sizeof (类型名)  或  sizeof  表达式
结果值: “类型名”所指定的类型或“表达式”的结果类型所占的字节数
例:

sizeof(short)
sizeof(x)

7、位运算

  • 按位与&:将两个操作数对应的每一位分别进行逻辑与操作。
    • 用途:
    • 将某一位置0,其它位不变。
    • 取指定位。
  • |按位或 :将两个操作数对应的每一位分别进行逻辑或操作。
    • 用途:将某些位置1,其它位不变。
  • 按位异或^ :将两个操作数对应的每一个位进行异或,具体运算规则是:若对应位相同,则该位的运算结果为0;若对应位不同,则该位的运算结果为1。
    • 用途:使特定位翻转(与0异或保持原值,与1异或取反)
  • 按位取反~:按位取反是一个单目运算符,其作用是对一个二进制数的每一位取反
  • 左移运算<<:左移后,低位补0,高位舍弃
  • 右移运算>>:右移后,低位:舍弃    ;高位:无符号数:补0    有符号数:补“符号位”

8、运算符优先级与结合性

9、混合数据类型转换:在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换)

扫描二维码关注公众号,回复: 9469832 查看本文章
  • 隐式转换:低类型数据转换为高类型数据
    • 这种转换是安全的,因为在转换过程中数据的精度没有损失。
  • 显式转换:强制类型转换
    • 语法形式: 类型说明符(表达式) 或 (类型说明符)表达式

2.2.6 语句

2.3 数据的输入与输出

2.3.1 I/O流
插入操作。数据的输入与输出是通过I/O流来实现的,cin和cout是预定义的流类对象。
cin 用来处理标准输入,即键盘输入。
cout 用来处理标准输出,即屏幕输出。

2.3.2 预定义的插入符和提取符
cout    流插入运算符 <<
cin   流提取运算符 >> 

#include <iostream>
 
using namespace std;
int main( )
{
   char name[50];
 
   cout << "请输入您的名称: ";
   cin >> name;
   cout << "您的名称是: " << name << endl;
}

endl 用于在行末添加一个换行符
流插入运算符 <<  和 流提取运算符 >> 在一个语句中可以多次使用,如上面实例中所示。

2.4 算法的基本控制

算法的基本控制结构有3种:顺序结构、选择结构和循环结构。
2.4.1 if 语句
三种形式

if   (表达式)   语句
例:if  (x>y)  cout<<x;

if   (表达式)   语句1  else  语句2
例:if  (x>y)  cout<<x;
             else  cout<<y;

if   (表达式1)  语句1
    else  if  (表达式2)  语句2
    else  if  (表达式3)  语句3
           …
    else  语句 n

2.4.2 多重选择结构

#include<iostream>
using namespace std;
void main()
{
    int x,y;
    cout<<"Enter x and y:";
    cin>>x>>y;
    if (x!=y)
        if (x>y)
            cout<<"x>y"<<endl;
        else
            cout<<"x<y"<<endl;
    else
        cout<<"x=y"<<endl;

if语句嵌套 一般形式:

if  (   )
     if  (   )    语句 1
     else   语句 2
else
     if  (   )    语句 3
     else   语句 4
注意:语句 1、2、3、4 可以是复合语句,每层的 if 与 else 配对,或用 { } 来确定层次关系。

 

//输入一个0~6的整数,转换成星期输出。

#include <iostream>
using namespace std;
void main(void)
{	int day;
	cin >> day;
	switch (day)
	{	
	 	case 0:	cout << "Sunday" << endl;    break;
	 	case 1:	cout << "Monday" << endl;   break;
		case 2:	cout << "Tuesday" << endl;   break;
		case 3:  cout << "Wednesday" << endl;   break;
	 	case 4:	cout << "Thursday" << endl;   break;
	 	case 5:	cout << "Friday" << endl;   break;
	 	case 6:	cout << "Saturday" << endl;   break;
	 	default:	      cout << "Day out of range Sunday .. Saturday" << endl;
					break;
	 }
}

一般形式:
switch  (表达式)
   {  case    常量表达式 1:语句1
      case    常量表达式 2:语句2
                  ┆
      case    常量表达式 n:语句n
      default :             语句n+1
   }
执行顺序:case中的常量表达式值为入口标号,由此开始顺序执行。因此,每个case分支最后应该加break语句。
注意问题:

  • case分支可包含多个语句,且不用{ }。
  • 表达式、判断值都是int型或char型。
  • 若干分支执行内容相同可共用一组语句。

2.4.3 循环结构与选择
形式:    while  (表达式)  语句

//求自然数1~10之和
#include<iostream>
using namespace std;
void main()
{
  int i(1), sum(0);
  while(i<=10)
  {
      sum+=i;  //相当于sum=sum+i;
      i++;
  }
  cout<<"sum="<<sum<<endl;
}

do   语句
while (表达式)

//输入一个整数,将各位数字反转后输出。
#include <iostream>
using namespace std;
void main(void)
{
	int n, right_digit, newnum = 0; 
	cout << "Enter the number: ";
	cin >> n;
	
	cout << "The number in reverse order is  ";
	do
	{
		right_digit = n % 10;
		cout << right_digit;
		n /= 10;  //相当于n=n/10
	} 
	while (n != 0);
  cout<<endl;		
}

语法形式:
for  (表达式1;表达式2;表达式3)  语句

#include <iostream>
using namespace std;
void main(void)
{ 
	int n, k;

	cout << "Enter a positive integer: ";
	cin >> n;
	cout << "Number  " << n << "   Factors  ";

	for (k=1; k <= n; k++)
		if (n % k == 0)
			cout << k << "  ";
  cout << endl;
}

例题:编写程序输出以下图案
                        *
                      ***
                    *****
                  *******
                  *****
                  ***
                  *

#include<iostream>
using namespace std;
void main()
{  int i,j,n=4;
   for(i=1;i<=n;i++)  //输出前4行图案
   { for(j=1;j<=30;j++)
       cout<<' ';  //在图案左侧空30列
     for(j=1; j<=8-2*i ;j++)
       cout<<' ';
     for(j=1; j<=2*i-1 ;j++)
       cout<<'*';
     cout<<endl;
   }
for(i=1;i<=n-1;i++)  //输出后3行图案
   { for(j=1;j<=30;j++)
       cout<<' ';  //在图案左侧空30列
     for(j=1; j<=7-2*i ;j++)
       cout<<'*';
     cout<<endl;
   }
}

循环结构与选择结构的嵌套

#include<iostream>
using namespace std;
void main()
{   
	int n;
	for(n=100; n<=200; n++)
	{    if (n%3!=0)
	     cout<<n;
	}
}

例题:读入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束。

#include<iostream>
using namespace std;
void main()
{ int  i=0, j=0, n;
  cout<<"请输入若干整数(输入0则结束):";
  cin>>n;
  while(  n!=0  )
  {  if(n>0) i++;
     if(n<0) j++;
     cin>>n    ;
  }
  cout<<"正整数个数:"<<i<<"   负整数个数:"<<j<<endl;
}


2.4.5 其他控制语句
break语句
使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。
continue 语句
结束本次循环,接着判断是否执行下一次循环


2.5 自定义数据类型
2.5.1 typedef
为一个已有的数据类型另外命名
语法形式 typedef  已有类型名  新类型名表;
例如
typedef double area,volume;
typedef int natural;
natural i1,i2;
area a;
volume v;

2.5.2 枚举类型enum
枚举类型应用说明:

  • 对枚举元素按常量处理,不能对它们赋值。例如,不能写:sun=0;
  • 枚举元素具有缺省值,它们依次为: 0,1,2,......。
  • 也可以在声明时另行指定枚举元素的值,如:
  • enum weekday {sun=7,mon=1,tue,wed,thu,fri,sat};
  • 枚举值可以进行关系运算。
  • 整数值不能直接赋给枚举变量,如需 要将整数赋值给枚举变量,应进行强 制类型转换。


例子:设某次体育比赛的结果有四种可能:胜(win)、负(lose)、平局(tie)、比赛取消(cancel),编写程序顺序输出这四种情况。

#include <iostream>
using namespace std;
enum game_result {WIN, LOSE, TIE, CANCEL};
int main()
{ game_result result;
   enum game_result omit = CANCEL;
   int count;
   for (count = WIN ; count <= CANCEL ; count++) 
   { result = (game_result)count;
      if (result == omit)
      {    cout << "The game was cancelled\n";      }
      else 
      { cout << "The game was played ";
         if (result == WIN)         cout << "and we won!";
         if (result == LOSE)       cout << "and we lost.";
         cout << "\n";
      }
   }
   return 0;
}


2.5.3 结构体 - 结构的声明
结构:是由不同数据类型的数据组成的集合体
  struct  结构名
  {
      数据类型   成员名 1;
      数据类型   成员名 2;
       ……
      数据类型   成员名 n; 
  };
举例:

struct student   //学生信息结构体
{
    int num;  //学号
    char name[20];  //姓名
    char gender;  //性别
    int age;  //年龄
    float score;  //成绩
    char addr[30];  //住址
}

结构体变量形式: 
   结构名  结构变量名;

注意:

  • 结构变量的存储类型概念、它的寿命、可见性及使用范围与普通变量完全一致。
  • 结构变量说明在结构类型声明之后,二者也可同时进行。
  • 结构变量占内存大小可用 sizeof 运算求出: sizeof(运算量)

初始化:    说明结构变量的同时可以直接设置初值。
使用:   结构体成员的引用形式:      结构变量名.成员名

结构体变量的初始化和使用
#include <iostream>
#include <iomanip>
using namespace std;
struct student   //学生信息结构体
{  int num;  //学号
    char name[20];  //姓名
    char gender;  //性别
    int age;  //年龄
}stu={97001,"Lin Lin",'F',19};
void main()
{  cout<<setw(7)<<stu.num<<setw(20)<<stu.name       <<setw(3)<<stu.sex<<setw(3)<<stu.age;
}

2.54 联合体
union 联合名
  {
      数据类型   成员名 1;
      数据类型   成员名 2;
      ……
      数据类型   成员名 n; 
  };
例子:

 union uarea
{  char   c_data;
   short  s_data;
   long   l_data;
}

2.54 无名联合体
无名联合没有标记名,只是声明一个成员项的集合,这些成员项具有相同的内存地址,可以由成员项的名字直接访问。
例:
union
{    int    i;
     float   f;
}
在程序中可以这样使用:
i=10;
f=2.2;




 

猜你喜欢

转载自www.cnblogs.com/alec7015/p/12380073.html