• 浙大版C语言题目集-函数题6


    6-3

    给定两个均不超过9的正整数a和n,要求编写函数求a+aa+aaa++⋯+aa⋯a(n个a)之和。

    其中函数fn须返回的是na组成的数字;SumA返回要求的和。

    1. #include <stdio.h>
    2. int fn( int a, int n );
    3. int SumA( int a, int n );
    4. int main()
    5. {
    6. int a, n;
    7. scanf("%d %d", &a, &n);
    8. printf("fn(%d, %d) = %d\n", a, n, fn(a,n));
    9. printf("s = %d\n", SumA(a,n));
    10. return 0;
    11. }
    12. int fn( int a, int n ){
    13. int i,s=0;
    14. for(i=0;i<n;i++){
    15. s=s*10+a;
    16. }
    17. return s;
    18. }
    19. int SumA( int a, int n ){
    20. int i,s=0,j=0;
    21. for(i=0;i<n;i++){
    22. s=s*10+a;
    23. j+=s;
    24. }
    25. return j;
    26. }

    6-6

    本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

    其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。

    题目要求:先判断m是否为素数,再计算[m,n]中所有偶数=p+q两个奇素数之和,输出p最小的解

    1. //先判断m是否为素数,再计算[m,n]中所有偶数=p+q两个奇素数之和,输出p最小的解
    2. #include <stdio.h>
    3. int prime( int p );
    4. void Goldbach( int n );
    5. int main()
    6. {
    7. int m, n, i, cnt;
    8. scanf("%d %d", &m, &n);
    9. if ( prime(m) != 0 ) printf("%d is a prime number\n", m);
    10. if ( m < 6 ) m = 6;
    11. if ( m%2 ) m++;
    12. cnt = 0;
    13. for( i=m; i<=n; i+=2 ) {
    14. Goldbach(i);
    15. cnt++;
    16. if ( cnt%5 ) printf(", ");
    17. else printf("\n");
    18. }
    19. return 0;
    20. }
    21. int prime( int p ){
    22. int flag=1,i;
    23. if(p<2){
    24. flag=0;
    25. }else if(p==2){
    26. flag=1;
    27. }
    28. for(i=2;i<p;i++){
    29. if(p%i==0) {
    30. flag=0;
    31. break;
    32. }
    33. }
    34. return flag;
    35. }
    36. void Goldbach( int n ){
    37. int p,q,i,flag=1;
    38. for(p=3;p<n;p++){
    39. if(prime(p)) {
    40. q=n-p;
    41. if(prime(q)) {
    42. printf("%d=%d+%d",n,p,q);break;
    43. }
    44. }
    45. }
    46. }

    6-7

    本题要求实现一个求整数的逆序数的简单函数。

    1. #include <stdio.h>
    2. int reverse( int number );
    3. int main()
    4. {
    5. int n;
    6. scanf("%d", &n);
    7. printf("%d\n", reverse(n));
    8. return 0;
    9. }
    10. int reverse( int number ){
    11. int a=0;
    12. while(number!=0){
    13. a=a*10+number%10;
    14. number/=10;
    15. }
    16. return a;
    17. }

    6-8

    本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0

    其中函数factorsum须返回int number的因子和;函数PrintPN要逐行输出给定范围[mn]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。

    1. #include <stdio.h>
    2. int factorsum( int number );
    3. void PrintPN( int m, int n );
    4. int main()
    5. {
    6. int m, n;
    7. scanf("%d %d", &m, &n);
    8. if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);
    9. if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);
    10. PrintPN(m, n);
    11. return 0;
    12. }
    13. int factorsum( int number ){
    14. int i,s=0;
    15. for(i=1;i<number;i++){
    16. if(number%i==0){
    17. s+=i;
    18. }
    19. }
    20. return s;
    21. }
    22. void PrintPN( int m, int n ){
    23. int a[10000],i,j,s,k=0;
    24. for(;m<=n;m++){
    25. s=0,j=0;
    26. for(i=1;i<m;i++){
    27. if(m%i==0){
    28. s+=i;
    29. a[j]=i;
    30. j++;
    31. }
    32. }
    33. if(m==s){
    34. printf("%d = ",m);
    35. printf("%d",a[0]);
    36. for(i=1;i<j;i++){
    37. printf(" + %d",a[i]);
    38. }
    39. printf("\n");
    40. k++;
    41. }
    42. }
    43. if(k==0) printf("No perfect number");
    44. }

    6-9

    本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0

    其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[mn]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。

    1. #include <stdio.h>
    2. int fib( int n );
    3. void PrintFN( int m, int n );
    4. int main()
    5. {
    6. int m, n, t;
    7. scanf("%d %d %d", &m, &n, &t);
    8. printf("fib(%d) = %d\n", t, fib(t));
    9. PrintFN(m, n);
    10. return 0;
    11. }
    12. int fib( int n ){
    13. int s[n],i=2;
    14. s[0]=1;
    15. s[1]=1;
    16. if(n>=3){
    17. do{
    18. s[i]=s[i-1]+s[i-2];
    19. i++;
    20. }while (i!=n);
    21. }
    22. return s[n-1];
    23. }
    24. void PrintFN( int m, int n ){
    25. int s[10000],i=2,j=0,k=0;
    26. s[0]=1;
    27. s[1]=1;
    28. do{
    29. s[i]=s[i-1]+s[i-2];
    30. i++;
    31. j++;
    32. }while (s[i-1]<10000);
    33. for(i=0;i<j;i++){
    34. if(s[i]>=m && s[i]<=n) {
    35. printf("%d ",s[i]);
    36. k++;
    37. }
    38. }
    39. if(k==0) printf("No Fibonacci number");
    40. }

    6-11

    水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

    函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

    函数PrintN则打印开区间(mn)内所有的水仙花数,每个数字占一行。题目保证100≤mn≤10000。

    1. #include <stdio.h>
    2. #include <math.h>
    3. int narcissistic( int number );
    4. void PrintN( int m, int n );
    5. int main()
    6. {
    7. int m, n;
    8. scanf("%d %d", &m, &n);
    9. if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
    10. PrintN(m, n);
    11. if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
    12. return 0;
    13. }
    14. int narcissistic( int number ){
    15. int n=number,a[10],i=0,s=0,j,flag=0;
    16. while(number%10!=0 || number/10!=0){
    17. a[i]=number%10;
    18. i++;
    19. number/=10;
    20. }
    21. for(j=0;j<i;j++){
    22. s+=pow(a[j],i);
    23. }
    24. if(n==s) flag=1;
    25. return flag;
    26. }
    27. void PrintN( int m, int n ){
    28. for(m+=1;m<n;m++){
    29. if(narcissistic(m)) printf("%d\n",m);
    30. }
    31. }

  • 相关阅读:
    C++>> 继承
    C现代方法(第1&2章)笔记——概述、基本概念
    Linux如何远程连接服务器?
    力扣 -- 10. 正则表达式匹配
    腾讯云服务器地域是什么?地域选择看着一篇就够了
    什么是埃及COC认证?埃及COC认证是什么意思?
    【独家】MobaXterm v22.1 全能终端连接工具中文版最新版
    Python小波分析库pywt介绍
    python数据容器
    出现Browse information of one xxxx解决方法
  • 原文地址:https://blog.csdn.net/weixin_40868513/article/details/136172608