题⽬1

编写函数求次⽅。其中函数头为 double power(double x, int n) 。在主函数中输⼊ x 、n 并调⽤该函数求x*n。

#include <iostream>
using namespace std;

// 计算x的n次方的函数
double power(double x, int n) {
    double result = 1.0;
    
    // 处理n为正数的情况
    for (int i = 0; i < n; i++) {
        result *= x;
    }
    
    // 处理n为负数的情况(x的负n次方等于1除以x的正n次方)
    for (int i = 0; i < -n; i++) {
        result /= x;
    }
    
    return result;
}

int main() {
    double x;
    int n;
    
    // 输入x和n
    cout << "请输入底数 x: ";
    cin >> x;
    cout << "请输入指数 n: ";
    cin >> n;
    
    // 调用power函数并输出结果
    double result = power(x, n);
    cout << x << " 的 " << n << " 次方是: " << result << endl;
    
    return 0;
}

输⼊⽰例(输⼊两个数,第⼀个为整数 n ,第⼆个为浮点数 x )

3 5

输出⽰例(输出 x 的 n 次⽅,保留两位⼩数):

125.00

题⽬2:

递归函数的⽅法,求解题⽬1.
【提⽰:先列出具体的数学公式,找到对应的 base case , general case , 再套⽤模板。】

#include <stdio.h>
double power(double x, int n)//定义power函数
 {
   //base case
   if(n==0)
   {
    return 1.00;
   }
   //general case
   else if(n>0)//正指数情况
   {
    return x*power(x,n-1);//递归调用,将问题规模减小
   }
   else//负指数情况
   {
    return 1.00/power(x,-n);//将负指数转换为正指数来处理
   }
}
int main() 
{
    int n;
    double x,t;
    scanf("%d%lf",&n,&x);
    t=power(x, n);
    printf("%.2lf\n", t);//题目要求保留2位小数
    return 0;
}

输⼊⽰例1(说明:输⼊第⼀个为整数 n ,第⼆个为浮点数 x 。):

3 5

输出⽰例(输出 x 的 n 次⽅,保留两位⼩数):

125.00

题⽬3:
设⼈⺠币的⾯额有(以元为单位):1⾓、2⾓、5⾓、1元、2元、5元、10元、20元、50元。
编写函数 void change(double m,double c); 其中 m 为商品价格(只取⼀位有效数字), c 为顾客付款(只取⼀位有效数
字),函数能输出应给顾客找零⾦额的各种⾯额⼈⺠币的张数,且张数之和为最⼩。
要求在主函数中输⼊商品价格和顾客付款,调⽤函数得到结果。

#include <stdio.h>
#include <math.h>
void change(double m, double c)
 {
    int count,n;
    int change=(c-m)*10;//零钱乘上10使变为整数防止精度问题
    int face_valve[9]={500,200,100,50,20,10,5,2,1};//数组,面额以角为单位
    for(int i=0;i<9;i++)
    {
        count=change/face_valve[i];//最多包含count张
        n+=count;
        change%=face_valve[i];
        if(face_valve[i]>=10)//分元和角输出
        {
            printf("%d元:%d\n",face_valve[i]/10,count);
        } else {
            printf("%d角:%d\n",face_valve[i],count);
        }
    }
    printf("-----\n找零%d张!\n",n);//打印结果
}  
int main()
{
    double m,c;
    scanf("%lf%lf",&m,&c);
    change(m,c);//引用chang函数
    return 0;
}

输出⽰例1:

34.2 100

输出⽰例1:

50元:1
20元:0
10元:1
5元:1
2元:0
1元:0
5⾓:1
2⾓:1
1⾓:1
__
找零 6 张!

题⽬4:
学校⾥的“吃货协会”准备搞⼀个聚会,已经知道现有会员 N ⼈,把会员从1 到 N编号,其中会⻓的号码是 N号,凡是和会⻓是⽼朋友的,那么该会员的号码肯定和N 有⼤于 1的公约数,否则都是新朋友。
现在会⻓想知道究竟有⼏个新朋友?请你编程序帮会⻓计算出来。
【提⽰1】编写函数 int gcd(int a,int b) ,求 a 和 b的最⼤公约数。
【提⽰2】编写 main 函数,接收键盘输⼊的 N 的值,寻找 [1,N-1] 区间内的与 N 的最⼤公约数为 1 的数字,输出个
数。
💡 公约数,亦称“公因数”,是指能同时整除若⼲个整数的整数;其中最⼤的⼀个称为最⼤公约数。
12和15的公约数有1、3,其中最⼤公约数是3;
30和40的公约数有1、2、5、10,最⼤公约数是10;
3和4的公约数有1,最⼤公约数是1;
💡 求解⽅法:辗转相除法
【参考链接:https://blog.csdn.net/sjdgehi/article/details/148925793】
输⼊⽰例1( N ):

50

输出⽰例1( [1,N-1] 区间内的与N的最⼤公约数为 1 的数字个数):

20

#include <stdio.h>
#include <math.h>
int gcd(int a,int b)
{
    int r;
    while(b!=0)//直到余数为0,最终b即是r
    {
        r=a%b; 
        a=b;//将 b 和 r 作为新的两个整数
        b=r;
    }
    return a;//返回最大公约数
}
int main()
{
    int N,n=0,i;
    scanf("%d",&N);
    for(i=1;i<=N-1;i++)
    {
        if (gcd(i,N-1)==1)//1作为最大公约数
        {
            n++;
        }
    }
    printf("%d\n",n);
    return 0;
}

题⽬5:

要求:⽤递归函数判断⼀个⾃然数是否为素数(0表⽰不是,1表⽰是)。
💡 提⽰,判断范围: i <= sqrt(n)
输⼊⽰例1(⼀个⾃然数):

4

输出⽰例1(是否为素数( 0 表⽰不是, 1 表⽰是)):

0

#include <stdio.h>
#include <math.h>
int is_prime(int n,int i)
{   
    //base case
    if(n<2)
    {
        return 0;
    }
    if(n==2)
    {
        return 1;
    }
    //general case
    if(i>sqrt(n))//判断范围: i <= sqrt(n)
    {
        return 1;
    }
    if(n%i==0)
    {
        return 0;
    }
    return is_prime(n,i+1);
} 
int main()
{   int num;
    scanf("%d", &num);
    printf("d\n",is_prime(num,2));
    return 0;
}  

题⽬6:
要求:⽤递归函数求解下⽅问题。
有5个学⽣坐在⼀起,问第5个学⽣多少岁,他说⽐第4个学⽣⼤2岁。问第4个学⽣岁数,他说⽐第3个学⽣⼤2
岁。问第3个学⽣岁数,他说⽐第2个学⽣⼤2岁。问第2个学⽣岁数,他说⽐第1个学⽣⼤2岁。最后问第1个学⽣,
他说10岁,请问第5个学⽣多⼤。。
输⼊⽰例1:

[⽆输⼊]

输出⽰例1(第 5 个学⽣的年龄):

18

#include <stdio.h>
#include <math.h>
int age(int n)
{
    if(n==1)
    {
        return 10;
    }
    else
    {
        return age(n-1)+2;//第次-1,年龄+2
    }
}
int main()
{
    printf("%d\n",age(5));
    return 0;
}  

题⽬7:
编写函数,寻找300以内的所有的对称回⽂数并输出。

💡 回⽂数是指某数与其反序数相等,例如 5、131、1551、345676543。
对称回⽂数是指某数与其平⽅都是回⽂数。例如,n=11时,1111=121;n=111时,111111=12321。

【提⽰1】编写函数 int huiwen(long n) ,判断 n 是否回⽂数,若是返回 1 ,否则返回 0 。
【提⽰2】在 main 函数中遍历 300 以内的数,寻找对称回⽂数并输出。
输⼊⽰例:

[⽆输⼊]

输出⽰例:

300以内的所有的对称回⽂数: 1 2 3 11 22 101 111 121 202 212

/*
1,提取最后一位:任何数除以10的余数即为该数的最后一位数字
2,移除最后一位:任何数除以10的商即为去掉最后一位后的数字
3,反转数字:通过循环将原数的每一位数字按相反顺序重新组合成新数
4,比较判断:如果反转后的新数等于原数,则该数为回文数
*/
#include <stdio.h>
#include <math.h>
int huiwen(long n)
{
    int a=0,b;
    b=n;
    while(b>0)
    {
		a=a*10+b%10;
		b/=10;
        if(a==n)
        {
            return 1;
        }
    }
    return 0;//消除未定义行为,不然会出现10和100
}
int main()
{
    printf("300以内的所有的对称回⽂数:");
    for(long i=1;i<=300;i++)
    {
        long t=i*i;
        if(huiwen(t)==1&&huiwen(i)==1)//同时满足某数与其平⽅都是回⽂数
        {
             printf("%d ",i);
        }
       
    }
    return 0;
}  

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐