C++程序设计-实验三 数组的定义与使用

2021/11/9
1.从键盘输入任一字符串(不含空格),然后输入所要查找的字符。如果该字符存在于字符串中,则输出它在字符串中第一次出现的位置;否则输出no exist。
#include<iostream>
using namespace std;
int main() {
	char a[100], b;
	int i;
	cin >> a;
	cin >> b;
	for (i = 0; i < strlen(a); i++) {
		if (a[i] == b) {
			cout << i;
			break;
		}
	}
	if (i == strlen(a)) {
		cout << "no exist";
	}
	return 0;
}
2.有一篇作文,一共有3行文字,每行最多有80个字符。要求分别统计出其中英文字母.数字、空格以及其他字符的个数。
#include<iostream>
using namespace std;
int main() {
	char a[80], b;
	int i,j;
	int letters = 0, numbers = 0, spaces = 0, others = 0;
	for (i = 1; i <= 3; i++) {
		memset(a, 0, 80);
		cin.getline(a,80);
		for (j = 0; j < strlen(a);j++) {
			if ((a[j] >= 'a' && a[j] <= 'z') || (a[j] >= 'A' && a[j] <= 'Z')) {
				letters++;
			}
			else if (a[j] == ' ') {
				spaces++;
			}
			else if (a[j] >= '0' && a[j] <= '9') {
				numbers++;
			}
			else {
				others++;
			}
		}
	}
	cout << "统计:" << endl;
	cout << "英文字母:" << letters << endl;
	cout << "    数字:" << numbers << endl;
	cout << "    空格:" << spaces << endl;
	cout << "其他字符:" << others;
	return 0;
}
3.输入n个字符串(允许含空格),将字符串按字典序由小到大输出。
#include<iostream>
#include<string>
using namespace std;
int main() {
	string a[80], temp;
	int i, j, n;
	cout << "参与排序的字符串数量n为:" << endl;
	cin >> n;
	cin.get();
	cout << "依次输入" << n << "个字符串;" << endl;
	for (i = 0; i < n; i++) {
		getline(cin, a[i]);
	}
	for (i = 0; i < n; i++) {
		for (j = i + 1; j < n; j++) {
			if (a[i] > a[j]) {
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
	cout << "顺序排列后的输出:" << endl;
	for (i = 0; i < n; i++) {
		cout << a[i] << endl;
	}
	return 0;
}
4.找出一个二维数组中的“鞍点”。即该位置上的元素在该行上最大,在该列上最小。
#include<iostream>
using namespace std;
int main() {
	const int n = 5;
	int a[n][n];
	int max, min;
	int x = 0, y = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j<n; j++) {
			cin >> a[i][j];
		}
	}
	for (int i = 0; i < n; i++) {
		max = 0;
		for (int j = 0; j < n; j++) {
			if (a[i][j] > max) {
				max = a[i][j];
				x = j;
			}
		}
		min = a[0][x];
		for (int j = 0; j < n; j++) {
			if (a[j][x] < min) {
				min = a[j][x];
				y = j;
			}
		}
		if (max == min) {
			cout << "二维数组中的鞍点为第"<<y+1<<"行第"<<x+1<<"列的" << max << endl;
			break;
		}
		else {
			cout << "二维数组中的鞍点不存在" << endl;
		    break;
		}
	}
	return 0;
}
5.构造一个有序数组。终端读入的一个数x,使用“折半”法(二分法)在数组中找到该数,并输出该数在数组中的位置(输出“xxx是数组中的第_个数”)。若该数不在数组中,则输出“查无此数”。
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	const int n = 5;
	int a[n+1];
	int x = 0, flag = 0, num = 0;
	int left, right,middle;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	sort(a, a + n + 1);
	cin >> x;
	left = 1;
	right = n;
	while (left <= right) {
		middle = (left + right) / 2;
		if (a[middle] == x) {
			flag = 1;
			left = right + 1;
		}
		else if (a[middle] < x) {
			left = middle + 1;
		}
		else if (a[middle] > x) {
			right = middle - 1;
		}
	}
	if (flag) {
		cout << x << "是数组中的第" << middle << "个数";
	}
	else {
		cout << "查无此数";
	}
	return 0;
}
6.用埃拉托斯特尼筛选取法求出1~200之间的所有素数。
#include<iostream>
using namespace std;
int main() {
	int a[201];
	cout << "1~200之间的素数为:" << endl;
	for (int i = 2; i <= 200; i++) {
		a[i] = 1;
	}
	for (int i = 2; i <= 14; i++) {
		if (a[i]) {
            for (int j = i*i; j <= 200; j=j+i) {
					a[j] = 0;
		    }
		}		
	}
	for (int i = 2; i <= 200; i++) {
		if (a[i]) {
			cout << i << " ";
		}
	}
	return 0;
}
7.从键盘输入一个英文句子,统计句子中的单词数量。单词之间以一个或多个空格作为间隔。假定句子中的字符数量小于100,请编程实现该功能。
输入:一个英文句子。
输出:文中的单词数量。
#include<iostream>
#include<string>
using namespace std;
int main() {
	string a;
	int words = 0;
	int flag = 1;
	getline(cin,a);
	for (int i = 0; i < a.length(); i++) {
		if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) {
			if (flag) {
				words = words + 1;
			}
			flag = 0;
		}
		else {
			flag = 1;
		}
	}
	cout << "含有" << words << "个单词。";
	return 0;
}
8.编写程序,输入字符串(包含多个’*'),删除除前导和尾部之外的所有’*’后输出。
#include<iostream>
#include<string>
using namespace std;
int main() {
	string a,b,c;
	int x,y;
	getline(cin, a);
	for (int i = 0; i < a.length(); i++) {
		if (a[i] != '*') {
			b = a.substr(0, i + 1);
			x = i;
			break;
		}
	}
	for (int i = a.length()-1; i > 0 ; i--) {
		if (a[i] != '*') {
			c = a.substr(i);
			y = i;
			break;
		}
	}
	for (int i = x + 1; i < y; i++) {
		if (a[i] != '*'){
			b=b+a[i];
		}
	}
	b = b + c;
	cout << b;
	return 0;
}
9.排队打水问题。
有N个人排队到R个水龙头去打水(N<=100,R<=10),他们装满水桶的时间分别为T1,T2..Tn为整数且各不相等。应如何安排他们打水的顺序,才能使他们所有人花费的总时间最少。即:输出每人所花时间总和――包括打水时间和等待时间。
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int N, R;
	int a[100], b[10] = {};
	int time = 0;
	cin >> N >> R;
	for (int i = 0; i < N; i++){
		cin >> a[i];
	}
	sort(a, a + N);
	for (int i = 0; i < N; i++){
		sort(b, b + R);
		time=time+b[0]+a[i];
		b[0]=b[0]+a[i];
	}
	cout << time << endl;
}

实验体会:

  1. 注意不同函数所需要的头文件
  2. 注意flag的使用
  3. 数组一定要初始化
  4. 数组大小可用常变量定义
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

闻闻闻闻笛声

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

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

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

打赏作者

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

抵扣说明:

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

余额充值