當(dāng)前位置:博客首頁>>C/C++ >> 閱讀正文

C語言數(shù)組練習(xí)-隨機(jī)步法

作者: 鄭曉 分類: C/C++ 發(fā)布于: 2013-05-11 12:00 瀏覽:31,390 評論(13)


提前PS一下:本人小博的關(guān)鍵詞個人博客已經(jīng)上到第二頁了,加油吧?。?!
這是最近幾天學(xué)習(xí)C語言數(shù)組、循環(huán)等的一個小練習(xí)..原題出自C語言程序設(shè)計-現(xiàn)代方法(第2版)。
先說一下程序的要求:
生成一種貫穿10*10字符數(shù)組(初始時全為字符 ‘.’ )的“隨機(jī)步法”。程序必須隨機(jī)地從一個元素“走到”另一個元素,每次都上下、向左或向右移動一個元素位置。已訪問過的元素按訪問順序用字母A到Z進(jìn)行標(biāo)記。
隨機(jī)方向使用rand函數(shù)來產(chǎn)生隨機(jī)數(shù),這里我使用rand()來產(chǎn)生一個屬于0-3閉區(qū)間的數(shù)字以表示方向。
在執(zhí)行移動之前,需要檢查兩項內(nèi)容:一是不能走到數(shù)組外面,二是不能走到已有字母標(biāo)記的位置。只要有一個條件不滿足,就得嘗試換一個方向移動。如果4個方向都堵住了,程序退出。

注釋已經(jīng)寫的很詳細(xì)了…
A的起始位置有兩種方式:1.固定從[0][0]坐標(biāo)開始;2.隨機(jī)位置開始(使用隨機(jī)位置開始后走到Z的機(jī)率明顯增大了..)。
效果圖:

c語言隨機(jī)步法1

c語言隨機(jī)步法1

c語言隨機(jī)步法2

c語言隨機(jī)步法2

代碼:

#include
#include
#include
int x,y;
int main(void) {
//this_x this_y 當(dāng)前坐標(biāo)
//direction 行走方向 0,1,2,3 上右下左
//flag 行走成功標(biāo)記 flag_up_fail等為對應(yīng)方向行走失敗標(biāo)記
int this_x=0,this_y=0,direction,flag,flag_up_fail,flag_right_fail,flag_down_fail,flag_left_fail;
//定義字符ch,矩陣數(shù)組arr
char ch, arr[10][10];
int print_info(char arr[10][10]);
//初始化矩陣arr
//for(x=0;x<10;x++) // for(y=0;y<10;y++) // arr[x][y]='.'; memset(arr,'.',sizeof(arr)); //arr[this_x][this_y] = 'A';//從坐標(biāo)0,0開始 如果從A開始 則注釋下面三行 for從ch='B'開始 //或者行走前隨機(jī)選擇起始坐標(biāo)點(diǎn)。 srand((unsigned)time(NULL)); this_x = rand() % 10; this_y = rand() % 10; for(ch='A';ch<='Z';ch++) { //希望從A走到Z srand((unsigned)time(NULL)+ch);//每走一步后重新生成隨機(jī)數(shù)種子 //每走一步后重置所有成功和失敗標(biāo)記 flag = 0; flag_up_fail=0,flag_right_fail=0,flag_down_fail=0,flag_left_fail=0; //開始隨機(jī)'向下一方向行走' while(1) { //獲得隨機(jī)方向0~3 direction = rand()%4; switch(direction) { case 0 : //向上 //判斷 如果將要行走的方向未越界 且 是未走過的 則 //將當(dāng)前ch走向此方向,坐標(biāo)更新,成功標(biāo)記。 if((this_y-1)>=0 && arr[this_x][this_y-1]=='.') {
this_y -=1;
arr[this_x][this_y] = ch;
flag=1;
printf("行走成功,ch:%c,方向:%d\n",ch,direction);
} else {
//此方向不可走 標(biāo)記失敗
flag_up_fail=1;
}
break;//跳出switch
case 1 : //向右
if((this_x+1)<=9 && arr[this_x+1][this_y]=='.'){ this_x +=1; arr[this_x][this_y] = ch; flag=1; printf("行走成功,ch:%c,方向:%d\n",ch,direction); } else { flag_right_fail=1; } break; case 2 : //向下 if((this_y+1)<=9 && arr[this_x][this_y+1]=='.'){ this_y +=1; arr[this_x][this_y] = ch; flag=1; printf("行走成功,ch:%c,方向:%d\n",ch,direction); } else { flag_down_fail=1; } break; case 3 : //向左 if((this_x-1)>=0 && arr[this_x-1][this_y]=='.'){
this_x -=1;
arr[this_x][this_y] = ch;
flag=1;
printf("行走成功,ch:%c,方向:%d\n",ch,direction);
} else {
flag_left_fail=1;
}
break;
}
//循環(huán)多次后 判斷是否所有的方向都標(biāo)記失敗。
if(flag_up_fail==1 && flag_right_fail==1 && flag_down_fail==1 && flag_left_fail==1) {
return print_info(arr);
}
if(flag==1)break;//行走成功 跳出"行走while"循環(huán) 開始下一步for行走
}
}
return print_info(arr);
}
/*打印矩陣、退出*/
int print_info(char arr[10][10]) {
printf("\n");
for(y=0;y<10;y++) { for(x=0;x<10;x++) { printf("%c ",arr[x][y]); } printf("\n"); } system("pause"); return 0;}

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。

本文永久鏈接: http://yjfs.org.cn/c-language-array-of-exercises-random-footwork.html

C語言數(shù)組練習(xí)-隨機(jī)步法:目前有13 條留言

用戶評論頭像 主板診斷卡批發(fā)發(fā)表于 2013年05月28日 19:01[回復(fù)]

學(xué)習(xí)了、、不過C語言不是一般人可以搞得掂、博主太牛了。。

用戶評論頭像 ixwebhosting發(fā)表于 2013年05月21日 17:57[回復(fù)]

C語言真的是技術(shù)活,好羨慕博主,向你學(xué)習(xí)了

    用戶評論頭像 鄭曉發(fā)表于 2013年05月21日 21:25[回復(fù)]

    我也是新手,剛學(xué)這個。

用戶評論頭像 知我美發(fā)表于 2013年05月19日 21:52[回復(fù)]

真的很不錯 值得學(xué)習(xí)一下

用戶評論頭像 親親美發(fā)表于 2013年05月19日 11:48[回復(fù)]

上學(xué)的時候經(jīng)常用這些,現(xiàn)在荒廢了。。

    用戶評論頭像 鄭曉發(fā)表于 2013年05月19日 19:54[回復(fù)]

    嗯…所以現(xiàn)在打算重新學(xué)一下。。。 :mrgreen:

用戶評論頭像 夏宇軒博客發(fā)表于 2013年05月18日 12:30[回復(fù)]

來看你了,你的文章不錯,歡迎回訪

博客做的不錯,個人博客都不容易,歡迎回訪下我的博客。

用戶評論頭像 明星發(fā)表于 2013年05月16日 00:05[回復(fù)]

收藏。

用戶評論頭像 微庫網(wǎng)發(fā)表于 2013年05月14日 23:54[回復(fù)]

收藏了 不錯

用戶評論頭像 設(shè)備腳輪發(fā)表于 2013年05月14日 09:12[回復(fù)]

學(xué)習(xí)了回去我試一下看一下怎么樣

用戶評論頭像 小Z發(fā)表于 2013年05月13日 12:13[回復(fù)]

哎呦,不錯哦

發(fā)表評論

change vcode