❶ c語言程序代碼
C語言源代碼,就是依據C語言規則所寫出的程序代碼,常見的存儲文件擴展名為.c文件和.h文件,分別對應C源文件(source file)和C頭文件(header file)。
C語言是一門編程語言,簡單點說,就是由人類書寫按照一定規范書寫的字元,通過一定手段(編譯鏈接)轉換後,可以讓電腦或者其它電子晶元"讀懂",並按照其要求工作的語言。在所有的編程語言中,C語言是相對古老而原始的,同時也是在同類語言中更接近硬體,最為高效的編程語言。
相關內容:
C語言是一門面向過程的計算機編程語言,與C++、C#、Java等面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
C語言描述問題比匯編語言迅速、工作量小、可讀性好、易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%-20%。因此,C語言可以編寫系統軟體。
當前階段,在編程領域中,C語言的運用非常之多,它兼顧了高級語言和匯編語言的優點,相較於其它編程語言具有較大優勢。計算機系統設計以及應用程序編寫是C語言應用的兩大領域。同時,C語言的普適較強,在許多計算機操作系統中都能夠得到適用,且效率顯著。
C語言擁有經過了漫長發展歷史的完整的理論體系,在編程語言中具有舉足輕重的地位。
❷ C語言迷宮,要完整代碼的
#include<stdio.h>
#include<conio.h>
intmigong[10][10]=//設置迷宮,最外圍1為牆里邊0為可走路徑1為障礙
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,1,1,1},
{1,0,1,1,1,1,1,0,0,1},
{1,0,1,0,0,0,0,0,0,1},
{1,0,0,0,1,0,1,1,1,1},
{1,1,1,1,0,0,1,1,1,1},
{1,0,0,0,0,1,1,1,1,1},
{1,0,1,1,0,0,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
intnum;
struct
{
intx,y,d;
}lj[100];//x,y分別為垂直和水平方向
voidstart()
{
inttop=0,x,y,d,find;//d為設置方向,上下左右。find為設置找不找得到路
lj[top].x=1;
lj[top].y=1;
migong[1][1]=-1;
find=0;d=-1;
while(top>-1){
if(lj[top].x==8&&lj[top].y==8)
{
printf("迷宮路徑如下: ");
printf("start->");
for(x=0;x<=top;x++)
{
printf("(%d,%d)->",lj[x].x,lj[x].y);//把找到的路徑輸出
num++;
if(num%8==0)
printf(" ");
}
printf("->end! ");
}
while(d<4&&find==0){
d++;
switch(d){
case0:x=lj[top].x-1;y=lj[top].y;break;//方向為上
case1:x=lj[top].x;y=lj[top].y+1;break;//方向為右
case2:x=lj[top].x+1;y=lj[top].y;break;//方向為下
case3:x=lj[top].x;y=lj[top].y-1;}//方向為左
if(migong[x][y]==0)
find=1;
}
if(find==1){//判斷是否找得到
lj[top].d=d;
top++;
lj[top].x=x;
lj[top].y=y;
d=-1;find=0;//重新調整方向
migong[x][y]=-1;}
else{
migong[lj[top].x][lj[top].y]=0;
top--;d=lj[top].d;//找不到的話退棧
}
}
}
voidmain()
{
start();
getch();
}
❸ 誠求用C語言編一個實現走迷宮問題的代碼。
全部程序分幾個文件,看清楚了,每段程序放入一個文件,每段程序前面都有文件名:
//stackoperation.cpp
Status InitStack(SqStack &S)
{ //構造一個空棧S
S.base = (SElemType *)malloc(RANGE*sizeof(SElemType));
if(!S.base) exit(OVERFLOW); //存儲分配失敗
S.top = S.base;
S.stacksize = RANGE;
return OK;
}//Initstack
Status Push(SqStack &S,SElemType e)
{ //插入元素e為新的棧頂元素
if(S.top - S.base >= S.stacksize){//棧滿,追加存儲空間
S.base = (SElemType*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!S.base) exit(OVERFLOW); //存儲分配失敗
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}//Push
Status Pop(SqStack &S,SElemType &e){
/*若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;
否則返回ERROR*/
if(S.top == S.base) return ERROR;
e = * --S.top;
return OK;
}//Pop
bool StackEmpty(SqStack S)
{ //判斷棧是否為空並返回TURN或FALSE
if(S.top == S.base) return TURE;
return FALSE;
}//StackEmpty
void PrintStack()
{
SqStack ST;
SElemType e;
InitStack(ST);
do{
Pop(SqS,e);
Push(ST,e);
}while(!StackEmpty(SqS));
do{
Pop(ST,e);
printf("(%d,%d,%d)",e.seat.i,e.seat.j,e.di);
}while(!StackEmpty(ST));
}
//migong.cpp
#include "Basetype.h"
#include "stackoperation.cpp"
#include "Mazeoperation.cpp"
void main()
{
char filename[15];
FILE *fp;
printf("請輸入迷宮數據文件名(長度不超過15個字元):");
scanf("%s",&filename);
//如找不到文件,則要求重新輸入(最多三次機會)
for(int i=0;i<3;i++){
if((fp = fopen(filename,"r")) == NULL)
{printf("不能打開文件,請重新輸入文件名(長度不超過15個字元):\n");
scanf("%s",filename);
}//if
break;
}//for
//讀取迷宮的行數和列數
int rnum,cnum;
fscanf(fp,"%d,%d",&rnum,&cnum);
printf("這個迷宮有%d行,%d列\n",rnum,cnum);
if(rnum>RANGE-2 || cnum>RANGE-2)
{ printf("迷宮太大,無法求解\n");
return;
}//判斷迷宮的大小是否符合要求
//初始化一個迷宮變數
MazeType maze;
for(i=0;i<=rnum+1;i++)
for(int j=0;j<=cnum+1;j++)
maze.arr[i][j] = '#';
CreatMaze(maze,rnum,cnum,fp);//創建迷宮
fclose(fp);//關閉迷宮文件
//列印當前迷宮
printf("當前迷宮為:\n");
for(i=0;i<=rnum+1;i++)
{ for(int j=0;j<=cnum+1;j++)
printf("%c",maze.arr[i][j]);
printf("\n");
}
printf("其中'#'表示障礙,外圍一圈'#'為圍牆\n");
//讀取入口及出口位置
PosType startp,endp;
printf("請輸入入口位置(兩數中間以逗號相隔):");
scanf("%d,%d",&startp.i,&startp.j);
printf("請輸入出口位置(兩數中間以逗號相隔):");
scanf("%d,%d",&endp.i,&endp.j);
if(MazePath(maze,startp,endp))
{ PrintMaze(maze,rnum,cnum);//將求解的迷宮輸出到文件保存,並列印到屏幕
PrintStack();//如果存在路徑則列印之
}
else printf("此迷宮不存在路徑\n");
}//main
//Mazeoperation.cpp
bool Pass(MazeType maze,PosType curpos)
{ //判斷當前位置是否可通,並返回值
switch(char ch = maze.arr[curpos.i][curpos.j])
{ case' ': return(FALSE);
case'#':
case'@':
case'*': return(TURE);
default: { printf("迷宮中第%d行,第%d列出現不明字元%c\n",
curpos.i,curpos.j,ch);exit(0);}
}//switch
}//pass
void FootPrint(MazeType &maze,PosType curpos)
{
maze.arr[curpos.i][curpos.j] = '*';
}//FootPrint
void MarkPrint(MazeType &maze,PosType curpos)
{
maze.arr[curpos.i][curpos.j] = '@';
}//MarkPrint
void NextPos(PosType &curpos,int di)
{
switch(di)
{ case 1: curpos.j++;break;
case 2: curpos.i++;break;
case 3: curpos.j--;break;
case 4: curpos.i--;break;
default: printf("當前方向%d無效\n",di);
exit(0);
}//switch
}//NextPos
bool MazePath(MazeType &maze,PosType start,PosType end){
SElemType e;
InitStack(SqS);
PosType curpos = start;
int curstep = 1;
do{
if(!Pass(maze,curpos)){
FootPrint(maze,curpos);
e.order = curstep;
e.seat.i = curpos.i;e.seat.j = curpos.j;
e.di = 1;
Push(SqS,e);
if(curpos.i == end.i && curpos.j == end.j) return(TURE);
NextPos(curpos,1);
curstep++;
}//if
else{
if(!StackEmpty(SqS)){
Pop(SqS,e);
while(e.di == 4 && !StackEmpty(SqS)){
MarkPrint(maze,e.seat); Pop(SqS,e);
}//while
if(e.di<4){
e.di++; Push(SqS,e);
NextPos(e.seat,e.di);
curpos.i = e.seat.i;curpos.j = e.seat.j;
}//if
}//if
}//else
}while(!StackEmpty(SqS));
return(FALSE);
}//Mazepath
void CreatMaze(MazeType &maze,int row,int col,FILE *fp){
//建立迷宮
char ch = fgetc(fp);
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{switch( ch = fgetc(fp))
{
case'0': maze.arr[i][j]=' ';break;
case'1': maze.arr[i][j]='#';break;
default: printf("迷宮第%d行第%d列數據為%c有錯誤",i,j,ch);exit(0);
}//switch
}//for
fseek(fp,2,1);
}//for
fclose(fp);
}//CreatMaze
void PrintMaze(MazeType maze,int row,int col)
{ //列印結果並輸出到文件保存
FILE *out;
if((out = fopen("outfile","w"))==NULL)
{ printf("不能打開文件\n");
exit(0);
}//if
for(int i=0;i<=row+1;i++)
{for(int j=0;j<=col+1;j++)
{ fputc(maze.arr[i][j],out);
printf("%c",maze.arr[i][j]);
}
printf("\n");
}
printf("其中'*'號代表路徑,'#'代表障礙,'@'代表死胡同\n");
fclose(out);//關閉文件
}
//Basetype.h
#include <stdio.h>
#include "stdlib.h"
#define RANGE 30 //棧的存儲空間初始分配量,
//以及用來存放迷宮的字元數組的最大維數
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define STACKINCREMENT 5 //棧的存儲空間分配增量
typedef struct{
int i; //行坐標
int j; //列坐標
}PosType; //迷宮中坐標位置類型
//棧的定義
typedef struct{
int order; //通道塊在路徑上的「方向」
PosType seat; //通道塊在迷宮中的「坐標位置」
int di; //從此通道塊走向下一通道塊的「方向」
}SElemType; //棧的元素類型
typedef struct{
SElemType *base; //棧底指針
SElemType *top; //棧頂指針
int stacksize; //當前已分配的存儲空間,以元素為單位
}SqStack;
//迷宮的定義
typedef struct{
int m,n;
char arr[RANGE][RANGE];
}MazeType;
typedef int Status;
SqStack SqS; //定義一個棧
❹ C語言如何編寫旋轉矩陣源代碼
這里以順時針旋轉90°為例:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineN4
voidmain()
{
inti,j;
inta[N*N],b[N][N];//這里設置旋轉為4*4的矩形,自己在這里改成其它的矩形
int*p=a;//用指針來指向這個一維數組。這樣在旋轉賦值的時候會輕松很多
srand(time(NULL));
for(i=0;i<N*N;i++)
{
a[i]=rand()%100;//隨機生成0~99
printf("%d ",a[i]);
if((i+1)%4==0)
printf(" ");
}
for(i=N-1;i>=0;i--) //旋轉賦值,這里可修改旋轉的方向和角度
for(j=0;j<N;j++,p++)
b[j][i]=*p;
printf("順時針旋轉90度後: ");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%d ",b[i][j]);
printf(" ");
}
}
這種旋轉矩形的,個人建議生成一維數組,用指針指向改數組,再用指針來賦值;也可生成二維數組,再定義數組指針來指向,這樣稍麻煩一些些。
❺ 誰有C語言,生成隨機迷宮的代碼
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#defineHeight31//迷宮的高度,必須為奇數
#defineWidth25//迷宮的寬度,必須為奇數
#defineWall1
#defineRoad0
#defineStart2
#defineEnd3
#defineEsc5
#defineUp1
#defineDown2
#defineLeft3
#defineRight4
intmap[Height+2][Width+2];
voidgotoxy(intx,inty)//移動坐標
{
COORDcoord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
voidhidden()//隱藏游標
{
HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFOcci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=0;//賦1為顯示,賦0為隱藏
SetConsoleCursorInfo(hOut,&cci);
}
voidcreate(intx,inty)//隨機生成迷宮
{
intc[4][2]={0,1,1,0,0,-1,-1,0};//四個方向
inti,j,t;
//將方向打亂
for(i=0;i<4;i++)
{
j=rand()%4;
t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;
t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;
}
map[x][y]=Road;
for(i=0;i<4;i++)
if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall)
{
map[x+c[i][0]][y+c[i][1]]=Road;
create(x+2*c[i][0],y+2*c[i][1]);
}
}
intget_key()//接收按鍵
{
charc;
while(c=getch())
{
if(c==27)returnEsc;//Esc
if(c!=-32)continue;
c=getch();
if(c==72)returnUp;//上
if(c==80)returnDown;//下
if(c==75)returnLeft;//左
if(c==77)returnRight;//右
}
return0;
}
voidpaint(intx,inty)//畫迷宮
{
gotoxy(2*y-2,x-1);
switch(map[x][y])
{
caseStart:
printf("入");break;//畫入口
caseEnd:
printf("出");break;//畫出口
caseWall:
printf("※");break;//畫牆
caseRoad:
printf("");break;//畫路
}
}
voidgame()
{
intx=2,y=1;//玩家當前位置,剛開始在入口處
intc;//用來接收按鍵
while(1)
{
gotoxy(2*y-2,x-1);
printf("☆");//畫出玩家當前位置
if(map[x][y]==End)//判斷是否到達出口
{
gotoxy(30,24);
printf("到達終點,按任意鍵結束");
getch();
break;
}
c=get_key();
if(c==Esc)
{
gotoxy(0,24);
break;
}
switch(c)
{
caseUp://向上走
if(map[x-1][y]!=Wall)
{
paint(x,y);
x--;
}
break;
caseDown://向下走
if(map[x+1][y]!=Wall)
{
paint(x,y);
x++;
}
break;
caseLeft://向左走
if(map[x][y-1]!=Wall)
{
paint(x,y);
y--;
}
break;
caseRight://向右走
if(map[x][y+1]!=Wall)
{
paint(x,y);
y++;
}
break;
}
}
}
intmain()
{
inti,j;
srand((unsigned)time(NULL));//初始化隨即種子
hidden();//隱藏游標
for(i=0;i<=Height+1;i++)
for(j=0;j<=Width+1;j++)
if(i==0||i==Height+1||j==0||j==Width+1)//初始化迷宮
map[i][j]=Road;
elsemap[i][j]=Wall;
create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1));//從隨機一個點開始生成迷宮,該點行列都為偶數
for(i=0;i<=Height+1;i++)//邊界處理
{
map[i][0]=Wall;
map[i][Width+1]=Wall;
}
for(j=0;j<=Width+1;j++)//邊界處理
{
map[0][j]=Wall;
map[Height+1][j]=Wall;
}
map[2][1]=Start;//給定入口
map[Height-1][Width]=End;//給定出口
for(i=1;i<=Height;i++)
for(j=1;j<=Width;j++)//畫出迷宮
paint(i,j);
game();//開始游戲
getch();
return0;
}
❻ C語言 游戲 代碼
「坑人的無限」(一):
#include<iostream>
#include<windows.h>
#include<ctime>
#include<cstdlib>
#include<conio.h>
using namespace std;
int a;
class Screen
{
private:
int n;
public:
Screen()
{
n=5;
}
void move1()//注意只是循環輸出各個數字,不能對循環輸出再進行循環(如果對循環輸出0123456789再進行循環,則move1就變成一個無限循環的函數,則下面的screen循環就進行不下去了)
{
for(int i=0;i<10;++i)
{
cout<<char(1)<<" ";
}
}
void move2()
{
char i;
for(i='a';i<='z';++i)
{
cout<<char(1)<<" ";
}
}
void screen()
{
int t;
while(!kbhit())
{
t=time(0)%(2*n);//如果是放在循環外面的話,time(0)的值就一直不變,放在循環裡面,一秒鍾進行一次判斷,一秒鍾進行一次循環
if(t<n)
move1();
else
move2();
}
}
};
int main(){
cout<<"歡迎來到「無限 」游戲"<<char(1)<<endl;
cout<<"下面會輸出無限個笑臉"<<char(1)<<endl;
cout<<"按'enter'取消"<<endl;
Sleep(4000);
Screen s;
s.screen();
cout<<endl<<"哈哈!!控制不住了吧!"<<char(1)<<endl;
cout<<"接下來會更讓你喪心病狂的!"<<char(1)<<endl;
cout<<"但是堅持過後必有彩蛋!!!!!!加油!!";
cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
Sleep(10000);
for(int as=0;as<=50;as++){
for(int i=0;i<=100;i++){
for(int j=0;j<=10;j++){
cout<<char(2)<<" ";
}
cout<<endl;
}
for(int i=0;i<=100;i++){
for(int j=0;j<=10;j++){
cout<<char(1)<<" ";
}
cout<<endl;
}
}
cout<<"你居然堅持下來了!"<<char(1)<<" "<<char(2)<<endl<<"不可思議呀!"<<endl;
for(int i=0;i<=10;i++){
cout<<"-----------------------------------------------"<<endl;
}
cout<<"敬請期待!等待無限游戲(二)!";
return 0;
}