2.C/C++数据类型
1.简单类型有:整数类型、字符类型、浮点类型、指针类型、枚举类型和void类型.
举例如下:
#include<iostream.h>
void main()
{
enum Boolean{False,True};
cout<<sizeof(char)<<" "
<<sizeof(short)<<" "
<<sizeof(long)<<" "
<<sizeof(float)<<" "
<<sizeof(double)<<" "
<<sizeof(long double)<<" "
<<sizeof(void *)<<" "
<<sizeof(Boolean)<<" "
<<endl;
}
/*
1 2 4 4 8 8 4 4
Press any key to continue
*/
(1)数组类型:具有一定数目的同一类型的顺序组合
举例如下:
(2)字符串
1)字符串类型是一种特殊的一维字符数组类型,该类型中的每一个值,从下标0位置保存的字符起到下标i位置(0<=i<=n-1,n为一维下标上界)保存的ASCII码为0的空字符'"0'止,连续i个字符(不含'"0'字符在内)称为一个字符串.
2)一个字符串常量是用双引号括起来的一串字符,但把它作为初值赋给一个字符数组时,是把该常量中的每个字符依次写入到字符数组中从下标0开始的对应位置上,并在最后写入一个'"0'字符作为字符串的结束标志。
3)字符数组在定义时可以赋初值,但在其它地方必须用strcpy函数。
4)操作:求串长,串拷贝,串比较,串输入输出等。
5)一维数组:保存一个字符串;二维数组:保存多个字符串.
#include<iostream.h>
#include<string.h>
void main()
{
//定义一个二维数组a并对其进行初始化
char a[4][20] = {"Beijing","Shanghai","Tianjin","Hefei"};
//定义一个一维字符数组p,用于存放值最大的字符串
char p[20];
//输出数组a中的所有字符串
for(int i = 0;i < 20;i++)
{
cout<<&a[i][0]<<endl; // or cout<<a[i]<<endl;
}
//顺序比较查找出字符数组a中值最大的字符串
strcpy(p,&a[0][0]); //strcpy(p,a[0]);
for(i = 1;i < 4;i++)
{
if(strcmp(p,&a[i][0]) < 0)
{
strcpy(p,&a[i][0]);
}
}
cout<<p<<endl;
}
/*
Beijing
Shanghai
Tianjin
Hefei
Tianjin
Press any key to continue
*/
(3)记录类型
1)多个不同类型(当然也可以相同)的组合体。
2)在C/C++中,记录称作为结构,用struct来定义
3)成员选择操作符有两种:
a. 直接成员选择符: . 其左面的操作数为:一个记录类型的对象
b. 间接成员选择符: -> 其左面的操作数为:一个指向记录类型对象的指针
例一如下:
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
struct student
{
char num[8]; //每个学号不能超过7个字符
char name[10]; //姓名不能超过9个字符
char sex; //假定用字符f和m分别表示女性和男性
double result[6]; //前5个元素位置保存5门课程成绩,最后一个位置保存平均成绩
}; //整个记录类型所对应存储空间大小:8+12+4+48=72(个字节)
//想一想:为什么不是:8+10+1+48=67
void main()
{
student s1 = {"980413","张三",'m',{76,83,64,90,75,0}};
//int size = sizeof(struct student);
//cout<<size<<endl;
double temp = 0.0;
for(int i = 0;i < 5;i++)
{
s1.result[5] += s1.result[i]/5;
//等价于下面两句
//temp = s1.result[i]/5;
//s1.result[5] = s1.result[5] + temp;
}
cout<<s1.num<<" "
<<s1.name<<" "
<<s1.sex<<" "
<<s1.result[5]<<endl;
}
/*
980413 张三 m 77.6
Press any key to continue
*/
例二如下:
#include<iostream.h>
#include<iomanip.h>
struct person
{
char name[15];
int age;
person * next;
};
void main()
{
person r1 = {"zhangsan",38},
r2 = {"lishi",34},
r3 = {"wangwu",42};
person *p;
r1.next = &r2;
r2.next = &r3;
r3.next = NULL;
p = &r1;
cout.setf(ios::left); //使显示数据在规定范围内左对齐
while(p != NULL)
{
cout<<setw(15)<<p->name
<<setw(5 )<<p->age<<endl;
p = p->next;
}
}
/*
zhangsan 38
lishi 34
wangwu 42
Press any key to continue
*/
(4)文件
1)文件是按位置有序的集合.
2)在计算机中,文件被存放在外存上,其存储结构由操作系统自动实现.
3)C++中,通过定义与文件相对应的文件流来使用文件
4)输入文件流: 数据从文件----> 文件内存缓存区----->内存中的变量中
输出文件流: 数据先写到 ----> 文件内存缓存区 -----> 文件
代码举例如下:
#include<iostream.h>
#include "stdlib.h"
#include "fstream.h"
//把从键盘上输入的文本原封不动地写入到D盘上wr1.dat文件中
void main()
{
char ch;
//建立文个输出流,使之与D盘上的文件wr1.dat对应
ofstream of1("D:wr1.dat");
//从键盘上输入一个字符到字符变量ch中
ch = cin.get();
//如果字符不是文件结束符EOF,则将字符写入输出文件流对应的文件中
while (ch != EOF) // 按下Ctrl+Z表示输入的是EOF
{
of1.put(ch);
ch = cin.get();
}
of1.close();
}
举例之二如下:
#include "iostream.h"
#include "stdlib.h"
#include "fstream.h"
//程序以输入方式打开刚刚在D盘上建立的wr1.dat文件,把文件中的全部内容输出到
//屏幕,统计出文件中所包含文本的行数,最后显示出文件长度和行数
void main()
{
ifstream if1("D:wr1.dat",ios::nocreate);
if (!if1)
{
cout<<"file not open";
exit(1);
}
char ch;
int i = 0; // i 用于记录文件中内容的行数
if1.get(ch); //通过输入文件流从文件中读取一个字符到ch中
while (ch != EOF)
{
cout<<ch;
if (ch == '"n')
{
i = i + 1;
}
if1.get(ch);
}
cout<<if1.tellg()<<endl;
if1.close();
cout<<i<<endl;
}
/-----------------------------------------------------------------------/