综合练习三

问题 A: 解一元二次方程

解一元二次方程是初中数学必须掌握的一个重点。在不考虑虚数的情况下,一个一元二次方程的解有三种情况:有两个不同的解、有两个相同的解以及无解。

本题需要你通过编程来解一元二次方程ax2+bx+c=0的根。

 

输入要求

输入数据有若干行,每行包含一元二次方程的三个系数,依次为二次项系数、一次项系数以及常数。系数a为0输出出错信息(Error!),三个系数同时为0时输入结束,该组数据不做处理。

 

输出要求

当一元二次方程有两个不同的解时,先输出较大的解,再输出较小的解,如:

x1=2.000000

x2=1.000000

当一元二次方程有两个相同的解时,两个解一起输出,如:

x1=x2=1.000000

当一元二次方程无解时,输出”No solution!”(忽略双引号)。

结果保留6位小数。

 

假如输入

1 -2 1
3 2 1
2 3 1
0 2 1
0 0 0

应当输出

x1=x2=1.000000
No solution!
x1=-0.500000
x2=-1.000000
Error!
#include<stdio.h> 
#include<math.h> 
int main(void) 
{ 
    int a,b,c; 
    while(1) 
    { 
        double x1,x2,delta,t; 
        scanf("%d %d %d",&a,&b,&c); 
        delta=b*b-4*a*c; 
        x1=(-b+sqrt(delta))/(2*a); 
        x2=(-b-sqrt(delta))/(2*a); 
        if(a!=0){ 
            if(delta>0) {
                if(x1>x2){
                printf("x1=%.6f\n",x1); 
                printf("x2=%.6f\n",x2);
                }
                else{
                    t=x2;x2=x1;x1=t; 
                    printf("x1=%.6f\n",x1); 
                    printf("x2=%.6f\n",x2);
                }
            }
            else if(delta==0) 
                printf("x1=x2=%.6f\n",x1); 
            else
                printf("No solution!\n");
        } 
        else if(a==0 && b!=0||c!=0){ 
            printf("Error!\n"); 
        } 
        if(a==0 && b==0 && c==0) 
            break; 
    } 
   
    return 0; 
} 

 

问题 B: 计算π

题目描述

用下面公式求π的近似值。π/41-1/3+1/5-1/7+…直到最后一项的绝对值小于10-n次方为止(绝对值小于10-n次方的这项不计算在内)。

 

输入要求

输入若干组精度要求n(3<=n<=8),n=0时退出,n超出范围输出“Error!”。

 

输出要求

输出各组不同精度要求的值。

 

假如输入

7
0

应当输出

3.141592
#include<stdio.h>  
#include<math.h>  
int main(void)  
{ 
    int n; 
    double pi=0,a=1,b=1; 
    while(1){ 
        scanf("%d",&n); 
        if(n>=3 && n<=8){ 
            while(fabs(a/b)>=pow(10,-n)){ 
                pi+=a/b; 
                b+=2; 
                a=-a; 
            } 
            printf("%lf\n",pi*4); 
        } 
        else if(n!=0)  
            printf("Error!\n");  
        else
            break;  
    }  
         
    return 0;  
}  

 


问题 C: 求矩阵中的最大元素

有一个M×N的矩阵,各数据元素均为整形数,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号,同一矩阵中有相同最大元素时不同行以行坐标最小优先,同行不同列以列坐标最小优先。

 

输入要求

首先输入被测试矩阵的数量k(1<=k<=10); 然后输入k个矩阵的行列数m,n,(1<=m,n<=10)和相应矩阵的各个元素。

 

输出要求

每一行中输出一个矩阵的最大元素的值及所在的行列坐标,元素之间用空格分隔。

 

假如输入

1
3 4
5 12 23 56
19 28 37 46 
-12 -34 6 8

应当输出

max=56 row=0 colum=3
#include<stdio.h>
int main(void)
{
    int row,colum,i,j,x;
    int k,m,n;
    int a[10][10];
    scanf("%d\n",&k);
 
    for(x=1;x<=k;x++){
    scanf("%d %d\n",&m,&n);
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
        row=colum=0;
         
       for(i=0;i<m;i++)
            for(j=0;j<n;j++)
                if(a[i][j]>a[row][colum]){
                    row=i;
                    colum=j;
                   
                }
        printf("max=%d row=%d colum=%d\n",a[row][colum],row,colum);
    }       
        return 0;
}

 


问题 D: 求给定两整数的最大公约数和最小公倍数

求给定两整数m,n的最大公约数和最小公倍数。

 

输入要求

输入分两部分,首先输入要测试的数据K,然后输入K组测试数据,每组数据包括m,n(m,n<=1000)两个正整数。

 

输出要求

输出最大公约数和最小公倍数,两个数之间用空格分隔,每组测速数据的答案之间用空行分隔。

 

假如输入

2
34 6
26 8

应当输出

Greatest common divisor is: 2 Least common multiple is: 102

Greatest common divisor is: 2 Least common multiple is: 104
#include<stdio.h> 
int main(void) 
{ 
    int m,n,k,i; 
    int r,x,t;
    scanf("%d",&k);
    for(i=1;i<=k;i++){
        scanf("%d %d",&m,&n);
        x = m*n;
        if (m<n)
        {
            t=m; 
            m=n; 
            n=t;
        }
        while (n!=0)
        {
            r=m%n; 
            m=n; 
            n=r;
        }
        printf("Greatest common divisor is: %d Least common multiple is: %d\n",m,x/m);
        printf("\n");
    }
    return 0;
}

 

posted @ 2013-12-15 19:56  simple9495  阅读(502)  评论(0编辑  收藏  举报