数据来源于校友提供,转载需注明
-
常见练习题
1. ★找出二维数组中的最大值
-
//找出二维数组中的最大值。
#include<iostream>
using namespace std;
int main()
{
int arry[3][5] =
{
{25,15,6,10,3},
{32,36,85,9,4,},
{65,6,61,56,7}
};
int row, column;//定义两个变量记录行号和列号。
int max = arry[0][0];//默认最大值是第一个值。
for(int i=0;i<3;i++)//双重for循环,找到最大值就交换。
for (int j = 0; j < 5; j++)
{
if (arry[i][j] > max)
{
max = arry[i][j];
row = i;
column = j;
}
}
cout << "最大值是: arry[" << row << "][" << column << "] = " << max << endl;
}
-
2. 查看斐波那契数组的个数
-
-
#include<iostream>
using namespace std;
void feibo(int n)
{
int a[50];
a[0] = 1;
a[1] = 1;
for (int i = 2; i < n; i++)
{
a[i] = a[i - 1] + a[i - 2];//a[2]=a[1]+a[0]的值
}
for (int i=0;i<n;i++)
{
if (i % 5 == 0) cout << endl;//每5个数换行
cout << a[i] << "\t\t";
}
}
int main()
{
cout << "请输入要查看斐波那契数组的个数: " ;
int n;
cin >> n;
feibo(n);
}
-
3.★输出200到500之间的素数
//题目:输出200到500之间的素数。 #include<iostream> using namespace std; bool abc(int n) { for (int j = 2; j < (n/ 2); j++)//n=传入的i值,n最好是开根号,目的都是优化时间复杂度。 { if (n % j == 0) { return false; break; } } return true; } int main() { //200和500肯定不是质数,偶数也不是质数,所以优化时间复杂度, for (int i = 201; i < 500; i=i+2) { if (abc(i))//调用上面判断质数的函数,如果为真,就输出结果。 { cout << i << "\t"; } } cout << endl; } |
4.★求前n项分数的和。
-
-
//题目2:求1+ 1/2 + 1/4 + 1/6 + 1/8 + 1/10 +......的和。
//求请N项的和,N由键盘输入。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
cout << "请输入要查看多少项分数的和:";
int n;
cin >> n;
double sum = 1;
double c;
for (int i = 1; i < n; i++)//n=1时,for循环不执行
{
c = 1.0 / (2 * i);
sum += c;
}
cout << sum << endl;
}
//题目1:求 1+ 1/2 + 1/4 + 1/8 + 1/16 + 1/32 +......的和
//求请N项的和,N由键盘输入。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
cout << "请输入要查看多少项分数的和:";
int n;
cin >> n;
double sum = 0;
double c = 1;
for (int i = 0; i < n; i++)
{
c = 1.0 / pow(2, i);//调用cmath头文件库,i=0,表示2的零次方。
sum += c;
}
cout << sum << endl;
}
-
-
-
★求出前N项分数的和//题目1:求出前N项分数的和,2+ 3/2 + 5/3 + 8/5 + 13/8 + 21/13 +......
//N由键盘输入
#include<iostream>
using namespace std;
int main()
{
cout << "请输入要查看多少项分数的和:";
int n;
cin >> n;
double a = 2;
int b = 1;
double sum = 0;
for (int i = 0; i < n;i++)
{
sum += a/b;//两个整型相除结果是整型,所以定义为double;
int temp = a;//暂存下一个a/b的值;
a = a + b;
b = temp;
}
cout << sum << endl;
return 0;
}
-
5. 判断是否为素数
#include<iostream> #include<iomanip>//格式操纵符的头文件 using namespace std; bool Isprime(int number)//判断是否为素数的函数 { for (int i = 2; i < number; i++) { if (number % i == 0)//输入20除以2的余数为零,就不是素数 { return false; } } return true; } void printIsprime(int x)//传入的值就是打印输出素数的个数; { for (int i = 2; i < x; i++) { if (Isprime(i))//调用上面的素数判断的函数,如果为真就输出值; cout << setfill(' ') << setw(5) << i;//设置填充字符和宽度 } cout << endl; } int main() { cout << "请输入一个数,判断是否为素数:" << endl; int number; cin >> number; Isprime(number);//调用判断素数的函数 if (Isprime(number))//如果调用判断素数的函数 为真 就输出是,反之为否。 cout << number << "是一个素数。" << endl; else cout << number << "不是一个素数。" << endl; cout << "\n输入100,就查看100以内的素数。请输入要查看多少以内的素数:"; int a; cin >> a; printIsprime(a);//调用打印输出素数的函数; } |
6.★求1+2!+3!+...+20!阶乘的和。
7.★用递归函数求10的阶乘总和。
//题目:求1+2!+3!+...+10!的和。 #include<iostream> using namespace std; int f(int x) { int total; if (x == 0||x==1) total = 1; else total = f(x - 1) * x; return total; } int main() { cout<<"10的阶乘等于: "<<f(10); } |
8.★输出数组行和列交换后的值。
#include<iostream> using namespace std; int main() { int a[3][5] = { {1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15} };//定义一个二维数组 int b[5][3]; cout << "数组中的值分别是:\n"; for (int i = 0; i < 3; i++) for (int j = 0; j < 5; j++) { cout << a[i][j] << " "; if (j % 4 == 0 && j != 0) cout << endl;//每5个数就换行 b[j][i] = a[i][j]; } cout << "数组行和列交换后的值分别是:\n"; for (int i = 0; i < 5; i++) for (int j = 0; j < 3; j++) { cout << b[i][j] << " "; if (j % 2 == 0 && j != 0) cout << endl;
|
9.★选择排序数组的值
#include<iostream> using namespace std; int main() { int a[] = { 12,56,32,56,45,18,32,54,90,87,845,36,16,1,2,3,4,5, }; int aSize = sizeof a / sizeof a[0];//这是求数组的长度,为什么要这么做? //数组中值的个数有变化的时候,不需要修改程序。 //sizeof的函数加不加括号没影响,用数组的总长度除以单个数组元素的长度,得出数组的长度。 for (int number : a)//for 循环的新式写法 { cout << number << "\t";//输出原始数组的值 } cout << endl; for (int i = 0; i < aSize; i++)//通过双重for循环实现选择排序 { for (int j = i + 1; j < aSize; j++)// { /*当i=0的时候,j从1开始到数组中的最大值,a[0]=12,a[1]=56,a[i]的值要与a[i+1]开始的每一个值比较, * 第一次循环使a[0]的值是最小,第二次循环使a[1]的值最小,每次循环都使最小的值排在前面*/ if (a[i] > a[j])//实现两个数交换。 { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } cout << "选择排序后的数组:" << endl; for (int i=0;i< aSize;i++) { if (i % 5 == 0 && i!=0) cout << endl;//输出5个数就换行。 cout <<a[i]<< "\t"; } cout << endl; } |
10.输入三个数由小到大的排序。
//输入三个数比较大小并且由小到大的排序。 #include<iostream> using namespace std; int main() { bool x = 1; while (x) { cout << "请输入三个数,用空格分隔并以回车键结束:" << endl; double a, b, c; cin >> a >> b >> c; if (a > b)//如果a>b就交换顺序,否则跳过条件 { swap(a, b); } if (b > c)//如果b> c就交换顺序,否则跳过条件 { swap(b, c); } if (a > b)//如果a > b就交换顺序,否则跳过条件 { swap(a, b); } cout << "三个数从小到大的排序是:\n" << a << " < " << b << " < " << c << endl<<endl; continue; } }; |
11.输入三个数由小到大的排序(标准版)
-
-
//输入三个数比较大小并且由小到大的排序。
#include<iostream>
using namespace std;
void sort(float& a, float & b, float &c)
{
if (a > b)
swap(a, b);
if (b > c)
swap(b, c);
if (a > b)
swap(a, b);
cout << "排序后:" << a << " < " << b << " < "<<c << endl;
}
int main()
{
cout << "======由小到大的排序======\n";
cout << "请分别输入三个数:";
float a, b, c;
cin >> a >> b >> c;
sort(a, b, c);
}
-
-
12.★求sum =a+aa+aaa+aaaa+aaaaa的值,
-
//求sum =a+aa+aaa+aaaa+aaaaa的值,n表示几个a
//例如5+55+555+5555=6170,(n=4);a和n都由键盘输入
#include<iostream>
using namespace std;
int main()
{
cout << "请输入a和n的值:";
int a;
int n;
int sum = 0;
cin >> a >> n;
int temp = a;
for (int i =0; i <n; i++)
{
sum += temp;
temp = temp * 10 + a;
}
cout <<"sum= " << sum << endl;
}
-
-
13.★输入整数分别求奇数和偶数的和
-
//先读入一个正整数N,然后计算并显示1∼N之间的所有奇数的和、偶数的和。
//例如,如果N为10,这个程序输出25 30。
#include<iostream>
using namespace std;
int main()
{
cout << "请输入一个正整数:";
int n;
cin >> n;
int suma = 0;//存放奇数的和
int sumb = 0;//存放偶数的和
for(int i = 1; i <= n; i++)
{
if (i % 2 == 0)
suma += i;
else
sumb += i;
}
cout <<"奇数的和为 " << sumb << endl;
cout <<"偶数的和为 " << suma << endl;
}
-
-
14.★编程实现先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面
-
#/*编程实现先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
要求字符串s由键盘输入,并在显示器上输出字符串t的结果。
例如:当s中的字符串为 “ABCDE”时,则t中的字符串应为“EDCBAABCDE”。*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "请输入字符串:" << endl;
string s;
getline(cin, s);//存放输入的字符,包括空格。
string t="";// 用于存储逆序后的字符串
for (int i = s.length()-1; i >= 0; i--)
{
t+=s[i];// 将s中的字符按逆序存放到t中
}
t += s; // 将s中的字符按正序连接到t的后面
cout << "t中的字符串为:"<<t<<endl;
}
-
-
15.★输入字符串输出倒序字符
-
#include <iostream>
#include <string> //需要使用字符串的头文件
using namespace std;
int main()
{
string str; //定义字符串的变量名字
cout << "请输入一行字符串:" << endl;
getline(cin, str); //接受字符串的输入,包括空格。
int len = str.length(); //变量len的长度等于输入字符的长度
for (int i = len-1 ; i >=0; i--) // 通过for循环实现字符倒序的输出
{
cout << str[i];
}
cout << endl;
return 0;
}
-
#include<iostream> using namespace std; int main() { int a[6]={ 75,66,53,12,9,25 }; cout << "选择排序后数组的值分别是:\n"; for (int i = 0; i < 6; i++)//i=0,j从1到5,分别比较大小 for (int j = i + 1; j < 6; j++) { if (a[i] > a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } for (int n : a)//for循环对于输出数组的一种写法 cout << n << "\t"; cout<<"\n冒泡排序后数组的值分别是:\n"; for(int i=0;i<6;i++)//每次循环都使最大的值排在最后 for(int j=0;j<6-i-1;j++) { if (a[j] > a[j+1]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } for(int i=0;i<6;i++) cout <<a[i]<< "\t"; } |
-
16. ★选择排序和冒泡排序
-
-
快速排序(上页)#include <iostream>
using namespace std;
class QuickSort {
private:
void partition(int arr[], int low, int high, int& pivotIndex)
{
int pivot = arr[high]; // 选择最后一个元素作为基准值
int i = low - 1; // i表示小于等于基准值的区域的右边界
for (int j = low; j <= high - 1; j++)
{
if (arr[j] <= pivot)
{
i++;
swap(arr[i], arr[j]); // 将小于等于基准值的元素交换到左侧区域
}
}
swap(arr[i + 1], arr[high]); // 将基准值放置到正确的位置
pivotIndex = i + 1; // 更新基准值的索引
}
public:
void quickSort(int arr[], int low, int high)
{
if (low < high)
{
int pivotIndex;
partition(arr, low, high, pivotIndex); // 分割数组
// 对基准值左侧和右侧的子数组进行递归排序
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
};
int main() {
int size;
cout << "请输入数组的大小:" << endl;
cin >> size;
int* arr = new int[size];
cout << "请输入数组的元素:" << endl;
for (int i = 0; i < size; i++)
{
cin >> arr[i];
}
QuickSort quickSort;
quickSort.quickSort(arr, 0, size - 1); // 对数组进行快速排序
cout << "排序后的数组:" << endl;
for (int i = 0; i < size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
delete[] arr;
return 0;
}
-
-
17.快速排序(上页)
int main() { int size; cout << "请输入数组的大小:" << endl; cin >> size; int* arr = new int[size]; cout << "请输入数组的元素:" << endl; for (int i = 0; i < size; i++) { cin >> arr[i]; } QuickSort quickSort; quickSort.quickSort(arr, 0, size - 1); // 对数组进行快速排序 cout << "排序后的数组:" << endl; for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; delete[] arr; return 0; } |
-
18. ★矩阵第n行和第m行交换,输出交换后的结果
-
/*给定一个5×5的矩阵,将第n行和第m行(1≤m, n≤5)交换,输出交换后的结果。
共六行,前五行为矩阵的每一行元素,元素与元素之间以一个空格分开。
第六行包含两个整数m,n (1 <= m,n <= 5),以一个空格隔开*/
#include<iostream>
using namespace std;
int main()
{
cout << "请输入5×5的矩阵元素:\n";
int a[5][5];
for(int i=0;i<5;i++)
for (int j = 0; j < 5; j++)
{
cin >> a[i][j];//依次将键盘输入的数据存入数组中,
}
int m, n;
cout << "请输入需要交换两行元素的行号" << endl;
cin >> m >> n;
for (int i = 0; i < 5; i++)
swap(a[m - 1][i], a[n - 1][i]); //实现整行的交换,只换行号。
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
-
-
19.★输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度并依次输出。
//输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度并依次输出。 #include <iostream> #include <string> using namespace std; int main() { string line; cout << "请输入一行单词序列:\n"; getline(cin, line); // 读取一行输入 string word = ""; // 用于存储当前正在处理的单词 for (int i = 0; i < line.length(); i++) { if (line[i] != ' ')// 如果当前字符不是空格 { word += line[i]; // 将当前字符加入到当前单词中 } else // 如果当前字符是空格 { if (word != "") // 如果当前单词不为空 { cout << word.length() << " "; // 输出当前单词的长度 word = ""; // 重置当前单词为空 } } } if (word != "") // 处理最后一个单词 { cout << word.length() << " "<<endl; } } |
20.求圆柱体积
-
-
//求圆柱体积
/*1. 设圆半径r=2,圆柱的高h=3,pi=3.14,
请设计一个函数floatcylinder(r, h)求圆柱体积(公式为c=r*r*h*pi)
期望运行结果示例:
r=2, h=3, pi=3.41
c = 37.68
*/
#include<iostream>
#define PI 3.14
using namespace std;
double floatcylinder(float r, float h)
{
double c;
return c = r * r * h * PI;
}
int main()
{
cout << "请输入圆的半径和高:";
float r, h;
cin >> r >> h;
cout<<"圆的体积为: "<<floatcylinder(r, h);
}
-
-
-
/*1.统计一个整数二维数组a[3][3]中数字为“1“的个数。
期望运行结果示例:
1 2 3
2 4 1
3 1 6
数字为“1“的个数有:3个
*/
#include<iostream>
using namespace std;
int main()
{
int a[][3]
{
{1,2,3},
{2,4,1},
{3,1,6}
};
int x = 1;
int count = 0;//定义存储数字1个数的变量
for(int i=0;i<3;i++)
for (int j = 0; j < 3; j++)
{
if (a[i][j] == x)//如果数组中的元素有等于x的值,count就加1.
count++;
}
cout << "数字“1”的个数有: " << count<<"个" << endl;
}
22.统计一个整数二维数组a[3][3]中数字为“1“的个数
-
-
-
对候选人得票的统计程序(上页)/*
对候选人得票的统计程序。
设有3个候选人,最终只有一个人能当选为领导。
今有10人参加投票,从键盘先后输入这10个人所投候选人的名字,
要求最后输出各个候选人的得票情况,
以及当选人姓名(得票最多的为当选人,候选人结构体:姓名,票数)。*/
#include<iostream>
using namespace std;
struct Person //声明结构体类型Person
{
char name[20];
int count;
};
int main()
{
cout << "候选人共有3个人,分别为wu,li,liu以名字的个数计票." << endl << "共有10票,现在开始投票:\n" ;
Person leader[3] = { "wu",0,"li",0,"liu",0 };
char leader_name[20]; //为投票人所选的姓名
for ( int i = 0; i < 10; i++)
{
cin >> leader_name;//先后输入10张票上所写的姓名
for (int j = 0; j < 3; j++)
{
if (strcmp(leader_name, leader[j].name) == 0) //将票上姓名与3个候选人的姓名比较
{
leader[j].count++; //与某一候选人的姓名相同就给他加一票
}
}
}
for (int i = 0; i < 3; i++)
{
cout << leader[i].name << ":" << leader[i].count << endl; //输出3个候选人的姓名和票数
}
//判断谁的票数最高,就输出当选人。
if (leader[0].count> leader[1].count && leader[0].count > leader[2].count )
cout << "当选人为:" << leader[0].name << endl;
if (leader[1].count > leader[0].count && leader[1].count > leader[2].count)
cout << "当选人为:" << leader[1].name << endl;
if (leader[2].count > leader[1].count && leader[2].count > leader[0].count)
cout << "当选人为:" << leader[2].name << endl;
return 0;
}
-
-
-
//判断谁的票数最高,就输出当选人。
if (leader[0].count> leader[1].count && leader[0].count > leader[2].count )
cout << "当选人为:" << leader[0].name << endl;
if (leader[1].count > leader[0].count && leader[1].count > leader[2].count)
cout << "当选人为:" << leader[1].name << endl;
if (leader[2].count > leader[1].count && leader[2].count > leader[0].count)
cout << "当选人为:" << leader[2].name << endl;
return 0;
}
23.对候选人得票的统计程序(下页)
-
-
-
/*可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,
W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,其它字符不变。
如“wonderful!”转换为“Asrhivjyp!”。
输入一行字符,要求输出相应的密码。要输入的字符是:
I am going to Beijing!
*/
#include <iostream>
#include <string>
using namespace std;
int main()
{
string text;
cout << "请输入一行字符:";
getline(cin, text); // 读取一行输入
string password = ""; // 用于存储转换后的密码
for (int i = 0; i < text.length(); i++)
{
char c = text[i];
if ((c >= 'A' && c <= 'V') || (c >= 'a' && c <= 'v'))
{ // 如果是字母A-V或a-v
password += c + 4; // 将字母转换为后面第4个字母
}
else if ((c >= 'W' && c <= 'Z') || (c >= 'w' && c <= 'z'))
{ // 如果是字母W-Z或w-z
password += c - 22; // 将字母转换为A-D
}
else {
password += c; // 其它字符保持不变
}
}
cout << "密码为:" << password << endl;
return 0;
}
24.★输入字符串按规律输出密文(方法1)
-
-
- ★输入字符串按规律输出密文(方法2)
/*可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母, W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,其它字符不变。 如“Wonderful!”转换为“Asrhivjyp!”。 输入一行字符,要求输出相应的密码。要输入的字符是: I am going to Beijing! */ #include<iostream> #include<string> using namespace std; int main() { char text[] = "I am going to Beijing!"; string password = ""; for (int i = 0; i < sizeof(text); i++) { char c = text[i]; if (c >= 'A' && c <= 'Z')//大写的A字符码是65,Z是90,如果超出就减掉26, { password += (c + 4) >= 90 ? c + 4 - 26 : c + 4; } else if (c >= 'a' && c <= 'z')//小写和大写规则一样。a=97,z=122. { password += ((c + 4) >= 122) ? (c + 4 - 26) : (c + 4); } else password += c;// 其它字符就保持不变 } cout << "密码为:" << password; } |
-
25.★输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。(下页)
-
输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。(上页)/*输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。*/
#include <iostream>
#include<string>
using namespace std;
int main()
{
cout << "请输入字符串:\n";
string text;
getline(cin, text);//把输入的字符串存入text中,
string copyt = "";//用来存放字符串text中转换后的所有字符
for (int i = 0; i < text.length(); i++)//用循环来逐个比较字符串的字符,text.length()这表示字符串的长度。
{
char c = text[i];//把字符串text中的每一个字符拿出来比较,
if (c >= 'A' && c <= 'Z')
{
copyt += c + 32;
}
else if (c >= 'a' && c <= 'z')
{
copyt += c - 32;
}
else
copyt += c;//其它字符原本输出
}
cout << "\n大小写互转后的字符串:\n" << copyt << endl << endl;
string str = "";//存放转换后大写的字符串
for (int i = 0; i < text.length(); i++)
{
char c = text[i];
if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')
{
str += toupper(c);//通过函数把字母全部转为大写
}
else
str += c;
}
cout << "用函数转换后全是大写的字符串:\n" << str << endl << endl;
string s = "";//存放转换后小写的字符串
for (int i = 0; i < text.length(); i++)
{
char c = text[i];
if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')
{
s += tolower (c);//通过函数把字母全部转为小写
}
else
s += c;
}
cout << "用函数转换后全是小写的字符串:\n" << s << endl << endl;
}
-
-
-
/*输入字符串,大写转小写,小写转大写,全是大写或小写,其它字符不变输出。*/
cout << "用函数转换后全是大写的字符串:\n" << str << endl << endl;
string s = "";//存放转换后小写的字符串
for (int i = 0; i < text.length(); i++)
{
char c = text[i];
if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')
{
s += tolower (c);//通过函数把字母全部转为小写
}
else
s += c;
}
cout << "用函数转换后全是小写的字符串:\n" << s << endl << endl;
}
-
-
-
/*简易口令程序系统。用户进入某系统,从键盘回答口令有3次机会。
3次中任何一次回答正确均可进入系统(显示“You are welcome! ”),
否则不能进入系统(显示“I am sorry” )。*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
string passcode = "if you 520,我说公主请上车!";
for(int j =0;j<3;j++)
{
cout << "请输入口令:";
string code;
getline(cin, code);
if (passcode == code)
{
cout << "You are welcome!" << endl;
break;
}
else
cout << "I am sorry" << endl;
}
}
26.简易口令程序系统
-
-
-
#include <iostream>
using namespace std;
int main()
{
int num;
cout << "请输入一个正整数:";
cin >> num;
// 分解整数的每个位上的数
int digit;
int position = 1; // 位数的位置,个位数为1,十位数为2,百位数为3,以此类推
while (num > 0)
{
digit = num % 10; // 取得最低位上的数
cout << "第" << position << "位数是:" << digit << endl; // 输出位数和对应的数
num /= 10; // 去掉最低位上的数
position++; // 位数加1
}
}
27.输入一个整数,分解出每一位数
-
-
-
//对整数5678分解出每一位数
#include<iostream>
using namespace std;
int main()
{
int a = 5678;
int a1 = a % 10;
int a10 = a % 100 /10;
int a100 = a % 1000 /100;
int a1000 = a /1000;
cout << "整数5678分解后的每一位数分别是:\n";
cout << "千位是:" << a1000<<endl;
cout << "百位是:" <<a100<< endl;
cout << "十位是:" <<a10<< endl;
cout << "个位是:" <<a1<< endl;
}
28.对整数5678分解出每一位数
-
-
- ★
/* 写一个函数,实现两个字符串的比较。
即自己写一个strcmp函数,函数原型为int strcmp(char *p1, char *p2),设p1指向字符串s1,p2指向字符串s2。
要求当s1=s2时,返回值为0,若s1≠s2, 返回它们二者第1个不同字符的ASCII码差值。
如“BOY”与“BAD”,第2个字母不同,“O”与“A”之差为79-65=14。如果s1>s2, 则输出正值,如s1<s2, 则输出负值。*/
#include <iostream>
#include<string>
using namespace std;
int strcmp(char* p1, char* p2)
{
while (*p1 != '\0' && *p2 != '\0')
{
if (*p1 != *p2)
{
return *p1 - *p2; // 返回第一个不同字符的ASCII码差值
}
p1++;
p2++;
}
if (*p1 != '\0') // 如果两个字符串长度不同,返回长度差值
{
return *p1;
}
else if (*p2 != '\0')
{
return -*p2;
}
return 0; // 两个字符串相等,返回0
}
int main()
{
char s1[50], * ps1;
ps1 = &s1[0];
char s2[50], * ps2;
ps2 = &s2[0];
cout << "请输入两个字符串:(空格分隔,回车结束)\n";
cin>>s1>>s2;
int result = strcmp(ps1,ps2 );
cout << "比较结果为:" << result << endl;
}
29.写一个函数,实现两个字符串的比较
- ★
-
-
/*找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也有可能没有鞍点)*/
#include <iostream>
using namespace std;
int main()
{
int a[3][4] = {
{11, 12, 13, 14},
{15, 16, 17, 18},
{19, 20, 21, 22} };
bool haspoint = false; // 是否有鞍点
int pointRow;// 鞍点的行
int pointCol; // 鞍点的列
for (int i = 0; i <3; i++)// 遍历二维数组
{
int maxRow = a[i][0]; // 当前行上的最大值
int maxCol = 0; // 最大值所在的列
for (int j = 1; j <4; j++)// 找出当前行上的最大值
{
if (a[i][j] > maxRow)
{
maxRow =a[i][j];
maxCol = j;
}
}
// 判断当前行上的最大值是否也是所在列上的最小值
bool isPoint = true; // 是否为鞍点
for (int k = 0; k <3; k++)
{
if (a[k][maxCol] < maxRow)
{
isPoint = false;
break;
}
}
if (isPoint) // 如果是鞍点,输出结果并结束程序
{
haspoint = true;
pointRow = i;
pointCol = maxCol;
break;
}
}
if (haspoint) // 输出结果
{
cout << "鞍点的位置为:" << pointRow << "," << pointCol << endl;
cout << "鞍点的值为:" <<a[pointRow][pointCol] << endl;
}
else
cout << "该二维数组不存在鞍点" << endl;
}
30.找出一个二维数组中的鞍点(上页)
-
-
31.将数字字符串转换为数字
#include<iostream> #include<string> using namespace std; void stonum()// 将字符串转换为整数的函数 { cout << "请输入数字的字符串:" << endl; string text; getline(cin, text); cout << "转换后的数字为:" ; for (int i = 0; i < text.length(); i++) { char c = text[i]; if (c >= '0' && c <= '9')//如果字符是数字就转换,否则跳过。 { int num = text[i] - 48; cout << num; } } cout << endl; } int main() { string str = "12345"; // 数字字符串 int num = stoi(str); // 将字符串转换为整数的库函数。 cout << "转换后的数字为:" << num << endl; stonum(); } |
-
面向对象编程
- ★
/*定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,
操作为输入半径并计算周长、面积,输出半径、周长和面积。
要求定义构造函数(以半径为参数,周长和面积在构造函数中生成)和复制(拷贝)构造函数。在主函数中进行测试*/
#include<iostream>
#define PI 3.1415926//宏定义π的变量
using namespace std;
class circle
{
private:
double radius;//半径
double around;//周长
double area;//面积
public:
circle(double r)
{
radius = r;
around = 2 * PI * radius;//周长
area = PI * radius * radius;//面积
}
circle(const circle& a)//定义复制(拷贝)构造函数
{
radius = a.radius;
around = a.around;
area = a.area;
}
double get_radius()
{
return radius;
}
double get_around()
{
return around;
}
double get_area();//建议在考试中不要把函数定义在类外面,太麻烦了;
//{
// return area;
//}
void showprint()
{
cout << "圆的半径为:" << get_radius() << endl;
cout << "圆的周长为:" << get_around() << endl;
cout << "圆的面积为:" << get_area() << endl;
}
};//定义类的右括号要加分号,重点记住。
double circle::get_area ()//在类体外面定义要加类名双冒号
{
return area;
}
int main()
{
circle c(10);
c.showprint();
//circle d = c;题目没有要求,这两句是测试复制构造函数的。
//d.showprint();这两句不写;
}
32求圆的面积(上页)
- ★
-
- ★求圆的面积(下页)
double get_area();//建议在考试中不要把函数定义在类外面,太麻烦了;
//{
// return area;
//}
void showprint()
{
cout << "圆的半径为:" << get_radius() << endl;
cout << "圆的周长为:" << get_around() << endl;
cout << "圆的面积为:" << get_area() << endl;
}
};//定义类的右括号要加分号,重点记住。
double circle::get_area ()//在类体外面定义要加类名双冒号
{
return area;
}
int main()
{
circle c(10);
c.showprint();
//circle d = c;题目没有要求,这两句是测试复制构造函数的。
//d.showprint();这两句不写;
}
- ★求圆的面积(下页)
-
- ★
/*面向对象创建三角形的类triangle,
三边设为私有数据成员,输出三角形的面积。
*/
#include<iostream>
#include<cmath>
using namespace std;
class triangle
{
private:
double a;
double b;
double c;
public:
triangle(double x, double y, double z) //构造函数赋初始值
{
a = x;
b = y;
c = z;
}
double area()
{
double s = (a + b + c) / 2; // 计算半周长
double area = sqrt(s * (s - a) * (s - b) * (s - c)); // 使用海伦公式计算面积
return area;
}
void showprint()
{
cout << "三角形的面积是:" << area() << endl;
}
};
int main()
{
triangle c(0 ,4 ,5.0);
c.area();
c.showprint();
}
33.求三角形的面积
- ★
-
-
#include<iostream>
using namespace std;
template<class T>
void Swap(T & x, T & y)//swap的首字母必须大写,否则报错。
{
T temp= x;
x = y;
y = temp;
}
class mydate
{
private://私有数据成员
int year;
int month;
int day;
public://公有成员函数
mydate();//构造函数,先声明,
mydate(int a, int b, int c)//函数重载,定义
{
year = a;
month = b;
day = c;
}
void print()const//定义打印输出函数,加const限定不允许修改数据;
{
cout << year << "/" << month << "/" << day << endl;
}
};
mydate::mydate()//在类体外定义函数,需要加类名双冒号限定,
{
year = 1970;
month = 1;
day = 1;
}
int main()
{
int m = 2, n = 5;
swap(m, n);
cout << m << " " << n << endl;
double a = 12.2, b = 35.3;
Swap(a,b);
cout << a << " " << b << endl;
mydate d1, d2(2020, 1, 1);
swap(d1, d2);
d1.print();
d2.print();
}
34.函数模板的示例(上页)
-
-
-
/*简易学生成绩管理系统,输出每位学生的平均分、最高分,*/
#include<iostream>
#include<string>
using namespace std;
class student
{
private:
string name;//学生姓名
float chinese;//语文成绩
float maths;//数学成绩
float english;//英语成绩
public:
student(string m, float a, float b, float c)//构造函数
{
name = m;
chinese = a;
maths = b;
english = c;
}
string getname()
{
return name;
}
float getchinese()
{
return chinese;
}
float getmaths()
{
return maths;
}
float getenglish()
{
return english;
}
float average()//平均分
{
return (getchinese() + getmaths() + getenglish()) / 3;
}
float maxscoer()//最高分,语文成绩最高就返回语文成绩。
{
if (getchinese() > getmaths() && getchinese() > getenglish())
return getchinese();
if (getmaths() > getchinese() && getmaths() > getenglish())
return getmaths();
if (getenglish() > getchinese() && getenglish() > getmaths())
return getenglish();
}
};
int main()
{
student s1("赵琳", 80, 82, 91),
s2("张三", 78, 83, 82),
s3("老六", 73, 58, 62),
s4("李莉", 83, 87, 89);
cout << "姓名:" << s1.getname() << "\t平均分:" << s1.average() << "\t最高分:" << s1.maxscoer() << endl;
cout << "姓名:" << s3.getname() << "\t平均分:" << s3.average() << "\t最高分:" << s3.maxscoer() << endl;
}
35.学生成绩管理(上页)
-
-
-
学生成绩管理(下页)float average()//平均分
{
return (getchinese() + getmaths() + getenglish()) / 3;
}
float maxscoer()//最高分,语文成绩最高就返回语文成绩。
{
if (getchinese() > getmaths() && getchinese() > getenglish())
return getchinese();
if (getmaths() > getchinese() && getmaths() > getenglish())
return getmaths();
if (getenglish() > getchinese() && getenglish() > getmaths())
return getenglish();
}
};
int main()
{
student s1("赵琳", 80, 82, 91),
s2("张三", 78, 83, 82),
s3("老六", 73, 58, 62),
s4("李莉", 83, 87, 89);
cout << "姓名:" << s1.getname() << "\t平均分:" << s1.average() << "\t最高分:" << s1.maxscoer() << endl;
cout << "姓名:" << s3.getname() << "\t平均分:" << s3.average() << "\t最高分:" << s3.maxscoer() << endl;
}
-
-
36.求盒子的体积
-
/*编程定义一个Box(盒子)类,在该类定义中包括数据成员:length(长)、width(宽) 和height(高)。
成员函数:构造函数设置盒子长、宽和高三个数据;复制函数实现对象的复制;volume函数计算并输出盒子的体积。
在main函数中,要求创建Box对象,实现对象的复制,并求盒子的体积。*/
#include<iostream>
using namespace std;
class box
{
private://三个私有数据成员
double length;
double width;
double hight;
public :
box(double a, double b, double c)//构造函数初始化成员变量
{
length = a;
width = b;
hight = c;
}
box(const box& b)//复制构造函数
{
length = b.length;
width = b.width;
hight = b.hight;
}
void volume()
{
cout << "盒子的体积为:" << length * width * hight << endl;
}
};
int main()
{
box b(3, 4, 5);
b.volume();
box c(b);
c.volume();
}
-
示例题
37.过滤多余的空格。
一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
#include <iostream> //标准的输入输出头文件
#include <string> //字符串操作类和方法等
#include <cstring> // 字符串处理相关函数等
#include <cmath> //数学函数,sqrt函数等
//#define PI 3.1415926 //定义一个常量
using namespace std;
/*
【输入样例】Hello world. This is c language.
【输出样例】Hello world. This is c language.
*/
int main() {
int len = 0, i = 0;
char s[101];
cout << "请输入一行字符串:" << endl;
cin.getline(s,101);
//'\0' 字符结串结束符
while (s[i] != '\0')
{
//检查是否为 ' ' 空格
if (s[i] == ' '){
//等于 0 ,表示当前第一个空格
if (len == 0)
//输出一个空格
cout << " ";
//增加len值,说明已经有了一个空格
len++;
}
else {
//如果不是空格输出当前字符串
cout << s[i];
//重置为0,因为不是空格
len = 0;
}
//增加i值,循环迭代中检查下一个字符
i++;
}
cout << endl;
return 0;
}
38.设计一个名为Rectangle的矩形类
#include <iostream> //标准的输入输出头文件
#include <string> //字符串操作类和方法等
#include <cstring> // 字符串处理相关函数等
#include <cmath> //数学函数,sqrt函数等
//#define PI 3.1415926 //定义一个常量
using namespace std;
/*设计一个名为Rectangle的矩形类,其属性为矩形的左上角和右下角两个点的坐标,
定义矩形类的构造函数、析构函数,
定义矩形类的复制构造函数,
定义成员函数能计算和输出矩形的周长和面积。*/
//定义结构体Point ,用于表示二维平面上的一个点
struct Point
{
//两个坐标
int x, y;
};
//定义矩形类
class Rectangle{
//左上角点坐标
Point topLeft;
//右下角点坐标
Point bottomRight;
public:
//构造函数,通过两个点初始化矩形
Rectangle(Point a, Point n);
//复制构造函数,通过另一个矩形对象来初始化
Rectangle(const Rectangle & R);
//计算矩形面积的成员函数
int Area();
//计算矩形周长的成员函数
int SideLength();
//析构函数,当对象生命周期结束时调用
~Rectangle() {
cout << "析构函数被调用\n";
};
};
//构造函数实现
Rectangle::Rectangle(Point a,Point b)
{
//设置左右角点坐标
topLeft = a;
bottomRight = b;
}
//复制构造函数实现
Rectangle::Rectangle(const Rectangle & R)
{
//复制左右角点坐标
topLeft = R.topLeft;
bottomRight = R.bottomRight;
}
//计算矩形面积成员 函数实现
int Rectangle::Area()
{
//计算矩形的宽度
int x = bottomRight.x - topLeft.x;
//计算矩形的高度
int y = bottomRight.y - topLeft.y;
return x * y; //返回面积,宽乘以高
}
//计算矩形周长的成员函数实现
int Rectangle::SideLength()
{
int x = bottomRight.x - topLeft.x;
int y = bottomRight.y - topLeft.y;
return 2 * (x + y); //返回周长,2倍宽度加2倍高度
}
int main() {
//定义两个Point类型的变量
Point m,n;
//设置m和n点的坐标
m.x = 3;
m.y = 4;
n.x = 12;
n.y = 10;
//创建两个矩形对象,rect2是rect的副本
Rectangle rect(m,n),rect2(rect);
//输出面积和周长
cout << "矩形的面积为:" << rect.Area() << endl;
cout << "矩形的周长为:" << rect.SideLength() << endl;
return 0;
}
39.定义Person类, 该类包含成员变量
#include <iostream>#include <string>
/* 4. 定义Person类, 该类包含成员变量: 身份证号(IdCard) 性别(Sex)、姓名(Name)、家庭地址(HomeAddress)、生日(Birthday)。
请写出该类的成员函数: 构造函数,复制构造函数,析构函数,设置信息函数,展示信息函数。*/
using namespace std;
class Person {
private:
string IdCard;
string Sex;
string Name;
string HomeAddress;
string Birthday;
public:
// 构造函数
Person(string idCard, string sex, string name, string homeAddress, string birthday)
: IdCard(idCard), Sex(sex), Name(name), HomeAddress(homeAddress), Birthday(birthday) {}
// 复制构造函数
Person(const Person& other)
: IdCard(other.IdCard), Sex(other.Sex), Name(other.Name), HomeAddress(other.HomeAddress), Birthday(other.Birthday) {}
// 析构函数
~Person() {
// 在这个简单的例子中,不需要执行任何特殊的清理操作
cout << "析构函数已调用。" << endl;
}
// 设置信息函数
void setIdCard(string idCard) {
IdCard = idCard;
}
void setSex(string sex) {
Sex = sex;
}
void setName(string name) {
Name = name;
}
void setHomeAddress(string homeAddress) {
HomeAddress = homeAddress;
}
void setBirthday(string birthday) {
Birthday = birthday;
}
// 展示信息函数
void displayInfo() const {
cout << "身份证号: " << IdCard << endl;
cout << "性别: " << Sex << endl;
cout << "姓名: " << Name << endl;
cout << "家庭地址: " << HomeAddress << endl;
cout << "生日: " << Birthday << endl;
}
};
int main() {
// 创建一个Person对象
Person person("123456789012345678", "男", "张三", "北京市某区某街道", "1990-01-01");
person.displayInfo();
// 使用复制构造函数创建另一个Person对象
Person personCopy(person);
personCopy.displayInfo();
// 修改personCopy的信息
personCopy.setName("李四");
personCopy.displayInfo();
return 0;
}
40.求该语句中单词长度最大的单词
#include<iostream>
#include<cstring>
using namespace std;
/*3. 在main函数里定义一个字符数组,char s[ ] = "This is a C Programming test".
求该语句中单词长度最大的单词(同一个字母大小写算两个字符)。
两个单词中间以空格分隔开, 约定该语句只存在字符。*/
int main() {
char a[] = "This is a C Program test";
int a_len = strlen(a);
int maxstr_len = 0;//最长的单词字母数
int maxstr_index_start = 0;//最大的单词起始下标
int maxstr_index_end = 0;//最大的单词结束下标
int str_len = 0;//当前判断单词的字母数
int index_start = 0;//当前判断单词的起始下标
int index_end = 0;//当前判断单词的结束下标
for (int i = 0; i <= a_len; i++) {
if (a[i] == ' ' || a[i] == '\0') {//空格或结束符出现时为一个单词
index_end = i;
cout << index_start << ' ' << index_end << endl;//测试当前循环单词的下标
for (int j = index_start; j < index_end; j++) {
int mut = 0; //判断字母是否重复
for (int x = index_start; x < j; x++) {//与前面出现的字母比较,相等就不累加字母个数
if (a[j] == a[x]) {
mut = 1;
break;
}
}
if (mut == 0) {//不存在重复,字母数+1
str_len++;
}
}
if (str_len > maxstr_len) {//判断当前单词包含的字母数,是否是历史最长
maxstr_len = str_len;
maxstr_index_start = index_start;
maxstr_index_end = index_end;
}
str_len = 0;//每次循环完,单词字母数置0
index_start = index_end + 1;//开始下标位置调整为上个单词结束位置+1(空格)
}
}
cout << "测试字符串:" << a << endl;
cout << "包含字母最多的单词为:";
for (int i = maxstr_index_start; i < maxstr_index_end; i++) {
cout << a[i];
}
cout << ",共包含" << maxstr_len << "个(不重复)字母" << endl;
return 1;
}
41.输入二维矩阵的行、列( m 、n)。再依次输入数组的值。输出该二维数组周边元素的和, 即第一行+最后一行+第一列+最后一列的和
#include<iostream>
using namespace std;
/*2.
【输入】
第一行输入两个整数m、n分别为二维矩阵的行和列的大小, 200<m=n<0, 两个整数之间用空格隔开
第二行开始输入二维矩阵的元素
【输出】
输出二维矩阵周边元素的和, 即第一行+最后一行+第一列+最后一列的和。
【输入样例】
3 3
3 5 8
2 6 7
5 7 9
【输出样例】
46
*/
int main() {
cout << "请分别输入二维矩阵的行、列 ,第二行开始输入矩阵的元素" << endl;
int rownum, columnnum;
cin >> rownum >> columnnum;
int sum = 0;
int arr[200][200];
for (int i = 0; i < rownum; i++) {
for (int j = 0; j < columnnum; j++) {
cin >> arr[i][j];
}
}
for (int i = 0; i < rownum; i++) {
for (int j = 0; j < columnnum; j++) {
if (i == 0 || i == rownum - 1 || j == 0 || j == columnnum - 1) {
sum += arr[i][j];
}
}
}
cout << sum << endl;
return 0;
}
42.输入一个数m,求这个数的立方等于n个奇数和。
提示:最大的奇数是m*(m+1)-1
#include <iostream>
//如果数字太大需要优化代码
using namespace std;
/*
【输入】
输入一个整数n, 求这个数的立方等于n个奇数和.
【输出】
输出n的立方=n个奇数相加的和
【输入样例】
3
【输出样例】
m*m*m=11+9+7=27
*/
int main() {
int m;
cout << "请输入一个数m: ";
cin >> m;
int m3 = m * m * m;
int max_odd = m * (m + 1) - 1;
int odd_numbers[max_odd + 1]; // 数组来存储奇数
int sum_of_odds = 0;
int odd_count = 0; // 奇数计数器
for (int odd = max_odd; odd > 0 && sum_of_odds < m3; --odd) {
if (odd % 2 != 0) { // 检查是否为奇数
odd_numbers[odd_count] = odd;
sum_of_odds += odd;
odd_count++;
}
}
// 如果和大于m的立方,移除多余的奇数,直到和等于m的立方
while (sum_of_odds > m3 && odd_count > 0) {
sum_of_odds -= odd_numbers[odd_count - 1];
odd_count--;
}
// 输出结果
cout << m << "*" << m << "*" << m << "=";
for (int i = 0; i < odd_count; ++i) {
cout << odd_numbers[i];
if (i < odd_count - 1) {
cout << "+";
}
}
cout << "=" << m3 << endl;
return 0;
}