C基礎補充——順序結構
阿新 • • 發佈:2018-11-12
一、typedef
typedef是一個很有用的東西,它能夠給複雜的資料型別起一個別名,這樣在使用中就可以用別名來代替原來的寫法。例如,當資料型別是 long long 時,就可以像下面的例子這樣用LL來代替 long long,以避免因在程式中出現大量的 long long 而降低編碼效率。
#include <cstdio>
typedef long long LL; //給long long起一個別名LL
int main() {
LL a = 123456789012345LL, b = 234567890123456LL; //直接使用LL
printf("%lld\n" ,a+b);
return 0;
}
輸出結果:
358024679135801
二、常用math函式
1. fabs(double x)
該函式用於對double型變數取絕對值,示例如下:
#include <stdio.h>
#include <math.h>
int main() {
double db = -12.56;
printf("%.2f\n",fabs(db));
return 0;
}
輸出結果:
12.56
2. floor(double x)和ceil(double x)
這兩個函式分別用於double型變數的向下取整和向上取整,返回型別為double型,示例如下:
#include <stdio.h>
#include <math.h>
int main() {
double db1 = -5.2, db2 = 5.2;
printf("%.0f %.0f\n",floor(db1),ceil(db1));
printf("%.0f %.0f\n",floor(db2),ceil(db2));
return 0;
}
輸出結果:
-6 -5
5 6
3. sqrt(double x)
該函式用於返回double 型變數的算術平方根,示例如下:
#include <stdio.h>
#include <math.h>
int main() {
double db = sqrt(2.0);
printf("%f\n",db);
return 0;
}
輸出結果:
1.414214
4. pow(double r, double p)
該函式用於返回rp,要求 r 和 p 都是 double 型,示例如下:
#include <stdio.h>
#include <math.h>
int main() {
double db = pow(2.0, 3.0);
printf("%f\n",db);
return 0;
}
輸出結果:
8.000000
5. log(double x)
該函式用於返回 double 型變數的以自然對數為底的對數,示例如下:
#include <stdio.h>
#include <math.h>
int main() {
double db = log(1.0);
printf("%f\n",db);
return 0;
}
輸出結果:
0.000000
C語言中沒有對任意底數求對數的函式,因此必須使用換底公式來將不是以自然對數為底的對數轉換為以e為底的對數,即 logab = logeb/logea
6. sin(double x)、cos(double x) 和 tan(double x)
這三個函式分別返回 double 型變數的正弦值、餘弦值和正切值,引數要求是弧度制,示例如下:
#include <stdio.h>
#include <math.h>
const double pi = acos(-1.0);
int main() {
double db1 = sin(pi * 45 / 180);
double db2 = cos(pi * 45 / 180);
double db3 = tan(pi * 45 / 180);
printf("%f, %f, %f\n", db1, db2, db3);
return 0;
}
計算結果:
0.707101, 0.707107, 1.000000
此處把 pi 定義為精確值 acos(-1.0)(因為 cos(pi) = -1)。
7. asin(double x)、acos(double x) 和 atan(double x)
這三個函式分別返回 double 型變數的反正弦值、反餘弦值和反正切值,示例如下:
#include <stdio.h>
#include <math.h>
int main() {
double db1 = asin(1);
double db2 = acos(-1.0);
double db3 = atan(0);
printf("%f, %f, %f\n", db1, db2, db3);
return 0;
}
計算結果:
1.570796, 3.141593, 0.000000
8. round(double x)
該函式用於將 double 型變數 x 四捨五入,返回型別也是 double 型,需進行取整,示例如下:
#include <stdio.h>
#include <math.h>
int main() {
double db1 = round(3.40);
double db2 = round(3.45);
double db3 = round(3.50);
double db4 = round(3.55);
double db5 = round(3.60);
printf("%d, %d, %d, %d, %d\n", (int)db1, (int)db2,(int)db3, (int)db4, (int)db5);
return 0;
}
計算結果:
3, 3, 4, 4, 4
練習題
求一元二次方程ax2+bx+c=0的根,三個係數a, b, c由鍵盤輸入,且a不能為0,且保證b2-4ac>0。 程式中所涉及的變數均為double型別。
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, d;
double r1, r2;
scanf("%lf %lf %lf",&a,&b,&c);
d = b*b - 4*a*c;
if(a!=0) {
if(d>0) {
r1 = (-b+sqrt(d))/(2*a);
r2 = (-b-sqrt(d))/(2*a);
printf("r1=%7.2f\nr2=%7.2f", r1, r2);
}
}
return 0;
}
計算結果:
輸入
1 3 2
輸出
r1= -1.00
r2= -2.00