某农业大学c/c++第二次实验

文章包含5个C++编程题目,涉及循环结构、算术运算、图形生成和数论概念。第一题要求找到1000以内的完数及其因子,第二题是一个简单的计算器程序,第三题是打印数字菱形图案,第四题寻找指定范围内的水仙花数,第五题找出满足勾股定理的整数组合。每个题目都有输入输出示例和代码实现。
摘要由CSDN通过智能技术生成
1.完数(循环)

【问题描述】一个数如果恰好等于它的因子之和,这个数就成为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序打印出1000之内(包括1000)所有的完数,并按如下格式输出其所有因子: 

6 its factors are 1,2,3.

【输入形式】无输入

【输出形式】输出1000以内所有的完数及其因子,每行输出一个完数及其因子。 

6 its factors are 1,2,3.

【提示】完数不止一个哦!而且最后一个数后面的结束标点符号是英文状态的句号。

#include<bits/stdc++.h>
using namespace std;

int main()
{
	for(int i=2;i<=1000;i++)
	{
		int sum=0;
		for(int j=1;j<=i-1;j++)
		{
			if(i%j==0)
				sum+=j;
		}
		if(i==sum)
		{
			printf("%d its factors are ",i);
			int num=0;
			for(int k=1;k<=i-1;k++)
			{
				if(i%k==0)
				{
					num++;
					if(num==1) 
						printf("%d",k);
					else
						printf(",%d",k);
				}
			}
			printf(".\n");
		}
	} 
}

2.简单计算器(while循环-switch语句)

【问题描述】编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。当键入的两个操作数为0时,结束运算。

【输入形式】两个操作数和一个运算符(运算符只包括五个:+-*/%)。当键入的两个操作数为0时,结束运算。若出现其他非法运算符号,输出Error。若运算符为‘/’,除数为0时,输出Error。 

【输出形式】每输入一组数据,则显示一个计算结果并换行等待键入下一组测试数据。

【样例输入】

3 5 *

3 5 -

12 12 #

12 12 *

5 0 /

0 0 +

【样例输出】

15

-2

Error

144

Error

【提示】最外层用while(1)的循环,内层用switch(ch)判断运算符号来进行计算。

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a,b;
	char x;
	cin >> a>>b;
	cin >> x;
	while(a!=0 || b!=0)
	{
		switch(x)
		{
			case '+':
				cout << a+b<<endl;
				break;
			case '-':
				cout << a-b<<endl;
				break;
			case '*':
				cout << a*b<<endl;
				break;
			case '/':
				if(b==0)
					cout << "Error"<<endl;
				else
					cout << a/b<<endl;
				break;
			case '%':
				cout << a%b <<endl;
				break;
			default:
				cout << "Error"<<endl;
				break;
		}
		cin >> a >> b;
		cin >> x;
	}
}

3.数字菱形图案(双重循环)

【问题描述】编程打印用数字构成的菱形图案,菱形上半部分的行数n( 1<n<10 )从键盘输入,总行数为2n-1。图案的样式按下面的样例。

【输入形式】从键盘输入包括中间一行在内的菱形上半部分的行数n ( 1<n<10 )。

【输出形式】输出用数字构成的菱形图案,样式按下面的样例,其中各数字间用1个空格间隔,最中间最长的一行的起始数字1位于第1列。

【样例输入】4

【样例输出】

      1
    1 2 1
  1 2 3 2 1
1 2 3 4 3 2 1
  1 2 3 2 1
    1 2 1
      1

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin >> n;
	//图案的前n行
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n-i-1;j++)
			cout << " ";
		for(int j=1;j<=i+1;j++)
			cout << j<< " ";
		for(int j=i;j>=1;j--)
			cout << j<< " ";
		for(int j=0;j<n-i-1;j++)
			cout << " ";
		cout << endl;
	}
	
	//图案的后n-1行
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<=i;j++)
			cout << " ";
		for(int j=1;j<=n-i;j++)
			cout << j<<" ";
		for(int j=n-i-1;j>=1;j--)
			cout << j << " ";
		for(int j=1;j<=i;j++)
			cout << " ";
		cout << endl;
	}
}

4.水仙花数

【问题描述】输入两个正整数m和n(m<n<1000),输出m到n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。例如,153的各位数字的立方和是13+53+33 =153。

【输入形式】从键盘输入两个正整数m和n。

【输入输出样例1】(下划线部分表示输入)

Input m: 100

Input n: 400

153

370

371

【样例说明】输入提示符后要加一个空格。其中冒号:后要加一个且只能一个空格。

每行输出一个水仙花数。英文字母区分大小写。必须严格按样例输入输出。

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int m,n;
	cout << "Input m: ";
	cin >> m ;
	cout << "Input n: ";
	cin >> n ;
	
	int a,b,c;
	for(int i=m;i<=n;i++)
	{
		a=i/100;//个位 
		b=(i/10)%10;//十位
		c=i%10;
		if(a*a*a+b*b*b+c*c*c==i)
		{
			cout << i<<endl;
		} 
	}
	return 0;
}

5.满足条件的整数(循环和函数)

【问题描述】假设a、b、c均为整数,且满足a,b,c 大于1,并且小于等于100,找出所有符合条件:“a的平方 + b的平方 = c的平方”的整数组。 

【要求】

1、编写函数void Fun(int a, int b)寻找符合条件的三个数,其中ab分别表示数据起止范围1~100。 

2、编写函数void Print(int a, int b ,int c)按照规定的输出格式打印等式,由fun函数调用print函数执行输出功能。

3、主函数不允许出现循环语句,所有功能均在子函数中实现。

【输入形式】无输入
【输出形式】

按a从小到大的顺序输出所有满足条件的整数组(若a相同,则按b从小到大的顺序输出),每行一组,每一组数据的输出样式为: 

3*3 + 4*4 = 5*5  

注意: 

1、3*3 + 4*4 = 5*5 和 4*4 + 3*3 = 5*5虽然是同一组数据,后者不需要输出; 

2、加号和等号左右各有一个空格 

3、9*9 + 12*12 = 15*15 (在前) 

  9*9 + 40*40 = 41*41 (在后)

【输出】

3*3 + 4*4 = 5*5

5*5 + 12*12 = 13*13

6*6 + 8*8 = 10*10

7*7 + 24*24 = 25*25

8*8 + 15*15 = 17*17

9*9 + 12*12 = 15*15

9*9 + 40*40 = 41*41

10*10 + 24*24 = 26*26

11*11 + 60*60 = 61*61

12*12 + 16*16 = 20*20

12*12 + 35*35 = 37*37

13*13 + 84*84 = 85*85

14*14 + 48*48 = 50*50

15*15 + 20*20 = 25*25

15*15 + 36*36 = 39*39

16*16 + 30*30 = 34*34

16*16 + 63*63 = 65*65

18*18 + 24*24 = 30*30

18*18 + 80*80 = 82*82

20*20 + 21*21 = 29*29

20*20 + 48*48 = 52*52

21*21 + 28*28 = 35*35

21*21 + 72*72 = 75*75

24*24 + 32*32 = 40*40

24*24 + 45*45 = 51*51

24*24 + 70*70 = 74*74

25*25 + 60*60 = 65*65

27*27 + 36*36 = 45*45

28*28 + 45*45 = 53*53

28*28 + 96*96 = 100*100

30*30 + 40*40 = 50*50

30*30 + 72*72 = 78*78

32*32 + 60*60 = 68*68

33*33 + 44*44 = 55*55

33*33 + 56*56 = 65*65

35*35 + 84*84 = 91*91

36*36 + 48*48 = 60*60

36*36 + 77*77 = 85*85

39*39 + 52*52 = 65*65

39*39 + 80*80 = 89*89

40*40 + 42*42 = 58*58

40*40 + 75*75 = 85*85

42*42 + 56*56 = 70*70

45*45 + 60*60 = 75*75

48*48 + 55*55 = 73*73

48*48 + 64*64 = 80*80

51*51 + 68*68 = 85*85

54*54 + 72*72 = 90*90

57*57 + 76*76 = 95*95

60*60 + 63*63 = 87*87

60*60 + 80*80 = 100*100

65*65 + 72*72 = 97*97

【提示】主函数就仅仅一条调用Fun函数的语句;Fun函数中设计三重循环,判断a*a+b*b==c*c时,且a<b时,调用Print函数执行输出,a<b可以在for里判断,也可以在输出前判断。

#include<bits/stdc++.h>
using namespace std;

void Print(int a,int b,int c)
{
	cout << a <<"*"<<a<<" + "<<b<<"*"<<b<<" = "<< c << "*" <<c<<endl;
}

void Fun(int a,int b)
{
	for(int i=a;i<=b;i++)
	{
		for(int j=i;j<=b;j++)
		{
			for(int k=j;k<=b;k++)
			{
				if(i*i+j*j==k*k)
				{
					Print(i,j,k);
				}
			}
		}
	}
}

int main()
{
	Fun(1,100);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值