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源代碼分析
我發你的郵箱里。