c语言程序设计精髓 第7周练兵题

1谐均值计算(4分)

题目内容:

两数值的谐均值可以这样计算:首先对两数值的倒数取平均值,最后再取倒数。编写一个带有两个double参数的函数,计算这两个参数的谐均值。函数原型为:

double Calculate(double x,double y);

程序运行结果示例1:

Input two doubles:

3 4↙

1/((1/x+1/y)/2) = 3.429

程序运行结果示例2:

Input two doubles:

6.5 3.8↙

1/((1/x+1/y)/2) = 4.796

输入提示信息:“Input two doubles:\n”

输入格式: “%lf%lf”

输出格式:“1/((1/x+1/y)/2) = %0.3f\n” (注意:等号的两边各有一个空格)

#include 
#include 
#include 
double Calculate(double x,double y);
int main()
{
    double x,y,z;
    printf("Input two doubles:\n");
    scanf("%lf%lf",&x,&y);

    z = Calculate(x,y);

    printf("1/((1/x+1/y)/2) = %0.3f\n" ,z);


    return 0;
}
double Calculate(double x,double y){

   return 1/((1/x+1/y)/2);
}

2输出指定行列数的字符(4分)

题目内容:

编写一个函数,函数原型:void Chline(char ch, int column, int row);

该函数的3个参数是一个字符和两个整数。字符参数是需要输出的字符。第一个整数说明了在每行中该字符输出的个数,而第二个整数指的是需要输出的行数。编写一个调用该函数的程序。

程序运行结果示例1:

input a char:

k↙

input column and row:

2 3↙

kk

kk

kk

程序运行结果示例2:

input a char:

a↙

input column and row:

3 2↙

aaa

aaa

字符输入提示信息:“input a char:\n”

行列数输入提示信息:“input column and row:\n”

输入格式:

“%c”

“%d%d”

输出格式:"%c"

 #include 
#include 
#include 
void Chline(char ch, int column, int row);
int main()
{
    int y,z;
    char x;
    printf("input a char:\n");
    scanf("%c",&x);
    printf("input column and row:\n");
    scanf("%d%d",&y,&z);

    Chline(x,y,z);


    return 0;
}
void Chline(char ch, int column, int row){
   for(int i=0;i<row;i++){
        for(int j=0;j<column;j++){
            printf("%c",ch);
        }
    printf("\n");
   }
}

3魔术师猜数(4分)

题目内容:

在一种室内互动游戏中,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数abc是多少。例如,观众甲说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术师说:“你算错了!”。请编程模拟这个数字魔术游戏。要求用函数实现,函数原型为:int Magic(int m);

其中形参m代表观众计算的和值。

输入格式:"%d"

输出格式:

观众计算错误,魔术师给出的结论:“The sum you calculated is wrong!\n”

观众计算正确,魔术师给出的结论:“The number is %d\n”

输入样例1:

1998↙

输出样例1:
The_sum_you_calculated_is_wrong!

输入样例2:

1999↙

输出样例2:
The_number_is_443

 #include 
#include 
#include 
int Magic(int m);
int main()
{
    int y,z;
    scanf("%d",&y);
    z=Magic(y);
    if(z){
        printf("The number is %d\n",z);
    }else{
        printf("The sum you calculated is wrong!\n");
    }
    return 0;
}
int Magic(int m){
   for(int i=1;i<10;i++){
    for(int j=0;j<10;j++){
        for(int k=0;k<10;k++){
            int l = (i+j+k)*2;
            if(i*100+j*10+k+m == l*100+l*10+l){
                return i*100+j*10+k;
            }
        }
    }
   }
   return 0;
}

4计算礼炮声响次数(4分)

题目内容:

在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。

输入格式:无

输出格式:“n=%d”

 #include 
#include 
#include 
int Magic(int m);
int main()
{
    int y[141]={0},a,b,c,d=0;
    for(int i = 0 ;i<21;i++){
        a=i*5;
        b=i*6;
        c=i*7;

        y[a]=1;
        y[b]=1;
        y[c]=1;
    }
    for(int i=0;i<141;i++){
        d+=y[i];
    }
    printf("n=%d",d);

    return 0;
}

5水手分椰子(4分)

题目内容:

n(1

提示:分成的等量的堆数应该与水手的数量一致.

程序运行结果示例1:

Input n(1

5↙

y=3121

程序运行结果示例2:

Input n(1

7↙

Error!

输入提示信息: “Input n(1

输入格式: “%d”

输出格式:“y=%d\n”

输入错误提示信息:“Error!\n”

 #include 
#include 
#include 
int Magic(int m);
int main()
{
    int a,i=1;
    printf("Input n(1);
    scanf("%d",&a);
    if(a<=1 || a>5){
        printf("Error!\n");
    }else{
        i=a+1;
        while(1){

            int c = 1;
            int k =i;
            for(int j =0;j<a;j++){
               if(k%a==1){
                k=k-1-k/a;
               }else{
                c=0;
                break;
               }
            }
            if(c){
               printf("y=%d\n",i);
               break;
            }
            i++;
        }
    }

    return 0;
}

6递归法计算游戏人员的年龄(4分)

c语言程序设计精髓 第7周练兵题_第1张图片

#include 
#include 
#include 
unsigned int ComputeAge(unsigned int n);
int main()
{
    unsigned int a,i;
    scanf("%u",&a);
    i=ComputeAge(a);
    printf("The person's age is %u\n",i);
    return 0;
}
unsigned int ComputeAge(unsigned int n){
    if(n==1)
        return 10;
    return ComputeAge(n-1)+2;
} 

7递归法计算两个数的最大公约数(4分)

题目内容:

利用最大公约数的性质计算。对正整数a和b,当a>b时,若a中含有与b相同的公约数,则a中去掉b后剩余的部分a-b中也应含有与b相同的公约数,对a-b和b计算公约数就相当于对a和b计算公约数。反复使用最大公约数的上述性质,直到a和b相等为止,这时,a或b就是它们的最大公约数。这三条性质,也可以表示为:

性质1 如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a, b) = Gcd(a-b, b)

性质2 如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a, b) = Gcd(a, b-a)

性质3 如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a, b) = a = b

程序运行结果示例1:

Input a,b:16,24↙

8

程序运行结果示例2:

Input a,b:-2,-8↙

Input error!

输入提示信息:“Input a,b:”

输入错误提示信息:“Input error!\n”

输入格式:"%d,%d"

输出格式:"%d\n"

 #include 
#include 
#include 
int Gcd(int a,int b);
int main()
{
    int a,b,i;
    printf("Input a,b:");

    scanf("%d,%d",&a,&b);
    if(a<1 || b<1){
        printf("Input error!\n");
    }else{
        i=Gcd(a,b);
        printf("%d\n",i);
    }

    return 0;
}
int Gcd(int a,int b){

    if(a==b)
        return a;
    return a>b ? Gcd(b,a-b):Gcd(a,b-a);
}

8寻找中位数v1.0(4分)

题目内容:

编写一个函数返回三个整数中的中间数。函数原型为: int mid(int a, int b, int c);

函数功能是返回a,b,c三数中大小位于中间的那个数。

输入格式: “%d%d%d”

输出格式:“The result is %d\n”

输入样例1:

12 6 18↙

输出样例1:
The_result_is_12

输入样例2:
-9 7 -2↙

输出样例2:

The_result_is_-2

 #include 
#include 
#include 

int main()
{
    int a,b,i,c;
    scanf("%d%d%d",&a,&b,&c);
    if(a-b>0 && c-a > 0){
        i=a;
    }else if(b-a>0 && c-b >0){
        i=b;
    }else{
        i=c;
    }
    printf("The result is %d\n",i);
    return 0;
}

9还原算术表达式(4分)

c语言程序设计精髓 第7周练兵题_第2张图片

 #include 
#include 
#include 

int main()
{
    int a,b,n,c,flag = 0;
    printf("Input n(n<1000):\n");
    scanf("%d",&n);
    for(a=0;a<10;a++){
        for(b=0;b<10;b++){
            for(c=0;c<10;c++){
                if(a*100+b*110+c*12==n){
                   flag = 1;
                   goto END;
                }
            }
        }
    }
    END:
        if(flag)
            printf("X=%d,Y=%d,Z=%d\n",a,b,c);
        else 
            printf("Invalid\n");
        return 0;
}

你可能感兴趣的:(#,C语言程序设计精髓,练兵题)