1. 程式人生 > >《C程式設計快速進階大學教程》第七章測試

《C程式設計快速進階大學教程》第七章測試

1、 三角形可分為一般三角形、直角三角形、等腰三角形或等邊三角形。
設計一個程式,推斷三角形的類別並及時面積。輸入三角形的三條邊的邊長,如果三條邊能構成三角形,則輸出三角形的面積及種類。

測試用例:
輸入: 1.1,2.2,3.3 輸出:不是三角形
輸入: 3,4,5 輸出: 直角三角形,面積為6.00
輸入: 2,2,2 輸出:等邊三角形,面積為1.73
輸入: 3,2,3 輸出: 等腰三角形,面積為2.82
輸入: 1.414,2,1.414 輸出:等腰直角三角形,面積為1.00
輸入: 2, 3, 4 輸出: 一般三角形,面積為***

#include <stdio.h>
#include <stdlib.h> #include<math.h> int main() { double a,b,c;//三角形三邊長度 printf("請輸入三角形三邊長度:\n"); scanf("%lf %lf %lf",&a,&b,&c); /* //判斷是否為三角形 if((a+b>c) && (a+c>b) && (b+c>a)){ //計算面積 double p = (a+b+c)/2.0; double S = sqrt(p*(p-a)*(p-b)*(p-c)); //判斷三角形型別 if(a==b && a==c){ printf("等邊三角形 "); }else if((a==b)||(a==c)||(b==c)){ printf("等腰三角形 "); if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)){ printf("等腰直角三角形 "); } }else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)){ printf("直角三角形 "); }else{ printf("普通三角形 "); } printf("面積為:%lf",S); } else{ printf("不是三角形"); } */
if((a+b-c)<1e-6 || (a+c-b)<1e-6 || (b+c-a)<1e-6){ printf("不是三角形"); }else{ //計算面積 double p = (a+b+c)/2.0; double S = sqrt(p*(p-a)*(p-b)*(p-c)); //判斷三角形型別 if(a==b && a==c){ printf("等邊三角形 "); }else if((a==b)||(a==c)
||(b==c)){ if((a*a+b*b-c*c)<1e-6||(a*a+c*c-b*b)<1e-6||(b*b+c*c-a*a)<1e-6){ printf("等腰直角三角形 "); }else{ printf("等腰三角形 "); } }else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)){ printf("直角三角形 "); }else{ printf("普通三角形 "); } printf("面積為:%lf",S); } return 0; }

2、 字元型資料可以簡單分為數字、大寫字母、小寫字母及其他字元四類。
(1) 從鍵盤輸入1個字元,輸出它的型別。
(2) 從鍵盤輸入5個字元,輸出不同型別字元的個數。
(3) 從鍵盤輸入若干個字元(以回車結束),輸出不同型別字元的個數。

#include <stdio.h>
#include <stdlib.h>

//(1)	從鍵盤輸入1個字元,輸出它的型別。
void f1(){
    printf("請輸入一個字元:");
    char ch;
    scanf("%c",&ch);
    if(ch>='a' && ch<='z'){
        printf("該字元是小寫字元\n");
    }else if(ch>='A' && ch<='Z'){
        printf("該字元是大寫字元\n");
    }else if(ch>='0' && ch<='9'){
        printf("該字元是數字\n");
    }else{
        printf("該字元是其他數字\n");
    }
}
//(2)從鍵盤輸入5個字元,輸出不同型別字元的個數。
void f2(){
    printf("請輸入5個字元:(超過5個後的字元不記錄在內)");
    char ch;
    int b[4]={0,0,0,0};//記錄分類的陣列,其中b[0]表示小寫字母的個數,b[1]大寫字母的個數,b[2]數字的個數,b[3]其他
    int i=0;
    while(i<5){
        ch = getchar();
        if(ch>='a' && ch<='z'){
            b[0]++;
        }else if(ch>='A' && ch<='Z'){
            b[1]++;
        }else if(ch>='0' && ch<='9'){
            b[2]++;
        }else{
            b[3]++;
        }
        i++;
    }
    printf("小寫字母共%d個,大寫字母共%d個,數字共%d個,其他共%d個",b[0],b[1],b[2],b[3]);
}
//(3)	從鍵盤輸入若干個字元(以回車結束),輸出不同型別字元的個數。
void f3(){
     printf("請輸入若干個字元(以回車結束):");
     char ch;
     int b[4]={0,0,0,0};//記錄分類的陣列,其中b[0]表示小寫字母的個數,b[1]大寫字母的個數,b[2]數字的個數,b[3]其他
     ch = getchar();
     while(ch != '\n'){
        if(ch>='a' && ch<='z'){
            b[0]++;
        }else if(ch>='A' && ch<='Z'){
            b[1]++;
        }else if(ch>='0' && ch<='9'){
            b[2]++;
        }else{
            b[3]++;
        }
        ch = getchar();
     }
     printf("小寫字母共%d個,大寫字母共%d個,數字共%d個,其他共%d個",b[0],b[1],b[2],b[3]);
}
int main()
{
    printf("請選擇操作\n(1)從鍵盤輸入1個字元,輸出它的型別。\n(2)從鍵盤輸入5個字元,輸出不同型別字元的個數。\n(3)	從鍵盤輸入若干個字元(以回車結束),輸出不同型別字元的個數。\n");
    printf("按下對應的數字,回車進入操作!\n");
    int flag;
    scanf("%d",&flag);
    //用來接收多餘產生的回車
    char c;
    c = getchar();
    if(flag == 1){
        f1();
    }else if(flag ==2){
        f2();
    }else if(flag ==3){
        f3();
    }
    return 0;
}