沈阳航空航天大学习题的整理,仅供参考。
1.完数判断
一个正整数如果恰好等于它的除自身外的因数之和,这个数称为“完数”。
例如,6的因数有1、2、3,且6=1+2+3,因此6是“完数”。
编写判别完数的函数wanshu(int x):功能判断x是否为完数,如果是,则返回1,不是,则返回0。
编写main()中让x从1循环至1000,并调wanshu函数,如果返回值为1,则输出该数。
#include <stdio.h>
int wanshu(int x)
{
int i,r=0;
for(i=1;i<x;i++)
{
if (x%i==0)//判断x能整除i? 即判断i是否是x的因数
r=r+i;//将因数累加进r中
}
if (r==x)//判断因数和是否等于x,是则返回1,不是,返回0
return 1;
else
return 0;
}
int main()
{
int i;
for (i=1;i<=1000;i++)
{
if (wanshu(i)==1) //调用wanshu函数,根据函数值,判断i是否为完数,
printf("%d是完数\n",i);
}
return 0;
}
2.编写函数求分段函数
【问题描述】有分段函数:当x<-5时,y=|x|+10; 当-5≤x≤5时,y=x/2;当x>5时,y=2x-10.
编一函数 void fun5(double x) ; 求上述分段函数值,并在主函数中调用。结果保留4位小数。
【输入形式】x值
【输出形式】y值
【样例输入】-10.2
【样例输出】20.2000
#include <stdio.h>
#include<iostream>
using namespace std;
void fun5(double x);
int main()
{
double x;
scanf("%lf",&x);
fun5(x);
return 0;
}
void fun5(double x){
double y;
if(x<-5)
{
y=-x+10;
printf("%.4f",y);
}
if(-5<=x&&x<=5)
{
y=x/2;
printf("%.4f",y);
}
if(x>5)
{
y=2*x-10;
printf("%.4f",y);
}
}
3.奇数求和
【问题描述】从键盘输入两个正整数 m 和 n(m<n),计算 m 到 n(包括 m 和 n)之间的所有奇数的和,输出求和结果。
【输入形式】输入两个正整数 m 和 n。
【输出形式】输出奇数求和结果。
【样例输入】3 12
【样例输出】35(求和过程:3+5+7+9+11=35)
【样例输入】6 15
【样例输出】55
#include <stdio.h>
#include <math.h>
#include<iostream>
using namespace std;
//对大于等于small小于等于big之间所有奇数求和,返回求和结果。
int fun1(int small, int big);
int main()
{
int m, n;
scanf("%d%d", &m, &n);
m = fun1(m, n);
printf("%d", m);
return 0;
}
int fun1(int small, int big)
{
int m=0;
for(int i=small;i<=big;i++)
if(i%2!=0){
m+=i;
}
return m;
}
4.编写函数求小球经过多少米
【问题描述】一个球从m米高度自由落下,每次落地后又反跳回原高度的一半,再落下,再反弹。编写函数fun3, 求它在第 n 次落地时共经过多少米。结果保留4位小数。
【输入形式】<m高度> <n次>
【输出形式】<距离>
【样例输入】10 1
【样例输出】10.0000
【样例输入】10 2
【样例输出】20.0000
【样例输入】100 10
【样例输出】299.6094
#include<stdio.h>
#include<iostream>
using namespace std;
double fun3(double x,int y);
int main()
{
double m;
int n;
scanf("%lf",&m);
scanf("%d",&n);
printf("%.4f",fun3(m, n));
return 0;
}
double fun3(double x,int y)
{
double s=x;
for(int i=2;i<=y;i++){
x/=2;
s+=x*2;
}
return s;
}
5.验证哥德巴赫猜想
【问题描述】验证哥德巴赫猜想:任一大于2的偶数,可以用两个素数之和表示。
【输入形式】一个大于2的偶数
【输出形式】每行一对素数,小的素数在前,以一个空格隔开,多组用多行表示,不考虑两个素数相等的情况。
【样例输入】10
【样例输出】3 7
【样例输入】20
【样例输出】
3 17
7 13
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//素数判断函数,是素数返回非0值,不是素数返回0。
int isPrime(int n);
int main()
{
int m, i, n;
scanf("%d", &n);
for(i=2; i<n/2; i++)
{
//调用素数判断函数输出满足条件的结果进行验证
m = n - i;
if (isPrime(m) && isPrime(i))
{
printf("%d %d\n", i, m);
}
}
return 0;
}
int isPrime(int n)
{
int flag=1;//假设是素数
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)//不是素数
{
flag=0;
break;
}
}
return flag;
}
6.编写函数求某正整数m中数字n的个数
【问题描述】在键盘上输入一个正整数m,编一个函数计算该数字中数字n的个数。
【输入形式】<m> <n>
【输出形式】<n的个数>
【样例输入】12222 2
【样例输出】4
【样例输入】12222 -2
【样例输出】0
#include<stdio.h>
#include<iostream>
using namespace std;
int fun1(int x, int y);
int main()
{
int m, n;
scanf("%d%d", &m, &n);
printf("%d",fun1(m,n));
return 0;
}
int fun1(int x, int y) {
int count = 0;
while (x != 0) {
if (x % 10 == y)
count++;
x /= 10;
}
return count;
}
7.求3至N之间的所有素数
【问题描述】输入一个大于 3 的正整数 n,打印 3 到该数之间的所有素数,用函数实现判断一个数是否是素数。
【输入形式】输入一个正整数。
【输出形式】输出所有素数。
【样例输入】50
【样例输出】3 5 7 11 13 17 19 23 29 31 37 41 43 47
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
using namespace std;
int func(int m);
int main()
{
int i,n;
scanf("%d", &n);
for(i=3;i<n;i++)
{
if(func(i) == 1)
printf("%d ",i);
}
if(func(n) == 1)
printf("%d",n);
return 0;
}
int func(int m) {
int i;
if (m <= 1)
return 0;
else if (m == 2)
return 1;
else if (m % 2 == 0)
return 0;
else {
for (i = 3; i * i <= m; i += 2) {
if (m % i == 0)
return 0;
}
}
return 1;
}
8.谁考了第 k 名
【问题描述】在某一次考试中,假设每个学生的成绩都不相同,从键盘输入 n 个学生的成绩(1<n<100),输入 k (k<n),输出成绩排名第 k 名的学生成绩。
【输入形式】输入正整数 n 和 k,再输入 n 个学生的成绩。
【输出形式】输出成绩排名第 k 名的学生成绩。
【样例输入】
5 2
31 97 60 88 75
【样例输出】88
【样例说明】备注:输入时行与行之间无空行。
#include <stdio.h>
#include <math.h>
#include<iostream>
using namespace std;
//输入n个有效的学生成绩
//找到第k名的成绩并返回
int fun3(int n, int k);
int main()
{
int n, k;
scanf("%d%d", &n, &k);
n = fun3(n, k);
printf("%d", n);
return 0;
}
int fun3(int n, int k)
{
int i,arr[100];
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(int j=0;j<n-1;j++)
{
for(i=0;i<n-j-1;i++)
{
if(arr[i]<arr[i+1])
{
int t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
}
}
}
return arr[k-1];
}
9.用递归求两个数的最大公约数
【问题描述】用递归方法求两个数的最大公约数。
【输入形式】输入两个正整数,用空格隔开
【输出形式】两个正整数的最大公约数
【样例输入】4 2
【样例输出】2
【评分标准】必须用递归完成
#include<stdio.h>
#include<iostream>
using namespace std;
//添加代码,递归函数求两个数最大公约数
int Gcd(int m,int n)
{
int i=0;
while(i=m%n)
{
return Gcd(n,i);
}
return n;
}
int main()
{
int m,n,gcd;
scanf("%d%d",&m,&n);
//调用求最大公约数函数
gcd = Gcd(m, n);
printf("%d",gcd);
}
10.求整数中的特定位数字
【问题描述】编写函数int digit(long n,int k),函数返回n中从右边开始的第k为数字的值。
【输入形式】输入两个正整数,正整数之间用单个空格隔开
【输出形式】输出一个正整数
【样例输入】231456 3
【样例输出】4
【样例输入】1456 5
【样例输出】0
#include <stdio.h>
#include<iostream>
using namespace std;
//编写函数体
int digit(long n,int k)
{
long a[100];
for(int i=0;i<100;i++)
{
a[i]=n%10;
n/=10;
}
return a[k-1];
}
int main()
{
long n;
int k;
scanf("%ld%d",&n,&k);
//调用函数并输出结果
int a;
a=digit(n,k);
printf("%d",a);
return 0;
}
11.求最大公约数
编写求最大公约数函数gcd:功能是求两数的最大公约数,并返回该数。
main函数中调用该函数,并输出最大公约数。
#include<stdio.h>
int gcd(int m,int n)//求m,n的公约数的函数
{
int r;
r=m;// r 是公约数,初值为 m
while((m%r!=0)||(n%r!=0))//当 r 不是公约数时,循环直至找到公约数
r--;// r 减小1
return r;
}
int main()
{
int m,n;
printf("请输入两个数");
scanf("%d%d",&m,&n);
printf("最大公约数%d\n",gcd(m,n));//调用gcd函数
return 0;
}
12.求三个数的最大公约数
【问题描述】写一函数fun,求三个数的最大公约数。如果输入的数据非法输出-1。
【输入形式】<a> <b> <c>
【输出形式】<最大公约数>
【样例输入】 8 16 32
【样例输出】 8
【样例输入】 -8 16 32
【样例输出】 -1
#include<stdio.h>
#include<iostream>
using namespace std;
int fun2(int x, int y, int z);
int main ( )
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d", fun2(a,b,c));
return 0;
}
int fun2(int x,int y,int z)
{
int i,t,num;
if(x>y)
{t=x;x=y;y=t;}
if(x>z)
{t=x;x=z;z=t;}
if(y>z)
{t=y;y=z;z=t;}
if((x>0&&y>0&&z>0)||(x<0&&y<0&&z<0)){
for(i=1;i<=x;i++){
if(x%i==0&&y%i==0&&z%i==0){
num=i;
}
}
return num;
}
else
return -1;
}
13.判断点的位置
【问题描述】输入一个二维坐标,判断该坐标与圆x2+y2=4的关系。用函数完成坐标与圆之间的关系。坐标的输入及关系结果的输出在主函数完成。
【输入形式】输入二维坐标值,double类型
【输出形式】在圆内输出in,在圆外输出out,在圆上输出on
【样例输入】2 2(数据之间用单个空格隔开)
【样例输出】out
【样例输入】1.25 1.25
【样例输出】in
#include <stdio.h>
#include<iostream>
using namespace std;
//编写判断函数
int judge(double a,double b){
if((a*a+b*b)>4)
return 1;
if((a*a+b*b)==4)
return 2;
if((a*a+b*b)<4)
return 3;
}
int main()
{
double x,y;
scanf("%lf%lf",&x,&y);
//函数调用及最终结果输出
if(judge(x,y)==1)
printf("out");
if(judge(x,y)==2)
printf("on");
if(judge(x,y)==3)
printf("in");
return 0;
}