2020秋季C語言綜合練習題(節選)

2021-10-11 20:48:44 字數 3846 閱讀 3678

題目描述公元13世紀上半葉,蒙古軍隊一路西征殺向歐洲。在進軍途中,蒙古騎兵以旗為單位沿一條道路相繼開進。為了給後面的隊伍指路,每當遇到乙個道路分叉處時,就在路旁堆石頭堆作路標,堆一堆石頭表示直行,堆兩堆石頭表示右轉,堆三堆石頭表示左轉。試用c語言編寫乙個程式,計算出通過的路口數目。假設每個相鄰路口間路段的長度基本相等且開始的方向向西(以此判斷第乙個路口,即出發時向哪個方向走),用輸出eswn四個字母或其組合來確定最終的地點相對於出發地(即第乙個路口)的方位。

輸入格式:只有一行(以』\n』結束),分別用1、2和3表示路口遇到的石碓的數量,最多有20個路口。

輸出格式:只有一行,由乙個數字和乙個字母或兩個字母組合分別構成路口的數目和最終地點與出發地的方位。如果需要輸出兩個字母,則輸出字母按照字典序輸出(不用考慮回到原始出發點的情況)

輸入樣例

31
輸出樣例

2,s
#include

intmain()

printf

("%d,"

,strlen

(str));

//字典序輸出當前位置相對於起始位置的方向

if(x>0)

printf

("e");

if(y>0)

printf

("n");

if(y<0)

printf

("s");

if(x<0)

printf

("w");

return0;

}

二進位制轉十進位制輸入為乙個二進位製大整數(大整數大於0,不帶符號,無前導0,至少1位數字,且不超過100位數字)。要求將該整數轉換成十進位制數,並輸出。

建議:用字元陣列儲存大整數。

輸入樣例1

1001001100101100000001011010010

輸出樣例1

1234567890

十進位制轉二進位制輸入為乙個十進位製大整數(大整數大於0,不帶符號,無前導0,至少1位數字,且不超過100位數字)。要求將該整數轉換成二進位制數,並輸出。

建議:用字元陣列儲存大整數。

輸入樣例2

1234567890

輸出樣例2

1001001100101100000001011010010

//這兩道題思路是一樣的,都是利用秦九韶演算法和高精度演算法。所以寫了個通用的。

#include

#define dst 10

//目標進製

#define src 2

//原始進製

#define in_size 100

//原始進製的最大位數

#define out_size 31

//目標進製的最小位數,應保證為log(dst,src^in_size).

//該程式可以通過修改以上4個巨集來實現10以內的所有進製之間的轉換。10以上的需要額外定義符號。

intmain()

;int dst[out_size]=;

scanf

("%s"

,src)

;for

(int i=

0;src[i]

!='\0'

;i++

) dst[0]

+=src[i]

-'0'

;//加

for(

int i=

0;i1;i++)}

int i=out_size;

for(i=out_size-

1;dst[i]==0

&&i>

0;i--);

//從最高位到最低位找,找到第乙個不是0的元素.

dowhile

(i--);

return0;

}

題目描述在食品匱乏的年代,能吃到乙個土豆已經是很幸福的事情,如果這個土豆還是熱乎的,就更好了。但土豆只有乙個,有很多人都想吃,怎麼分配呢? josephus想了個辦法,把n個人從1到n編號,圍坐成乙個圓圈。然後從1號開始傳遞乙個熱土豆,經過m次傳遞後,拿著熱土豆的人被清除離座,圍坐的圓圈緊縮,由坐在被清除的人後面那個人拿起熱土豆繼續進行遊戲,最後剩下的那個人取勝。例如,m=0和n=5時,剩下的是5號。如果m=1和n=5時,被清除的人的順序是2,4,1,5,最後剩下的是3號。由於m的值事先並不知道,所以到底誰是人生贏家,能夠吃到這個熱土豆呢?

輸入格式:1行,2個整數,中間由逗號隔開。第乙個整數表示n個人(0輸出格式:1行,n個整數,中間用逗號隔開。這些數字表示離開圓圈的人的順序,用其編號表示。最後乙個就是最終剩下的吃熱土豆的人。

輸入樣例

5,1
輸出樣例

2,4,1,5,3
//乙個複雜的做法。這個做法不刪除任何元素,只是在傳遞的時候跳過被移走的人。

#include

#include

intmain()

;//首先把陣列初始化為0,0代表這個人沒有被移走。

scanf

("%d,%d"

,&n,

&m);

int i=0;

//i+1表示乙個人的編號。

while(1

)while

(num[i]);

} num[i]=1

;//把被移走的那個人標記為1

printf

("%d"

,i+1);

//下標為i的人,他的編號是i+1

bool flag=1;

//flag用來表示是否所有人被移走。1表示此時所有人都被移走。

for(

int i=

0;iif(flag)

break;do

while

(num[i]);

}return0;

}

//其實這才是最自然的想法:每移走乙個人,他之後的人都前移一位。

#include

intmain()

int i=0;

while

(n)if

(--n)

printf

(",");

}return0;

}

//用佇列的思想。

#include

intmain()

num[n]=1

;//讓最後乙個人指向第乙個人,形成佇列。

int pre=n,now=1;

//now是當前元素的編號,pre是上乙個元素的編號。

while

(now!=pre)

printf

("%d,"

,now)

; num[pre]

=num[now]

;//出隊

now=num[pre];}

printf

("%d"

,now)

;//輸出最終的幸運兒

return0;

}

Sed綜合練習題

1.將nginx配置檔案裡的第乙個server塊裡的listen的埠80 修改為8080 sed i r s listen.80 18080 p nginx.conf2.在nginx的配置檔案裡新增乙個server塊配置 server error page 404 404.html location...

C語言練習題

8 編寫乙個程式,將字串str2中的全部字元複製到字串str1中。要求 不能使用strcpy函式。12分 include definemaxlen 20 假設 str2 的長度不超過 str1 的長度 voidstrcopy char str1,char str2 intmain 9 3 20分 從...

C語言練習題

1.保密電文 某電報局的電文保密規律是將每個英文本母變成其後的第4個字母,例如a變成e,a變成e。最後四個字母 w,x,y,z或w,x,y,z 變成前四個字母 a,b,c,d或a,b,c,d 電文中的非字母字元不變。要求 輸入一行字串,輸出改變的字串。程式分析 題目程式 include intmai...