當前位置:首頁 » 編程語言 » c語言大全
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言大全

發布時間: 2022-01-18 03:20:08

1. c語言編程語言大全

朋友您好!
其實這不是英文,而是函數名。
讀取:
#include <文件名.h>
定義:
1. int 整型
2. char 字元
3. float 單精度浮點數
4. double 雙精度浮點數
5. long 長整型
還有一個在#include後加
#define 變數名 值
循環:
1. for 【continue (這個為跳過一個循環)】 【break (循環終止)】
2. while
3. do—while
條件:
1. if
2. else
3. else if
輸入輸出:
1. scanf 在dos界面中輸入
2. printf 在dos界面中輸出 通常與scanf通用
3. cprintf 在dos界面中輸出 可加顏色
4. fscanf 在dos界面中輸出 程序尋找地址,後把值傳遞給一個文本文檔
5. fprintf 在文本文檔中輸出
顏色、格式:
1. textcolor 顏色
2. textmode 格式
隨機:
1. randomize
結束:
1. exit 返回原界面
2. return 退出循環
當然還有主函數:
main
望採納!

2. 求C語言函數大全

數學函數(原型聲明所在頭文件為math.h、stdlib.h、string.h、float.h)

int abs(int i) 返回整型參數i的絕對值

double cabs(struct complex znum) 返回復數znum的絕對值

double fabs(double x) 返回雙精度參數x的絕對值

long labs(long n) 返回長整型參數n的絕對值

double exp(double x) 返回指數函數ex的值

double frexp(double value,int *eptr) 返回value=x*2n中x的值,分配得來的n存貯在eptr中

double ldexp(double value,int exp); 返回value*2exp的值

double log(double x) 返回logex的值

double log10(double x) 返回log10x的值

double pow(double x,double y) 返回xy的值

double pow10(int p) 返回10p的值

double sqrt(double x) 返回x的開方

double acos(double x) 返回x的反餘弦cos-1(x)值,x為弧度

double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度

double atan(double x) 返回x的反正切tan-1(x)值,x為弧度

double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度

double cos(double x) 返回x的餘弦cos(x)值,x為弧度

double sin(double x) 返回x的正弦sin(x)值,x為弧度

double tan(double x) 返回x的正切tan(x)值,x為弧度

double cosh(double x) 返回x的雙曲餘弦cosh(x)值,x為弧度

double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度

double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度

double hypot(double x,double y) 返回直角三角形斜邊的長度(z),

x和y為直角邊的長度,z2=x2+y2

double ceil(double x) 返回不小於x的最小整數

double floor(double x) 返回不大於x的最大整數

void srand(unsigned seed) 初始化隨機數發生器

int rand() 產生一個隨機數並返回這個數

double poly(double x,int n,double c[])從參數產生一個多項式

double modf(double value,double *iptr)將雙精度數value分解成尾數和階,iptr返回整數部分,函數返回小數部分:fraction = modf(number, &integer);

double fmod(double x,double y) 返回x/y的余數

double atof(char *nptr) 將字元串nptr轉換成浮點數並返回這個浮點數

double atoi(char *nptr) 將字元串nptr轉換成整數並返回這個整數

double atol(char *nptr) 將字元串nptr轉換成長整數並返回這個整數

char *ecvt(double value,int ndigit,int *decpt,int *sign)

將浮點數value轉換成字元串並返回該字元串

char *fcvt(double value,int ndigit,int *decpt,int *sign)

將浮點數value轉換成字元串並返回該字元串

char *gcvt(double value,int ndigit,char *buf)

將數value轉換成字元串並存於buf中,並返回buf的指針

char *ultoa(unsigned long value,char *string,int radix)

將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數

char *ltoa(long value,char *string,int radix)

將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數

char *itoa(int value,char *string,int radix)

將整數value轉換成字元串存入string,radix為轉換時所用基數

double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0

int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0

long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0

double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,

long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數, 並返回這個數。

int matherr(struct exception *e) 用戶修改數學錯誤返回信息函數(沒有必要使用)

double _matherr(_mexcep why,char *fun,double *arg1p, double *arg2p,double retval)

用戶修改數學錯誤返回信息函數(沒有必要使用)

unsigned int _clear87() 清除浮點狀態字並返回原來的浮點狀態

void _fpreset() 重新初使化浮點數學程序包

unsigned int _status87() 返回浮點狀態字

3. 求c語言表達式大全

C語言語法參考大全(流程式控制制語句) ----------------------------------------------------------------------------------------------------------01條件語句的一般形式為: if(表達式) 語句1; else 語句2; 上述結構表示: 如果表達式的值為非0(TURE)即真, 則執行語句1, 執行完語 句1從語句2後開始繼續向下執行; 如果表達式的值為0(FALSE)即假, 則跳過語句1而執行語句2。 注意: 1. 條件執行語句中"else 語句2;"部分是選擇項, 可以預設, 此時條件語句變成: if(表達式) 語句1; 表示若表達式的值為非0則執行語句1 , 否則跳過語句1繼續執行。 2. 如果語句1或語句2有多於一條語句要執行時, 必須使用"{"和"}" 把這些語句包括在其中, 此時條件語句形式為: if(表達式) { 語句體1; } else { 語句體2; } 3. 條件語句可以嵌套, 這種情況經常碰到, 但條件嵌套語句容易出錯, 其原因主要是不知道哪個if對應哪else。 例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("Bad"); 對於上述情況, Turbo C2.0規定: else語句與最近的一個if語句匹配, 上例中的else與if(y<=100&&y>x)相匹配。為了使else與if(x>20||x<-10)相匹配, 必須用花括弧。如下所示: if(x>20||x<-10) { if(y<=100&&y>x) printf("Good"); } else printf("Bad"); 4. 可用階梯式if-else-if結構。 階梯式結構的一般形式為: if(表達式1) 語句1; else if(表達式2) 語句2; else if(表達式3) 語句3; . . else 語句n; 這種結構是從上到下逐個對條件進行判斷, 一旦發現條件滿點足就執行與它有關的語句, 並跳過其它剩餘階梯; 若沒有一個條件滿足, 則執行最後一個else語句n。最後這個else常起著"預設條件"的作用。 同樣, 如果每一個條件中有多於一條語句要執行時, 必須使用"{"和"}"把這 些語句包括在其中。 02switch語句 在編寫程序時, 經常會碰到按不同情況分轉的多路問題, 這時可用嵌套if-else-fi語句來實現, 但if-else-if語句使用不方便, 並且容易出錯。對這種情況, Turbo C2.0提供了一個開關語句。 開關語句格式為: switch(變數) { case 常量1: 語句1或空; case 常量2: 語句2或空; . . . case 常量n; 語句n或空; default: 語句n+1或空; } 執行switch開關語句時, 將變數逐個與case後的常量進行比較, 若與其中一個相等, 則執行該常量下的語句, 若不與任何一個常量相等, 則執行default 後面的語句。 注意: 1. switch中變數可以是數值, 也可以是字元。 2. 可以省略一些case和default。 3. 每個case或default後的語句可以是語句體, 但不需要使用"{"和"}"括起來。 下例的switch中變數為整數型。 main() { int test; for(test=0; test<=10; test++) { switch(test) /*變數為整型數的開關語句*/ { case 1: printf("%d ", test); break; /*退出開關語句*/ case 2: printf("%d ", test); break; case 3: printf("%d ", test); break; default: puts("Error"); break; } } } 下例的switch中變數為字元型。 #include<stdio.h> main() { char c; while(c!=27) /*循環直到按Esc鍵結束*/ { c=getch(); /*從鍵盤不回顯接收一個字元*/ switch(c) { case A: /*接收的字元為A*/ putchar(c); break; /*退出開關語句*/ case B: putchar(c); break; default: /*接收的字元非A和B*/ puts("Error"); break; } } } 03for循環 for循環是開界的。它的一般形式為: for(<初始化>; <條件表過式>; <增量>) 語句; (1)初始化總是一個賦值語句, 它用來給循環控制變數賦初值; (2) 條件表達式是一個關系表達式, 它決定什麼時候退出循環; (3) 增量定義循環控制變數每循環一次後按什麼方式變化。這三個部分之間用";"分開。 例如: for(i=1; i<=10; i++) 語句; 上例中先給i賦初值1, 判斷i是否小於等於10, 若是則執行語句, 之後值增加1。再重新判斷, 直到條件為假, 即i>10時, 結束循環。 注意: 1. for循環中語句可以為語句體, 但要用"{"和"}"將參加循環的語句括起來。 2. for循環中的"初始化"、"條件表達式"和"增量"都是選擇項, 即可以預設, 但";"不能預設。省略了初始化, 表示不對循環控制變數賦初值。 省略了條件表達式, 則不做其它處理時便成為死循環。省略了增量, 則不對循環控制變數進行操作, 這時可在語句體中加入修改循環控制變數的語句。 3. for循環可以有多層嵌套。 例16: main() { int i, j, k; printf("i j k "); for (i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++) printf(%d %d %d ", i, j, k); } 04while循環與do-while 循環 while循環的一般形式為: while(條件) 語句; while循環表示當條件為真時, 便執行語句。直到條件為假才結束循環。並繼續執行循環程序外的後續語句. 例17: #include<stdio.h> main() { char c; c=; /*初始化c*/ while(c!=X0D) /*回車結束循環*/ c=getche(); /*帶回顯的從鍵盤接收字元*/ } 上例中, while循環是以檢查c是否為回車符開始, 因其事先被初始化為空,所以條件為真, 進入循環等待鍵盤輸入字元; 一旦輸入回車, 則c=X0D, 條件為假, 循環便告結束。 與for循環一樣, while循環總是在循環的頭部檢驗條件, 這就意味著循環可能什麼也不執行就退出。 注意: 1. 在while循環體內也允許空語句。 例如: while((c=getche())!=X0D); 這個循環直到鍵入回車為止。 2. 可以有多層循環嵌套。 3. 語句可以是語句體, 此時必須用"{"和"}"括起來。 例18: #include<stdio.h> main() { char c, fname[13]; FILE *fp; /*定義文件指針*/ printf("File name:"); /*提示輸入文件名*/ scanf("%s", fname); /*等待輸入文件名*/ fp=fopen(fname, "r"); /*打開文件只讀*/ while((c=fgetc(fp)!=EOF) /*讀取一個字元並判斷是否到文件結束*/ putchar(c); /*文件未結束時顯示該字元*/ } 05do-while 循環 do-while 循環的一般格式為: do 語句; while(條件); 這個循環與while循環的不同在於: 它先執行循環中的語句, 然後再判斷條件是否為真, 如果為真則繼續循環; 如果為假, 則終止循環。因此, do-while循環至少要執行一次循環語句。同樣當有許多語句參加循環時, 要用"{"和"}"把它們括起來。 06continue 語句 continue語句的作用是跳過循環本中剩餘的語句而強行執行下一次循環。 continue語句只用在for、while、do-while等循環體中, 常與if條件語句一起使用, 用來加速循環。 main() { char c; while(c!=0X0D) /*不是回車符則循環*/ { c=getch(); if(c==0X1B) continue; /*若按Esc鍵不輸出便進行下次循環*/ printf("%c ", c); } } 07break語句 break語句通常用在循環語句和開關語句中。當break用於開關語句switch中時, 可使程序跳出switch而執行switch以後的語句; 如果沒有break語句, 則將成為一個死循環而無法退出。 當break語句用於do-while、for、while循環語句中時, 可使程序終止循環而執行循環後面的語句, 通常break語句總是與if語句聯在一起。 即滿足條件時便跳出循環。 main() { int i=0; char c; while(1) /*設置循環*/ { c=; /*變數賦初值*/ while(c!=13&&c!=27) /*鍵盤接收字元直到按回車或Esc鍵*/ { c=getch(); printf("%c ", c); } if(c==27) break; /*判斷若按Esc鍵則退出循環*/ i++; printf("The No. is %d ", i); } printf("The end"); }

4. C語言概念大全

因為我是學習計算機軟體專業的,所以我要告訴你的一個重要經驗就是:如果真的要想熟練掌握計算機編程技能(其實任何編程語言都一樣),那麼就必須要:一定、且多親自上機實踐才行!!絕對不能夠只是在書本上讀 C 語言程序、研究 C 語言程序的基本概念、語法結構、關鍵字等,那樣絕對是無法掌握編程技能的!!!因為這些 C 語言的概念不是憑空就能夠掌握的,這些概念的熟練掌握和理解是通過編寫了足夠多的程序之後,才能夠從中領悟到的(尤其是 C 語言的指針功能是極其強大的,如果光靠看書,那是絕對無法掌握的,必須要靠編寫足夠多的 C 語言程序之後,才能夠對 C 語言的指針功能有一個較深的理解)。
要想熟練掌握計算機編程技能,那麼首先要有一台屬於自己的電腦、並安裝好操作系統,且安裝好相應的程序編譯開發環境,然後購買一本難度適合自己的編程教材,親自動手上機編寫、編譯、鏈接、直到調試通過教材中的所有源程序(包括每一章的例題、以及每一章後面的練習題)。
只要你真正能夠做到一直堅持下去,我保證你肯定可以熟練掌握好計算機程序設計語言。

5. C語言指令大全

看書,肯定找不到的。

C語言,那有什麼指令!

指令,是匯編語言的說法。

C語言,有:語句、關鍵字...

6. C語言中的數學符號如何表示(大全)

abs(計算整型數的絕對值)
相關函數 labs, fabs

表頭文件 #include<stdlib.h>

定義函數 int abs (int j)

函數說明 abs()用來計算參數j的絕對值,然後將結果返回。

返回值 返回參數j的絕對值結果。

範例 #ingclude <stdlib.h>
main(){
int ansert;
answer = abs(-12);
printf("|-12| = %d\n", answer);
}

執行 |-12| = 12

/*---------------------------------*/
exp(計算指數)
相關函數 log,log10,pow

表頭文件 #include<math.h>

定義函數 double exp(double x);

函數說明 exp()用來計算以e為底的x次方值,即ex值,然後將結果返回。

返回值 返回e的x次方計算結果。

附加說明 使用GCC編譯時請加入-lm。

範例 #include<math.h>
main()
{
double answer;
answer = exp (10);
printf("e^10 =%f\n", answer);
}

執行 e^10 = 22026.465795

/*-----------------------------------*/
sqrt(計算平方根值)
相關函數 hypotq

表頭文件 #include<math.h>

定義函數 double sqrt(double x);

函數說明 sqrt()用來計算參數x的平方根,然後將結果返回。參數x必須為正數。

返回值 返回參數x的平方根值。

錯誤代碼 EDOM 參數x為負數。

附加說明 使用GCC編譯時請加入-lm。

範例 /* 計算200的平方根值*/
#include<math.h>
main()
{
double root;
root = sqrt (200);
printf("answer is %f\n",root);
}

執行 answer is 14.142136

/*--------------------------------*/
fabs(計算浮點型數的絕對值)
相關函數:abs
表頭文件:#include<math.h>
定義函數:double fabs(double x);
函數說明:fabs()用來計算浮點型數x的絕對值,然後將結果返回。
返回值:返回參數x的絕對值計算結果
#include <math.h>
main()
{
double answer;
answer=fabs(-3.141592);
printf("|-3.141592|=%f\n",answer);
}
執行結果
|-3.141592|=3.141592

7. c語言所有代碼意思

while
(c
!=
eof),意思是用戶輸入一個字元就在屏幕上輸出一個字元,while括弧裡面的是循環條件,只有滿足那個條件才會執行循環體里的代碼,那行代碼的意思就是,只有用戶輸入的不是終止符,就在屏幕上輸出剛輸入的字元,如果輸入的是終止符的話就跳出循環,結束。

8. C語言中所有的代碼及其代表的意思,有誰知道

這個問題問的太。。。。了,給你找了個操作符(operator)用於操作數據。操作符進行計算、檢查等式、進行賦值、操作變數和進行其它更奇怪的工作。C++中有許多操作符,這里不想列出全部,只列出最常用的操作符,如下表所示。表1.2常用C++操作符操作符說明舉例
算術運算符
+ 加 x=y+z;
- 減 x=y-z;
* 乘 x=y*z;
/ 除 x=y/z;
賦值運算符
= 賦值 x=10;
+= 賦值與和 x+=10;(等於x=x+10;)
-= 賦值與減 x-=10;
*= 賦值與乘 x*=10;
\= 賦值與除 x\=10;
&= 賦值位與 x&=0x02;
|= 賦值位或 x|=0x02;
邏輯操作符
&& 邏輯與 if(x && 0xFF) {...}
|| 邏輯或 if(x || 0xFF) {...}
等式操作符
== 等於 if(x == 10) {...}
!= 不等於 if(x != 10) {...}
< 小於 if(x < 10) {...}
> 大於 if(x > 10) {...}
<= 小於或等於 if(x <= 10) {...}
>= 大於或等於 if(x >= 10) {...}
一元操作符
* 間接操作符 int x=*y;
& 地址操作符 int* x=&y;
~ 位非 x &=~0x02;
! 邏輯非 if(!valid) {...}
++ 遞增操作符 x++(等於x=x+1;)
-- 遞減操作符 x--;
類和結構操作符
:: 范圍解析 MyClass :: SomeFunction();
-> 間接成員 MyClass-> SomeFunction();
· 直接成員 MyClass . SomeFunction();
可以看出,這個清單長了些,沒法一下子記住。使用C++時,你會慢慢熟悉這些操作符的。必須指出,遞增操作符既可用作前遞增(++x),也可用作後遞增(x++)。前遞增操作符告訴編譯器先遞增再使用變數,而後遞增操作符則讓編譯器先使用變數值再遞增。例如下列代碼:
int x = 10;
cout << "x = " << x++ << end1;
cout << "x = " << x << end1;
cout << "x = " x << end1;
cout << "x = " << ++x << end1;
輸出結果如下:
x=10
x=11
x=12
x=12
遞減操作符也是這樣,這里不想將這些內容講得太深,但讀者可以耐心閱讀下去,正如彭茲對奧古斯特所說,「奧古,耐心點,羅馬不是一天建成的」。說明 在C++中操作符可以過載(overload)。編程人員可以通過過載標准操作符讓它在特定類中進行特定運行。例如,可以在一個類中過載遞增操作符,讓它將變數遞增10而不是遞增1。操作符過載是個高級C++技術,本書不準備詳細介紹。你也許會發現,有些操作符使用了相同的符號。符號的意義隨情境的不同而不同。例如,星號(*)可以作為乘號、聲明指針或取消指針引用。這初看起來有點亂,事實上,C++編程老手有時也覺得有點亂。多實踐,你會慢慢適應的。本書有許多例子介紹這些操作符。讀者不必死記每個操作符的作用,而可以在學習中通過程序和碼段去理解其作用。 C++中的函數
函數是與主程序分開的碼段。這些碼段在程序中需要進行特定動作時調用(執行)。例如,函數可能取兩個值並對其進行復雜的數學運算。然後返回結果,函數可能取一個字串進行分析,然後返回分析字串的一部分。新術語 函數(function)是與主程序分開的碼段,進行預定的一個服務。函數是各種編程語言的重要部分,C++也不例外。最簡單的函數不帶參數,返回void(表示不返回任何東西),其它函數可能帶一個或幾個參數並可能返回一個值。函數名規則與變數名相同。圖1.5顯示了函數的構成部分。新術語 參數(parameter)是傳遞給函數的值,用於改變操作或指示操作程度。
返回類型 函數名 參數表
↓ ↓ ↓
int SomeFunction(int x, int y){
函數體→int z = (x * y); return z; ↑返回語句
}
圖1.5函數的構成部分使用函數前,要先進行聲明。函數聲明或原型(prototype)告訴編譯器函數所取的參數個數、每個參數的數據類型和函數返回值的數據類型。清單1.4列示了這個概念。新術語 原型(prototype)是函數外觀的聲明或其定義的說明。
清單1.4Muttiply.cpp
1: #include <iostream.h>
2: #include <conio.h>
3: #pragma hdrstop
4:
5: int multiply(int,int)
6: void showResult(int);
7:
8:int main(int argc,char **argv);
9:{
10: int x,y,result;
11: cout << end1 << "Enter the first value:";
12: cin >> x;
13: cout << "Enter the second value: ";
14: cin >> y;
15: result=multiply(x,y);
16: showResult(result);
17: cout << end1 << end1 << "Press any key to continue...";
18: getch();
19: return 0
20: }
21:
22: int multiply(int x,int y)
23: {
24:return x * y;
25: }
26:
27: void showResult(int res)
28: {
29:cout << "The result is: " << res <<end1;
30: }
這個程序的11到14行用標准輸入流cin向用戶取兩個數字,第15行調用multiply()函數將兩個數相乘,第16行調用showResult()函數顯示相乘的結果。注意主程序前面第5和第6行multiply()和showResult()函數的原型聲明。原型中只列出了返回類型、函數名和函數參數的數據類型。這是函數聲明的最基本要求。函數原型中還可以包含用於建檔函數功能的變數名。例如,multiply()函數的函數聲明可以寫成如下:int multiply(int firstNumber,int secondNumber);這里函數multiply()的作用很明顯,但代碼既可通過說明也可通過代碼本身建檔。注意清單1.4中函數multiply()的定義(22到25行)在主函數定義碼段(8到20行)之外。函數定義中包含實際的函數體。這里的函數體是最基本的,因為函數只是將函數的兩個參數相乘並返回結果。清單1.4中函數multiply()可以用多種方法調用,可以傳遞變數、直接數或其它函數調用的結果:
result = multiply(2,5);//passing literal values
result = multiply(x,y); //passing variables
showResult(multiply(x,y));
//return value used as a
//parameter for another function
multiply(x,y);//return value ignored
注意 最後一例中沒有使用返回值。本例中調用函數multiply()而不用返回值沒什麼道理,但C++編程中經常忽略返回值。有許多函數是先進行特定動作再返回一個數值,表示函數調用的狀態。有時返回值與程序無關,可以忽略不計。如果將返回值忽略,則只是放棄這個值,而不會有別的危害。例如,前面的樣本程序中忽略了getch()函數的返回值(返回所按鍵的ASCII值)。函數可以調用其它函數,甚至可以調用自己,這種調用稱為遞歸(recursion)。這在C++編程中是個較復雜的問題,這里先不介紹。新術語 遞歸(recursion)就是函數調用自己的過程。

9. c語言小游戲代碼

「貪吃蛇」C代碼,在dev C++試驗通過(用4個方向鍵控制)

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#include <Windows.h>

#define W 78 //游戲框的寬,x軸

#define H 26 //游戲框的高,y軸

int dir=3; //方向變數,初值3表示向「左」

int Flag=0; //吃了食物的標志(1是0否)

int score=0; //玩家得分

struct food{ int x; //食物的x坐標

int y; //食物的y坐標

}fod; //結構體fod有2個成員

struct snake{ int len; //蛇身長

int speed; //移動速度

int x[100]; //蛇身某節x坐標

int y[100]; //蛇身某節y坐標

}snk; //結構體snk有4個成員

void gtxy( int x,int y) //控制游標移動的函數

{ COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void gtxy( int x,int y); //以下聲明要用到的幾個自編函數

void csh( ); //初始化界面

void keymove( ); //按鍵操作移動蛇

void putFod( ); //投放食物

int Over( ); //游戲結束(1是0否)

void Color(int a); //設定顯示顏色的函數

int main( ) //主函數

{ csh( );

while(1)

{ Sleep(snk.speed);

keymove( );

putFod( );

if(Over( ))

{ system(「cls」);

gtxy(W/2+1,H/2); printf(「游戲結束!T__T」);

gtxy(W/2+1,H/2+2); printf(「玩家總分:%d分」,score);

getch( );

break;

}

}

return 0;

}

void csh( ) //初始化界面

{ int i;

gtxy(0,0);

CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏游標的設置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

for(i=0;i<=W;i=i+2) //橫坐標要為偶數,因為這個要列印的字元佔2個位置

{Color(2); //設定列印顏色為綠色

gtxy(i,0); printf("■"); //列印上邊框

gtxy(i,H); printf("■"); //列印下邊框

}

for(i=1;i<H;i++)

{ gtxy(0,i); printf("■"); //列印左邊框

gtxy(W,i); printf("■"); //列印右邊框

}

while(1)

{ srand((unsigned)time(NULL)); //初始化隨機數發生器srand( )

fod.x=rand()%(W-4)+2; //隨機函數rand( )產生一個從0到比」(W-4)」小1的數再加2

fod.y=rand()%(H-2)+1; //隨機函數rand( )產生一個從0到比」(H-2)」小1的數再加1

if (fod.x%2==0) break; //fod.x是食物的橫坐標,要是2的倍數(為偶數)

}

Color(12); //設定列印顏色為淡紅

gtxy(fod.x,fod.y); printf("●"); //到食物坐標處列印初試食物

snk.len=3; //蛇身長初值為3節

snk.speed=350; //刷新蛇的時間,即移動速度初值為350毫秒

snk.x[0]=W/2+1; //蛇頭橫坐標要為偶數(因為W/2=39)

snk.y[0]=H/2; //蛇頭縱坐標

Color(9); //設定列印顏色為淡藍

gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭

for(i=1;i<snk.len;i++)

{ snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1];

gtxy(snk.x[i],snk.y[i]); printf("■"); //列印蛇身

}

Color(7, 0); //恢復默認的白字黑底

return;

}

void keymove( ) //按鍵操作移動蛇

{ int key;

if( kbhit( ) ) //如有按鍵輸入才執行下面操作

{ key=getch( );

if (key==224) //值為224表示按下了方向鍵,下面要再次獲取鍵值

{ key=getch( );

if(key==72&&dir!=2)dir=1; //72表示按下了向上方向鍵

if(key==80&&dir!=1)dir=2; //80為向下

if(key==75&&dir!=4)dir=3; //75為向左

if(key==77&&dir!=3)dir=4; //77為向右

}

if (key==32)

{ while(1) if((key=getch( ))==32) break; } //32為空格鍵,這兒用來暫停

}

if (Flag==0) //如沒吃食物,才執行下面操作擦掉蛇尾

{ gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); printf(" "); }

int i;

for (i = snk.len - 1; i > 0; i--) //從蛇尾起每節存儲前一節坐標值(蛇頭除外)

{ snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; }

switch (dir) //判斷蛇頭該往哪個方向移動,並獲取最新坐標值

{ case 1: snk.y[0]--; break; //dir=1要向上移動

case 2: snk.y[0]++; break; //dir=2要向下移動

case 3: snk.x[0]-=2; break; //dir=3要向左移動

case 4: snk.x[0]+=2; break; //dir=4要向右移動

}

Color(9);

gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭

if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物則執行以下操作

{ printf("7"); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //7是響鈴

else Flag = 0; //沒吃到食物Flag的值為0

if(snk.speed<150) snk.speed= snk.speed+5; //作弊碼,不讓速度無限加快

}

void putFod( ) //投放食物

{ if (Flag == 1) //如吃到食物才執行以下操作,生成另一個食物

{ while (1)

{ int i,n= 1;

srand((unsigned)time(NULL)); //初始化隨機數發生器srand( )

fod.x = rand( ) % (W - 4) + 2; //產生在游戲框范圍內的一個x坐標值

fod.y = rand( ) % (H - 2) + 1; //產生在游戲框范圍內的一個y坐標值

for (i = 0; i < snk.len; i++) //隨機生成的食物不能在蛇的身體上

{ if (fod.x == snk.x[i] &&fod.y == snk.y[i]) { n= 0; break;} }

if (n && fod.x % 2 == 0) break; //n不為0且橫坐標為偶數,則食物坐標取值成功

}

Color(12); //設定字元為紅色

gtxy(fod.x, fod.y); printf("●"); //游標到取得的坐標處列印食物

}

return;

}

int Over( ) //判斷游戲是否結束的函數

{ int i;

Color(7);

gtxy(2,H+1); printf(「暫停鍵:space.」); //以下列印一些其它信息

gtxy(2,H+2); printf(「游戲得分:%d」,score);

if (snk.x[0] == 0 || snk.x[0] == W) return 1; //蛇頭觸碰左右邊界

if (snk.y[0] == 0 || snk.y[0] == H) return 1; //蛇頭觸碰上下邊界

for (i = 1; i < snk.len; i++)

{ if (snk.x[0] == snk.x[i] && snk.y[0] == snk.y[i]) return 1; } //蛇頭觸碰自身

return 0; //沒碰到邊界及自身時就返回0

}

void Color(int a) //設定顏色的函數

{ SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE ),a ); }