1. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
⑴提示
把输入的10个整数存入数组中,10个中最小的放与数组的第一个元素对换,最大的数与数组的第10个元素对换。其他的保持不变。
⑵要求
定义3个函数:
void input(int number[ ]); //此函数实现输入10个元素//
void max_min_value(int array[ ]); //此函数实现交换数组的对应元素//
void output(int array[ ]); //此函数实现输出10个元素//
#include<iostream>
using namespace std;
const int n = 10;
void input(int number[]) {
int t;
cout << "请输入10个整数:" << endl;
for (int i = 0; i < n; i++) {
cin >> t;
number[i] = t;
}
cout << "数组创建成功" << endl;
}
void max_min_value(int array[]) {
int min = array[0], max = array[0], minp = 0, maxp = 0, t;
for (int i = 1; i < n; i++) {
if (min > array[i]) {
min = array[i];
minp = i;
}
if (max < array[i]) {
max = array[i];
maxp = i;
}
}
t = array[0];
array[0] = min;
array[minp] = t;
t = array[n - 1];
array[n - 1] = max;
array[maxp] = t;
cout << "交换成功" << endl;
}
void output(int array[]) {
cout << "输出数组:" << endl;
for (int i = 0; i < n; i++) {
cout << array[i] << " ";
}
cout << endl;
}
int main() {
int number[n];
input(number);
max_min_value(number);
output(number);
return 0;
}
2.二维数组统计
编写程序统计一个字符串“C++ is beginer's language”中单词的个数,并将统计的每个单词存入二维数组array[ ][ ]中的一行,即数组array中的元素:array[0]=”C++”, array[1]=”is”, array[2]=”beginer’s”, array[3]=”language”。最后输出每个单词。
#include<iostream>
using namespace std;
const int n = 20;
void input(char a[][n], int& len_row, int& len_all) {
cout << "请输入字符串:" << endl;
char t;
int end = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
t = cin.get();
if (t == ' ' || t == '
')
break;
a[i][j] = t;
len_all++;
end = j + 1;
}
len_row++;
a[i][end] = ' ';
if (t == '
')
break;
}
cout << "录入成功" << endl;
}
void output(char a[][n], int len_row){
cout << "二维数组输出:" << endl;
for (int i = 0; i < len_row; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] == ' ')
break;
cout << a[i][j];
}
cout << " ";
}
cout << endl;
}
int main() {
char a[n][n];
int len_row = 0, len_all = 0;
input(a, len_row, len_all);
cout << "字符串总长度为:" << len_all << ",行数为:" << len_row << endl;
output(a, len_row);
return 0;
}
3. 循环单链表练习
n个人围成一圈,从第一个人开始报数,报到5的人就退出圈(图中白色的表示退出圈),再从下个人开始报数,问最后剩下的那个人是第几个人。
#include <iostream>
using namespace std;
//定义结构体
typedef struct Node {
int num;
string name;
struct Node* next;
}stNode, * stLink;
//初始化循环单链表
void initStLink(stLink& L) {
L = (stNode*) new stNode; //创建头结点
if (L == NULL)
cout << "链表初始化失败" << endl;
L->next = L; //头结点指向自己
cout << "链表初始化成功" << endl;
}
//销毁链表
void destroyLink(stLink& L) {
stNode* p = L;
stNode* q = p->next;
while (q != L) {
free(p);
p = q;
q = q->next;
}
free(p);
p = NULL;
q = NULL;
L = NULL;
cout << endl << "链表销毁成功" << endl;
}
//尾插入结点
void stInsert(stLink& L, int i, int num, string name) {
if (i < 1)
cout << "插入位置不能小于1" << endl;
stNode* p = L; //L指向头结点,后续用于扫描
int j = 0; //记录当前p指向的第几个结点
while (p != NULL && j < i - 1) { //循环找到第 i-1 个结点
p = p->next;
j++;
}
stNode* s = (stNode*) new stNode;
s->num = num;
s->name = name;
s->next = p->next;
p->next = s;
}
//创建循环链表
void CreateStLink(stLink& L, int n, int* stNum, string* stName) {
if (n < 1)
cout << "创建失败(至少有一个结点)" << endl;
for (int i = 0; i < n; i++) {
stInsert(L, i + 1, *(stNum + i), *(stName + i));
}
cout << "链表创建成功" << endl << endl;
}
//输出链表信息
void dispStLink(stLink L) {
stNode* p = L->next;
cout << "输出链表:" << endl;
while (p != L) {
cout << p->num << " " << p->name << endl;
p = p->next;
}
cout << endl;
}
//报数为 m 的出列,并播报最后剩余者
void stFind(stLink& L, int n, int m) {
stNode* p = L->next; //标记结点
int call_n = 0; //报数
int out_n = 0; //出局人数
cout << "游戏开始" << endl;
while (1) { //循环报数
if (p->num != 0) { //如果没有出局
if (out_n == (n - 1)) //如果只剩一人
break; //退出
call_n++; //报数
call_n %= m; //报到 m 就从0开始
if (call_n == 0) { //报数为 m 的
cout << p->num << " " << p->name << " 出局!" << endl; //播报出局
p->num = 0; //出局标记
out_n++; //出局人数 +1
}
}
p = p->next; //循环下一个结点
if (p == L) //p指向头结点时
p = p->next; //跳过头结点
}
cout << "最后的剩余者是:" << p->num << " " << p->name << endl;
}
int main()
{
int stNum[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
string stName[] = { "孙悟空", "嬴政", "林黛玉", "武松" , "朱莉" , "卡卡罗特" , "中本聪" , "高尔基" };
int n = sizeof(stNum) / sizeof(stNum[0]); //人数
int m = 5; //报数
stLink L;
initStLink(L); //初始化
CreateStLink(L, n, stNum, stName); //创建链表
dispStLink(L); //显示链表
stFind(L, n, m); //报数出局
destroyLink(L); //销毁链表
return 0;
}