c源码分析
㈠ c语言源代码分析(越易懂越好,我只是一个初学者)
1、%d是整数的表示方法,这是printf函数是规定的
2、后面那个就是%d的值,y是个变量名,它保存了一个值,在你这里就是a+b的值。
㈡ c语言问题
您好,c语言经典100题:
【程序1】
题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少
1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去
掉不满足条件的排列.
2.程序源代码:
main()
{
int i,j,k;
printf("\n");
for(i1;i<5;i++) /*以下为三重循环*/
for(j1;j<5;j++)
for (k1;k<5;k++)
{
if (i!k&&i!j&&j!k) /*确保i,j,k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}
【程序2】
题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数
1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型.
2.程序源代码:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1100000*0.1;bonus2bonus1+100000*0.75;
bonus4bonus2+200000*0.5;
bonus6bonus4+200000*0.3;
bonus10bonus6+400000*0.15;
if(i<100000)
bonusi*0.1;
else if(i<200000)
bonusbonus1+(i-100000)*0.075;
else if(i<400000)
bonusbonus2+(i-200000)*0.05;
else if(i<600000)
bonusbonus4+(i-400000)*0.03;
else if(i<1000000)
bonusbonus6+(i-600000)*0.015;
else
bonusbonus10+(i-1000000)*0.01;
printf("bonus%d",bonus);
}
【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果.请看具体分析:
2.程序源代码:
#include "math.h"
main()
{
long int i,x,y,z;
for (i1;i2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("it is the %dth day.",sum);}
【程序4】
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{
case 1:sum0;break;
case 2:sum31;break;
case 3:sum59;break;
case 4:sum90;break;
case 5:sum120;break;
case 6:sum151;break;
case 7:sum181;break;
case 8:sum212;break;
case 9:sum243;break;
case 10:sum273;break;
case 11:sum304;break;
case 12:sum334;break;
default:printf("data error");break;
}
sumsum+day; /*再加上某天的天数*/
if(year%4000||(year%40&&year%100!0))/*判断是不是闰年*/
leap1;
else
leap0;
if(leap1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);}
【程序5】
题目:输入三个整数x,y,z,请把这三个数由小到大输出.
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小.
2.程序源代码:
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{tx;xy;yt;} /*交换x,y的值*/
if(x>z)
{tz;zx;xt;}/*交换x,z的值*/
if(y>z)
{ty;yz;zt;}/*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}
【程序6】
题目:用*号输出字母c的图案.
1.程序分析:可先用'*'号在纸上写出字母c,再分行输出.
2.程序源代码:
#include "stdio.h"
main()
{
printf("hello c-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}
【程序7】
题目:输出特殊图案,请在c环境中运行,看一看,very beautiful!
1.程序分析:字符共有256个.不同字符,图形不一样.
2.程序源代码:
#include "stdio.h"
main()
{
char a176,b219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);}
【程序8】
题目:输出9*9口诀.
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j,result;
printf("\n");
for (i1;i<10;i++)
{ for(j1;j<10;j++)
{
resulti*j;
printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
【程序9】
题目:要求输出国际象棋棋盘.
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j;
for(i0;i<8;i++)
{
for(j0;j<8;j++)
if((i+j)%20)
printf("%c%c",219,219);
else
printf(" ");
printf("\n");
}
}
【程序10】
题目:打印楼梯,同时在楼梯上方打印两个笑脸.
1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j;
printf("\1\1\n");/*输出两个笑脸*/
for(i1;i<11;i++)
{
for(j1;j<i;j++)
printf("%c%c",219,219);
printf("\n");
}
}
【程序11】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
main()
{
long f1,f2;
int i;
f1f21;
for(i1;i<20;i++)
{ printf("%12ld %12ld",f1,f2);
if(i%20) printf("\n");/*控制输出,每行四个*/
f1f1+f2; /*前两个月加起来赋值给第三个月*/
f2f1+f2; /*前两个月加起来赋值给第三个月*/
}
}
【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数.
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数.
2.程序源代码:
#include "math.h"
main()
{
int m,i,k,h0,leap1;
printf("\n");
for(m101;m<200;m++)
{ ksqrt(m+1);
for(i2;i<k;i++)
if(m%i0)
{leap0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%100)
printf("\n");
}
leap1;
}
printf("\nthe total is %d",h);
}
㈢ 求纯C语言打字游戏源代码及解析
# include "Typer.h"
# include <stdio.h>
# include <stdlib.h>
# include <graphics.h>
//download by http://www.codefans.net
void main()
{
BOOL bQuit=FALSE; /* 是否退出 */
BOOL bPause=FALSE; /* 是否暂停 */
int tm1,tm2;
BYTE Key;
randomize(); /* 初始化随机数种子 */
SetGraphMode();
SelectLevel();
ShowBar();
tm1=CreateTimer(1,MoveLetter); /* 创建移动字符对象时钟 */
tm2=CreateTimer(Interval,CreateLetter); /* 创建产生字符对象时钟 */
CreateLetter();
Key=AscKey();
while (!bQuit)
{
TimerEvent();
switch (Key)
{
case NULL:
break;
case KEY_ESC:
bQuit=TRUE;
break;
case KEY_SPACE:
bPause=!bPause;
tmTM[tm1].Enable=!bPause;
tmTM[tm2].Enable=!bPause;
break;
default:
if (!bPause) Check(Key);
}
Key=AscKey();
}
CloseGraphMode();
}
void SetGraphMode()
{
int Device=VGA,Mode=VGAHI;
initgraph(&Device,&Mode,"");
settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);
setfillstyle(SOLID_FILL,0);
setcolor(7);
}
void CloseGraphMode()
{
restorecrtmode();
}
/* 从键盘缓冲区内直接读出ASC码 */
BYTE AscKey(void)
{
int start,end;
WORD key=0;
start=peek(0,0x41a);
end=peek(0,0x41c);
if (start==end) return(0);
else
{
key=peek(0x40,start);
start+=2;
if (start==0x3e) start=0x1e;
poke(0x40,0x1a,start);
return(key&0xff);
}
}
void MoveLetter(void)
{
int i;
for (i=0;i<MAX_LETTER;i++)
{
if (Letter[i].Used)
{
HideLetter(i);
Letter[i].y+=Step;
ShowLetter(i);
/* 字符对象下落到最底部 */
if (Letter[i].y>MAX_HEIGHT) KillLetter(i);
}
}
}
void KillLetter(int LetterID)
{
if (Letter[LetterID].Used)
{
Letter[LetterID].Used=FALSE;
LetterUsed--;
HideLetter(LetterID);
}
/* 删除字符对象后马上再创建一个 */
CreateLetter();
}
void CreateLetter()
{
int i=0;
int x;
BYTE val;
if (LetterUsed==MAX_LETTER) return; /* 无字符对象可用则返回 */
while (Letter[++i].Used); /* 找到第一个空闲的字符对象,产生一个字符对象 */
x=i;
Letter[i].x=x*640/MAX_LETTER;
Letter[i].y=0;
Letter[i].val=random(26)+'A';
Letter[i].Used=TRUE;
LetterUsed++;
}
void HideLetter(int ID)
{
/* 用填充矩形来消隐字符 */
bar(Letter[ID].x,Letter[ID].y,Letter[ID].x+16,Letter[ID].y+20);
}
void ShowLetter(int ID)
{
char str[2]={0,0};
str[0]=Letter[ID].val;
outtextxy(Letter[ID].x,Letter[ID].y,str);
}
void Check(BYTE Key)
{
int i;
char str[6];
Hits++;
for (i=0;i<MAX_LETTER;i++)
/* 击中 */
if (Letter[i].Used&&Letter[i].val==toupper(Key))
{
sound(1000);
delay(10);
KillLetter(i);
Right++;
nosound();
}
/* 显示状态 */
setfillstyle(SOLID_FILL,5);
bar(260,430,320,450);
bar(410,430,470,450);
setcolor(2);
sprintf(str," %4ld",Hits);
outtextxy(260,430,str);
sprintf(str," %4ld",Right);
outtextxy(410,430,str);
setcolor(7);
setfillstyle(SOLID_FILL,0);
}
void ShowBar()
{
FILE *bmp;
BYTE r,g,b,t;
int i,x,y;
bmp=fopen("bar.bmp","rb");
fseek(bmp,54,SEEK_SET);
for (i=0;i<16;i++)
{
setpalette(i,i);
b=fgetc(bmp)>>2;
g=fgetc(bmp)>>2;
r=fgetc(bmp)>>2;
t=fgetc(bmp)>>2;
setrgbpalette(i,r,g,b);
}
for (y=0;y<80;y++)
for (x=0;x<320;x++)
{
t=fgetc(bmp);
putpixel(x*2,479-y,t>>4);
putpixel(x*2+1,479-y,t&15);
}
fclose(bmp);
}
void SelectLevel()
{
int Steps[3]={1,2,4};
int Intervals[3]={18,9,5};
int Sel=0;
FILE *bmp;
BYTE r,g,b,t,Key;
int i,x,y;
bmp=fopen("sel.bmp","rb");
fseek(bmp,54,SEEK_SET);
for (i=0;i<16;i++)
{
setpalette(i,i);
b=fgetc(bmp)>>2;
g=fgetc(bmp)>>2;
r=fgetc(bmp)>>2;
t=fgetc(bmp)>>2;
setrgbpalette(i,r,g,b);
}
for (y=0;y<200;y++)
for (x=0;x<160;x++)
{
t=fgetc(bmp);
putpixel(x*2+160,339-y,t>>4);
putpixel(x*2+161,339-y,t&15);
}
fclose(bmp);
while (TRUE)
{
Key=toupper(AscKey());
if (Key=='A') Sel=1;
if (Key=='B') Sel=2;
if (Key=='C') Sel=3;
if (Sel) break;
}
Step=Steps[Sel-1];
Interval=Intervals[Sel-1];
cleardevice();
}
/*********************************************************/
/* 文件:TIMER.H */
/*********************************************************/
/*********************************************************/
/* 系统可用计时器的最大数目 */
# define MAXTIMER 10
# ifndef NULL
# define NULL 0
# endif
/* 计时器结构 */
struct TM
{
DWORD Interval; /* 间隔 */
DWORD LastTimer; /* 上次事件发生时间*/
BOOL Enable; /* 活动 */
BOOL Used; /* 可用 */
void (*Pointer)(); /* 事件远指针 */
};
struct TM tmTM[MAXTIMER+1];
int TimerUsed=0;
/* 获取BIOS计数器数值 */
DWORD BiosTimer(void)
{
DWORD BIOSTIMER=0;
BIOSTIMER=peek(0x0,0x46e);
BIOSTIMER<<=8;
BIOSTIMER+=peek(0x0,0x46c);
return (BIOSTIMER);
}
/* 时间事件(时钟系统核心) */
void TimerEvent()
{
int i;
DWORD TimerDiff;
for (i=1;i<=MAXTIMER;i++)
{
if (tmTM[i].Used&&tmTM[i].Enable)
{
TimerDiff=BiosTimer()-tmTM[i].LastTimer;
if (tmTM[i].Interval<=TimerDiff)
{
tmTM[i].Pointer();
tmTM[i].LastTimer=BiosTimer();
}
}
}
}
/* 创建一个时钟(成功返回时钟的句柄,否则返回NULL) */
int CreateTimer(DWORD Interval,void (*Pointer)())
{
int i=0;
if (TimerUsed==MAXTIMER) return NULL;
while (tmTM[++i].Used);
tmTM[i].Pointer=Pointer;
tmTM[i].Interval=Interval;
tmTM[i].Enable=TRUE;
tmTM[i].Used=TRUE;
tmTM[i].LastTimer=BiosTimer();
TimerUsed++;
return i;
}
/* 删除一个时钟 */
void KillTimer(int *TimerID)
{
if (tmTM[*TimerID].Used)
{
TimerUsed--;
tmTM[*TimerID].Used=FALSE;
}
*TimerID=0;
}
/* 删除所有时钟 */
void KillAllTimer()
{
int i;
for (i=0;i<=MAXTIMER;i++) tmTM[i].Used=FALSE;
TimerUsed=0;
}
㈣ 求一个C语言词法分析器源代码
我有,这是这学期刚做的,
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool isLetter(char ch){
if ((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) return true;
else return false;
}
bool isDigit(char ch){
if (ch>='0' && ch<='9') return true;
else return false;
}
bool isP(char ch){
if(ch=='+'||ch=='*'||ch=='-'||ch=='/') return true;
//ch==':'||ch==','||ch=='='||ch==';'||ch=='('||ch==')'
else return false;
}
bool isJ(char ch){
if(ch==','||ch==';'||ch=='.'||ch=='('||ch==')'||ch=='['||ch==']'||ch=='='||ch==':'||ch=='<'||ch=='>'||ch=='{'||ch=='}'||ch=='#') return true;
//
else return false;
}
bool isBlank(char ch){
if(ch==' '||ch=='\t') return true;
else return false;
}
int main(){
string src,ste,s;
char ch0,ch,ch1[2];
char ktt[48][20]={"and","begin","const","div","do","else","end","function","if","integer",
"not","or","procere","program","read","real","then","type","var","while","write","标识符","无符号数",
",",";",":",".","(",")","[","]","..","++","--","+","-","*","/","=","<",">","<>","<="
,">=",":=","{","}","#"};
int pos=0;
FILE *fp;
fp=fopen("d:\\in.txt","r");
ch0=fgetc(fp);
while(ch0!=EOF)
{
//if(ch0!='\t'){src+=ch0;}
src+=ch0;
ch0=fgetc(fp);
}
src+='#';
cout<<src<<endl;
ch=src[pos++];
ste=" ";
for(int j=0;j<47;j++){cout<<j<<ktt[j]<<endl;}
cout<<"词法分析:\n";
while(ch!='#')
{
char str[20];
if(ch!='\n')
{
if(isDigit(ch))
{ //判断常数
int i=0;
while(isDigit(ch)||ch=='.')
{
str[i++]=ch;
//i++;
ch=src[pos++];
}
str[i]='\0';
ste=ste+"|"+"22";
cout<<str;
continue;
}
else if(isLetter(ch))
{ //判断字符
int i=0,j;
while(isLetter(ch)||isDigit(ch))
{
str[i++]=ch;
//i++;
ch=src[pos++];
}
str[i]='\0';
for(j=0;j<21;j++){ //判断是否关键字
int t=strcmp(str,ktt[j]);
if(t==0) {
stringstream ss;
ste+="|";
ss<<ste;ss<<j;
ss>>ste;
break;
}
}
if(j==21){ste=ste+"|"+"21";}
// cout<<" ";
cout<<str;
continue;
}
else if(isP(ch)){ ///判断是否运算符
int i=0,j;
str[i++]=ch;
str[i]='\0';
for(j=34;j<38;j++){
int t=strcmp(str,ktt[j]);
if(t==0) {
stringstream ss;
ste+="|";
ss<<ste;ss<<j;
ss>>ste;
break;
}
}
cout<<str;
ch=src[pos++];
continue;
}
else if(isJ(ch)) //判断是否界符
{
int i=0,j;
while(isJ(ch))
{
str[i++]=ch;
ch=src[pos++];
}
str[i]='\0';
for(j=23;j<47;j++){
int t=strcmp(str,ktt[j]);
if(t==0) {
stringstream ss;
ste+="|";
ss<<ste;ss<<j;
ss>>ste;
break;
}
}
cout<<str;
continue;
}
else if(isBlank(ch))
{
cout<<ch;
ch=src[pos++];
continue;
}
}
else{
cout<<ste<<endl;
ste=" ";
}
ch=src[pos++];
}
return 0;
}
还有运行效果图,和实验报告 ,你要的话留下邮箱
㈤ C语言(是C语言蛤,不要C++)俄罗斯方块程序设计报告+源代码解析。 高手指教,期末回家就看您了。55~·
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int r,p,q=0,score=0;
int speed;
int b[20][10];
int block[7][3][2]
={{-1,0,0,-1,1,-1},
{-1,-1,0,-1,1,0},
{-1,0,-1,1,1,0},
{-1,-1,-1,0,1,0},
{0,-1,1,0,1,-1},
{-2,0,-1,0,1,0},
{0,-1,0,1,-1,0}};
void Display(void);
void BlockRandom(void);
void GotoXY(int x, int y);
void FillBlock(void);
void CleanBlock(void);
void MoveLeft(void);
void MoveRight(void);
void MoveDown(void);
void FastDown(void);
void End(void);
void CheckBlock(void);
void CheckLine(void);
void CleanLine(int);
void ChangeBlock(void);
void Swap(int&,int&);
void Welcome(void);
void Pause(void);
int main(void)
{
int i,j,k;
char c;
p=1;
for(i=0;i<20;i++)
for(j=0;j<10;j++)
b[i][j]=0;
BlockRandom();
Welcome();
Display();
while(1)
{
for(k=0;k<20;k++)
{
if(kbhit())
{
c=getch();
switch(c)
{
case 'a':case '4':MoveLeft();break;
case 'd':case '6':MoveRight();break;
case 'w':case '8':CleanBlock();ChangeBlock();Display();break;
case 's':case '5':FastDown();break;
case 'x':case '2':MoveDown();break;
case 'p':Pause();break;
case 'q':{
GotoXY(1,24);
printf("Sorry,Game Over!");
GotoXY(1,25);
printf("Press any key to ESC...");
getch();
exit(1);
};break;
}
}
_sleep(25);
}
MoveDown();
}
return 0;
}
void Display()
{
int i,j;
FillBlock();
GotoXY(1,1);
for(i=0;i<20;i++)
{
printf("■");
for(j=0;j<10;j++)
{
switch(b[i][j])
{
case 0:printf(" ");break;
case 1:printf("□");break;
case 2:printf("■");break;
}
}
printf("■\n");}
for(i=0;i<12;i++)
printf("■");
GotoXY(1,22);
printf("SCORE:%d",score);
GotoXY(1,23);
printf("LEVEL=%d",score/100);
}
typedef struct
{
int X;
int Y;
}COORD;
void GotoXY(int x, int y)
{
COORD c;
c.X = x-1;
c.Y = y-1;
}
void BlockRandom()
{
srand((unsigned)time(NULL));
int k,rr,i;
k=rand()%7;
rr=rand()%4;
r=k;
for (i=0;i<=rr;i++)
ChangeBlock();
}
void FillBlock()
{
int i,x,y;
for(i=0;i<3;i++)
{
x=block[r][i][0];
y=block[r][i][1];
if(b[x+p][5+y+q]!=2)
b[x+p][5+y+q]=1;
else End();
if(5+y+q>9)
MoveLeft();
if(5+y+q<0)
MoveRight();
}
if(b[p][5+q]!=2)
b[p][5+q]=1;
else End();
}
void CleanBlock(void)
{
int i,x,y;
for(i=0;i<3;i++)
{
x=block[r][i][0];
y=block[r][i][1];
b[x+p][5+y+q]=0;
}
b[p][5+q]=0;
}
void MoveLeft(void) //左移
{
if(p==0) return;
int i,x,y;
for(i=0;i<20;i++)
if(b[i][0]==1) return;
for(i=0;i<3;i++)
{
x=block[r][i][0];
y=block[r][i][1];
if(b[x+p][4+y+q]==2)
return;
}
CleanBlock();
q--;
FillBlock();
Display();
}
void MoveRight(void) //右移
{
if(p==0) return;
int i,x,y;
for(i=0;i<20;i++)
if(b[i][9]==1) return;
for(i=0;i<3;i++)
{
x=block[r][i][0];
y=block[r][i][1];
if(b[x+p][6+y+q]==2)
return;
}
CleanBlock();
q++;
FillBlock();
Display();
}
void MoveDown(void) //下移
{
CleanBlock();
p++;
Display();
CheckBlock();
}
void End()
{
char c=0;
int i,j,x,y;
for(i=0;i<3;i++)
{
x=block[r][i][0];
y=block[r][i][1];
b[x+p][5+y+q]=2;
}
b[p][5+q]=2;
GotoXY(1,1);
for(i=0;i<20;i++)
{
printf("■");
for(j=0;j<10;j++)
{
switch(b[i][j])
{
case 0:printf(" ");break;
case 1:printf("□");break;
case 2:printf("■");break;
}
}
printf("■\n");}
for(i=0;i<12;i++)
printf("■");
GotoXY(1,22);
printf("SCORE:%d",score);
GotoXY(1,23);
printf("LEVEL:%d",score/100);
GotoXY(1,24);
printf("Sorry,Game Over!");
GotoXY(1,25);
printf("Press Q to ESC...");
do
{
c=getch();
}
while(c!='q');
exit(1);
}
void CheckBlock()
{
int i,x,y,k;
char c;
Display();
for(i=0;i<10;i++)
if(b[0][i]==1&&b[1][i]==2) End();
for(i=0;i<3;i++)
{
x=block[r][i][0];
y=block[r][i][1];
if(b[x+p+1][5+y+q]==2||b[p+1][5+q]==2||x+p==19)
{
for(k=0;k<10;k++)
{
if(kbhit())
{
c=getch();
switch(c)
{
case 'a':case '4':MoveLeft();break;
case 'd':case '6':MoveRight();break;
case 'w':case '8':CleanBlock();ChangeBlock();Display();break;
case 'p':Pause();break;
case 'q':
{
GotoXY(1,24);
printf("Sorry,Game Over!");
GotoXY(1,25);
printf("Press any key to ESC...");
c=getch();
exit(1);
};
break;
}
}
_sleep(5);
}
if(!(b[x+p+1][5+y+q]==2||b[p+1][5+q]==2||x+p==19))
CheckBlock();
for(i=0;i<3;i++)
{
x=block[r][i][0];
y=block[r][i][1];
b[x+p][5+y+q]=2;
}
b[p][5+q]=2;
CheckLine();
BlockRandom();
p=0;q=0;
FillBlock();
CheckBlock();
Display();
}
}
}
void CheckLine()
{
int i,j,s=0,t=0;
for(i=0;i<20;i++)
{
s=0;
for(j=0;j<10;j++)
s+=b[i][j];
if (s==20)
{s=0;CleanLine(i);t++;}
}
switch (t)
{
case 1:score++;break;
case 2:score+=3;break;
case 3:score+=5;break;
case 4:score+=8;break;
}
switch(score/100)
{
case 0:speed=25;break;
case 1:speed=20;break;
case 2:speed=17;break;
case 3:speed=15;break;
case 4:speed=12;break;
case 5:speed=10;break;
case 6:speed=7;break;
case 7:speed=5;break;
case 8:speed=2;break;
case 9:{speed=0;break;}
}
}
void CleanLine(int l)
{
int i,j;
for(i=l-1;i>=0;i--)
for(j=0;j<10;j++)
b[i+1][j]=b[i][j];
for(i=0;i<10;i++)
b[0][j]=0;
}
void ChangeBlock(void)
{
int i,yy;
if (r==4) return;
for(i=0;i<3;i++)
{
if(block[r][i][0]*block[r][i][1]>0)
block[r][i][1]=(-1)*block[r][i][1];
else if(block[r][i][0]*block[r][i][1]<0)
block[r][i][0]=(-1)*block[r][i][0];
else if(block[r][i][0]==0)
Swap(block[r][i][0],block[r][i][1]);
else if(block[r][i][1]==0)
{
Swap(block[r][i][0],block[r][i][1]);
block[r][i][1]*=-1;
}
}
for(i=0;i<3;i++)
{
yy=block[r][i][1];
if(5+yy+q>9) q--;
if(5+yy+q<0) q++;
if(5+yy+q>9) q--;
if(5+yy+q<0) q++;}
}
void Swap(int& x,int& y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void Welcome(void)//进入游戏界面
{
int i;
printf("旋转:W/8 下落:X/2 左移:A/4 右移:D/6 瞬间下落:S/5 暂停:P 退出:Q\n");
printf("平均每提高100分 速度会加快一个级别\n");
printf("S 为快速下落 按下后直接落到底部\n");
for(i=0;i<25;i++)
{
printf("*");
_sleep(100);
}
printf("\n\n");
printf("Now ");_sleep(200);
printf("let ");_sleep(200);
printf("us ");_sleep(200);
printf("play ");_sleep(200);
printf("the ");_sleep(200);
printf("game ");_sleep(200);
printf("!\n\n");_sleep(200);
for(i=0;i<25;i++)
{
printf("*");
_sleep(100);
}
printf("\n\n");
system("pause");
system("cls");
}
void FastDown(void)
{
while(p)
MoveDown();
}
void Pause(void)
{
char c;
GotoXY(1,23);
printf("Pause! ");
do
{
c=getch();
}
while(c!='p');
}
㈥ C语言的源代码是什么意思啊
C语言源代码,就是依据C语言规则所写出的程序代码,常见的存储文件扩展名为.c文件和.h文件,分别对应C源文件(source file)和C头文件(header file)。
C语言是一门编程语言,简单点说,就是由人类书写按照一定规范书写的字符,通过一定手段(编译链接)转换后,可以让电脑或者其它电子芯片"读懂",并按照其要求工作的语言。
在所有的编程语言中,C语言是相对古老而原始的,同时也是在同类语言中更接近硬件,最为高效的编程语言。
(6)c源码分析扩展阅读:
C语言广泛应用于底层开发。它的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
它能提供了许多低级处理的功能,可以保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
㈦ C语言,C语言源代码到底是什么意思
现在的教学流程有问题
要是我肯定先拿一个可以正常运行的helloworld来一边改
一边讲解
然后写个猜数字控制台程序
接下来用MFC给他写个界面
让大家知道学习这些算法到底有什么用
再往后,我可能会一直教界面编程
直到你们感觉到自己的算法需要深入学习
然后再回过头去学算法
别用什么垃圾TC了,这都什么年代了
新手建议VC6即可,又可以学算法
也能开发MFC界面程序对电脑配置要求也不搞
甚至绿色精简版就能用
然后写一些游戏相关的工具或者网络相关的工具
不怕不懂,这样至少知道缺什么知识,然后去学
我最讨厌学一大堆,也不知道有什么用的
提不起兴趣,也没有积极主动性
我写的网游服务器在线人数实时显示。。。。
还有游戏辅助没写完 这里不能上图了,要是上那个估计会被删除回答
㈧ 一段C语言源代码,求人分析一下,主要分析一下带T的语句,悬赏80分,回答后给
int CreatBiTree(BiTree *T) //函数创建一个二叉树
{
char ch;
ch = getchar();
if(ch == '#')
(*T) = NULL; //输入#代表该结点为空
else
{
(*T) = (BiTree)malloc(sizeof(BitNode)); //分配一个空间生成一个新的子树结点
(*T)->data = ch; //将值赋给该结点
CreatBiTree(&(*T)->lchilde); //递归调用进入左子树创建
CreatBiTree(&(*T)->rchilde); //递归调用进入右子树创建
}
return 1;
}
有疑问请追问
㈨ 求一个C语言词法分析器源代码。要求:输入一个.c的源程序,输出该程序中所有变量。
首先做一个字符串数组
char *keyword[] 里面放入所有数据类型关键字,int,double什么的。
然后一行一行处理,找里面的关键字,找到以后顺序往后找,将空格,逗号,等号作为间隔符。将分号作为结束标志。
等号后面到下一个逗号或者分号之间的都忽略掉,如果有括号(大中小),到下一个括号之间的都忽略掉。
如果是long,unsigned,继续分析后面是不是int。
基本就ok了。你要我帮你写源码的话,没那时间。
㈩ linux kernel forck.c源代码分析
我发你的邮箱里。