天天看点

C++笔记(三)数组和自定义数据类型

1. ios::binary可以显示指定它的打开方式为ios::binary,也就是以二进制方式打开。

2. 结构与联合的区别:

联合类型和结构类型的变量都有不同类型的成员,但是联合类型的变量系统仅按占空间最大的成员分配空间,几个成员共用同一块内存空间,即在某一时刻只能存放其中一种而不是几种。而对于结构类型的变量,系统将为其分配所有成员占用空间的总和大小的空间,即各成员同时存在,所以联合类型变量不能用作函数参数或返回值,而结构类型变量都可以。

3. 对于一个枚举类型

enum color{WHITE,BLACK,BLUE,PINK}

不定值的话那么它的成员的值依次为0,1,2…

如果指定其中一个值,那就从那个值后依次加

举个?:enum color{WHITE,BLACK,BLUE,PINK}

WHITE=0,BLACK=1,BLUE=2,PINK=3

enum color{WHITE,BLACK=100,BLUE,PINK}

而对于上式,WHITE=0,BLACK=100,BLUE=101,PINK=102

4. 用rand()函数生成随机数要包含头文件stdlb.h

使用time()要包含头文件ctime

srand((unsigned int)time(NULL));这条语句是给rand()一个种子值,其中time(NULL)是取系统当前时间值,为了每次调用rand()函数时产生一系列不同的随机数。如果不加此句,则rand()函数对于同一个程序每次运行生成的随机数是一样的。

练习题和代码嗷

// character4.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<iomanip>
#include<cmath>
#include<fstream>
#include<stdlib.h>
#include<ctime>
using namespace std;


void exp3()
/*40个学生用1-10分评价食堂质量,
将40个分数放在整形数组中并汇总调查结果*/
{
	const int cStuNum = 40;
	const int cScoreNum = 11;
	int score[cStuNum] = {
		1,2,6,4,8,5,9,7,8,10,
		1,2,3,8,6,4,9,4,7,8,
		3,6,5,9,8,10,5,1,5,4,
		2,6,9,3,8,1,5,3,8,9
	};//全部分数
	int counts[cScoreNum] = { 0 };
	int k;
	for (int k = 0; k < cStuNum; k++)
	{
		counts[score[k]]++;

	}
	cout << "score" << setw(10) << "counts" << endl;
	for (int k = 1; k < cScoreNum; k++)
	{
		cout << setw(3) << k << setw(10) << counts[k] << endl;
	}
}
void exp5()
//将正弦函数的一个周期分成N等分,定义数组显示自变量值和函数值
{
	const int N = 8;
	double x[N];
	double y[N];

	const double PI2 = 3.1415926 * 2;
	double delta = PI2 / N;
	cout << setw(8) << "弧度" << setw(12) << "sin(x)" << endl;
	for (int k = 0; k < N; k++)
	{
		x[k] = k * delta;
		y[k] = sin(x[k]);
		cout << setw(10) << x[k] << ",  " << y[k] << endl;
	}
}
void exp6()//存储一个周期正余弦函数值并存到test.txt
{
	const int N = 16;
	double x[N];
	double y_sin[N], y_cos[N];
	const double pi2 = 3.14159 * 2;
	double delta = pi2 / N;
	ofstream ofile("test.txt");
	for (int k = 0; k < N; k++)
	{
		x[k] = k * delta;
		y_sin[k] = sin(x[k]);
		y_cos[k] = cos(x[k]);
		cout << setw(10) << x[k] << " " << setw(10) << setprecision(4) << y_sin[k] << " "
			<< setw(10) << setprecision(4) << y_cos[k] << endl;
		ofile<< setw(10) << x[k] << " " << setw(10) << setprecision(4) << y_sin[k] << " "
			<< setw(10) << setprecision(4) << y_cos[k] << endl;
	}
	ofile.close();
}
void exp7()//把上题存的再读出来
{
	ifstream ifile("test.txt");
	const int N = 16;
	double x[N], y_sin[N], y_cos[N];
	for (int k = 0; k < N; k++)
	{
		ifile >> x[k] >> y_sin[k] >> y_cos[k];
		cout << setw(10) << x[k] << "," << setw(10) << setprecision(4)
			<< y_sin[k] << "," << setw(10) << setprecision(4) << y_cos[k] << endl;

	}
	ifile.close();

}

void exp8()//输出进行36000次投掷两次骰子之和实验的结果
{
	const int N = 11;
	const int Dice = 6;
	const int EXP_TIMES = 36000;
	int result_times[N] = { 0 };

	int add_result;
	int i, j;
	srand((unsigned int)time(NULL));
	for (i = 0; i < EXP_TIMES; i++)
	{
		add_result = rand() % Dice + 1;
		add_result += (rand() % Dice + 1);
		result_times[add_result - 2]++;

	}
	for (int i = 0; i < N; i++)
		cout << setw(10) << i + 2 << setw(10) << result_times[i] << endl;
}

int main()
{
	exp8();

	system("pause");
    return 0;
}


           
c++

继续阅读