《C++程序设计》(第4版)|问题精选与提炼|第5章 利用数组处理批量数据

 定义和引用一维数组

一维数组元素的初始化有哪些方法?

  1.  在定义数组时对全部数组元素赋予初值。如:
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
  2. 可以只给一部分元素赋值。
    int a[10] = {0,1,2,3,4};
  3. 在对全部数组元素赋初值时,可以不指定数组长度。如:
    int a[] = {1,2,3,4,5};

(程序设计)用数组来处理斐波那契数列问题。 输出前二十个斐波那契数。

#include <iostream>
#include <iomanip>//iomanip是I/O流控制头文件,主要包含cin、cout之类I/O流对象的一些操纵运算子。
using namespace std;
int main()
{
	int i;
	int f[20] = { 1,1 };
	for (i = 2; i < 20; i++)
		f[i] = f[i - 2] + f[i - 1];
	for (i = 0; i < 20; i++)//此循环的作用是输出20个数;
	{
		if (i % 5 == 0) cout << endl;//控制换行,每行输出5个数据
		cout << setw(8) << f[i];//每个数据输出时占8个字符
	}
	cout << endl;//最后一次执行换行;
	return 0;
}
	

(程序设计)泡沫排序法对10个数进行排序(由小到大)。

#include <iostream>
using namespace std;
int main()
{
	int a[11]; 
	int i, j, t;
	cout << "input 10 numbers:" << endl;
	for (i = 1; i < 11; i++);
	cin >> a[i];
	cout << endl;
	for(j =1;i<=10-j;i++)
		if (a[i]>a[i+1])
		{
			t = a[i]; a[i] = a[i + 1]; a[i + 1] = t;
		}
	cout << "the sorted numbers:" << endl;
	for (i = 1; i < 11; i++)
		cout << a[i] << " ";
	cout << endl;//最后一次执行换行;
	return 0;
}

 定义和引用二维数组

二维数组的初始化有哪些方法?

  1. 按行给二维数组全部元素赋初值
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  2.  可以将所有数据写在一个花括号内,按数组排列的顺序对全部元素赋初值。
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    
  3. 可以对部分元素赋初值;
    int a [3][4] = {{1},{5},{9}};

    只是对各行第一列的元素赋初值,其余元素值自动置为0。\begin{bmatrix} 5&0&0&0 \\ 1&0 & 0& 0\\ 9&0 &0 &0 \end{bmatrix}

    int a[3][4] = {{1},{5,6}};

    \begin{bmatrix} 1& 0& 0 & 0\\ 5& 6 & 0&0 \\ 0& 0 &0 & 0 \end{bmatrix}

  4. 如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

 用数组作函数参数

(程序设计)用选择法对数组中10个整数按由小到大排序。

#include <iostream>
using namespace std;
int main()
{
	void select_sort(int array[], int n);//函数声明
	int a[10], i;
	cout << "enter the origint array:" << endl;
	for (i = 0; i < 10; i++)
		cin >> a[i];//输入十个数
	cout << endl;
	select_sort(a, 10);//函数调用,数组名作实参
	cout << "the sorted array:" << endl;
	for (i = 0; i < 10; i++)
		cout << a[i] << " ";
	cout << endl;
	return 0;
}
void select_sort(int array[], int n)
{
	int i, j, k, t;
	for (i = 0; i < n - 1; i++)
	{
		k = i;
		for (j = i + 1; j < n; j++)
			if (array[j] < array[k]) k = j;
		t = array[k]; array[k] = array[i]; array[i] = t;
	}
}
	

字符数组

 对字符数组进行初始化,最容易理解的方式就是逐个字符赋值给数组中的各元素。如

char c[10] = {'I',' ','a','m',' ','h','a','p','p','y'};

如果花括号中提供的初值个数(即字符个数)与数组长度不相符,会出现什么情况?

如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理。如 果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。

判断如图代码的正误。

 在程序中往往根据检测什么来判断字符串是否结束?

 在程序中往往通过检测‘\0’的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。

使用字符串处理函数对字符串进行操作

请列举四种常用的字符串处理函数。

 

能否用一个赋值语句将一个字符串常量或字符数组直接赋给一个字符数组? 

只能通过调用strcpy函数来实现将一个字符串赋给一个字符数组,而不能用赋值语句将一个字符 串常量或字符数组直接赋给一个字符数组。如下面是不合法的:

 C++处理字符串的方法——字符串类与字符串变量

在使用string类的定义变量时,应注意什么?

必须在本文件的开头将C++标准库中的string头文件包含进来,即应该加上:

#include<string>

在用字符数组存放字符串时,字符串的运算要用字符串函数,如strcat(连接)、strcmp(比较)、strcpy(复制),而对string类对象,可以不用这些函数,而直接用简单的运算符。请问这是为什么?

这是因为string头文件中已经对这些运算符进行了重载,使它们能用于string类对象的运算。

输入3个字符串,要求将字母按由小到大顺序输出。

#include<iostream>
using namespace std;

int main()
{
	string string1, string2, string3, temp;
	cout << "please input three strings:";
	cin >> string1 >> string2 >> string3;
	if (string2 > string3)
	{
		temp = string2;
		string2 = string3;
		string3 = temp;
	}
	if (string1 <= string2)
		cout << string1 << " " << string2 << " " << string3 << endl;
	else if (string1 <= string3)
		cout << string2 << " " << string1 << " " << string3 << endl;
	else
		cout << string2 << " " << string3 << " " << string1 << endl;
	return 0;
}

 例5.12 一个班有n个学生,需要把每个学生的简单资料(姓名和学号)输入计算机保存。然后可以通过输入某一学生的姓名查找其有关资料。当输入一个姓名后,程序就查找该班中有无此学生,如果有,则输出他的姓名和学号,如果查不到,则输出“本班无此人”。

#include <iostream>
using namespace std;

string name[50], num[50];//定义两个字符串数组、分别存放姓名和学号
int n;//n是实际的学生数

int main()
{
	void input_data();//函数声明
	void search(string find_name);//函数声明
	string find_name;//定义字符串变量,要找的学生
	cout << "please input number of this class:";
	cin >> n;//输入学生数
	input_data();//调用函数,输入学生数据
	cout << "please input name you want find:";
	cin >> find_name;//输入要找到学生的姓名
	search(find_name);调用函数,寻找该学生姓名
	return 0;
}

void input_data()//函数首部
{
	int i;
	for (i = 0; i < n; i++)
	{
		cout << "input name and NO. of student " << ":";
		cin >> name[i] >> num[i];
	}
}

void search(string find_name)
{
	int i;
	bool flag = false;
	for (i = 0; i < n; i++)
	{
		if (name[i] == find_name)//如果要找的姓名和本班某一学生姓名相同
		{
			cout << name[i] << "has been found,his number is " << num[i] << endl;//输出姓名和学号
			flag = true;
			break;
		}
	}
	if (flag == false)
		cout << "can't find this name";
}

输入10个学生的姓名、学号和成绩,将其中不及格者的姓名、学号和成绩输出。 

#include <iostream>
using namespace std;

const int n = 10;
string name[n];
int num[n], score[n];

int main()
{
    int i;
    void input_data();
    input_data();
    cout << endl << "The list of failed:" << endl;
    for (i = 0; i < n; i++)
    {
        if (score[i] < 60)
            cout << name[i] << " " << num[i] << "  " << score[i] << endl;
    }
    return 0;
}

void input_data()
{
    int i;
    for (i = 0; i < n; i++)
    {
        cout << "input name,number and score of student " << i + 1 << ":";
        cin >> name[i] >> num[i] >> score[i];
    }
}

 输入一个字符串,把其中的字符按逆序输出。如输入LIGHT,输出THGIL。

(1)用字符数组方法;
(2)用string方法。

(1)字符数组方法

#include <iostream>
using namespace std;

int main()
{
	const int n = 10;
	int i;
	char a[n], temp;
	cout << "please input a string:";
	for (i = 0; i < n; i++)
		cin >> a[i];
	for (i = 0; i < n / 2; i++)
	{
		temp = a[i]; 
		a[i] = a[n - i - 1]; 
		a[n - i - 1] = temp;
	}
	for (i = 0; i < n; i++)
		cout << a[i];
	cout << endl;
	return 0;
}

 (2)string方法

#include <iostream>
using namespace std;

int main()
{
	string a;
	int i, n;
	char temp;
	cout << "please input a string:";
	cin >> a;
	n = int(a.size());
	for (i = 0; i < n / 2; i++)
	{
		temp = a[i]; 
		a[i] = a[n - i - 1]; 
		a[n - i - 1] = temp;
	}
	cout << a << endl;
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抚壮而高掌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值