课后作业题,期末会在其中出一道,大概率是数组
第一次作业
1.前驱,后继字符 (易)
【问题描述】
从键盘输入一个字符,求出它的前驱和后继字符(按照ASCII码值排序),并按照从小到大的顺序输出这三个字符和对应的ASCII值。
【输入形式】
从键盘输入一个字符。
【输出形式】
按两行输出:
第一行按照从小到大的顺序输出这三个字符,并以一个空格隔开;
第二行按照从小到大的顺序输出三个字符对应的ASCII值,并以一个空格隔开。
【样例输入】
b
【样例输出】
a b c
97 98 99
【样例说明】
输入字符b,b的前驱字符是a,后继字符是c,第一行按照从小到大的顺序输出a b c;第二行输出对应的ASCII值97 98 99。
【评分标准】
结果完全正确得10分,每个测试点2分。提交程序名为:character.cpp。
#include<iostream>
using namespace std;
int main()
{
char n1,n0,n2;
cin>>n1;
n2=n1+1;
n0=n1-1;
cout<<n0<<n1<<n2<<endl;
cout<<(int)n0<<(int)n1<<(int)n2<<endl;
return 0;
}
2、求三角形面积(易)
【问题描述】
若已知三角形三个边的长度分别为a,b,c(并假设三个边长度的单位一致,在本编程题中忽略其单位),则可以利用公式S=s(s-a)(s-b)(s-c)求得三角形的面积,其中:s=(a+b+c)/2。编程实现从控制台读入以整数表示的三个边的长度(假设输入的长度肯定可以形成三角形),然后利用上述公式计算面积并输出。
【输入形式】
从控制台输入三个整数表示三角形三个边的长度,以空格分隔三个整数。
【输出形式】
向控制台输出求得的三角形的面积
【样例输入】
4 4 6
【样例输出】
7.93725
【样例说明】
输入的三角形三个边的长度分别为4、4、6,利用上述计算公式可以求得三角形的面积为7.93725。
提示:可以使用求平方根的库函数,见教科书的附录B.4,使用前应包含头文件<cmath>。
【评分标准】
该题要求输出三角形的面积,共有5个测试点,提交程序文件名为area.cpp。
#include<iostream>
#include<cmath>
using namespace std;
double sqrt();
int main()
{
int a,b,c;
float s,S,S1;
cin>>a>>b>>c;
s=(a+b+c)/2;
S=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<S;
return 0;
}
3、求平均值(易)
【问题描述】
从键盘输入三个整数,分别存入x,y,z三个整型变量中,计算并输出三个数的和以及平均值。
【输入形式】
从键盘输入三个整数,整数之间以空格隔开。
【输出形式】
在屏幕上分两行显示结果:
第一行为三个数的和,整数形式输出;
第二行为三个数的平均值,浮点数(double类型)形式输出。
【样例输入】
3 2 3
【样例输出】
8
2.66667
【样例说明】
3、2、3的和为8,所以第一行输出8;
第二行输出3、2、3的平均值2.66667(double类型)。
【评分标准】
结果完全正确得10分,每个测试点2分。提交程序名为:mean.cpp。
答案略
第二次作业
1、用递归法将整数转换成字符串 (中)
【问题描述】用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“ 4 8 3”。n的位数不确定,可以是任意位数的整数。递归函数首部为:void convert(int n)。
【输入形式】根据系统提示,输入一个整数。
【输出形式】输出能够表示该数对应的字符串(每个字符用空格隔开)。
【样例输入】
34
【样例输出】
input an integer:
output:
3 4
【样例说明】根据系统提示,输入一个整数。输出能够表示该数对应的字符串(每个字符用空格隔开)。
【评分标准】结果完全正确得15分,每个测试点5分。提交程序名为:xt4-10.c或xt4-10.cpp
#include<iostream>
using namespace std;
void convert(int n)
{
if(n>9)
{
convert(n/10);
}
cout<<n%10;
cout<<" ";
}
int main()
{
int n;
cin>>n;
convert(n);
return 0;
}
2、验证哥德巴赫猜想(中)
【问题描述】写一个函数验证哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和,如6=3+3,8=3+5,10=3+7,...,在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha函数中再调用prime函数,prime函数的作用是判别一个数是否为素数。在godbah函数中输出以下形式的结果:
34=3+31
【输入形式】根据系统提示,输入一个不小于6的偶数。
【输出形式】输出能够表示该数的所有两个素数之和。
【样例输入】
88
【样例输出】
input n:
88=5+83
88=17+71
88=29+59
88=41+47
【样例说明】根据系统提示,输入一个不小于6的偶数。输出能够表示该数的所有两个素数之和。
【评分标准】 结果完全正确
#include<iostream>
using namespace std;
bool prime(int n)
{
int t=0;
for(int i=2;i<n;i++)
{
if(n%i==0)
t++;
}
if(t==0)
return true;
else
return false;
}
void gotbaha(int n)
{
for(int i1=2;i1<n;i1++)
{
for(int i2=2;i2<n;i2++)
if(i1+i2==n&&prime(i1)&&prime(i2)&&i2>=i1)
cout<<i1<<"+"<<i2<<"="<<n<<endl;
}
}
int main()
{
int n;
cin>>n;
gotbaha(n);
return 0;
}
注意i2>=i1否则会出现重复的情况
3、判断素数的函数(易)
【问题描述】写一个判别素数的函数(首部为: int prime(int n)),在主函数中输入一个整数,输出是否为素数的信息。
【输入形式】根据系统提示,输入一个整数。
【输出形式】输出该数是否为素数的信息。
【样例输入】
12345
【样例输出】
input an integer:
12345 is not a prime.
【样例说明】根据系统提示,输入一个整数。输出该数是否为素数的信息。
【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt4-3.c或xt4-3.cpp
答案在上一题里
第三次作业
1、 A字打头字符串输出(中)
【问题描述】输入n个字符串,把其中以字母A打头的字符串输出。
【输入形式】根据系统提示,输入字符串个数和相应字符串。
【输出形式】输出以字母A打头的字符串。
【样例输入】
3
Afjalfjljfdlf
faljlflljglag
djfldljfjldflj
【样例输出】
Please enter the number of strings:
please input string:
Afjalfjljfdlf
please input string:
please input string:
【样例说明】根据系统提示,输入字符串个数和相应字符串。输出以字母A打头的字符串。
【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt5-15.c或xt5-15.c
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
string s[n];
for(int i=0;i<n;i++)
{
cin>>s[i];
if(s[i][0]=='A')
cout<<s[i];
}
/*for(int j=0;j<n;j++)
{
if(s[j][0]=='A')
}*/
return 0;
}
2、加密编码译回原文(中)
【问题描述】有一行电文,已按下面规律译成密码:
A→Z a→z
B→Y b→y
C→X c→x
︰ ︰
即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母······非字母字符不变。要求编程序将密码译回原文,并打印出密码和原文。
【输入形式】根据系统提示,输入加密字符串。
【输出形式】输出密码和原文。
【样例输入】
jallfjjldFDADF @#$%
【样例输出】
input cipher code:
cipher code:jallfjjldFDADF @#$%
original text:qzoouqqowUWZWU @#$%
【样例说明】根据系统提示,输入加密字符串。输出密码和原文。
【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt5-12.c或xt5-12.c
#include<iostream>
using namespace std;
int main()
{
char s[100];
char s2[100];
int i;
cout<<"input cipher code:"<<endl;
gets(s);
for(int j=0;j<100;j++)
{
s2[j]=s[j];
}
for (i = 0; s[i] ; i++)
if (s[i] >= 'a' && s[i] <= 'z')
s[i] = 27-(s[i]-96)+96;
else if (s[i] >= 'A' && s[i] <= 'Z')
s[i] = 27-(s[i]-64)+64;
cout<<"cipher code:"<<s2<<endl;;
cout<<"original text:"<<s;
return 0;
}
要注意 s[i] = 27-(s[i]-96)+96;
s[i] = 27-(s[i]-64)+64;
3、字符的个数
问题描述】有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
【输入形式】根据系统提示,输入3行字符串。
【输出形式】输出英文大写字母、小写字母、数字、空格以及其他字符的个数。
【样例输入】
hfslflafjei^%#123 #
yEDSuipspspf !~980 23
123456 YT $%^&yeuaof d
【样例输出】
please input line 1
please input line 2
please input line 3
upper case:5
lower case:27
digit :14
space :7
other :10
【样例说明】根据系统提示,输入3行字符串。输出英文大写字母、小写字母、数字、空格以及其他字符的个数。
【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:xt5-10.c或xt5-10.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char str[3][80];
int i, j;
int upper = 0, lower = 0, digit = 0, space = 0, other = 0;
//输入字符串
printf("请输入字符串:\n");
for (i = 0; i < 3; i++)
{
gets(str[i]);
}
//统计字符个数
for (i = 0; i < 3; i++)
{
for (j = 0; j < 80 && str[i][j] != '\0'; j++)
{
if (str[i][j] >= 'A' && str[i][j] <= 'Z')
{
upper++;
}
else if (str[i][j] >= 'a' && str[i][j] <= 'z')
{
lower++;
}
else if (str[i][j] >= '0' && str[i][j] <= '9')
{
digit++;
}
else if (str[i][j] == ' ')
{
space++;
}
else
{
other++;
}
}
}
//输出结果
printf("大写字母:%d\n", upper);
printf("小写字母:%d\n", lower);
printf("数字:%d\n", digit);
printf("空格:%d\n", space);
printf("其他字符:%d\n", other);
return 0;
}
4、找二维数组鞍点
【问题描述】编写程序,找出一个4x5二维数组的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)。
【输入形式】根据系统提示,输入一个4x5二维数组。
【输出形式】如果是鞍点输出这个点,如果不是鞍点输出“It does not exist!”。
【样例输入】
-3 4 15 2 1 2 3 22 43 8 9 17 26 -13 4 8 24 34 23 5
【样例输出】
Please enter a 4x5 two-dimensional array:
a[0][2]=15
【样例说明】根据系统提示,输入一个4x5二维数组。如果是鞍点输出这个点,如果不是鞍点输出“It does not exist!”。
【评分标准】 结果完全正确得20分,每个测试点10分。提交程序名为:xt5-7.c或xt5-7.c
#include<iostream>
using namespace std;
int main()
{
int arr[4][5];
int a,b,c,d;
int temp1,temp2;
for(int i1=0;i1<4;i1++)
{
for(int i2=0;i2<5;i2++)
cin>>arr[i1][i2];
}
for(int i1=0;i1<4;i1++)
{
for(int i2=0;i2<5;i2++)
{
if(i1==0&&i2==0)
temp1=arr[i1][i2];
else
{
if(arr[i1][i2]>temp1)
{
temp1=arr[i1][i2];
a=i1;b=i2;
}
}
}
for(int j1=0;j1<4;j1++)
{
if(j1==0)
temp2=arr[j1][b];
else
{
if(arr[j1][b]<temp2)
{
temp2=arr[j1][b];
c=j1;}
}
}
if(a==c)
cout<<"arr["<<a<<"]["<<b<<"]="<<arr[a][b];
}
return 0;
}
第四次作业
1、输出英文月份名(易)
【问题描述】编写一程序,输入月份号,输出该月的英文月名。例如,输入3,则输出March,要求用指针数组处理。
【输入形式】按照系统提示,输入月份。
【输出形式】输出月份的英文名称,如果输入错误,提示“It is wrong”。
【样例输入】
6
【样例输出】
input month:
It is June
【样例说明】按照系统提示,输入月份。输出月份的英文名称,如果输入错误,提示“It is wrong”。
【评分标准】共3个测试点,每个测试点分值相同。提交程序名为:xt6-18.c或xt6-18.c
略
2、求字符串的长度
【问题描述】写一函数:int length(char *p) ,求一字符串的长度。在main函数中输入字符串,并输出其长度。
【输入形式】按照系统提示,输入一个字符串。
【输出形式】输出字符串的长度。
【样例输入】
fhagohsoghos1234@@#$%
【样例输出】
input string:
The length of string is 21
【样例说明】按照系统提示,输入一个字符串。输出字符串的长度。
【评分标准】共3个测试点,每个测试点分值相同。提交程序名为:xt6-6.c或xt6-6.c
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a1;
cout<<"input string:"<<endl;
getline(cin,a1);//可以读空格
cout<<"The length of string is "<<a1.length();
//cout<<t-1;
return 0;
}
getline(cin,a1)可以读取空格
3、 按要求移动数字(难)
【问题描述】有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,如下图所示。写一个函数实现以上功能,在主函数中输入n个整数,并输出调整后的n个数。(提示:可以用递归函数实现)
【输入形式】根据系统提示,输入整数个数以及对应的数值,再输入该数列需要向后移的位数。
【输出形式】输出调整后的数列。
【样例输入】
6
1 2 3 4 5 6
2
【样例输出】
how many numbers?
input 6 numbers:
how many places do you want move?
Now,they are:
5 6 1 2 3 4
【样例说明】根据系统提示,输入整数个数以及对应的数值,再输入该数列需要向后移的位数。输出调整后的数列。
【评分标准】 结果完全正确得15分,每个测试点5分。提交程序名为:XT6-4.c或XT6-4.c
#include <stdio.h>
void move(int array[20],int n,int m){ //循环后移一次的函数
int *p,array_end;
array_end=*(array+n-1);
for(p=array+n-1;p>array;p--)
*p=*(p-1);
*array=array_end;
m--;
if(m>0)
move(array,n,m); //递归调用,当循环次数m减至为0时,停止调用
}
int main(){
int number[20],n,m,i;
printf("how many numbers?");
scanf("%d",&n);
printf("\n");
printf("input %d numbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&number[i]);
printf("how many places do you want move?");
scanf("%d",&m);
printf("\n");
move(number,n,m);
printf("Now,they are:\n");
for(i=0;i<n;i++)
printf("%d ",number[i]);
return 0;
}