1.平均數 average
輸入3個平均數,輸出它們的平均值,保留3位小數。
1 #include<stdio.h>
2 int main()
3 {
4 int a,b,c;
5 scanf("%d%d%d",&a,&b,&c);
6 printf("%.3f\n", (a+b+c)/3.0);
7 }
注意:
(1)第6行 /3.0的地方實際上是整型/浮點型=浮點型 做了自動類型轉換 如果寫成 /3 就會報錯:
exe1-1.c:6:2: 警告: 格式 ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat]
(2)printf 輸出格式控制
printf()函數的一般形式為 : printf(“格式控制字元串”,輸出清單項)
控制字元串分為格式說明和普通字元(原樣輸出)
每個格式說明都由%開頭,以一個格式字元串結束。在此之間可以加入左對齊符号,前導補零符号,寬度及精度說明,輸出長度修正及指定輸出類型的格式字元:
% - 0 m.n 1或h 格式字元
格式字元的詳細說明如下:
d 輸出帶符号的十進制整數
o 以八進制無符号形式輸出整數
0x 或0X 以十六進制無符号形式輸出整數 x則輸出小寫字母 X輸出大寫字母
u 以無符号十進制形式輸出整數
c 輸出一個字元
s 輸出字元串的字元,直到遇到‘\0’,或者輸出由精度指定的字元數
f 以小數形式輸出單、雙精度,隐含輸出6位小數。若指定精度為0,則小數部分不輸出
e 或E 以标準指數形式輸出單、雙精度數,數字部分的小數位數為6位。
g或G 系統自動! 采用%f或%e 以使輸出寬度最小。
關于長度修正符号l
%ld 輸出long
%lf 輸出double
關于域寬和精度 m指輸出資料的總寬度,n指浮點型數的小數位數。 預設n=6
2.溫度 temperature
輸入華氏溫度f,輸出對應的攝氏溫度c ,保留3位小數。提示:c=5(f-32)/9
1 #include<stdio.h>
2 int main()
3 {
4 float a;
5 scanf("%f",&a);
6 printf("%.3f\n",5*(a-32)/9);
7 return 0;
8 }
注意:
輸入格式控制
scanf()函數的一般形式為 : printf(“格式控制字元串”,位址清單)
控制字元含義和printf函數相似,但有不同之處,完整格式:
指派抑制符 指定輸入資料域寬 長度修正符 格式字元,符号如下
% * m.n l或h 格式字元
其中m表示輸入資料的最大位數,系統截斷換取輸入。輸入實型時n的小數點位數控制不可用。
長度修正符l 用于輸入長整型資料及double型資料,加h用于輸入短整型資料。
格式字元的詳細說明如下:
d,i 輸入帶符号十進制整數
o 輸入八進制無符号整數
x或X 輸入十六進制無符号整數, 大小寫形式相同
u 輸入無符号十進制整數
c 輸入單個字元
s 輸入字元串
f 輸入實數,以小數或指數形式
3.連續和 sum
輸入正整數n,輸出1+2+3...+n的值。
1 #include<stdio.h>
2 int main()
3 {
4 int m,n,sum;
5 scanf("%d", &m);
6 for(n=1;n<=m;n++)
7 {
8 sum+=n;
9 }
10 printf("%d\n", sum);
11 return 0;
12 }
4.正弦和餘弦 sin cos
輸入正整數n(n<360), 輸出n度的正弦/餘弦函數值。
在gcc環境下總是報錯 連結外部庫的方法-lm 是 link(連結)到 /usr/lib/libm.a 或 /usr/lib/libm.so 的意思,libm 是 library math 的意思
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 double n,p,q,degree;
6 scanf("%lf", &n);
7 const double pi= 4.0 *atan(1.0);
8 degree=n*pi/180;
9 p=sin(degree);
10 q=cos(degree);
11 printf("%lf %lf\n",p,q);
12 return 0;
13 }
[email protected]:~/Desktop/Algorithm$ ./exe1-4
360
-0.000000 1.000000
[email protected]:~/Desktop/Algorithm$ ./exe1-4
0.000000 1.000000
[email protected]:~/Desktop/Algorithm$ ./exe1-4
90
1.000000 0.000000
注意:math.h 中定義常量M_PI,但這個常熟不是ANSI C的标準。
5.距離 distance
輸入4個浮點數x1,x2,y1,y2 輸出平面坐标系中點(x1,y1)到(x2,y2)的距離。
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 float x1,x2,y1,y2,dis;
6 scanf("%f%f%f%f", &x1,&y1,&x2,&y2);
7 dis=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
8 printf("%f\n",dis);
9 return 0;
10 }
編譯連結gcc -o exe1-5 exe1-5.c -lm
運作
[email protected]:~/Desktop/Algorithm$ ./exe1-5
1 1 2 2
1.414214
6. 偶數 odd
檢測輸入的整數 是否為偶數 偶數輸出yes 否則輸出no。
1 #include<stdio.h>
2 int main()
3 {
4 int a;
5 scanf("%d",&a);
6 if(a%2==0) printf("yes\n");
7 else printf("no\n");
8 return 0;
9 }
除了求餘還有什麼好方法判斷是奇數還是偶數呢? 我想要不就是奇數的平方為奇數,不過代價教大。
7.打折 discount
一件衣服95元,若消費滿300,可打85折,輸入購買件數,輸出支付金額,保留2位小數.
1 #include<stdio.h>
2 int main()
3 {
4 int a;
5 float sum;
6 scanf("%d", &a);
7 sum=95*a;
8 if(sum>300) printf("%.2f元\n", sum*0.85);
9 else printf("%f元\n", sum);
10 return 0;
11 }
8.絕對值 abs
輸入一個浮點數,輸出它的絕對值,保留兩位小數。
函數名:abs
功能:傳回整型數的絕對值.
用法:Abs(number)
直接用abs 處理浮點數肯定是不行的 考慮 平方後再開方。
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 float a;
6 scanf("%f", &a);
7 printf("%.2f\n", sqrt(pow(a,2)));
8 return 0;
9 }
23.53454524
23.53
-32.4454
32.45
補充:其實也可以用fabs(double x)函數計算
9.三角形 triangle
輸入三角形的三邊長度值(正整數),判斷它是否能成為直角三角形的三個邊長。
如果可以輸出“yes” 如果不能 輸出“no” 。如果根本無法否成三角形,輸出“not a triangle”。
要判定是不是三角形 需要用到三角形兩邊之和大于第三邊,兩邊之差的絕對值小于第三邊。
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 int a, b,c;
6 //先排序在判斷兩短邊之和是否大于第三邊 兩邊之差是否小于第三邊
7 scanf("%d%d%d",&a,&b,&c);
8 int max, min, mid;
9 max=a; if(max<b)max=b; if(max<c)max=c;
10 min=a; if(min>b)min=b; if(min>c)min=c;
11 mid=a+b+c-max-min;
12 if((min+mid>max)&&(max-min<mid)&&(max-mid<min))
13 {
14 float temp=sqrt(pow(min,2)+pow(mid,2));
15 if(temp==max)printf("yes\n"); //會自動轉換max 為float型比較
16 else printf("no\n");
17 }
18 else printf("not a triangle\n");
19 return 0;
20 }
[email protected]:~/Desktop/Algorithm$ ./exe1-9
3 4 5
yes
[email protected]:~/Desktop/Algorithm$ ./exe1-9
4 5 6
no
[email protected]:~/Desktop/Algorithm$ ./exe1-9
1 2 3
not a triangle
10. 年份 year
輸入年份,判斷是否為潤年,是輸出yes 否則輸出no
1 #include<stdio.h>
2 int main()
3 {
4 int a;
5 scanf("%d",&a);
6 //四年一閏,百年不閏,四百年再閏
7 if(a%100==0)
8 {
9 if((a%4==0)&&(a%400==0)) printf("yes\n");
10 else printf("no\n");
11 }
12 else if(a%4==0) printf("yes");
13 else printf("no\n");
14 return 0;
15 }
[email protected]:~/Desktop/Algorithm$ ./exe1-10
1900
no
[email protected]:~/Desktop/Algorithm$ ./exe1-10
2000
yes
==================================================我是分割線==================================================
補充C語言常用的數學函數
三角函數:(所有參數必須為弧度)
1.acos
函數申明:acos (double x);
用途:用來傳回給定的 X 的反餘弦函數。
2.asin
函數申明:asin (double x);
用途:用來傳回給定的 X 的反正弦函數。
3.atan
函數申明:atan (double x);
用途:用來傳回給定的 X 的反正切函數。
4.sin
函數聲明:sin (double x);
用途:用來傳回給定的 X 的正弦值。
5.cos
函數聲明:cos (double x);
用途:用來傳回給定的 X 的餘弦值。
6.tan
函數聲明:tan (double x);
用途:用來傳回給定的 X 的正切值。
7.atan2
函數聲明:atan2 (double y, double x);
用途:傳回給定的 X 及 Y 坐标值的反正切值
感覺上面好羅嗦,其實隻要記住 三角函數是針對弧度的 并且弧度值是double型的。其他函數:
其他函數
8.atof
函數名: atof (const char *s);
功 能: 把字元串轉換成浮點數
用 法: double atof(const char *nptr);
程式例:
#i nclude <stdlib.h>
#i nclude <stdio.h>
int main(void)
{
float arg,*point=&arg;
float f;
char *str = "12345.67";
f = atof(str);
printf("string = %s float = %f\n", str, f);
return 0;
}
9. ceil 和 floor
函數名: ceil
floor
功 能: 向上舍入
向下舍入
用 法: double ceil(double x);
double floor(double x);
程式例:
#i nclude<math.h>
int main(void)
{
double number = 123.54;
double down, up;
down = floor(number);
up = ceil(number);
printf("original number %5.2lf\n", number);
printf("number rounded down %5.2lf\n", down);
printf("number rounded up %5.2lf\n", up);
return 0;
}該程式運作結果:original number 123.54
number rounded down 123.00
number rounded up 124.00
10.fabs
函數名:fabs
功能:求浮點數x的絕對值.
用法:fabs (double x);
11.fmod
函數名: fmod
功 能: 計算x對y的模, 即x/y的餘數
用 法: double fmod(double x, double y);
程式例:
#i nclude <stdio.h>
#i nclude <math.h>
int main(void)
{
double x = 5.0, y = 2.0;
double result;
result = fmod(x,y);
printf("The remainder of (%lf / %lf) is \
%lf\n", x, y, result);
return 0;
}
12.abs
函數名:abs
功能:傳回整型數的絕對值.
用法:Abs(number)
number 參數可以是任意有效的數值表達式。如果 number 包含 Null,則傳回 Null;如果是未初始化變量,則傳回 0.
幂指數:
13.exp
函數名:exp
功能:傳回 e 的 n 次幂.
用法:exp (double x);
14.frexp
函數名: frexp
功 能: 把一個雙精度數分解為尾數的指數
用 法: double frexp(double value, int *eptr);
程式例:
#i nclude <math.h>
#i nclude <stdio.h>
int main(void)
{
double mantissa, number;
int exponent;
number = 8.0;
mantissa = frexp(number, &exponent);
printf("The number %lf is ", number);
printf("%lf times two to the ", mantissa);
printf("power of %d\n", exponent);
return 0;
}
15.log
函數名:log
功 能: 自然對數函數ln(x)
用 法: double log(double x);
程式例:
#i nclude <math.h>
#i nclude <stdio.h>
int main(void)
{
double result;
double x = 8.6872;
result = log(x);
printf("The natural log of %lf is %lf\n", x, result);
return 0;
}
log(x,y)=ln(y)/ln(x)
16.ldexp
函數名: ldexp
功 能: 計算value*(2的exp幂 ).
用 法: double ldexp(double value, int exp);
程式例:
#i nclude
#i nclude
int main(void)
{
double value;
double x = 2;
value = ldexp(x,3);
printf("The ldexp value is: %lf\n", value);
return 0;
} 運作結果為:2*2^3=16.
17.log10
函數名:log10
功能:傳回以 10 為底的對數.
用法:log10 (double x);
18.sqrt
函數名:sqrt
功能:傳回指定數字的平方根.
用法:sqrt (double x);
19.modf
函數名:modf
功 能: 把數分為指數和尾數
用 法: double modf(double value, double *iptr);
程式例:
#i nclude <math.h>
#i nclude <stdio.h>
int main(void)
{
double fraction, integer;
double number = 100000.567;
fraction = modf(number, &integer);
printf("The whole and fractional parts of %lf are %lf and %lf\n",number, integer, fraction);
return 0;
}
20.pow
函數名:pow
功能:傳回指定數字的指定次幂.
用法:pow (double x, double y);(将傳回x的y次幂)
雙曲函數:
21.cosh
函數名:cosh
功能:傳回指定角度的雙曲餘弦值.
用法:Double Cosh(double x(以弧度計量的角度)) ;
22.sinh
函數名:sinh
功能:傳回指定角度的雙曲正弦值。
用法:sinh (double x);(其中參數x必須為弧度制)
23.tanh
函數名:tanh
功能:回指定角度的雙曲正切值.
用法:tanh (double x);