2023.3.10上机练习

1.温度转换
问题描述:
已知华氏温度到摄氏温度的转换公式为:摄氏温度= (华氏温度- 32)×5/9,写程序将给定的华氏温度转换为摄氏温度输出
输入说明:
只有一个整数,表示输入的华氏温度
输出说明:
输出一个表示摄氏温度的实数,小数点后保留2位有效数字,多余部分四舍五入
输入样例:
50
输出样例:
10.00
提示:
用scanf输入,用printf输出,保留2位小数的格式控制字符为%.2f

#include<iostream>
using namespace std;
int main()
{
	int d;
	cin >> d;
	double h = double(d-32)*5/9;
	printf("%.2f", h);
	return 0;
}

在这里插入图片描述

2.整数简单运算
问题描述:
编写程序,计算用户输入的两个整数的和、差、乘积(*)和商(/)。
输入格式:
输入两个整数,整数之间用空格分隔。
输出格式:
输出四个整数结果,分别表示和、差、积和商,每输出一个结果换行。
输入样例:
3 4
输出样例:
7
-1
12
0

#include<iostream>
using namespace std;
int main()
{
	int a, b;
	cin >> a >> b;
	cout << a + b << endl;
	cout << a - b << endl;
	cout << a * b << endl;
	cout << a / b << endl;
	return 0;
}

在这里插入图片描述

3.A+B+C
问题描述:
通过键盘输入三个整数a,b,c,求3个整数之和。
输入说明:
三整形数据通过键盘输入,输入的数据介于-100000和100000之间,整数之间以空格、跳格或换行分隔。
输出说明:
输出3个数的和。
输入样例:
-6 0 39
输出样例:
33

#include<iostream>
using namespace std;
int main()
{
	int a, b, c;
	cin >> a >> b >> c;
	cout << a + b + c << endl;
	return 0;
}

在这里插入图片描述

4.字符输入输出
问题描述:
通过键盘输入5个大写字母,输出其对应的小写字母,并在末尾加上“!”。
输入说明:
5个大写字母通过键盘输入,字母之间以竖线“|”分隔。
输出说明:
输出5个大写字母对应的小写字母,之间无分隔,并在末尾加上‘!’。
输入样例:
H|E|L|L|O
输出样例:
hello!

#include<iostream>
using namespace std;
int main()
{
	char s[10] = { 0 }, b[5] = { 0 };
	gets_s(s);
	int k = 0;
	for (int i = 0; i < sizeof(s); i++)
	{
		if (s[i] != '|')
			b[k++] = s[i]+32;
	}
	for (int i = 0; i < 5; i++)
		cout << b[i];
	cout << "!";
	return 0;
}

在这里插入图片描述

5.数字字符
问题描述:
通过键盘输入1个整数a(0<=a<=4),1个数字字符b(’0’<=b<=’5’),求a+b。
输入说明:
整形数据、数字字符通过键盘输入,输入的整形数据介于0和4之间,输入的数字字符介于‘0’和‘5’之间,二个输入数之间用“,”分隔。
输出说明:
分别以整数形式及字符形式输出a+b,输出的二个数之间用“,”分隔。
输入样例:
3,5
输出样例:
56,8

#include<iostream>
using namespace std;
int main()
{
	int a;
	char b;
	cin >> a >> b;
	cout << a + b << "," << a + (b - '0');
	return 0;
}

在这里插入图片描述

6.实数运算
问题描述:
通过键盘输入长方体的长、宽、高,求长方体的体积V(单精度)。
输入说明:
十进制形式输入长、宽、高,输入数据间用空格分隔。
输出说明:
单精度形式输出长方体体积V,保留小数点后3位,左对齐。
输入样例:
15 8.12 6.66
输出样例:
811.188

#include<iostream>
using namespace std;
int main()
{
	float chang, kuan, gao, V;
	cin >> chang >> kuan >> gao;
	V = chang * kuan * gao;
	printf("%.3f", V);
	return 0;
}

在这里插入图片描述

7.四则运算
问题描述:
输入两个整数和一个四则运算符,根据运算符计算并输出其运算结果(和、差、积、商、余之一)。注意做整除及求余运算时,除数不能为零。
输入说明:
使用scanf()函数输入两个整数和一个运算符,格式见输入样例。
输出说明:
输出使用printf()函数,格式见输出样例。
输入样例:
5%2
输出样例:
5%2=1

#include<iostream>
using namespace std;
int main()
{
	int a, b;
	char c;
	cin >> a >> c >> b;
	if (c == '+')
		cout << a + b;
	else if (c == '-')
		cout << a - b;
	else if (c == '*')
		cout << a * b;
	else
		cout << a % b;
	return 0;
}

在这里插入图片描述

8.数位输出
问题描述:
输入一个5位整数,求出其各数位数值,并按照从高位到低位的顺序输出,如:输入12345,输出为1 2 3 4 5。
输入说明:
输入一个五位正整数。
输出说明:
按数位从高到低依次输出,各数位之间以一个空格相分隔。
输入样例:
96237
输出样例:
9 6 2 3 7

#include<iostream>
using namespace std;
int main()
{
	int a;
	int b[5] = { 0 };
	int i = 0;
	cin >> a;
	while (a)
	{
		b[i++] = a % 10;
		a = a / 10;
	}
	for (int j = 4; j >= 0; j--)
		cout << b[j] << " ";
	return 0;
}

在这里插入图片描述

9.电梯电价——1
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1:
10
结尾无空行

输出样例1:
cost = 5.30
结尾无空行

输入样例2:
100
输出样例2:
cost = 55.50

#include<iostream>
using namespace std;
int main()
{
	int a;
	float cost;
	cin >> a;
	if (a < 0)
	{
		cout << "Invalid Value!";
		return 0;
	}
	if (a <= 50)
		cost = a * 0.53;
	else
		cost = 50 * 0.53 + (a - 50) * 0.58;
	printf("cost=");
	printf("%.2f", cost);
	return 0;
}

在这里插入图片描述

10.计算某月天数
问题描述:

每年的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数

输入说明:

输入由两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔

输出说明:

根据年份和月份计算该月天数并输出

输入样例

输入样例1

2000 3

输入样例2

2001 2

输出样例

输出样例1

31

输出样例2

28

#include<iostream>
using namespace std;
int main()
{
	int year, month;
	cin >> year >> month;
	if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) 
		cout << 31;
	else if (month == 4 || month == 6 || month == 9 || month == 11) 
		cout << 30;
	else
	{
		if (year % 4 != 0) 
			cout << 28;
		else
		{
			if (year % 100 == 0 && year % 400 != 0) 
				cout << 28;
			else cout << 29;
		}
	}
	return 0;
}

ps:闰年判断
年份为4的倍数为闰年
如2004,2008
年份为100的倍数,那么该年必须是400的倍数才是闰年。
如2000年是闰年,1900年不是闰年。
在这里插入图片描述

11.计算整数各位之和
计算整数各位数字之和
问题描述:
假设n是一个由最多9位数字(d9, …, d1)组成的正整数。编写一个程序计算n的每一位数字之和
输入说明:
输入数据为一个正整数n

输出说明:
对整数n输出它的各位数字之和后换行

输入样例:
3704

输出样例:
14

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

在这里插入图片描述

12.完数
问题描述:
请写一个程序,给出指定整数范围[a,b]内的所有完数,0 < a < b < 10000。
一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。
例如6是完数,因为6=1+2+3

输入说明
输入为两个整数a和b,a和b之间用空格分隔

输出说明
输出[a,b]内的所有完数,每个数字占一行

输入样例
1 10

输出样例
6

#include<iostream>
using namespace std;
int main()
{
	int a, b;
	cin >> a >> b;
	for (int i = a; i <= b; i++)
	{
		int sum = 0;
		for (int j = 1; j < i; j++)
		{
			if (i % j == 0)
				sum += j;
		}
		if (sum == i)
			cout << i << " ";
	}
	return 0;
}

在这里插入图片描述

13.最大公约数
问题描述:
最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,
gcd(a,0)=a
gcd(a,1)=1
因此当两个数中有一个为0时,gcd是不为0的那个整数,
当两个整数互质时最大公约数为1。
输入两个整数a和b,求最大公约数

输入说明:
输入为两个非负整数a和b(0<=a,b<10000),a和b之间用空格分隔,

输出说明:
输出其最大公约数

输入样例:
样例1输入
2 4
样例2输入:
12 6
样例3输入:
3 5

输出样例:
样例1输出
2
样例2输出
6
样例3输出
1

#include<iostream>
using namespace std;
int main()
{
	int a, b;
	while (cin >> a >> b)
	{	
		int temp = min(a, b);
		int max = 0;
		for (int i = 1; i <= temp; i++)
		{
			if (a % i == 0 && b % i == 0 && i > max)
				max = i;
		}
		cout << max << endl;
	}
	return 0;
}

在这里插入图片描述

14.问题描述:
对于一个大于1的整数n,如果n是偶数,则n = n / 2。如果n是奇数,则n = 3 * n +1,反复操作后,n一定为1。
例如输入22的变化过程: 22 ->11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1,数据变化次数为15。
输入一个大于1的整数,求经过多少次变化可得到自然数1。

输入说明
输入为一个整数n,1<n<100000。

输出说明
输出变为1需要的次数

输入样例
样例1输入
22
样例2输入
33

输出样例
样例1输出
15
样例2输出
26

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int time = 0;
	while (n != 1)
	{
		if (n % 2 == 0)
			n = n / 2;
		else
			n = 3 * n + 1;
		time++;
	}
	cout << time << endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述

15.递归数列
问题描述
一个数列A定义如下:
A(1)=1,
A(2)=1/(1+A(1)),
A(3)=1/(1+A(2)),
……
A(n)=1/(1+A(n-1))。
定义一个函数function用来计算数列的第第n项的值,函数声明如下:
double function(int n);
输入说明
输入为1个正整数n,n<=10。
输出说明
函数输出数列A第n项的值,结果小数点后保留6位有效数字,多余部分四舍五入。
输入样例
5
输出样例
0.625000
提示
所有浮点数使用双精度浮点来运算!!!

#include<iostream>
using namespace std;
double fun(int n)
{
	if (n == 1)
		return 1;
	else
		return 1 / (1 + fun(n - 1));
}
int main()
{
	int n;
	cin >> n;
	printf("%.6f", fun(n));
	return 0;
}

在这里插入图片描述

16.歌德巴赫猜想
问题描述
有一种形式的Fibonacci数列定义如下:
F(0)=7,
F(1)=11,
F(n)=F(n-1)+F(n-2)(n>=2)。
按以下声明写一个函数fib
int fib(int n);
fib函数用来计算参数n对应的F(n),
fib(n)的返回值是F(n)。
输入说明
函数参数为一个整数n(0<=n<40)。
输出说明
函数返回值为整数,表示n对应的F(n)值。
输入样例
2
输出样例
18

#include<iostream>
using namespace std;
int fib(int n)
{
	if (n == 0)
		return 7;
	else if (n == 1)
		return 11;
	else
		return fib(n - 1) + fib(n - 2);
}
int main()
{
	int n;
	cin >> n;
	cout << fib(n);
	return 0;
}

在这里插入图片描述

17.矩阵
问题描述:
请写一个程序,对于一个m行m列(2<m<20)的方阵,求其每一行、每一列及主、辅对角线元素之和,然后按照从大到小的顺序依次输出这些值。
注:主对角线是方阵从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线。

输入说明
输入数据的第一行为一个正整数m;
接下来为m行、每行m个整数表示方阵的元素。

输出说明
从大到小排列的一行整数,每个整数后跟一个空格,最后换行。

输入样例
4
15 8 -2 6
31 24 18 71
-3 -9 27 13
17 21 38 69

输出样例
159 145 144 135 81 60 44 32 28 27

#include<iostream>
#include<algorithm>
using namespace std;
bool comp(int a, int b)
{
	if (a > b)
		return true;
	else
		return false;
}
int main()
{
	int arr[20][20];
	int n;
	int num[100] = { 0 };
	cin >> n;
	int k = 0;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> arr[i][j];
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			num[k] += arr[i][j];
		}
		k++;
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			num[k] += arr[j][i];
		}
		k++;
	}
	for (int i = 0; i < n; i++)
	{
		num[k] += arr[i][i];
	}
	k++;
	for (int i = 0; i < n; i++)
	{

		num[k] += arr[i][n - i - 1];
	}
	sort(num, num + k, comp);
	for (int i = 0; i < k; i++)
		cout << num[i] << ' ';
	return 0;
}

在这里插入图片描述

18.排序——2
问题描述:
给定N个不同的整数,要求对这N个整数按如下规则排序并输出。
规则一:所有的偶数排在奇数前面。
规则二:在规则一的前提下按照从大到小的顺序排序。

输入说明
数据由两行构成,第一行为整数n(n<=100),表示待排序整数的数量。第二行是n个整数,每个整数的取值区间都为[-32768~32767],整数之间以空格间隔。

输出说明
在一行输出排好序的整数,整数之间以空格间隔。

输入样例
5
1 2 3 4 5

输出样例
4 2 5 3 1

#include<iostream>
#include<algorithm>
using namespace std;
bool comp(int a, int b)
{
	if (a > b)
		return true;
	else
		return false;
}
int main()
{
	int n;
	cin >> n;
	int a[100],ji[100],ou[100];
	int j = 0, o = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		if (a[i] % 2 == 0)
			ou[o++] = a[i];
		else
			ji[j++] = a[i];
	}
	sort(ji, ji + j, comp);
	sort(ou, ou + o, comp);
	for (int i = 0; i < o; i++)
		cout << ou[i] << " ";
	for (int i = 0; i < j; i++)
		cout << ji[i] << " ";
	return 0;
}

在这里插入图片描述

19.整除判断1
问题描述
判断正整数a能否被b整数,如果不能整除,输出商和余数
输入说明
输入两个正整数a和b(0<a, b<=10000),a和b之间用空格分隔。
输出说明
如果a能被b整除,输出yes,否则在同一行输出a除以b的商和余数,商和余数之间用空格分隔
输入样例
17 7
输出样例
2 3

#include<iostream>
using namespace std;
int main()
{
	int a, b;
	cin >> a >> b;
	if (a % b == 0)
		cout << "yes";
	else
		cout << a / b << " " << a % b;
	return 0;
}

在这里插入图片描述

20.字符串压缩
问题描述
  有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
  例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。
请设计一个程序,将采用该压缩方法得到的字符串解压缩,还原出原字符串并输出。
输入说明
输入数据为一个字符串(长度不大于50,只包含字母和数字),表示压缩后的字符串
输出说明
在一行上输出解压缩后的英文字符串(长度不超过100),最后换行。
输入样例
a5b3aba13b4
输出样例
aaaaabbbabaaaaaaaaaaaaabbbb

#include<iostream>
#include <string.h>
using namespace std;

int main() {
	int i, k, num;
	char s[50], temp;
	gets_s(s);
	for (i = 0; i < strlen(s);) {
		printf("%c", s[i]);
		temp = s[i];
		i++;
		num = 0;
		while (s[i] >= '0' && s[i] <= '9') {
			num = num * 10 + (s[i] - '0');
			i++;
		}
		for (k = 0; k < num - 1; k++) {
			printf("%c", temp);
		}
	}
	return 0;
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值