2013年12月23日 12:43:46
目的:計算器的實現
*/
# include <stdio.h>
# include <ctype.h>
# include <math.h>
char get_choice(void); //獲取用戶輸入的選項,並建立目
char get_first(void); //獲取用戶輸入的選項,並剔除錯誤輸入
float get_int(void); //獲取用戶輸入的計算值
float add(void); //定義加法函數
float subtraction(void); //定義減法函數
float multiplication(void); //定義乘法函數
float division(void); //定義除法函數
float extract(void); //定義開方函數
float square(void); //定義平方函數
float cube(void); //定義立方函數
int count = 0;
int main(void)
{
char choice;
printf("***歡迎使用由小錢制作的計算器***\n");
choice = get_choice();
while(choice != 'q')
{
switch(choice)
{
case 'a':
add(); break;
case 'b':
subtraction(); break;
case 'c':
multiplication(); break;
case 'd':
division(); break;
case 'e':
extract(); break;
case 'f':
square(); break;
case 'g':
cube(); break;
default :
printf("您輸入有誤,請重新輸入:"); break;
}
fflush(stdin);
choice = get_choice();
}
printf("bye");
return 0;
}
//獲取用戶輸入的選項,並建立目錄
char get_choice(void)
{
char ch;
int a = 0;
//建立目錄
printf("\n--------------------------------\n");
printf("a. 加法\t\t\tb. 減法\nc. 乘法\t\t\td. 除法\n");
printf("e. 開方\t\t\tf. 平方\ng. 立方\t\t\tq. 退出\n");
printf("--------------------------------\n");
printf("請輸入妳的選項:");
ch = get_first();
while(ch == ' ' || ch == '\n' || ch == '\t')
ch = get_first();
//判斷用戶輸入的選項是否有誤
while((ch<'a' || ch>'g') && ch !='q')
{
putchar(ch);
printf(" 妳輸入的選項有誤,請重新輸入:");
ch = get_first();
}
return ch;
}
//獲取用戶輸入的選項,並剔除錯誤輸入
char get_first(void)
{
char ch;
ch = getchar();
//剔除由用戶輸入選項時產生的換行符
while(ch == '\n')
{
ch = getchar();
}
return ch;
}
//獲取用戶輸入的計算值
float get_int(void)
{
float input;
char ch;
int a;
if(count == 0)
printf("親!請輸入數值:");
if(count == 1)
printf("親!請輸入第壹個數值:");
if(count == 2)
printf("親!請輸入第二個數值:");
a = scanf("%f", &input);
//判斷用戶的輸入是否為壹個數值
while(a != 1)
{
//剔除用戶輸入錯誤的字符
while((ch = getchar()) != '\n')
{
putchar(ch);
printf(" 不是壹個數值,請輸入例如3、111.2、或者-1");
a = scanf("%f", &input);
}
}
return input;
}
//定義加法函數
float add(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i + j;
printf("%.2f + %.2f = %.2f\n", i, j, sum);
return sum;
}
//定義減法函數
float subtraction(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i - j;
printf("%.2f - %.2f = %.2f\n", i, j, sum);
return sum;
}
//定義乘法函數
float multiplication(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i * j;
printf("%.2f * %.2f = %.2f\n", i, j, sum);
return sum;
}
//定義除法函數
float division(void)
{
float i, j, sum;
count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
//判斷除數是否為0
while(j == 0)
{
printf("除數不能為0\n請重新輸入!!!\n");
j = get_int();
}
sum = i / j;
printf("%.2f / %.2f = %.2f\n", i, j, sum);
return sum;
}
//定義開方函數
float extract(void)
{
float i, sum;
count = 0;
i = get_int();
//判斷開方數是否小於0,如果小於0,則讓用戶重新輸入
while(i < 0)
{
printf("請輸入大於0的數值\n");
i = get_int();
}
sum = sqrt(i);
printf("%.2f的開方等於%.2f\n", i, sum);
return sum;
}
//定義平方函數
float square(void)
{
float i, sum;
count = 0;
i = get_int();
sum = i * i;
printf("%.2f的平方等於%.2f\n", i, sum);
return sum;
}
//定義立方函數
float cube(void)
{
float i, sum;
count = 0;
i = get_int();
sum = i * i * i;
printf("%f的立方等於%.3f\n", i, sum);
return sum;
}