【期末抱佛脚】C++程序设计基础 题库整理(补充)

 课后作业题,期末会在其中出一道,大概率是数组

第一次作业

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值