1. 程式人生 > >C基礎補充——順序結構

C基礎補充——順序結構

一、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