-
-
[原创]C++ 代码整理 《Visual C++ 开发实战1200例》数据结构-数组
-
2021-5-17 17:38 7511
-
C++ 代码整理
前言
菜鸟一枚,该文章为整理学习C++ 代码,进一步熟悉C++ 语言并且用来日后复习。因为原书当中使用的编译器有点老,所以,原书当中的代码在现在的环境运行可能报错。所以多少进行了修改使其可以正常运行。下图是我使用的环境。
数据结构-数组
向数组中赋值
#include <iostream> using namespace std; int main() { int values[10] = { 0 }; //定义数组并初始化 for (int i = 0; i < 9; i++) { cin >> values[i]; } for (int i = 0; i < 9; i++) { cout << values[i] << "\n"; } return 0; }
遍历数组
#include <iostream> using namespace std; int main() { int i; float a[6]; //遍历从键盘为数组元素赋值 for (i = 0; i < 6; i++) { cout << "a[" << i << "] = "; cin >> a[i]; } //遍历输出数组 for (i = 0; i < 6; i++) { cout << a[i] << "\t"; //控制每行输出元素个数 if (i % 3 == 2) { cout << "\n"; } } return 0; }
求数组中元素的平均和
#include <iostream> using namespace std; int main() { int i; float a[6]; float sum = 0; //从键盘为数组元素赋值 for (i = 0; i < 6; i++) { cout << "a[" << i << "] = "; cin >> a[i]; } //输出数组 for (i = 0; i < 6; i++) { sum += a[i]; } sum = sum / 6; cout << "输出数组平均和:" << sum << "\n"; return 0; }
数组的排序
#include <iostream> int main() { int i, j, t; int a[7]; //从键盘为数组元素赋值 for (i = 0; i < 7; i++) { std::cout << "a[" << i << "]="; std::cin >> a[i]; } //从小到大排序 for (i = 0; i < 6; i++) { for (j = i + 1; j < 7; j++) { if (a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t; } } } //输出数组 for (i = 0; i < 7; i++) std::cout << a[i] << "\n"; return 0; }
向数组中插入元素
#include <iostream> int main() { int i, m, t, n; int a[6]; //从键盘为数组元素赋值 for (i = 0; i < 6; i++) { std::cout << "a[" << i << "]="; std::cin >> a[i]; } //输出数组 for (i = 0; i < 6; i++) { std::cout << a[i] << "\t"; //使元素分行显示 if ((i + 1) % 3 == 0) { std::cout << "\n"; } } std::cout << "输入要插入的数据:" << "\n"; std::cin >> m; std::cout << "输入要插入的位置" << "\n"; std::cin >> n; //插入数据 /* * 该for循环功能,首先通过for遍历数组和if语句判断需要插入的位置,之后,将对应的数据插入指定位置之后。 * 通过“n++”来确定到指定插入数据之后的数据并且循环赋值操作。 */ for (i = 0; i < 6; i++) { if (i == n) { t = a[i]; a[i] = m; m = t; n++; } } //输出数组 for (i = 0; i < 6; i++) { std::cout << a[i] << "\t"; if ((i + 1) % 3 == 0) { std::cout << "\n"; } } return 0; }
数组的删除操作
注释:通过new 运算符动态创建,可以创建出不定长的元素的数组
#include <iostream> using namespace std; int main() { int num; cout << "输入一个数:" << "\n"; cin >> num; int* arrays = new int[num]; for (int i = 0; i < num; i++) { arrays[i] = i + 1; } for (int i = 0; i < num; i++) { cout << arrays[i] << "\t"; } cout << "\n"; delete[] arrays; }
数组冒泡排序法
#include <iostream> using namespace std; int main() { int i, j, t; int a[10]; //从键盘为数组元素赋值 for (i = 0; i < 10; i++) { cout << "a[" << i << "]="; cin >> a[i]; } //排序 for (i = 0; i < 9; i++) { for (j = 0; j < 9 - i; j++) { if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } cout << "输出数组:" << "\n"; for (j = 0; j < 10; j++) { cout << a[j] << "\t"; if ((j + 1) % 3 == 0) { cout << "\n"; } } return 0; }
顺序查找数组中指定的元素
#include <iostream> using namespace std; int main() { int i, n = 0, num; int a[10]; //从键盘为数组元素赋值 for (i = 0; i < 10; i++) { cout << a[i] << "\t"; cin >> a[i]; } cout << "输入要查找的数据:" << "\n"; cin >> num; cout << "输出数组:" << "\n"; for (i = 0; i < 10; i++) { cout << a[i] << "\t"; if ((i + 1) % 3 == 0) { cout << "\n"; } } cout << "\n"; for (i = 0; i < 10; i++) { if (num == a[i]) { cout << "要查找的元素是:" << "\n"; cout << "a[" << i << "]=" << num << "\n"; n++; } } if (n == 0) { cout << "要查找的元素不存在!" << "\n"; } return 0; }
有序数组折半查找
#include <iostream> using namespace std; int main() { int i, j, t, n = 0, num; int a[10]; //从键盘为数组元素赋值 for (i = 0; i < 10; i++) { cout << "a[" << i << "]="; cin >> a[i]; } //对数组进行排序 for (i = 0; i < 9; i++) { for (j = 0; j < 9 - i; j++) { if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } cout << "输入要查找的数据:" << "\n"; cin >> num; cout << "输出数组:" << "\n"; for (i = 0; i < 10; i++) { cout << a[i] << "\t"; if ((i + 1) % 3 == 0) { cout << "\n"; } } cout << "\n"; int left = 0, right = 9, mid; while (left < right) { mid = (left + right) / 2; if (a[mid] == num) { cout << "要查找的元素是:" << "\n"; cout << "a[" << mid << "]=" << num << "\n"; n++; } if (a[mid] < num) { left = mid + 1; } else { right = mid - 1; } } if (n == 0) { cout << "要查找的元素不存在!" << "\n"; } return 0; }
计算字符串中有多少个单词
#include <stdio.h> #include <iostream> using namespace std; int main() { char cString[100]; int iIndex, iWord = 1; char cBlank; gets_s(cString); if (cString[0] == '\0') { printf_s("Thear is no char!\n"); } else if (cString[0] == ' ') { printf_s("First char just is a blank!\n"); } else { for (iIndex = 0; cString[iIndex] != '\0'; iIndex++) { cBlank = cString[iIndex]; if (cBlank == ' ') { iWord++; } } printf_s("%d\n", iWord); } return 0; }
获取数组中元素的个数
#include <iostream> using namespace std; int main() { int array[] = { 1,3,4,56,76,23,3455 }; cout << "Array has " << sizeof(array) / sizeof(int) << " element" << endl; for (int i = 0; i < sizeof(array) / sizeof(int); i++) { cout << "element" << i << " is: " << array[i] << endl; } return 0; }
输出数组元素
#include <iostream> using namespace std; void main() { int iArray[10]; cout << "input 10 number: " << endl; for (int i = 0; i < 10; i++) { cin >> iArray[i]; } system("cls"); //输出数组元素 cout << "start output: " << endl; for (int i = 0; i < 10; i++) { cout << iArray[i] << endl; } return; }
将二维数组行列对换
#include <iostream> #include <iomanip> using namespace std; //fun 函数实现数组元素变换 int fun(int array[3][3]) { int i, j, t; for (i = 0; i < 3; i++) { for (j = 0; j < i; j++) { t = array[i][j]; array[i][j] = array[j][i]; array[j][i] = t; } return 0; } } void main() { int i, j; int array[3][3] = { {1,2,3},{4,5,6},{7,8,9} }; cout << "Converted Front" << endl; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { cout << setw(7) << array[i][j]; } cout << endl; } fun(array); cout << "Converted Result" << endl; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { cout << setw(7) << array[i][j]; } cout << endl; } return; }
将二维数组转换为一维数组
#include <iostream> using namespace std; int main() { int array1[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; int array2[12] = {0}; int row, col, i; cout << "array old" << endl; for (row = 0; row < 3; row++) { for (col = 0; col < 4; col++) { cout << array1[row][col]; } cout << endl; } cout << "array new" << endl; for (row = 0; row < 3; row++) { for (col = 0; col < 4; col++) { i = col + row * 4; array2[i] = array1[row][col]; } } for (i = 0; i < 12; i++) { cout << array2[i] << endl; } return 0; }
使用指针变量遍历二维数组
#include <iostream> #include <iomanip> using namespace std; void main() { int a[4][3] = { 1,2,3,4,5,6,7,8,9,0,11,12 }; int* p; p = a[0]; //a[0]表示数组a的首地址 for (int i = 0; i < sizeof(a) / sizeof(int); i++) //遍历数组元素 { cout << "address:"; cout << a[i]; cout << " is "; cout << *p++ << endl; //指针遍历数组 } return; }
学生成绩排名
#include <iostream> using namespace std; int main() { char name[10][10]; strcpy_s(name[0], "Mary"); strcpy_s(name[1], "Jam"); strcpy_s(name[2], "Jack"); strcpy_s(name[3], "Jose"); strcpy_s(name[4], "Hery"); strcpy_s(name[5], "Mark"); strcpy_s(name[6], "Dobbs"); strcpy_s(name[7], "Steven"); strcpy_s(name[8], "Stanly"); strcpy_s(name[9], "John"); cout << "开始输入分数:" << endl; int score[10][2]; int scoretmp, itmp; for (int i = 0; i < 10; i++) { score[i][0] = i; cout << name[i] << endl; cin >> score[i][1]; } for (int m = 1; m < 10; m++) { for (int n = 9; n >= m; n--) { if (score[n][1] < score[n - 1][1]) //排序 { scoretmp = score[n - 1][1]; itmp = score[n - 1][0]; score[n - 1][1] = score[n][1]; score[n - 1][0] = score[n][0]; score[n][1] = scoretmp; score[n][0] = itmp; } } } system("cls"); for (int j = 0; j < 10; j++) { cout << name[score[j][0]] << " is "; cout << score[j][1] << endl; } return 0; }
求矩阵对角线之和
#include <stdio.h> int main() { int a[3][3]; int i, j, sum = 0; printf_s("please input: \n"); for (i = 0; i < 3; i++) //数组循环进行赋值 { for (j = 0; j < 3; j++) { scanf_s("%d", &a[i][j]); } } for (i = 0; i < 3; i++) //循环计算对角线的总和 { for (j = 0; j < 3; j++) { if (i == j) { sum = sum + a[i][j]; } } } printf_s("The result is :%d\n ", sum); return 0; }
反向输出字符串
#include<stdio.h> int main() { int i; char String[7] = { "mrsoft" }; char Reverse[7] = { 0 }; int size; size = sizeof(String); //计算源字符串长度 for (i = 0; i < 6; i++) { Reverse[size - i - 2] = String[i]; } printf_s("输出源字符串:%s\n", String); printf_s("输出目标字符串:%s\n", Reverse); return 0; }
使用数组保存学生姓名
#include <stdio.h> int main() { const char* ArrayName[5]; int index; ArrayName[0] = "WangJiasheng"; ArrayName[1] = "LiuWen"; ArrayName[2] = "SuYuqun"; ArrayName[3] = "LeiYu"; ArrayName[4] = "ZhangMeng"; for (index = 0; index < 5; index++) { printf_s("%s\n", ArrayName[index]); } return 0; }
数组中连续相等数的计数
#include <stdio.h> void main() { int a[10] = { 2,3,4,5,6,7,7,7,7,2 }; int i = 0; int n = 10; int len = 1, k = 0, j = 0; printf_s("Array element:\n"); for (int m = 0; m < 10; m++) { printf_s("%d", a[m]); } printf_s("\n"); while (i < n - 1) { while (i < n - 1 && a[i] == a[i + 1]) i++; if (i - j + 1 > len) { len = i - j + 1; k = j; } i++; j = i; } printf_s("Same max len is %d,Postion is %d\n", len, k); return; }
两个数组元素的交换
#include <stdio.h> void change(int a[], int b[], int n) //数组作为参数 { int tmp; for (int i = 0; i < n; i++) { tmp = a[i]; a[i] = b[i]; b[i] = tmp; } } void main() { int i, a[10] = { 1,2,3,4,5,6,7,8,9,10 }; int b[10] = { 11,12,14,15,16,17,18,19,20 }; printf_s("Change Before:"); printf_s("\nArray a:"); for (i = 0; i < 10; i++) { printf_s("%d", a[i]); } printf_s("\n"); printf_s("\nArray b:"); for (i = 0; i < 10; i++) { printf_s("%d", b[i]); } printf_s("\n"); change(a, b, 10); printf_s("Change After:"); printf_s("\nArray a:"); for (i = 0; i < 10; i++) { printf_s("%d", a[i]); } printf_s("\n"); printf_s("\nArray b:"); for (i = 0; i < 10; i++) { printf_s("%d", b[i]); } }
二维数组每行的最大值
#include <stdio.h> void main() { int max; int a[3][4] = { 1,2,3,4,5,6,7,8,9,0,11,12 }; printf_s("Array:\n"); for (int m = 0; m < 3; m++) { for (int n = 0; n < 4; n++) { printf_s("%d", a[m][n]); } printf_s("\n"); } for (int i = 0; i < 3; i++) { max = a[i][0]; for (int j = 1; j < 4; j++) { if (max < a[i][j]) max = a[i][j]; } printf_s("%d line max %d\n", i, max); } }
二维数组行和列的最小值
#include <stdio.h> void main() { int b[3], c[4], i, j; int a[3][4] = { 1,2,3,4,5,6,7,8,9,0,11,21 }; for (i = 0; i < 3; i++) //判断每一行 { b[i] = a[i][0]; for (j = 1; j < 4; j++) { if (a[i][j] < b[i]) b[i] = a[i][j]; } } for (j = 0; j < 4; j++) //判断每一列 { c[j] = a[0][j]; for (i = 1; i < 3; i++) { if (a[i][j] < c[j]) c[j] = a[i][j]; } } for (i = 0; i < 3; i++) //输出每一行的最小值 { for (j = 0; j < 4; j++) { printf_s("%7d", a[i][j]); } printf_s(" Row min: %5d\n", b[i]); } for (i = 0; i < 4; i++) { printf_s("%7d", c[i]); } printf_s(" :Col min\n"); return; }
二维数组行最大值中的最小值
#include <stdio.h> void main() { int a[5][5] = { {1,2,3,4,5}, {3,4,6,7,89}, {23,456,23,657,23}, {234,456,234,567,678}, {2354,56757,78,456,345} }; int max, min, n = 5; /*输出数组*/ for (int m = 0; m < 5; m++) { for (int n = 0; n < 5; n++) { printf_s("%d,", a[m][n]); } printf_s("\n"); } for (int row = 0; row < n; row++) /*控制数组的行*/ { max = a[row][0]; for (int col = 1; col < n; col++) { if (max < a[row][col]) max = a[row][col]; } if (row == 0) { min = max; } else if (min > max) min = max; } printf_s("linemax min is %d\n", min); return; }
删除数组中重复的连续元素
#include <stdio.h> int deleteElement(int b[], int n, int i, int len) { int* p, * q; if (i<1 && i + len>n) return 0; for (q = b + i, p = b + i + len; q < b + n; p++, q++) { *q = *p; } return n - len; } void main() { int a[10] = { 1,2,3,4,6,6,6,8,9,0 }; int* p = a, n; int i, len; for (int m = 0; m < 2; m++) { for (int n = 0; n < 5; n++) { printf_s("%d,", a[m * 5 + n]); } printf_s("\n"); } printf_s("Input delect index and length: \n"); scanf_s("%d%d", &i, &len); n = deleteElement(a, 10, i, len); if (n == 0) printf_s("erro.\n"); else { printf_s("\n"); for (p = a; p < a + n; p++) { printf_s("%3d", *p); } printf_s("\n"); } return; }
删除有序数组中的重复元素
#include <stdio.h> int deleteElement(int b[], int n) { int* p, * q, * pl; int c; for (p = b; p < b + n; p++) /*访问数组b中每个元素*/ { q = p + 1; c = 0; while (*q == *p && q < b + n) { q++; c++; } if (q <= b + n) { for (pl = p + 1; q < b + n; pl++, q++) /*删除C个元素*/ { *pl = *q; } n -= c; } } return n; } void main() { int a[10] = { 1,2,3,4,4,4,7,8,9,0 }; int* p = a, n; int i, len; for (int m = 0; m < 2; m++) { for (int n = 0; n < 5; n++) { printf_s("%d", a[m * 5 + n]); } printf("\n"); } n = deleteElement(a, 10); printf_s("\n"); for (p = a; p < a + n; p++) { printf_s("%3d", *p); } printf_s("\n"); }
数组合并
#include <stdio.h> void combine(int* a, int* b, int* c, int n, int m) { int* p1, * p2, * p3; for (p1 = a, p2 = b, p3 = c; p1 < a + n && p2 < b + m;) { if (*p1 < *p2) /*将数据小的存放到p3指向的地址空间*/ { *p3++ = *p1++; } else { *p3++ = *p2++; } while (p1 < a + n) *p3++ = *p1++; while (p2 < b + m) *p3++ = *p2++; } } void main() { int a[6] = { 1,2,3,4,5,6 }; int b[5] = { 11,22,12,12,14 }; int c[5 + 6]; int* p = a, * q = b; printf_s("Array a: "); for (int i = 0; i < 6; i++) { printf_s("%d ", a[i]); } printf_s("\n"); printf_s("Array b: "); for (int i = 0; i < 6; i++) { printf_s("%d ", b[i]); } printf_s("\n"); combine(a, b, c, 6, 5); printf_s("Array c: "); for (p = c; p < c + 5 + 6; p++) { printf_s("%2d ", *p); } printf_s("\n", *p); return; }
利用数组计算平均成绩
#include <stdio.h> void main() { int i; int score[5], aver = 0; printf_s("Please input scores of 5 students: \n"); for (i = 0; i < 5; i++) { scanf_s("%d ", &score[i]); aver += score[i]; } aver /= 5; printf_s("The average score is: %d\n", aver); return; }
数组中整数的判断
#include <stdio.h> void main() { int data[5], i; printf_s("Please input 5 number: \n"); for (i = 0; i < 5; i++) { scanf_s("%d", &data[i]); } for (i = 0; i < 5; i++) { if (data[i] == 25) { printf_s("25 is input the postion %d\n", i + 1); break; } if (i >= 5) printf_s("3 is not in data.\n"); } return; }
判断二维数组中是否有相同的元素
#include <stdio.h> int Same(int a[][4], int m, int n) { int i, j, k, p; for (i = 0; i < m; i++) /*控制行*/ { for (j = 0; j < n - 1; j++) /*控制列*/ { for (p = j + 1; p < n; p++) { if (a[i][j] == a[i][p]) /*判断其后面的元素是否有与此元素相同的元素*/ { printf_s("Yes"); return 0; } } for (k = i + 1; k < m; k++) { for (p = 0; p < n; p++) /*p访问本行后面的其他元素,看是否有相同的元素*/ { if (a[k][p] == a[i][j]) { printf_s("Yes"); return 0; } } } } } printf_s("No"); return 1; } void main() { int a[3][4] = { 1,2,3,4,5,6,7,8,9,0,11,12 }; for (int m = 0; m < 3; m++) { for (int n = 0; n < 4; n++) { printf_s("%d ", a[m][n]); } printf_s("\n"); } printf_s("Has same element:"); Same(a, 3, 4); printf("\n"); return; }
统计学生成绩分布
#include <stdio.h> void main() { int i, a[10]; int b[6] = { 0,0,0,0,0,0 }; printf_s("enter 10 score:"); for (i = 0; i < 10; i++) { //向数组a中输入数据 scanf_s("%d", &a[i]); switch (a[i] / 10) { case 6:b[0]++; break; case 7:b[1]++; break; case 8:b[2]++; break; case 9:b[3]++; break; case 10:b[4]++; break; } } printf_s("the result is: \n"); for (i = 0; i < 5; i++) { printf_s("Score %d has : %d\n", (i + 6) * 10, b[i]); } return; }
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2021-5-21 15:27
被天象独行编辑
,原因:
赞赏
他的文章
[分享]应急响应工具-日志分析
4376
[原创]MEMZ彩虹病毒分析
14642
[原创]恶意程序分析-去除恶意程序混淆-学习记录
12187
[原创]Ret2libc 学习记录笔记
14352
[原创]基本语句逆向分析
11139
看原图