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 ); }