1. 程式人生 > 實用技巧 >C/C++那些奇奇怪怪的語法

C/C++那些奇奇怪怪的語法

在各種地方看到的。

咕著,不定時更新。

1.switch

1.區間表示

例題

思路:略。

程式碼:

#include<stdio.h>
double n;
double f(double x){
	switch((int)x){
		case 0 ... 4:
			return -x+2.5;
		case 5 ... 9:
			return 2-1.5*(x-3)*(x-3);
		default:
			return x/2-1.5;
	}	
}
int main(){
	scanf("%lf",&n);
	printf("%.3f\n",f(n));
	return 0;
}

會發現 switch 裡面好像有點奇奇怪怪的東西?

對就是這玩意。

case x ... y: 的功能:對於 \(x\le k\le y\) 的所有正整數 \(k\) 執行 case 下面的東西。

注意 xy 都只能是 int

2.迴圈展開

其實這玩意有個正式名稱,不理它了(

簡單來說就是在 case 下面亂搞。

例題

思路:顯然可以快速冪,但這裡就暴力做吧。

程式碼:

#include<stdio.h>
int r,y;
double m;
int main(){
	scanf("%d%lf%d",&r,&m,&y);
	switch(y&7){
		case 0:do{m+=m/100*r;--y;
		case 7:m+=m/100*r;--y;
		case 6:m+=m/100*r;--y;
		case 5:m+=m/100*r;--y;
		case 4:m+=m/100*r;--y;
		case 3:m+=m/100*r;--y;
		case 2:m+=m/100*r;--y;
		case 1:m+=m/100*r;--y;
		}while(y);
	}
	printf("%d\n",(int)m);
	return 0;
}

這個 do while 的位置奇奇怪怪(

是一種迴圈展開的寫法,但不知道效能有沒有提升。

\[\Huge{\texttt{咕咕咕}} \]