本书共包含十个章节的内容
第一章做敬告 C++语言的概述
一、简答题
1. C++的单词包含那几种?
2. 一个标识符中的首字符必须是什么字符?其余位置上的字符必须是什么字符?
3. 数值常量、字符常量、字符串常量和标识符在表示上各有什么区别?
4. C++语句分为哪几类?
5. #include命令的格式和功能各是什么?使用尖括号和双引号在含义上稿森有什么区别?
6. 你已经知道了那几个系统头文件?
7. cout和cin 标识符的含义是什么?他们后面分别使用纯明什么运算符?各运算符的作用是什么?
8. 上机运行一个程序需要经过那些阶段?
二、填空题
1. 程序中的预处理命令是指以______字符开头的命令。
2. 一条简单语句是以______字符作为结束符的,一条复合语句是分别以______字符和______字符作为开始符和结束符的。
3. 空白符是______符、______符、和______符的统称。
4. 在#include命令中所包含的头文件,可以是______头文件,也可以是______头文件。
5. 使用#include命令可以包含一个头文件,也可以包含一个______文件。
6. 一个函数定义由______和______两部分组成。
7. 一个程序中必须有一个名为______的函数。
8. 函数头与______语句一样都能够提供出函数的参数和返回类型等信息。
9. 若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的______语句。
10. 一个函数的函数体就是一条______。
11. C++头文件和源程序文件的扩展名分别为______和______。
12. 程序文件的编译错误分为______和______两类。
13. 当使用______保留字作为函数类型时,该函数不返回任何值。
14. 当函数参数表用______保留字表示时,则表示该参数表为空。
15. 从一条函数原型语句”int fun1(void)”可知,该函数的返回类型为______,该函数带有______个参数。
16. 当执行cout语句向C++显示输出屏幕输出一个数据项的值时,若该值的显示宽度(即所占显示位置的字符数)为n,则显示该值后光标将从原位置后移______个字符显示位置。
17. 当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到______的开始位置。
18. 当执行cin语句时,从键盘上输入每个数据后必须输入一个______符,然后才能接着输入下一个数据。
三、写出下列程序运行结果,此题又作为上机实验题
1. #include<iostream.h>
void main()
{
int x,y
x=5y=6
cout<<”x+y=”<<x+y<<’,’
cout<<”x*y=”<<x*y<<endl
}
2. #include<iostream.h>
int cube(int)
void main(void)
{
cout<<”cube(3)=”<<cube(3)<<endl
cout<<”cube(5)=”<<cube(5)<<endl
cout<<”cube(8)=”<<cube(8)<<endl
}
int cube(int x)
{
return x*x*x
}
3. #include<iomanip.h>
#include”abc.h”
void main()
{
double a,b,c
double averageValue
a=2b=3c=4
averageValue=AVE(a,b,c)
cout<<”averageValue”<<averageValue<<endl
averageValue=AVE(a,b+1,c+2)
cout<<”averageValue:”<<averageValue<<endl
}
其中abc.h文件的内容如下:
double AVE(double x,double y,double z)
{
return (x+y+z)/3
}
4. #include<iostream.h>
#include”example.h”
void main()
{
int a,b,c
cout<<”请输入3个整数:”
cin>>a>>b>>c
cout<<”最大值:”<<max_value(a,b,c)<<endl
cout<<”最小值:”<<min_value(a,b,c)<<endl
}
其中example.h文件的内容如下:
int max_value(int a,int b,int c)
int min_value(int a,int b,int c)
这两个函数的定义(又称为函数的实现或具体实现)被保存在另一个程序文件中,它将被编译后连接到主文件中产生出可执行文件。该程序文件的内容如下:
int max_value(int a,int b,int c)
{
if(a<b) a=b//若a小于b则将b的值赋给a
if(a<c) a=c//若a小于c则将c的值赋给a
return a
}
int min_value(int a,int b,int c)
{
if(a>b) a=b// 若a大于b则将b的值赋给a
if(a>c) a=c// 若a大于c则将c的值赋给a
return a
}
请读者自行假定用于输入的3个整数。
第二章 数据类型和表达式
一、简答题
1. C++数据分为哪四种大的类型?在大的整数类型中又分为哪四种类型?
2. 整数类型分为哪三种类型,每种类型的长度各是多少?
3. 实数类型分为哪三种类型,它们的类型长度各是多少?
4. 单精度和双精度分别表示多少位有效数字?
5. 每一种C++具体类型的关键字是什么?
6. 哪四种保留字能够用来修饰int 保留字成为类型关键字?哪两种保留字能够用来修饰char保留字成为类型关键字?
7. 整型常数具有哪三种不同进制的表示?如何区分它们?
8. 一个整数后缀L或U分别具有什么含义?
9. 转义字符序列中的首字符是什么字符?
10. 实数具有哪两种表示方法?一个浮点数具有那些成分?什么叫规格化浮点数?
11. 定义符号常量和变量的语句有什么异同?
12. #define命令的作用是什么?
13. 一个C++运算符具有哪三种属性?
14. 左值和非左值(又称右值)有什么区别?
15. 在程序文件中使用系统数学函数或随机函数时,各需要通过#include命令引入哪个头文件?
16. 一个表达式是否必须有一个值,在什么情况下它没有值?
17. 执行一个函数调用的大致过程是什么?函数运算的优先级如何?
二、填空题
1. 数据类型int,char,bool,float,double的类型长度分别为______、______、______、______和______。
2. 短整型、整型和长整型的最简关键字分别为______、______和______。
3. 常数-4.205,1200和6.7E-9分别具有______、______和______位有效数字。
4. 数值常量46、0173和0x62对应十进制值分别为______、______和______。
5. 字符常量 ’k’,’\n’,’\\’,’/052’和’\xA2’对应的数值分别为______、______、______、______和______。
6. 字符串”It \’s\40an\40apple.\n”中包含有______个字符。
7. 枚举类型中的每个枚举值都是一个______,它的值是一个______,值的类型为______。
8. 实数340.0和0.027E8对应的规格化浮点数分别为______和______。
9. 常数100,-25,3.62,1E5和-4.73f的数据类型分别为______、______、______、______和______。
10. 若x的值为10,则x+=5的值和运算后的______的值相同,等于______。
11. 若x=5,y=10,则计算y*=++x表达式后,x和y的值分别为______和______。
12. 若x=25,则计算y=x++表达式后,x和y的值分别为______和______。
13. 假定x和ch分别为int 型和char型,则sizeof(x)和sizeof(ch)的值分别为______和______。
14. 假定x=64,y=88,则x<<2和y>>2的值分别为______和______。
15. 假定x是一个逻辑量,则x&&true的值与______的值相同,x||false的值也与______的值相同。
16. 假定x是一个逻辑量,则x&&!x的值分别为______和______。
17. 假定x=10,则表达式x<=10?20:30的值为______。
18. 假定x=10.5,y=-4.6,则表达式floor(fabs(x+y))的值为______。
19. 表达式sqrt(81)和pow(6,3)的值分别为______和______。
20. 随机函数rand()%20的值在______至______区间内。
21. 数学算式(1+x)sin48°和axbex+1对应的算术表达式分别为______和______。
三、试指出下列各表达式值的类型
假定a为int型,x为double型,
1. 327
2. -1.5e6
3. 42.0f
4. 48L
5. 0372
6. 0xabc
7. 1/3
8. 1%3
9. 1.0%3
10. a*3/x
11. a*(a+x)
12. 1+a*a
13. a+=3
14. x*=2
15. ‘x’
16. ‘x’+20
17. true
18. ++a
19. short(a)
20. bool(x)
21. (unsigned int)(0256)
22. x=a++
23. sizeof(bool)
24. char(a+10)
25. abs(x)
26. fabs(a)
27. floor(x)
28. ceil(a)
29. exp(4)+2
30. rand()
31. rand()/100
32. floor(log(x))
33. pow(a,4)
34. a>10?x:sqrt(x)
35. a>100
36. x!=10
37. a&&x
38. a<1||a>10
39. !x
40. !(a==0)
四、试求出下列每个表达式的值(各表达式互不影响)
已知a=20,x=4.7,r=’a’,
1. a++
2. ++r
3. a%5
4. a/5
5. r%18
6. 1+a/3%4
7. a/8.0
8. r+=4
9. x=2*(x+5)-1
10. char(a+30)
11. 10*sizeof(int)
12. (a<<3)+5
13. a>0
14. a==1
15. a++&&r!=’a’
16. ++a&&r==’a’
17. a||x<=10
18. a==r||a==floor(x)
19. a=(r>’A’?a+10:a-10)
20. a=(r<’A’?a+10:a-10)
21. x=(a++,r++)
22. x=(a++,r++,50)
23. x=pow(3,5)
24. x=fabs(-26.5)+4
25. a=abs(a)%8-10
26. floor(x+0.5)
27. ceil(x-0.5)
28. ceil((x-=0.5)-0.5)
五、把下列数学算式或不等式表示成C++表达式
1. 2x(1+x2/3)
2. (1+ex)/(1-ex)
3. (-b+(b2-4ac)1/2)/2a
4. 1/(3xln(2x+k))
5. sin3(x+π/4)/(3+cos3(x-π/4))
6. 1/7(1+ex+1) n
7. 0<=x<=20
8. ax-by!=c
9. 4x+7y-2=3ab
10. |2x2+1|/|3x+2|<-5同时3x+2!=0
11. age>=55或者pay>=820
12. place=”江苏”同时sex=”女”
13. ‘a’<=ch<=’z’或者’A’<=ch<=’Z’
14. s[0]=’0’同时(s[1]=’x’或者s[1]=’X’)
六、写出下列每个程序运行后的输出结果并自行上机验证
1. #include<iostream.h>
enum race{Black,White,Yellow}
void main()
{
race ra
ra=Blackcout<<ra<<’,’
ra=Whitecout<<ra<<’,’
ra=Yellowcout<<ra<<’,’
cout<<Black+White+Yellow<<endl
}
2. #include<iostream.h>
#define PI 3.14159
const int R=10
void main()
{
double p,s
p=2*R*PI
cout<<”p=”<<p<<endl
cout<<”s=”<<s<<endl
}
3. #include<iostream.h>
void main()
{
int i=0,j=1,k
k=i+=j
cout<<i<<’ ’<<j<<’ ’<<k<<endl
k=(i++)*(++j)
cout<<i<<’ ’<<j<<’ ’<<k<<endl
k*=i++*j--
cout<<i<<’ ’<<j<<’ ’<<k<<endl
}
4. #include<iostream.h>
void main()
{
cout<<sizeof(bool)<<’ ’<<sizeof(char)<<’ ’
cout<<sizeof(short)<<’ ’<<sizeof(int)<<’ ’
cout<<sizeof(long)<<’ ’<<sizeof(float)<<’ ’
cout<<sizeof(double)<<’ ’<<sizeof(long double)<<’ ’
cout<<sizeof(int *)<<’ ’<<sizeof(double *)<<’ ’
}
5. #include<iostream.h>
const int w=30
void main()
{
int x,y
x=w<<2y=w>>2
cout<<w<<’ ’<<x<<’ ’<<y<<endl
x=w&10y=w|10
cout<<w<<’ ’<<x<<’ ’<<y<<endl
x=w^10y=-x&w
cout<<w<<’ ’<<x<<’ ’<<y<<endl
}
6. #include<iostream.h>
void main()
{
int x=10,y=-1
cout<<((x>y)&&(y<0))<<’ ’
cout<<((x>y)||(y<0))<<’ ’
cout<<((x<=y)&&(y>=0))<<’ ’
cout<<((x<=y)||(y>=0))<<’ ’
cout<<((x==y)&&y)<<’ ’
cout<<((x==y)||y)<<’ ’
}
7. #include<iostream.h>
void main()
{
int x=5,y=10,k
(k=x)+=ycout<<x<<’ ’<<y<<’ ’<<k<<endl
k=x+=ycout<<x<<’ ’<<y<<’ ’<<k<<endl
k=x*=ycout<<x<<’ ’<<y<<’ ’<<k<<endl
k=(x++,y++)cout<<x<<’ ’<<y<<’ ’<<k<<endl
k=x++,y++
cout<<x<<’ ’<<y<<’ ’<<k<<endl
}
8. #include<iostream.h>
#include<math.h>
void main()
{
double x=15.72
double y,z
y=ceil(x)z=floor(x)
cout<<x<<’ ’<<y<<’ ’<<z<<endl
y=floor(x+0.5)z=floor(x*10+0.5)/10
cout<<x<<’ ’<<y<<’ ’<<z<<endl
y=ceil(x-0.5)z=ceil(x*10-0.5)/10
cout<<x<<’ ’<<y<<’ ’<<z<<endl
}
七、编写下列程序
1. 已知一个三角形中三条边的长度分别为a,b和c,利用计算公式(s(s-a)(s-b)(s-c))1/2 求出三角形的面积,其中s=(a+b+c)/2,假定a,b和c的值由键盘输入,并确保任何两边的长度大于第三条边。
2. 假定一所大学2001年招生人数为3000人,若以后每年平均比上一年计划扩招10%,则2006年将计划招生多少人?
3. 已知有4个整数为a,b,c,d,试计算出它们的算术平均值和几何平均值。
4. 已知x=2a/2(a+b)sina,y=2b/3(a+b)cosb,试根据从键盘上输入的a和b的值分别计算出x和y的值。
八、上机实验题
1. 让计算机随机出10道两位整数加法题供用户计算,每道题10分,计算完成后打印出得分。
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
const N=10
void main()
{
srand(time(0))
int x,y,z,c=0
for(int I=1I<=NI++)
{
x=rand()%90+10
y=rand()%90+10
cout<<x<<’+’<<y<<’=’
cin>>z
if(x+y==z)c++
}
cout<<”得分:”<<c*10<<endl
}
2. 打印出0°-90°之间每隔5°的正弦值和余弦值。
#include<iomanip.h>
#include<math.h>
const double RAD=3.14159/180
void main()
{
int I=0
while(I<=90)
{
cout<<setw(5)<<I<<setw(10)<<sin(I*RAD)<<’ ’
//setw(n)使后面一个数据的输入宽度为n,
//它在iomanip.h头文件中有定义
cout<<setw(10)<<cos(I*RAD)<<endl
I+=5
}
}
3. 把从键盘上输入的一个正整数按数字位的相反次序输出。
#include<iostream.h>
void main()
{
int num,rem
cout>>num
do{
rem=num%10
num/=10
cout<<rem
}while(num>0)
cout<<endl
}
4. 打印出a-f中每个大小写字母所对应的ASCII码。
#include<iostream.h>
void main()
{
char c1=’A’,c2=’a’
for(int I=1I<=6I++)
{
cout<<c1<<’:’<<int(c1)<<”,”
cout<<c2<<’:’<<int(c2)<<endl
c1++c2++
}
}
5. 从键盘上输入两个整数,由用户回答他们的和、差、乘和取余运算的结果,并统计出正确答案的个数。
#include<iostream.h>
void main()
{
int x,y,z,c=0
cout<<”输入两个整数:”
cin>>x>>y
cout<<x<<’+’<<y<<’=’
cin>>zif(x+y==z) c++
cout<<x<<’-’<<y<<’=’
cin>>zif(x-y==z) c++
cout<<x<<’*’<<y<<’=’
cin>>zif(x*y==z) c++
cout<<x<<’/’<<y<<’=’
cin>>zif(x/y==z) c++
cout<<x<<’%’<<y<<’=’
cin>>zif(x%y==z) c++
cout<<”答对”<<c<<”道题”<<endl
如果STM8S下载程序后没有运行,可以考虑以下几个问题:1. 确保芯片已经正确地烧录了程序。可以使用 STM8CubeProgrammer、STVD或其他 SWIM/SWD 接口的调试工具,查看是否已将程序成功烧录到芯庆脊哗片中。如果程序未能正确下载,则需要检查编译和链接的过程是否正确,并尝试重新下载。
2. 检查程序是否与硬件相兼容。有时候程序适用于某些型号或版本的 STM8S 芯片,而与另一种型号的芯片不兼容,需要检查是否选择了正确的芯片型号。
3. 检查程序代码是否正确。有时候程序未能正确运行是因为存在代码逻辑缺陷或者程序本身存在错误。应该在下载程序前认真检查代码,以确野轮保代码逻辑正确并且符合设计要求。
4. 检查硬件电路是否正确连接。如果芯片的电源和时钟誉行信号等外部引脚连接错误,则可能导致程序无法正常运行。需要检查硬件电路连接是否正确,并排除硬件故障导致程序未能运行的可能性。
综上所述,需要对硬件和软件两方面进行全面的排查,并进行逐一验证,才能找到程序未能运行的原因,并最终解决问题。
#include<stdio.h>#include<string.h>
#include<bios.h>
#include<stdlib.h>
#include<time.h>
#include<dos.h>
int dx[4],dy[4]/*定义全局变量*/
int zt1,zt2,str[15][19]
/*str[15][19]是把整个屏幕分为15*19个方格,每一个方格用一个数组单元表示,
如果=15,则这个方格已被或搏占用,=0,则还是空的*/
int cx[8][5][4],cy[8][5][4]/*该变量表示每种状态下,旋转时坐标的改变*/
int x,y,j,ji,c
int maxzt[8]={0,2,1,4,2,2,4,4}/*各个种类的方块分别有几种状态*/
cir() /*旋转的处理函数*/
{ dx[0]=dx[0]+cx[zt1][zt2][0]dy[0]=dy[0]+cy[zt1][zt2][0]
dx[2]=dx[2]+cx[zt1][zt2][2]dy[2]=dy[2]+cy[zt1][zt2][2]
dx[3]=dx[3]+cx[zt1][zt2][3]dy[3]=dy[3]+cy[zt1][zt2][3]
}
jiance() /*检测旋转或移动能否进行的函数,能则j=1,不能j=0*/
{ j=1
for(ji=0ji<4ji++)
{ x=dx[ji]y=dy[ji]
if(str[x][y]!=' ') j=0
}
c=bioskey(1)
if(c!=0) c=bioskey(0)
}
main()
{ int dotx[4],doty[4],score/*dotx[]doty[]表示一个方块个点的坐标*/
int ddx,ddy
int rzt1,rzt2,i,u,t=1
int a[5],b[11],o,p,an,bn
int rotx[4],roty[4],spd=0
begin: system("cls")/*游戏初始化阶段*/
printf("londing...")
for(i=0i<12i++) /*变量初始阶段*/
{ for(u=0u<19u++)
str[i][u]=' '
}
for(i=0i<12i++)
{ str[i][0]='薯拆-'str[i][18]='-'}
for(u=0u<衫手祥19u++)
{ str[0][u]='|'str[11][u]='|'}
cx[1][1][0]=1cx[1][1][2]=-1cx[1][1][3]=-2/*对旋转变量进行赋值*/
cy[1][1][0]=1cy[1][1][2]=-1cy[1][1][3]=-2
cx[1][2][0]=-1cx[1][2][2]=1cx[1][2][3]=2
cy[1][2][0]=-1cy[1][2][2]=1cy[1][2][3]=2
cx[2][1][0]=0cx[2][1][2]=0cx[2][1][3]=0
cy[2][1][0]=0cy[2][1][2]=0cy[2][1][3]=0
cx[3][1][0]=1cx[3][1][2]=-1cx[3][1][3]=1
cy[3][1][0]=-1cy[3][1][2]=1cy[3][1][3]=1
cx[3][2][0]=1cx[3][2][2]=-1cx[3][2][3]=-1
cy[3][2][0]=1cy[3][2][2]=-1cy[3][2][3]=1
cx[3][3][0]=-1cx[3][3][2]=1cx[3][3][3]=-1
cy[3][3][0]=1cy[3][3][2]=-1cy[3][3][3]=-1
cx[3][4][0]=-1cx[3][4][2]=1cx[3][4][3]=1
cy[3][4][0]=-1cy[3][4][2]=1cy[3][4][3]=-1
cx[4][1][0]=-1cx[4][1][2]=1cx[4][1][3]=2
cy[4][1][0]=1cy[4][1][2]=1cy[4][1][3]=0
cx[4][2][0]=1cx[4][2][2]=-1cx[4][2][3]=-2
cy[4][2][0]=-1cy[4][2][2]=-1cy[4][2][3]=0
cx[5][1][0]=1cx[5][1][2]=1cx[5][1][3]=0
cy[5][1][0]=-1cy[5][1][2]=1cy[5][1][3]=2
cx[5][2][0]=-1cx[5][2][2]=-1cx[5][2][3]=0
cy[5][2][0]=1cy[5][2][2]=-1cy[5][2][3]=-2
cx[6][1][0]=1cx[6][1][2]=-1cx[6][1][3]=0
cy[6][1][0]=-1cy[6][1][2]=1cy[6][1][3]=2
cx[6][2][0]=1cx[6][2][2]=-1cx[6][2][3]=-2
cy[6][2][0]=1cy[6][2][2]=-1cy[6][2][3]=0
cx[6][3][0]=-1cx[6][3][2]=1cx[6][3][3]=0
cy[6][3][0]=1cy[6][3][2]=-1cy[6][3][3]=-2
cx[6][4][0]=-1cx[6][4][2]=1cx[6][4][3]=2
cy[6][4][0]=-1cy[6][4][2]=1cy[6][4][3]=0
cx[7][1][0]=-1cx[7][1][2]=1cx[7][1][3]=2
cy[7][1][0]=1cy[7][1][2]=-1cy[7][1][3]=0
cx[7][2][0]=-1cx[7][2][2]=1cx[7][2][3]=0
cy[7][2][0]=-1cy[7][2][2]=1cy[7][2][3]=2
cx[7][3][0]=1cx[7][3][2]=-1cx[7][3][3]=-2
cy[7][3][0]=-1cy[7][3][2]=1cy[7][3][3]=0
cx[7][4][0]=1cx[7][4][2]=-1cx[7][4][3]=0
cy[7][4][0]=1cy[7][4][2]=-1cy[7][4][3]=-2
srand(time(0))/*对随机数函数rand()进行初始化*/
zt1=rand()%7+1/*生成第一、二个方块*/
if(zt1==2) zt2=1
if(zt1==1||zt1==4||zt1==5) zt2=rand()%2+1
if(zt1==3||zt1==6||zt1==7) zt2=rand()%4+1
rzt1=rand()%7+1
if(rzt1==2) rzt2=1
if(rzt1==1||rzt1==4||rzt1==5) rzt2=rand()%2+1
if(rzt1==3||rzt1==6||rzt1==7) rzt2=rand()%4+1
score=0
for(o=1o<11o++) b[o]=0
switch(zt1*10+zt2)
/*zt1和zt2分别代表方块的种类和状态,这步是根据这两个变量确定方块的四个点的坐标*/
{ case 11: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=7
doty[0]=2doty[1]=2doty[2]=2doty[3]=2
break
case 12: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=5
doty[0]=4doty[1]=3doty[2]=2doty[3]=1
break
case 21: dotx[0]=5dotx[1]=6dotx[2]=5dotx[3]=6
doty[0]=1doty[1]=1doty[2]=2doty[3]=2
break
case 31: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=5
doty[0]=2doty[1]=2doty[2]=2doty[3]=1
break
case 32: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=6
doty[0]=1doty[1]=2doty[2]=3doty[3]=2
break
case 33: dotx[0]=6dotx[1]=5dotx[2]=4dotx[3]=5
doty[0]=1doty[1]=1doty[2]=1doty[3]=2
break
case 34: dotx[0]=6dotx[1]=6dotx[2]=6dotx[3]=5
doty[0]=3doty[1]=2doty[2]=1doty[3]=2
break
case 41: dotx[0]=6dotx[1]=5dotx[2]=5dotx[3]=4
doty[0]=2doty[1]=2doty[2]=1doty[3]=1
break
case 42: dotx[0]=5dotx[1]=5dotx[2]=6dotx[3]=6
doty[0]=3doty[1]=2doty[2]=2doty[3]=1
break
case 51: dotx[0]=4dotx[1]=5dotx[2]=5dotx[3]=6
doty[0]=2doty[1]=2doty[2]=1doty[3]=1
break
case 52: dotx[0]=5dotx[1]=5dotx[2]=6dotx[3]=6
doty[0]=1doty[1]=2doty[2]=2doty[3]=3
break
case 61: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=6
doty[0]=2doty[1]=2doty[2]=2doty[3]=1
break
case 62: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=6
doty[0]=1doty[1]=2doty[2]=3doty[3]=3
break
case 63: dotx[0]=6dotx[1]=5dotx[2]=4dotx[3]=4
doty[0]=1doty[1]=1doty[2]=1doty[3]=2
break
case 64: dotx[0]=6dotx[1]=6dotx[2]=6dotx[3]=5
doty[0]=3doty[1]=2doty[2]=1doty[3]=1
break
case 71: dotx[0]=6dotx[1]=5dotx[2]=4dotx[3]=4
doty[0]=2doty[1]=2doty[2]=2doty[3]=1
break
case 72: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=6
doty[0]=3doty[1]=2doty[2]=1doty[3]=1
break
case 73: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=6
doty[0]=1doty[1]=1doty[2]=1doty[3]=2
break
case 74: dotx[0]=6dotx[1]=6dotx[2]=6dotx[3]=5
doty[0]=1doty[1]=2doty[2]=3doty[3]=3
break
}
switch(rzt1*10+rzt2) /*确定第二个方块各个点的坐标*/
{ case 11: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=7
roty[0]=2roty[1]=2roty[2]=2roty[3]=2
break
case 12: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=5
roty[0]=4roty[1]=3roty[2]=2roty[3]=1
break
case 21: rotx[0]=5rotx[1]=6rotx[2]=5rotx[3]=6
roty[0]=1roty[1]=1roty[2]=2roty[3]=2
break
case 31: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=5
roty[0]=2roty[1]=2roty[2]=2roty[3]=1
break
case 32: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=1roty[1]=2roty[2]=3roty[3]=2
break
case 33: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=5
roty[0]=1roty[1]=1roty[2]=1roty[3]=2
break
case 34: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5
roty[0]=3roty[1]=2roty[2]=1roty[3]=2
break
case 41: rotx[0]=6rotx[1]=5rotx[2]=5rotx[3]=4
roty[0]=2roty[1]=2roty[2]=1roty[3]=1
break
case 42: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=3roty[1]=2roty[2]=2roty[3]=1
break
case 51: rotx[0]=4rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=2roty[1]=2roty[2]=1roty[3]=1
break
case 52: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=1roty[1]=2roty[2]=2roty[3]=3
break
case 61: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=2roty[1]=2roty[2]=2roty[3]=1
break
case 62: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=1roty[1]=2roty[2]=3roty[3]=3
break
case 63: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4
roty[0]=1roty[1]=1roty[2]=1roty[3]=2
break
case 64: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5
roty[0]=3roty[1]=2roty[2]=1roty[3]=1
break
case 71: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4
roty[0]=2roty[1]=2roty[2]=2roty[3]=1
break
case 72: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=3roty[1]=2roty[2]=1roty[3]=1
break
case 73: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=1roty[1]=1roty[2]=1roty[3]=2
break
case 74: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5
roty[0]=1roty[1]=2roty[2]=3roty[3]=3
break
}
system("cls")/*显示初始阶段*/
printf("\n\n\n")/*游戏区域下移3*/
for(u=0u<19u++)
{ for(i=0i<12i++)
printf("%c",str[i][u])
printf("\n")
}
gotoxy(16,5)printf("--------")
gotoxy(16,12)printf("--------")
for(i=6i<12i++)
{ gotoxy(16,i)printf("|")gotoxy(23,i)printf("|")}
for(i=6i<12i++)
{ gotoxy(16,i)printf("|")gotoxy(23,i)printf("|")}
for(i=0i<4i++)
{ gotoxy(rotx[i]+14,roty[i]+6)printf("%c",15)
}
begin2: delay(26000)/*游戏开始,延迟1*/
speed: delay(10000)/*加速,延迟2*/
gotoxy(16,14)printf("Score:%d",score)
for(i=0i<4i++)
{ gotoxy(dotx[i]+1,doty[i]+4)printf(" ")
ddx=dotx[i]ddy=doty[i]
str[ddx][ddy]=' '
}
an=an-0.4/*表示按键是否一直按着,用于方块落地后的移动*/
c=bioskey(1)/*按键处理部分*/
/*bioskey(1)是用来检测是否按下案件的函数*/
if(c!=0)
{ c=bioskey(0)
if(c==8292||c==19712)
{ for(i=0i<4i++)
{ dx[i]=dotx[i]+1dy[i]=doty[i]}
jiance()
for(i=0i<4i++)
dotx[i]=(j)? dx[i] : dotx[i]
an=(j||bn)
}
if(c==7777||c==19200)
{ for(i=0i<4i++)
{ dx[i]=dotx[i]-1dy[i]=doty[i]}
jiance()
for(i=0i<4i++)
dotx[i]=(j)? dx[i] : dotx[i]
an=(j||bn)
}
if(c==6512) /*暂停的处理*/
{ while(1)
{ c=bioskey(0)
if(c==6512) break
}
goto begin3
}
if(c==8051||c==20480) spd=1/*加速(spd==1表示加速状态)*/
if(c==4471||c==18432) /*旋转的处理*/
{ for(i=0i<4i++)
{ dx[i]=dotx[i]dy[i]=doty[i]}
/*dx[]与dy[]是临时变量,这样一旦判断为不能旋转,就可方便的回复旋转前的坐标*/
cir()/*旋转*/
jiance()/*判断旋转是否能进行*/
for(i=0i<4i++)
{ dotx[i]=(j)? dx[i] : dotx[i]doty[i]=(j)?dy[i] : doty[i]}
/*根据jiance()得到的j值,判断是对dotx[]与doty[]赋旋转后的还是旋转前的值*/
if(j==1) /*如果旋转可已经行,就对原方块的状态进行改变*/
{ an=(j||bn)zt2=zt2+1
if(zt2>maxzt[zt1]) zt2=1
goto overif/*结束旋转的处理*/
}
for(i=0i<4i++)
{ dx[i]=dotx[i]+1dy[i]=doty[i]}
/*如果不能旋转,再判断坐标右移一个后能否旋转*/
cir()
jiance()
for(i=0i<4i++)
{ dotx[i]=(j)? dx[i] : dotx[i]doty[i]=(j)?dy[i] : doty[i]}
if(j==1)
{ an=(j||bn)zt2=zt2+1
if(zt2>maxzt[zt1]) zt2=1
goto overif
}
if(dotx[2]==1) goto overif
for(i=0i<4i++)
{ dx[i]=dotx[i]-1dy[i]=doty[i]}
/*判断坐标左移一个后能否旋转*/
cir()
jiance()
for(i=0i<4i++)
{ dotx[i]=(j)? dx[i] : dotx[i]doty[i]=(j)?dy[i] : doty[i]}
if(j==1)
{ an=(j||bn)zt2=zt2+1
if(zt2>maxzt[zt1]) zt2=1
goto overif
}
overif:
}
}
begin3: for(i=0i<4i++) /*方块下移的处理*/
{ dx[i]=dotx[i]dy[i]=doty[i]+1}
jiance()
bn=j
for(i=0i<4i++)
doty[i]=(j)? dy[i] : doty[i]
for(i=0i<4i++)
{ gotoxy(dotx[i]+1,doty[i]+4)printf("%c",15)
ddx=dotx[i]ddy=doty[i]
str[ddx][ddy]=15
}
if(j==1&&spd==1) { spd=0goto speed}
if(j==1||an>0) goto begin2
for(u=17u>0u--) /*方块停止下移(方块移动到底了)的处理*/
{ for(i=1i<11i++) /*判断每一行是否排满*/
if(str[i][u]==15) b[i]=1
if (b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]+b[10]<10)
{ for(o=1o<11o++) b[o]=0
continue
}
for(o=1o<11o++) b[o]=0
a[t]=ut++
}
score+=(t)*(t-1)/2
for(i=1i<11i++)
if(str[i][1]==15) b[i]=1
if (b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]+b[10]>0 &&t==1) goto over
for(o=1o<11o++) b[o]=0
if(t==1) goto ran
switch(t) /*消除方块的处理,t=要消除的函数+1*/
{ case 5: for(u=a[4]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}
/*将要消除的行中,最上面一行,上面的方格整体下移,下面的case 4,3,2类似*/
case 4: for(u=a[3]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}
case 3: for(u=a[2]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}
case 2: for(u=a[1]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}
}
t=1
for(u=1u<18u++)
{ for(i=1i<11i++)
{ gotoxy(i+1,u+4)
printf("%c",str[i][u])
}
}
ran: zt1=rzt1zt2=rzt2rzt1=rand()%7+1/*生成下两个方块*/
if(rzt1==2) rzt2=1
if(rzt1==1||rzt1==4||rzt1==5) rzt2=rand()%2+1
if(rzt1==3||rzt1==6||rzt1==7) rzt2=rand()%4+1
for(i=0i<4i++)
{ dotx[i]=rotx[i]doty[i]=roty[i]
gotoxy(dotx[i]+1,doty[i]+4)printf("%c",15)
}
switch(rzt1*10+rzt2)
{ case 11: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=7
roty[0]=2roty[1]=2roty[2]=2roty[3]=2
break
case 12: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=5
roty[0]=4roty[1]=3roty[2]=2roty[3]=1
break
case 21: rotx[0]=5rotx[1]=6rotx[2]=5rotx[3]=6
roty[0]=1roty[1]=1roty[2]=2roty[3]=2
break
case 31: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=5
roty[0]=2roty[1]=2roty[2]=2roty[3]=1
break
case 32: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=1roty[1]=2roty[2]=3roty[3]=2
break
case 33: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=5
roty[0]=1roty[1]=1roty[2]=1roty[3]=2
break
case 34: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5
roty[0]=3roty[1]=2roty[2]=1roty[3]=2
break
case 41: rotx[0]=6rotx[1]=5rotx[2]=5rotx[3]=4
roty[0]=2roty[1]=2roty[2]=1roty[3]=1
break
case 42: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=3roty[1]=2roty[2]=2roty[3]=1
break
case 51: rotx[0]=4rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=2roty[1]=2roty[2]=1roty[3]=1
break
case 52: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=1roty[1]=2roty[2]=2roty[3]=3
break
case 61: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=2roty[1]=2roty[2]=2roty[3]=1
break
case 62: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=1roty[1]=2roty[2]=3roty[3]=3
break
case 63: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4
roty[0]=1roty[1]=1roty[2]=1roty[3]=2
break
case 64: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5
roty[0]=3roty[1]=2roty[2]=1roty[3]=1
break
case 71: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4
roty[0]=2roty[1]=2roty[2]=2roty[3]=1
break
case 72: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6
roty[0]=3roty[1]=2roty[2]=1roty[3]=1
break
case 73: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6
roty[0]=1roty[1]=1roty[2]=1roty[3]=2
break
case 74: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5
roty[0]=1roty[1]=2roty[2]=3roty[3]=3
break
}
for(i=6i<12i++) /*刷新一下用来显示下一个方块的那个区域*/
{ gotoxy(16,i)printf("|")gotoxy(23,i)printf("|")}
for(i=6i<12i++)
for(u=17u<23u++) { gotoxy(u,i)printf("%c",32)}
for(i=0i<4i++)
{ gotoxy(rotx[i]+14,roty[i]+6)printf("%c",15)}
c=bioskey(1)an=0
if(c!=0) c=bioskey(0)
if(spd==1) { spd=0goto speed}
goto begin2
over: system("cls")
gotoxy(36,11)printf("GAME OVER")
bioskey(0)
system("cls")
printf("Your score is %d\n\n",score)
printf("Press 'Q' to exit\nIf you want to play again,please press other keys.")
score=0
c=bioskey(0)
if(c!=4209) goto begin
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)