MOOC西交大C++基础题100题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++基础题100题
第一部分:
1、显示Hello Worle!
编写C++程序,在屏幕上显示“Hello World!”。
#include <iostream>
int main()
{
using namespace std;
cout << "Hello World!" << endl;
return 0;
}
2、显示唐诗
编写C++程序,在屏幕上显示下列唐诗:
慈母手中线
游子身上衣
临行密密缝
意恐迟迟归
谁言寸草心
报得三春晖
#include <iostream>
int main()
{
using namespace std;
cout << "慈母手中线\n游子身上衣\n临行密密缝\n意恐迟迟归\n谁言寸草心\n报得三春晖" << endl;
return 0;
}
3、显示一句话
编写C++程序,输入姓名,在屏幕上显示如下格式的文字:
This program is coded by ***.
其中“***”是输入的名字。
如输入“ZhangSan”,则显示:
This program is coded by ZhangSan.
注意,姓名中间没有空格,末尾有英文句号。
#include <iostream>
int main()
{
using namespace std;
char name[50];
cin >> name;
cout << "This program is coded by " << name << '.' << endl;
return 0;
}
4、还是一句话
编写C++程序,输入姓名,在屏幕上显示如下格式的文字:
This program is coded by ***.
其中“***”是输入的名字。
如输入“Zhang San”,则显示:
This program is coded by Zhang San.
注意,姓名中间可能有空格,末尾有英文句号。
#include <iostream>
int main()
{
using namespace std;
char name[50];
cin.getline(name, 49);
cout << "This program is coded by " << name << "." << endl;
getchar();
return 0;
}
5、计算矩形周长
输入矩形的两个边的长度,计算矩形的周长。
#include <iostream>
int main()
{
using namespace std;
int a, b, c;
cin >> a >> b;
c = (a + b) * 2;
cout << c << endl;
return 0;
}
6、已知直角边求斜边
输入一个三角形的两个直角边的长度,求其斜边的长度:计算公式是c=sqrt(a*a+b*b)
其中, a,b是两个直角边的长度,c是斜边,sqrt表示开平方。
#include <iostream>
#include <cmath>
int main()
{
using namespace std;
double a, b, c;
cin >> a >> b;
c = sqrt(a*a + b*b);
cout << c << endl;
return 0;
}
第二部分:
1、求过平面上两点的直线的斜率
编写程序,输入平面上的两个点的坐标(x1,y1),(x2,y2),求过这两点的直线的斜率(设斜率不为无穷)。
【提示】数据类型都用double
#include <iostream>
int main()
{
using namespace std;
double x1, y1, x2, y2;
double k;
cin >> x1 >> y1 >> x2 >> y2;
k = (y2 - y1) / (x2 - x1);
cout << k << endl;
return 0;
}
2、计算平面上两点之间的距离
编写程序,输入平面上的两个点的坐标(x1,y1),(x2,y2),计算这两点之间的距离。
【提示】数据类型用double,包含头文件cmath,计算公式distance=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);distance=sqrt(distance);
#include <iostream>
#include <cmath>
int main()
{
using namespace std;
double x1, y1, x2, y2;
double k;
cin >> x1 >> y1 >> x2 >> y2;
k = (x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1);
k = sqrt(k);
cout << k << endl;
return 0;
}
3、判断大小写
输入一个英文字母,判断大小写。
大写输出1,小写输出0.
#include <iostream>
int main()
{
using namespace std;
char c;
cin >> c;
if (c >= 'A'&&c <= 'Z')
cout << 1;
else
cout << 0;
return 0;
}
4、判断数字
输入一个英文字符,判断是否数字。
是输出1,不是输出0.
【提示】字符类型用char,设输入的字母为c,判断数字的是:c>='0' && c<='9',然后使用条件运算符,条件?cout<<1 : cout<<0;
#include <iostream>
int main()
{
using namespace std;
char c;
cin >> c;
if (c >= '0'&&c <= '9')
cout << 1;
else
cout << 0;
return 0;
}
5、判断闰年
编写程序,输入年份,判断是否闰年。
是,输出“IsLeapYear”;“否”,输出“NotLeapYear”。
#include <iostream>
int main()
{
using namespace std;
int year;
cin >> year;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
cout << "IsLeapYear" << endl;
else
cout << "NotLeapYear" << endl;
return 0;
}
6、求商和余数
输入两个正整数,求它们的商和余数。
例如,输入18和10,则它们的商是1,余数是8。
【提示】使用int类型,"/"用来求商,"%"用来求余数。
#include <iostream>
int main()
{
using namespace std;
int a, b;
cin >> a >> b;
cout << a / b << ' ' << a % b << endl;
return 0;
}
7、计算平均分取整
某招聘面试,7个专家给考生打分,编写程序,计算7个专家给分的平均分,取整。
【提示】四舍五入:y=int(x+0.5)
#include <iostream>
using namespace std;
int main()
{
double a, sum = 0.0;
double average;
for (int i = 0; i < 7; ++i)
{
cin >> a;
sum += a;
}
average = sum / 7;
average = (int)(average + 0.5);
cout << average << endl;
return 0;
}
8、计算点到直线的距离保留两位小数
直线方程:Ax+By+C=0
编写程序,输入A,B,C,和点(x,y),计算该点到直线的距离。
点到直线的距离公式:
d=|Ax+By+C|/sqrt(A*A+B*B)
其中|z|表示绝对值,程序中使用条件表达式,如:z<0 ? z=-z:z=z;
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double A, B, C, D, x, y, z;
cin >> A >> B >> C;
cin >> x >> y;
z = A * x + B * y + C;
z < 0 ? z = -z : z = z;
D = z / sqrt(A*A + B * B);
D = int(D * 100 + 0.5) / 100.00;
cout << D << endl;
return 0;
}
9、输入字符显示ASCII值
编写程序,输入一个字符,显示其ASCII值。
如输入“A”,显示65,输入“a”显示97。
#include <iostream>
using namespace std;
int main()
{
char ch;
ch = cin.get();
cout << ch + 0 << endl;
return 0;
}
10、输入整数显示ASCII字符
编写程序,输入一个0-127之间的整数,显示对应的ASCII字符。
提示:若k是整数,将它赋值给字符变量或使用char(k)就得到字符。
注意,有些字符是不能在屏幕上显示出来的。
#include <iostream>
using namespace std;
int main()
{
int ch;
cin >> ch;
cout << char(ch) << endl;
return 0;
}
11、输入整数显示十六进制
编写程序,输入一个非负整数,显示其十六进制形式。
如输入31,输出1f。
#include <iostream>
using namespace std;
int main()
{
unsigned int ch;
cin >> ch;
cout << hex << ch << endl;
return 0;
}
12、输入整数显示十六进制和八进制
编写程序,输入整数,显示其十进制、十六进制和八进制形式。
如输入31,输出:
-31 -1f -37
#include <iostream>
using namespace std;
int main()
{
int n, l;
cin >> n;
n >= 0 ? l = n : l = -n;
if (n >= 0)
{
cout << l << " " << hex << l << " " << oct << l << endl;
}
else
{
cout << "-" << l << " -" << hex << l << " -" << oct << l << endl;
}
return 0;
}
第三部分:
1、判断奇偶数
编写程序,输入正整数,判断是奇数还是偶数,是奇数显示“odd”,是偶数显示“even”,输入“1”显示“odd”。
#include <iostream>
using namespace std;
int main()
{
int i;
cin >> i;
if (i % 2 == 0)
cout << "even" << endl;
else
cout << "odd" << endl;
return 0;
}
2、判断数的类型
编写程序,输入实数,判断输入的数据是正实数、负实数、正整数、负整数、还是零,分别显示“positive real”, “negative real”, “positive integer”, “negative integer”, “zero”,注意,两个单词的中间有一个空格。
#include <iostream>
using namespace std;
int main()
{
double i; //使用int只对一半
cin >> i;
if (i > 1e-10)
{
if (int(i) == i)
cout << "positive integer" << endl;
else
cout << "positive real" << endl;
}
else if (i < -1e-10)
{
if (int(i) == i)
cout << "negative integer" << endl;
else
cout << "negative real" << endl;
}
else
cout << "zero" << endl;
return 0;
}
3、判断点的象限
编写程序,输入平面直角坐标的x,y值,判断点在哪个象限。
不考虑在坐标轴上的情况。
分别输出1、2、3或4。
#include <iostream>
using namespace std;
int main()
{
double i, j; //使用int只对一半
cin >> i >> j;
if (i > 0 && j > 0)
cout << "1" << endl;
else if (i < 0 && j>0)
cout << "2" << endl;
else if (i < 0 && j < 0)
cout << "3" << endl;
else
cout << "4" << endl;
return 0;
}
4、判断字符类型
编写程序,输入一个字符,判断其是数字、大写字母、小写字母还是其他,分别显示0,1,2或-1。
#include <iostream>
using namespace std;
int main()
{
char ch;
ch = cin.get();
if (ch >= 'A'&&ch <= 'Z')
cout << "1" << endl;
else if (ch >= 'a'&&ch <= 'z')
cout << "2" << endl;
else if (ch >= '0'&&ch <= '9')
cout << "0" << endl;
else
cout << "-1" << endl;
5、百分制成绩转五分制成绩
编写程序,输入百分制的分数(非负整数),将其转换为5分制成绩,成绩对应关系如下:90-100:5
80-89:4
70-79: 3
60-69: 2
10-59: 1
0-9:0
#include <iostream>
using namespace std;
int main()
{
int i, j;
cin >> i;
j = i / 10;
switch (j)
{
case 10:
case 9: cout << "5" << endl; break;
case 8: cout << "4" << endl; break;
case 7: cout << "3" << endl; break;
case 6: cout << "2" << endl; break;
case 5:
case 4:
case 3:
case 2:
case 1: cout << "1" << endl; break;
default: cout << "0" << endl; break;
}
return 0;
}
6、显示n个字符
编写程序,输如正整数n和字符c,在一行输出n个字符c。
如输入:10 #,显示
##########
#include <iostream>
using namespace std;
int main()
{
int k;
char ch;
cin >> k >> ch;
for (int i = 0; i < k; i++)
cout << ch;
7、显示字符组成的矩形
编写程序,输入行数n、列数m和一个字符c,显示由字符c组成的n行m的矩形。
如输入:5 10 #,输出:
##########
##########
##########
##########
##########
#include <iostream>
using namespace std;
int main()
{
int k, l;
char ch;
cin >> k >> l >> ch;
for (int i = 0; i < k; i++)
{
for (int j = 0; j < l; j++)
cout << ch;
cout << endl;
}
return 0;
}
8、用循环计算1+2+3+...+n
编写程序,输入非负整数n,计算s=1+2+3+...+n的值。
要求使用循环,而不是使用公式。
#include <iostream>
using namespace std;
int main()
{
unsigned int n, s = 0;
cin >> n;
for (unsigned int i = 1; i <= n; ++i)
s += i;
cout << s << endl;
return 0;
}
9、计算1+1/2+1/3+...1/n
编写程序,输入非负整数n,计算s=1+1/2+1/3+...+1/n的值。
输入0时,输出0。
输入:非负整数n
输出:级数的前n项和。
【提示】1/n应写成1.0/n。
和应为double型。
请自己分别使用for和while实现。
#include <iostream>
using namespace std;
int main()
{
int n, i = 1;
double s = 0.0;
cin >> n;
while (i <= n)
{
s += 1.0 / i;
++i;
}
cout << s << endl;
return 0;
}
10、计算n!
编写程序,输入非负整数n,计算n!。
0!=1。
#include <iostream>
using namespace std;
int main()
{
unsigned int n, s = 1;
cin >> n;
if (n != 0 || n != 1)
{
for (unsigned int i = 1; i <= n; ++i)
s *= i;
}
else
s = 1;
cout << s << endl;
return 0;
}
11、交替输出1和-1
编写程序,输入正整数n,从1开始交替输出n个1和-1。
如输入3,输出1 -1 1;输入4,输出1 -1 1 -1,数据间用一个空格隔开。
#include <iostream>
using namespace std;
int main()
{
int m, n = 1;
cin >> m;
for (int i = 1; i <= m; ++i)
{
if (i < m)cout << ' ';
}
return 0;
}
12、判断整数的位数
编写程序,输入非负整数,判断整数的位数。
如输入:12,输出:2
#include <iostream>
using namespace std;
int main()
{
unsigned int count = 1;
int n;
cin >> n;
for (int i = 0; i < n && n >= 10; ++i)
{
n = n / 10;
++count;
}
cout << count << endl;
return 0;
}
13、求非负数整数的各位数字的
编写程序,输入非负整数,输出其各位数字的和,如输入:1234,输出10. #include <iostream>
using namespace std;
int main()
{
unsigned int sum = 0, n;
cin >> n;
while (n)
{
sum = sum + n % 10;
n /= 10;
}
cout << sum << endl;
return 0;
}
14、九九乘法表
编写程序,显示如下的n行的九九乘法表。
如输入5,显示的乘法表如下:1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
#include <iostream>
using namespace std;
int main()
{
unsigned n, sum = 0;
cin >> n;
for (unsigned int i = 1; i <= n; ++i)
{
for (unsigned int j = 1; j <= i; j++)
{
sum = i*j;
cout << i << '*' << j << '=' << sum;
if (j < i)cout << ' ';
}
cout << '\n';
}
return 0;
}
15、不一样的九九乘法表
编写程序,显示如下的n行的九九乘法表。
如输入5,,显示的乘法表如下:5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
4*1=4 4*2=8 4*3=12 4*4=16
3*1=3 3*2=6 3*3=9
2*1=2 2*2=4
1*1=1
#include <iostream>
using namespace std;
int main()
{
unsigned n, sum = 0;
cin >> n;
for (unsigned int i = n; i > 0; --i)
{
for (unsigned int j = 1; j <= i; ++j)
{
sum = i*j;
cout << i << '*' << j << '=' << sum;
if (j < i) cout << ' ';
}
cout << '\n';
}
return 0;
}
16、Fibonacci序列
F(0)=0
F(1)=1
F(n)=F(n-1)+F(n-2)
#include <iostream>
using namespace std;
int function(int n)
{
int first = 0;
int second = 1;
int sum = 0;
if (n <= 1)
{
return (n == 1) ? 1 : 0;
}
for (int i = 2; i <= n; ++i)
{
sum = first + second;
first = second;
second = sum;
}
return sum;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i <= n; ++i)
{
cout << function(i);
if (i < n)
cout << ' ';
}
return 0;
}
第四部分:
1、数组元素反序输出
编写程序,先输入n,再输入n个整数,按相反的顺序输出这n个整数。
如输入5个整数:1 2 3 4 5,输出为:5 4 3 2 1。
数据个数不超过100个。
#include <iostream>
using namespace std;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
for (int i = n-1; i >= 0; --i)
{
if (i == 0)
cout << arr[i];
else
cout << arr[i] << ' ';
}
return 0;
}
2、求数组元素最大值
编写程序,输入若干整数到一维数组中,输入-9999时表示结束,求数组元素的最大值。
数组元素个数不超过100,输入数据不包含-9999.
#include <iostream>
#include <climits>
using namespace std;
int main()
{
int arr[99]{ 0 };
int k, n = INT_MIN;
for (int i = 0; i < 99; ++i)
{
cin >> k;
if (k == -9999)
break;
else
arr[i] = k;
}
for (int i = 0; i < 100; ++i)
{
if (arr[i] == 0)
break;
if (arr[i] > n)
n = arr[i];
}
cout << n << endl;
return 0;
}
3、数组指定区间的元素的最大、最小、总和和平均值
有固定数组,编写程序,输入起始下标i和终止下标j,求下标在[i,j)之间的元素的最大值、最小值、总和和平均值。
平均值为double。
#include <iostream>
#include <climits>
using namespace std;
int main()
{
unsigned i, j;
int MAX = INT_MIN, MIN = INT_MAX, count, sum = 0;
double average = 0.00;
int arr[] = { -1,15,-40,-180,99,-122,-124,27,192,128,
-165,95,161,-138,-183,51,107,39,-184,113,
-63,9,107,188,-11,-13,151,-52,7,6 };
cin >> i >> j;
if (i >= j)
average = MAX = MIN = sum = 0;
else
{
for (count = 0; i < j; ++i)
{
if (arr[i] > MAX)
MAX = arr[i];
if (arr[i] < MIN)
MIN = arr[i];
sum += arr[i];
count++;
}
average = (double)sum / count;
}
cout << MAX << ' ' << MIN << ' ' << sum << ' ' << average << endl;
return 0;
}
4、求矩阵每行元素最大值
编写程序,输入行数n、列数m,然后输入n行m列的矩阵,求矩阵每行元素的最大值。
行数、列数在[1,20]之间。
矩阵元素为整数。
#include <iostream>
#include <climits>
using namespace std;
int main()
{
unsigned n, m;
int max;
cin >> n >> m;
int arr[n][m]; //在G++下
//int arr[20][20] = { 0 }; //在VC下
for (int i = 0; i < n; i++)
cin >> arr[i][j];
}
for (int i = 0; i < n; i++)
{
max = INT_MIN;
for (int j = 0; j < m; j++)
{
if (arr[i][j] > max)
max = arr[i][j];
}
cout << max << endl;
}
return 0;
}
5、求矩阵每列元素最大值
编写程序,输入行数n、列数m,然后输入n行m列的矩阵,求矩阵每列元素的最大值。
行数、列数在[1,20]之间。
矩阵元素为整数。
#include <iostream>
#include <climits>
using namespace std;
int main()
{
unsigned n, m;
int max;
cin >> n >> m;
int arr[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cin >> arr[i][j];
}
for (int i = 0; i < m; i++)
{
max = INT_MIN;
for (int j = 0; j < n; j++)
{
if (arr[j][i] > max)
max = arr[j][i];
}
if (i == m - 1)
cout << max;
else
cout << max << ' ';
}
编写程序,输入n,然后输入两个n维向量,计算并输出它们的和。
例如输入4,然后输入两个4维向量(1,2,3,4),(5,6,7,8),它们的和就是对应元素相加,结果为(6,8,10,12)。
设向量的元素为整数。
维数不超过100.
#include <iostream>
using namespace std;
int main()
{
int n;
int arr1[100], arr2[100];
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr1[i];
for (int i = 0; i < n; i++)
cin >> arr2[i];
for (int i = 0; i < n; i++)
{
if (i == n - 1)
cout << arr1[i] + arr2[i];
else
cout << arr1[i] + arr2[i] << ' ';
}
return 0;
}
7、矩阵向量的内积
编写程序,输入n,然后输入两个n维向量,计算并输出它们的内积(点积、数量积,inner product,dot product; scalar product)。
例如输入4,然后输入两个4维向量(1,2,3,4),(5,6,7,8),它们内积就是对应元素相乘、求和,结果为70。
设向量的元素为整数。
维数不超过100.
#include <iostream>
using namespace std;
int main()
{
int n, sum = 0;
int arr1[100], arr2[100];
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr1[i];
for (int i = 0; i < n; i++)
cin >> arr2[i];
for (int i = 0; i < n; i++)
sum += arr1[i] * arr2[i];
cout << sum;
这里的范数指欧几里得范数、2-范数,是向量元素的平方再求和,然后开平方。
计算公式为:
编写程序,输入n,然后输入一个n维向量,计算它的2-范数。
例如输入4,然后输入一个4维向量(1,2,3,4),它的2-范数为。
设向量的元素为double。
维数不超过100.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin >> n;
double sum = 0.0, arr[n];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
sum += arr[i]*arr[i];
}
cout << sqrt(sum) << endl;
}
9、计算向量的欧氏距离
欧几里得度量(euclidean metric)(也称欧氏距离)指在n维空间中两个点之间的真实距离。
在二维和三维空间中的欧氏距离就是两点之间的实际距离。
n维空间两点间的欧氏距离计算公式为:
编写程序,输入n,然后输入两个n维向量,计算并输出它们的欧氏距离。
例如输入4,然后输入两个4维向量(1,2,3,4),(5,6,7,8),它们内积就是对应元素相乘、求和,结果为70。
设向量的元素为实数。
维数不超过100.
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double n, arr1[100], arr2[100];
double m, ans = 0;
cin >> n;
for (int j = 1; j <= n; j++)
cin >> arr2[j];
for (int j = 1; j <= n; j++)
ans += (arr1[j] - arr2[j])*(arr1[j] - arr2[j]);
m = sqrt(ans);
cout << m << endl;
return 0;
}
10、矩阵求和
n×m矩阵的和,是对应元素的和,得到的还是还是n×m的矩阵。
编写程序,输入矩阵的行数n和列数n,然后输入两个n×m的矩阵,计算并输出它们的和。
#include<iostream>
using namespace std;
int main()
{
unsigned n, m;
double arr1[100][100] = { 0 }, arr2[100][100] = { 0 }, arr3[100][100] = { 0 };
cin >> n >> m;
for (unsigned i = 0; i < n; ++i)
{
for (unsigned j = 0; j < m; ++j)
cin >> arr1[i][j];
}
for (unsigned i = 0; i < n; ++i)
{
for (unsigned j = 0; j < m; ++j)
cin >> arr2[i][j];
}
for (unsigned i = 0; i < n; ++i)
{
for (unsigned j = 0; j < m; ++j)
arr3[i][j] = arr1[i][j] + arr2[i][j];
}
for (unsigned i = 0; i < n; i++)
{
for (unsigned j = 0; j < m; j++)
{
if (j == m - 1)
cout << arr3[i][j];
else
cout << arr3[i][j] << ' ';
}
cout << endl;
}
return 0;
编写程序,输入可能带空格的字符串,计算并输入其长度(即字符个数,含空格数)。
字符串最大长度不超过100。
使用字符数组实现,不使用字符串库函数。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
getline(cin, str);
cout << str.length() << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
char ch[100];
int count = 0;
cin.getline(ch, 99);
for (int i = 0; ch[i] != '\0'; i++)
count++;
cout << count;
return 0;
}
12、统计字符串中大写字母的数量
编写程序,输入字符串(含空格),统计其中大写字母的数量。
字符串最大长度不超过200。
使用字符数组实现,不使用字符串库函数。
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char ch[100];
int count = 0;
cin.getline(ch, 99);
for (int i = 0; ch[i] != '\0'; i++)
{
if(isupper(ch[i]))
count++;
}
cout << count;
return 0;
}
13、复制字符串
编写程序,输入字符串(不含空格),保存在字符数组s1中,再将s1中的复制到字符数组s2中,输出s2。
使用字符数组实现,不使用字符串库函数。
字符串最大长度不超过100。
注意:本题的输入和输出是一样的,关键是有没有实现复制!!!
【提示】逐个赋值s1[i]给s2[i],直到遇到结束符。
特别注意在s2末尾加结束符'\0'。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1, str2;
getline(cin, str1);
str2 = str1;
cout << str2 << endl;
char ch1[50], ch2[50];
cin.getline(ch1, 49);
for (int i = 0; ch1[i] != '\0'; ++i)
{
ch2[i] = ch1[i];
ch2[i + 1] = '\0';
}
cout << ch2 << endl;
return 0;
}
14、字符串逆序
编写程序,输入字符串(不含空格),保存在字符数组s中,将s中的字符逆序,仍输出s。
使用字符数组实现,不使用字符串库函数。
字符串最大长度不超过100。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cin >> str;
for (int i = str.length()-1; i >= 0; i--)
cout << str[i];
return 0;
}
15、定义表示平面坐标点的结构体计算两点距离
在主函数外定义表示平面坐标点的结构体,在主函数中用该结构体定义两个坐标点,输入两点的坐标值,计算并输出两点之间的距离。
【提示】参考程序如下,需要的同学可以参考。
此题直接抄提示代码就行。
第五部分:
1、求两个数的和
编写函数,求两个实数的和。
编写主函数,输入两个数,调用函数求和,在主函数中显示结果。
建议函数名mysum。
#include <iostream>
using namespace std;
double mysum(double a, double b)
{
double sum = a + b;
return sum;
}
int main()
{
double a, b;
cin >> a >> b;
cout << mysum(a, b);
return 0;
}
2、求绝对值的函数
编写函数,求实数x的绝对值。
在主函数中输入实数x,调用函数求绝对值,在主函数中输出。
建议函数名myfabs。
【注意】不用系统库函数,自己实现,返回绝对值,在主函数中输出!
#include <iostream>
using namespace std;
double myfabs(double a)
{
return a > 0 ? a : 0 - a;
}
int main()
{
double a;
cin >> a;
cout << myfabs(a);
return 0;
}
3、x的k次方
编写函数,求x的k次方,k为整数(可正、可负、可0),0的任何次方为0,任何非0数的0次方为1。
编写主函数,输入x和k,调用函数计算x的k次方,在主函数中输出。
结果为实数。
建议函数名mypow。
【注意】用函数实现,使用循环连乘或连除,不使用系统的库函数pow。
#include <iostream>
using namespace std;
double mypow(double a, int b)
{
double pow = 1.00;
if (a == 0)
return 0;
if (b == 0)
return 1;
else if (b < 0)
{
b = 0 - b;
while(b--)
pow = pow * a;
pow = 1.0 / pow;
return pow;
}
else
{
for (int i = 0; i < b; ++i)
pow *= a;
return pow;
}
}
int main()
{
double a;
int b;
cin >> a >> b;
cout << mypow(a, b);
return 0;
}
4、求n!的函数
编写函数,求n!,0!=1。
编写主函数,输入n,调用函数求阶乘,在主函数中输出结果。
【注意】必须用函数实现,在主函数中输出结果。
函数中不能有cout,printf等屏幕输出。
#include <iostream>
using namespace std;
int factorial(int b)
{
long sum = 1;
if (b == 0)
return 1;
else
for (int i = 1; i <= b; ++i)
sum *= i;
return sum;
}
int main()
{
unsigned a;
cin >> a;
cout << factorial(a);
return 0;
}
5、输入数组元素
编写函数,输入数组元素,输入-9999表示结束,返回数组元素的个数。
在主函数中定义数组,数组大小足够大(满足问题规模要求,本题100即可),调用函数输入数组元素,在主函数中逆序输出数组元素。
数组元素为整型。
【提示】形参为数组,实参为数组名,在函数中添加数组元素,元素自然返回。
函数应使用return返回实际输入的元素个数。
#include <iostream>
using namespace std;
int function(int* arr)
{
int * p = arr;
int count = 0;
while (*p++)
count++;
return count;
}
int main()
{
int a[100] = { 0 };
int k;
for (int i = 0; i < 100; ++i)
{
cin >> a[i];
if (a[i] == -9999)
break;
}
k = function(a);
for (int i = k - 2; i >= 0; --i)
{
if (i == 0)
cout << a[i];
else
cout << a[i] << ' ';
}
return 0;
}
6、输出数组元素值
编写函数,输出数组元素,用一个空格隔开,末尾无空格。
在主函数中定义数组,数组大小足够大(满足问题规模要求,本题100即可),调用上题函数输入数组元素,调用本题函数输出数组元素。
数组元素为整型。
注意:要用函数实现!!!
#include <iostream>
using namespace std;
void PrintArray(int* arr)
{
int count = 0;
for (int i = 0; i < 100; ++i)
{
cin >> arr[i];
if (arr[i] == -9999)
{
arr[i] = 0;
break;
}
count++;
}
for (int i = 0; i < count; ++i)
{
if (i == count - 1)
cout << arr[i] << endl;
else
cout << arr[i] << ' ';
}
}
int main()
{
int arr[100] = { 0 };
PrintArray(arr);
return 0;
}
7、将数组元素逆序
编写函数,将数组元素逆序。
编写主函数,定义数组,使用前面编写的函数输入数组元素,调用本题函数逆序数组元素,调用前面编写的输出数组的函数输出。
设数组元素为整数,不超过100个。
#include <iostream>
using namespace std;
void PrintArray(int* arr)
{
int count = 0;
while (arr[count] != '\0')
count++;
for (int i = count - 2; i >= 0; --i)
{
if (i == 0)
cout << arr[i];
else
cout << arr[i] << ' ';
}
}
int main()
{
int a[100] = { 0 };
for (int i = 0; i < 100; ++i)
{
cin >> a[i];
if (a[i] == -9999)
break;
}
PrintArray(a);
return 0;
}
8、求数组元素的和
编写函数,求数组元素的和。
编写主函数,定义数组,使用前面编写的函数输入数组元素,调用本题函数求和,在主函数中输出和。
数组元素为整数,不超过100个。
#include <iostream>
using namespace std;
void ArraySum(int* arr)
{
int count = 0, sum = 0;
while (arr[count] != '\0')
count++;
for (int i = 0; i < count - 1; ++i)
sum += arr[i];
cout << sum;
}
int main()
{
int a[100] = { 0 };
for (int i = 0; i < 100; ++i)
{
cin >> a[i];
if (a[i] == -9999)
break;
}
ArraySum(a);
return 0;
}
9、求字符串的长度的函数
编写函数,计算字符串的长度。
编写主函数,定义字符数组,输入字符串,调用函数求长度,在主函数中输出字符串的长度。
字符串最大长度不超过100。
注意,必须用函数实现,不能使用字符串处理的库函数,不能使用string类型。
#include <iostream>
using namespace std;
int arrCount(char* arr)
{
int count = 0;
while (arr[count] != '\0')
count++;
return count;
}
int main()
{
char str[100] = { 0 };
cin.get(str, 99);
cout << arrCount(str);
return 0;
}
10、字符串转大写
编写函数,将字符串中的所有字母转换为大写。
在主函数中定义字符数组,输出字符串,调用函数转大写,在主函数中输出。
字符串长度不超过200. 注意,必须用字符数组实现,不能使用字符串处理库函数,也不能使用string类。
#include <iostream>
using namespace std;
char* upCase(char* arr)
{
int count = 0;
while (arr[count] != '\0')
count++;
for (int i = 0; i < count; ++i)
{
if ((arr[i] >= 97) && (arr[i] <= 122))
arr[i] = arr[i] - 32;
}
return arr;
}
int main()
{
char str[200] = { 0 };
cin.getline(str, 199);
cout << upCase(str) << endl;
return 0;
}
11、字符串复制函数
编写函数,将字符串s1复制到字符串s2中,函数格式为:
void mystrcpy(char s1[],char s2[]);
编写主函数,定义字符数组s1[100],s2[100], 输入字符串s1,调用函数将s1的内容复制到s2中,在主函数中输出s2的内容。
要求必须用字符数组实现,不能使用系统的库函数,不能使用string类型。
#include <iostream>
using namespace std;
void mystrcpy(char s1[], char s2[])
{
int count = 0;
while (s1[count] != '\0')
count++;
for (int i = 0; i < count; ++i)
s2[i] = s1[i];
s2[count] = '\0';
cout << s2 << endl;
}
int main()
{
char s1[100] = { 0 }, s2[100] = { 0 };
cin.getline(s1, 99);
mystrcpy(s1, s2);
return 0;
}
12、字符串比较函数
编写函数,按字母表顺序比较字符串s1,s2,区分大小写,若s1>s2返回1,若s1<s2返回-1,若s1等于s2返回0。
在主函数中定义字符数组,输入字符串,调用函数进行比较,在主函数中输出结果。
字符串的比较就是比较它们在字母表中的顺序,如a在b前,就是a<b)。
实际上就是比较它们的ASCII 码。
注意,必须用字符数组实现,不能使用字符串处理库函数,也不能使用string类。
字符串的长度不超过200.
#include <iostream>
#include <cassert>
using namespace std;
int CompareElements(char* s1, char* s2)
{
assert(NULL != s1&& NULL != s2); //断言
while ((*s1) && (*s2 == *s1))
{
*s1++;
*s2++;
}
if (*(unsigned char*)s1 > *(unsigned char *)s2)
return 1;
else if (*(unsigned char*)s1 < *(unsigned char*)s2)
return -1;
else
return 0;
}
int main()
{
char s1[200], s2[200];
cin >> s1 >> s2;
cout << CompareElements(s1, s2);
return 0;
}
第六部分:
1、递归计算n!
编写递归函数,计算n!。
在主函数中输入n,调用函数计算n!,在主函数中输出n!。
【注意】应用递归函数实现,否则没有意义。
#include <iostream>
using namespace std;
int Recursion(int n)
{
if (n == 1 || n == 0)
return 1;
else
return Recursion(n - 1) * n;
}
int main()
{
int a;
cin >> a;
cout << Recursion(a);
return 0;
}
2、递归计算1+2+3+…+n
编写递归函数,计算1+2+3+…+n。
在主函数中输入n,调用函数计算1到n的和,在主函数中输出和。
【注意】应用递归函数实现,否则没有意义。
输入0时,和为0.
#include <iostream>
using namespace std;
int Recursion(int n)
{
if (n == 0)
return 0;
else
return Recursion(n - 1) + n;
}
int main()
{
int a;
cin >> a;
cout << Recursion(a);
return 0;
}
3、递归求数组元素的最大值
编写递归函数,求数组元素的最大值,函数的输入参数为数组和元素个数,返回最大值。
在主函数中输入元素个数和数组元素,调用函数求最大值,在主函数中输出结果。
设数组类型为整型,元素不超过100个。
【注意】使用递归,否则没有意义。
#include <iostream>
using namespace std;
int iMax(int* arr, int n)
{
if (n < 1)
return arr[0];
else
{
int tmp;
tmp = iMax(arr, n - 1);
return (tmp > arr[n - 1] ? tmp : arr[n - 1]);
}
}
int main()
{
int a[100];
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
cout << iMax(a, n);。