浙大版《C语言程序设计(第3版)》题目集 41~50

2022-08-22 14:45:11 浏览数 (1)

@目录

  • 41、习题4-4 特殊a串数列求和
  • 42、习题4-6 水仙花数
  • 43、习题4-7 最大公约数和最小公倍数
  • 44、习题7-5 找鞍点
  • 45、练习5-1 求m到n之和
  • 46、练习5-2 找两个数中最大者
  • 47、练习5-3 数字金字塔
  • 48、习题5-1 符号函数
  • 49、习题5-2 使用函数求奇数和
  • 50、习题5-3 使用函数计算两点间的距离

41、习题4-4 特殊a串数列求和

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

输入格式:

输入在一行中给出不超过9的正整数a和n。

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

输出样例:

s = 246

代码:

代码语言:javascript复制
#include<stdio.h>
int main()
{
    int a,n;
    scanf("%d %d",&a,&n);
    int i;
    int sum=0;
    int t=a;
    for(i=1;i<=n;i  )
    {
        sum =t;
        t=t*10 a;
    }
    printf("s = %dn",sum);
    return 0;
}

42、习题4-6 水仙花数

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=

{1^3 5^3 3^3}

。本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3

输出样例:

153 370 371 407

代码:

代码语言:javascript复制
#include<stdio.h>
void fun1(int *m,int *n,int N)
{
    int i;
    int t1,t2;
    t1=t2=1;
    for(i=1;i<=N-1;i  )
        t1*=10;
    for(i=1;i<=N;i  )
        t2*=10;
    *m=t1;*n=t2-1;
}

int fun2(int n,int N)
{
    int i;
    int t;
    int sum=0;
    int tt=n;
    while(n)
    {
        t=1;
        int temp=n;
        for(i=1;i<=N;i  )
        {
            t*=temp;
        }
        sum =t;
        n/=10;
    }
    if(tt==sum) return 1;
    else return 0;
}
int main()
{
    int N;
    scanf("%d",&N);
    int m,n;
    fun1(&m,&n,N);  //找出最小N位数和最大N位数
    //printf("%d %dn",m,n);
    int i;
    for(i=m;i<=n;i  )
    {
        int temp=fun2(i,N);
        if(temp==1) printf("%dn",i);
    }
    return 0;
}

43、习题4-7 最大公约数和最小公倍数

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数M和N(≤1000)。

输出格式:

在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:

511 292

输出样例:

73 2044

代码:

代码语言:javascript复制
#include<stdio.h>
int main()
{
    int M,N;
    scanf("%d %d",&M,&N);
    int a,b;
    a=M;
    b=N;
    int temp;
    temp=M%N;
    while(temp)   //辗转相除法求最大公约数
    {
        M=N;
        N=temp;
        temp=M%N;
    }
    printf("%d %dn",N,a*b/N);
    return 0;

}

44、习题7-5 找鞍点

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9

输出样例1:

2 1

输入样例2:

2 1 7 4 1

输出样例2:

NONE

代码:

代码语言:javascript复制
#include<stdio.h>

int fun1(int arr[][7],int i,int n)
{
    int j;
    int index=0;
    for(j=1;j<n;j  )
    {
        if(arr[i][j]>=arr[i][index]) index=j;
    }
    return index;
}

int fun2(int arr[][7],int i,int n)
{
    int j;
    int index=0;
    for(j=1;j<n;j  )
    {
        if(arr[j][i]<=arr[index][i]) index=j;
    }
    return index;
}
int main()
{
   int n;
   scanf("%d",&n);
   int arr[7][7];
   int i,j;
   for(i=0;i<n;i  )
   {
       for(j=0;j<n;j  )
       {
           scanf("%d",&arr[i][j]);
       }
   }
   int l=0;
   int temp1,temp2;
   for(i=0;i<n;i  )
   {
       temp1=fun1(arr,i,n);
       temp2=fun2(arr,temp1,n);
       if(arr[i][temp1]==arr[temp2][temp1])
       {
           l=1;break;
       }
   }
   if(l==1) printf("%d %dn",temp2,temp1);
   else printf("NONEn");
   return 0;
}

45、练习5-1 求m到n之和

本题要求实现一个计算m~n(m<n)之间所有整数的和的简单函数。

函数接口定义:

int sum( int m, int n );

其中m和n是用户传入的参数,保证有m<n。函数返回的是m~n之间所有整数的和。

裁判测试程序样例:

代码语言:javascript复制
#include <stdio.h>
    
int sum(int m, int n);
    
int main()
{    
   int m, n;
   scanf("%d %d", &m, &n);
   printf("sum = %dn", sum(m, n));
   return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例:

-5 8

输出样例:

sum = 21

代码:

代码语言:javascript复制
int sum(int m, int n)
{
    int i;
    int sum=0;
    for(i=m;i<=n;i  )
    {
        sum=sum i;
    }
    return sum;
}

46、练习5-2 找两个数中最大者

本题要求对两个整数a和b,输出其中较大的数。

函数接口定义:

int max( int a, int b );

其中a和b是用户传入的参数,函数返回的是两者中较大的数。

裁判测试程序样例:

代码语言:javascript复制
#include <stdio.h>
    
int max( int a, int b );
    
int main()
{    
   int a, b;
   scanf("%d %d", &a, &b);
   printf("max = %dn", max(a, b));
   return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

-5 8

输出样例:

max = 8

代码:

代码语言:javascript复制
int max( int a, int b )
{
  if(a>=b)return a;
  else return b;
}

47、练习5-3 数字金字塔

本题要求实现函数输出n行数字金字塔。

函数接口定义:

void pyramid( int n );

其中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行数字金字塔。注意每个数字后面跟一个空格。

裁判测试程序样例:

代码语言:javascript复制
#include <stdio.h>
    
void pyramid( int n );
    
int main()
{    
    int n;
    scanf("%d", &n);
    pyramid(n);
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例:

5

输出样例:

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

代码:

代码语言:javascript复制
void pyramid( int n )
{
    int i;
    int temp=n;
    for(i=1;i<=n;i  )
    {
        int j=1;
        for(;j<temp;j  )
            printf(" ");
        for(j=1;j<=i;j  )
        {
            printf("%d ",i);
        }
        printf("n");
        temp--;
    }
}

48、习题5-1 符号函数

本题要求实现符号函数sign(x)。

函数接口定义:

int sign( int x );

其中x是用户传入的整型参数。符号函数的定义为:若x大于0,sign(x) = 1;若x等于0,sign(x) = 0;否则,sign(x) = −1。

裁判测试程序样例:

代码语言:javascript复制
#include <stdio.h>
    
int sign( int x );
    
int main()
{
    int x;
    scanf("%d", &x);
    printf("sign(%d) = %dn", x, sign(x));
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例:

10

输出样例:

sign(10) = 1

代码:

代码语言:javascript复制
int sign( int x )
{
  if(x>0) return 1;
  else if(x==0) return 0;
  else return -1;
}

49、习题5-2 使用函数求奇数和

本题要求实现一个函数,计算N个整数中所有奇数的和,同时实现一个判断奇偶性的函数。

函数接口定义:

int even( int n ); int OddSum( int List[], int N );

其中函数even将根据用户传入的参数n的奇偶性返回相应值:当n为偶数时返回1,否则返回0。函数OddSum负责计算并返回传入的N个整数List[]中所有奇数的和。

裁判测试程序样例:

代码语言:javascript复制
#include <stdio.h>
#define MAXN 10
int even( int n );
int OddSum( int List[], int N );
int main() 
{
 int List[MAXN], N, i;
 scanf("%d", &N);
 printf("Sum of ( ");
 for ( i=0; i<N; i   ) 
 {
  scanf("%d", &List[i]);
  if ( even(List[i])==0 )
      printf("%d ", List[i]);
 }
 printf(") = %dn", OddSum(List, N));
        return 0;
    }
/* 你的代码将被嵌在这里 */

输入样例:

6 2 -3 7 88 0 15

输出样例:

Sum of ( -3 7 15 ) = 19

代码:

代码语言:javascript复制
int even( int n )
{
  if(n%2==0) return 1;
  else return 0;
}

int OddSum( int List[], int N )
{
  int i;
  int sum=0;
  for(i=0;i<N;i  )
  {
    if(List[i]%2!=0) sum =List[i];
  }
  return sum;
}

50、习题5-3 使用函数计算两点间的距离

本题要求实现一个函数,对给定平面任意两点坐标(x~1~ ,y~1~ )和(x~2~ ,y~2~),求这两点之间的距离。

函数接口定义:

double dist( double x1, double y1, double x2, double y2 );

其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2),函数dist应返回两点间的距离。

裁判测试程序样例:

代码语言:javascript复制
#include <stdio.h>
#include <math.h>
    
double dist( double x1, double y1, double x2, double y2 );
    
int main()
{    
    double x1, y1, x2, y2;
    
    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    printf("dist = %.2fn", dist(x1, y1, x2, y2));
    
    return 0;
}
    
/* 你的代码将被嵌在这里 */

输入样例:

10 10 200 100

输出样例:

dist = 210.24

代码:

代码语言:javascript复制
double dist( double x1, double y1, double x2, double y2 )
{
  return sqrt((x1-x2)*(x1-x2) (y1-y2)*(y1-y2));
}

0 人点赞