《C程式設計快速進階大學教程》第七章測試
阿新 • • 發佈:2018-11-05
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;
}