C++入门——函数2

重生之你是C++大佬,当你打开这篇博客,竟然发现这点小题简直易如反掌,于是摩拳擦掌,写他个几千行代码。

1.找素数并排序

【问题描述】编写两个函数,将n个正整数中的素数按升序排序。函数功能分别是:判断一个数是否为素数,以及对数组进行排序。输入分2行:第一行为n的值,第二行为n个整数。要求输入输出均在主函数中完成。

【输入形式】输入分两行,第一行输入n的值,第二行输入n个数

【输出形式】排序后的结果,用空格隔开

【样例输入】

9

9 8 7 6 5 4 3 2 1

【样例输出】

2 3 5 7

【题目解析】

#include<iostream>
using namespace std;
int n, a[10001],t,b[10001],k;
void sushu()//判断素数
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 1; j <= a[i]; j++)
		{
			if (a[i] % j == 0)
				t++;
		}
		if (t == 2)
			b[++k] = a[i];
		t = 0;
	}
}
void paixu()//冒泡排序
{
	sushu();
	for (int i = 1; i <= k; i++)
	{
		for (int j = 1; j <= k - i; j++)
		{
			if (b[j] > b[j + 1])
				swap(b[j], b[j + 1]);
		}
	}
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	paixu();
	for (int i = 1; i <= k; i++)
		cout << b[i]<<" ";
	return 0;
}

2.分段函数

【问题描述】有一分段函数如下,编写函数进行计算,在主函数中输入x值,输出y值。

【样例输入1】-1.5

【样例输出1】0.00250501

【样例输入2】5.6

【样例输出2】31.8957

【样例输入3】12.5

【样例输出3】4.06202

#include<iostream>
#include<cmath>
using namespace std;
double x,y;
double qiuy()
{
	if (x < 0)
		y = sin(x) + 1;
	else if (x >= 10)
		y = sqrt(x + 4);
	else
		y = x * x + 3.0 / x;
	return y;
}
int main()
{
	cin >> x;
	cout << qiuy();
	return 0;
}

3.n以内的素数倒数之和

【问题描述】求数列

其中分母为n以内(包括n)的素数。要求使用函数,函数功能是:计算数列中一项的值,把k值提供给函数,函数返回k的倒数或0;n由键盘输入。主函数完成数据的输入、累加和输出。

【样例输入】50

【样例输出】1.66165

#include<iostream>
#include<cmath>
using namespace std;
double S;
int n, k,t;
double qiuk(int k)
{
	t = 0;
	for (int j = 1; j <= k; j++)
	{
		if (k % j == 0)
			t++;
	}
	if (t == 2)
		return 1.0 / k;
	else return 0;
}
int main()
{
	cin >> n;
	for (int k = 2; k <= n; k++)
	{
		S+=qiuk(k);
	}
	cout <<S;
	return 0;
}

4.十进制转八进制

【问题描述】编写程序完成进制转换,要求使用函数,函数功能是:十进制转换为八进制,输入输出均在主函数中完成。

【输入形式】十进制数

【输出形式】八进制数

【样例输入】125

【样例输出】175

【样例说明】十进制125转化为八进制结果为175

【题目解析】使用除8取余法。即用十进制数除以8,得到商和余数,记下余数,然后用商再次除以8,再次记下余数,如此反复,直到商为0为止。

#include<iostream>
#include<cmath>
using namespace std;
int n, k=1,t;
int eight()
{
	while (n > 0)
	{
		t+=(n % 8)* k;
		k *= 10;
		n /= 8;
	}
	return t;
}
int main()
{
	cin >> n;
	cout << eight();
	return 0;
}

5.求从右数第k位数字

【问题描述】编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。要求输入输出均在主函数中完成。

【输入形式】两个数,分别是num值和k值

【输出形式】一个数

【样例输入1】4647 3

【样例输出1】6

【样例输入2】23523 7

【样例输出2】0

【样例说明】4647从右边开始的第3位数字是6,而23523不足7位,输出0

#include<iostream>
using namespace std;
int n,k,t;
int Nok()
{
	while (n > 0)
	{
		t++;
		if (t == k) 
			return n % 10;
		n /= 10;
	}
	if (n == 0)
		return 0;
}
int main()
{
	cin >> n >> k;
	cout << Nok();
	return 0;
}

写在最后

C++入门系列就到这里,关于C++剩余的内容将在之后陆续揭晓,同时我也会更新一些关于前端的知识,敬请期待。代码无情,人间有情,欢迎大家点赞评论加收藏。内容如有问题还请大家在评论区指点一二。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值