计算机导论第六周答案参考

6-6 实验5_10_设计函数judgeTriangle

  1. 解题思路
    这是一道函数题,只需要设计出int judgeTriangle(int a,int b,int c)这个函数即可。

    根据裁判程序:

     #include
    
     int judgeTriangle(int,int,int) ; 
    
     int main(){
         int a, b, c ;    
         scanf("%d%d%d",&a,&b,&c);
         switch(judgeTriangle(a,b,c)){
             case -1:
                 printf("It is not a triangle.\n") ;break ;
             case 0 :
                 printf("It is a scalenous triangle.\n") ;
                 break ;
             case 1 :
                 printf("It is a right-angled triangle.\n") ;
                 break ;
             case 2 :
                 printf("It is an isosceles triangle.\n") ;
                 break ;
             case 3 :
                 printf("It is a equilateral triangle.\n") ;
                 break ;
         }
         return 0;
     }
    
     /* 请在这里填写答案 */
    

    结合题意,可知要设计的函数需要根据三角形的类型返回不同的值,用在switch结构中实现三角形类型的判断。

    • 非三角形(存在两条边长度之和小于等于第三条边),则返回-1;
    • 不规则三角形(三条边不相等且不是直角三角形),则返回0;
    • 直角三角形(三条边满足勾股定理),则返回1;
    • 等腰三角形(三条边有两条边相等),则返回2;
    • 等边三角形(三条边三条都相等),则返回3;

    因此,可以用嵌套的if语句结构实现三角形类型的判断并返回对应的值。

  2. C语言代码

int judgeTriangle(int a,int b,int c)
{
    int re;
    if (a+b<=c || a+c<=b ||b+c<=a||a<=0||b<=0||c<=0){//非三角形
        re = -1;
    }
    else{
        if (a!=b && b!=c && a!=c){//不规则或者是直角
            if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a)//直角
                re = 1;
            else//不规则
                re=0;
        }
        else if (a==b||a==c||b==c){
            if (a==b&&b==c)//等边
                re=3;
            else//等腰
                re=2;
        }  
    }
    return re;
}

6-11 实验6_4_二进制转十进制

  1. 解题思路
    根据题目的描述和归纳,递归结束条件是n=0或者n=1,而递归部分则不断调用自身,返回n%10+convert(n/10)*2 .
  2. C语言代码
int convert(int n){
    if(n==0||n==1){//递归结束条件
        return n;
    }
    else{//递归算法
        return n%10+convert(n/10)*2;
    }
}

6-16 实验6_9_素数分解

  1. 解题思路
    题目中涉及到一个数学定理——算术基本定理,又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为素数(质数)的积,而且这些素数因子按大小排列之后,写法仅有一种方式。

    因此,首先要找到对应的素数因子,之后将这些因子格式化输出。

    • 素数因子的判断可以遍历i∈[2~n-1],通过n/i是不是等于0来判断i是不是因子,如果是因子,还需要判断i是不是素数,如果是则输出,不是则下一轮循环。
    • 因子输出的格式是待判断的数=素因子1*素因子2*素因子3*……*素因子k
      • 待判断的数=”这部分是在递归调用的第一层实现,而后续递归调用的过程中不需要输出该部分;
      • 素因子1*素因子2*素因子3*……*素因子k这部分需要在递归调用的每一层输出,但是对于第一个因子或者最后一个因子需要特殊考虑,按照素因子1*素因子2*素因子3*……*素因子k,\n或者素因子1*素因子2*素因子3*……*素因子k的方式输出
    • 素数的判断:遍历2~n-1,如果存在某个数能够整除n,那么n不是素数。
  2. C语言代码

int isPrime(int n){//判断n是不是素数,1表示是素数,-1表示不是素数
    for(int j=2;j

你可能感兴趣的:(理论课知识,算法,c语言,函数)