1 從鍵盤上輸入十進位制正整數,將其轉換成8進位制,然後輸出。(要求用字元型陣列存放8進位制數)

時間 2021-05-04 13:25:47

1樓:匿名使用者

1.#include "stdio.h"

void main()

while(n!=0);

printf("%s\n",oct+i);}2.

#include "stdio.h"

void main()

else if(*p>='a' && *p<='f')else if(*p>='a' && *p<='f')else

p++;

}printf("%d\n",n);}

c語言程式設計問題!

2樓:薰衣草的旋律

1.程式設計在一個已知字串中查詢最長單詞,假定字串中只含有字母和空格,空格用來分割不同單詞!

方法一:

//vc++ 6.0 編譯通過

#include

void main()

if(max

#include

void main()

; int i=0,j=0,max=0;

while(*p)

i++;j=0;

} i=0;

max=strlen(array[i]);

p=array[i];

while(strlen(array[i]))

for(--i;i>=0;i--)

putchar('\n');

} //關於二進位制的轉換,還可以用位移運算子。通過和某一個數如1相按位與,就得到它的二進

制最低位,在位移,再得到二進位制最低位,依此類推。

轉換為8進位制:

/vc++ 6.0編譯通過。

#include

#include

void main()

for(--i;i>=0;i--)

putchar('\n');

} /*

轉換為8進位制就沒有16進位制那麼麻煩了,它不需要另外定義一個字元陣列用來存放,進位制的

所有基數了,而是直接輸出來就可以了。而對與16進位制還要存放他的基數。從0到f

*/ 轉換為16進位制:

//vc++ 6.0 下編譯通過

#include

#include

void main()

; scanf("%d",&a);

for(i=0;a!=0;i++)

for(--i;i>=0;i--) //開始有一個 --i

printf("\n");

} /*

一般把其它進位制的數轉換為十進位制的數較容易,有一個現成的乘法公式供我們使用。

但把十進位制的數轉換為其它進位制的數,則要用到除法。這題的思路是比較清晰的,應該是

解決這類問題的典型演算法了。

而對於把十進位制的數轉換為二進位制的數來說,除了用到除法外,還可用位運算。

這個問題主要是這兩句話值得理解:

b[i]=a%base;

a=a/base;

我們一般是用這兩句迴圈使用來得到一個整數的各位的數字,這也恰巧說明了,我們得到

一個整數的各個位數所用到的方法,正是把一個十進位制的數轉換為一個 "十進位制" 數的演算法

也就是我們得到一個十進位制數的各個位的數字的過程,實際上就是求把他轉換為一個十進位制

的數字的過程(雖然這裡本身沒必要在轉換,因為本身它就已經是一個十進位制數了)。用同樣

的道理可以推算把十進位制數轉換為其他進位制數的過程,和這個是類似的。

然後將後得到的結果先輸出,而先取餘數得到的結果則在數字的最後面,在低位。

*/ 通用解決方案:

#include

#include

void main()

; for(int i=9;i>=0;i--)

else

printf("%d",a[i]);

} }/* 其實進位制轉換的演算法我們都知道,就是用我們要轉換的那個數,對進位制的基數(如果是16進位制)

進行取餘,把取餘的結果儲存在一個陣列裡面,再對他取整重新賦值,也就是丟掉餘數部分,

相當於取上一步的商,再取餘,再取整。如此迴圈,直到為0。

其實上面的演算法,只要我們想起把一個十進位制的數轉換為二進位制的數的計算方法,就不難理解,

因為都是相通的。

現在關鍵是,如果我的這些事情都做好了,也就是餘數都放在一個陣列裡了,現在要做的就是

把陣列逆序輸出就ok了。那麼如果是二進位制或八進位制,我們只要直接輸出就可以了,但是如果是

一個十六進位制的話,就不能這樣了,也就是如果陣列裡面有一個元素是14,那麼我就不能原樣輸出

了,此時必須輸出e,因為e就是十六進位制裡面的基數,而且也是與十進位制的14相對應的。但是如果

是一個二進位制或者是一個八進位制的話,就可以直接輸出,因為陣列裡面的數都是0,1(對二進位制)

或者(0....8),這些數就是二進位制和八進位制的基數。

所以這裡要面臨的問題就是,在輸出一個整數的時候,如果這個整數滿足某一條件,就輸出什麼字

符的問題,例如:如果這個整數等於14則輸出'e'字元。

當然我們可以用 if..else 語句來判斷,對於十六進位制的數特殊的字元也就只有a,b,c,d,e,f六個

用 if...else 來判斷也不算太煩瑣。當然我們還可以用 switch 來判斷,這樣更加有條理。**

也更清晰。

當然這是對於16進位制的數來說的,我們可以這樣判斷,但是如果實際生活中遇到的問題和這個有點

類似,而且字母有多的話,用條件判斷或switch就太煩瑣了,**也不直觀,還容易出錯。

那麼這時我們可以在定義一個字元陣列,分別放我們要輸出的字元,如果有以下對應的關係:

10 a

11 b

12 c

13 d

14 e

15 f

16 g

17 h

18 i

19 j

也就是說在陣列a裡面放的是數字,在陣列b裡面放的是字元,要求陣列a裡面的數字是10的時候,輸

出'a',而不是輸出10,依次類推(看上面的對應關係),當然我上面的對應關係都是順序的,其實也

可以不是順序的,對於數字和字元都可以是亂的,當然這要看實際遇到的問題是什麼樣的了。如果

對上面的問題還用if...else來判斷的話,那未免太煩瑣。所以我們定義一個字元陣列來專門存放

字元。那麼怎麼讓數字和字元聯絡起來呢,怎麼讓a[i]的值是10的時候就輸出'a'而是14的時候就輸

出'e'呢,在這裡我們可以這樣定義b陣列:

char b[30]=;

b[10]='a';

b[11]='b';

b[12]='c';

b[13]='d';

b[14]='e';

...b[19]='j';

這樣也就是說當a[i]元素的值是10時,就輸出b[10],是11就輸出b[11];這樣就和數字對應起來

了。我們可以這樣用:

int t=a[i];

printf("%c",b[t]); a[i]的值是多少,我們就輸出b[多少]

但對於上面舉的例子來說,可以這樣:

if(a[i]>=10&&a[i]<=19) //對應關係是連續的,才可以這樣判斷

else

當然了,上面的是對應的連續的情況,對與10進位制與二進位制,8進位制,16進位制之間的轉換,都是連續的情況。

如果對應的是不連續的情況,那有該怎麼辦呢:

20 'a'

25 'b'

30 'd'

50 'g'

53 'h'

58 'c'

100 'z'

200 'w'

對於上面的情況,是一點規律性也沒有的,而且如果為了這幾個數就去定義一個200個元素的陣列,實在是

有點划不來。所以如果是上面這種情況,就沒有比較好的辦法了。只用用判斷語句了,當然如果有20多個

字元的對應關係的話,判斷語句也是不合適的,那麼就沒有比較好的辦法了。還要進一步探索....

*/ 這些都是我在考計算機等級考試碰到過的題目哦,演算法都是相當典型的,有的是書上看到的,有的是自己擴充套件的。還是要自己認真哦。。。

由於文字太多第三題提交不上來了哦。。不好意思。。。

3樓:

1. void larw(char str)else word++;

} else

else k=0;

} }if(word>len)

printf("the largest word is:\n");

for(i=0;i請輸入一個任意整數:");

scanf("%d",&nnum);

printf("\n請輸入一個合法的表示進位制的基數[2,16]:");

scanf("%d",&rad);

if(rad<=1)

exit(-1);

printf("\n轉換後的結果是:");

while(nnum>=rad)

store[i]=nnum;

for(;i>=0;--i)

switch(store[i])

printf("\n");}

4樓:匿名使用者

/*不要到這裡帖題目,沒人有這時間的,當然,你付錢的話就另當別論*/

5樓:匿名使用者

哈 只能說你。夠懶。我也懶

6樓:匿名使用者

2.任意r進位制數麼?

char temp[16];

long num;

_ltoa(num,temp,r);

3.double total = 345.78;

total*100

m100 = total / 10000;

total %= 10000;

m50 = total / 5000;

total %= 5000;

m10 = total / 1000;

total %= 1000;

m5 = total / 500;

total %= 500;

m2 = total / 200;

total %= 200;

m1 = total / 100;

total %= 100;

m01 = total / 10;

total %= 10;

m05 = total / 5;

total %= 5;

m01 = total;

用8086組合語言編寫程式,接受從鍵盤上輸入的兩位十進位制數字,這個數經過BCD碼處理,以十六進位制顯示出

做而論道 disp str macro x 巨集定義.mov dx,offset x mov ah,9 int 21h endm data segment 資料段.msg1 db 13,10,please input msg3 db 13,10,the hex is x dw 存放新輸入資料.dat...

用C 程式設計 從鍵盤上輸入若干學生的成績,統計並輸出最高成績和最低成績,當輸入負數時結束輸入

問明 include using namespace std int main double a 100 double max 0,min 100,t int i for i 0 i 100 i cin a i if a i 0 break else if a i max max a i if a ...

c 程式設計,急求大神使用者從鍵盤上任意輸入整數

include define n 10 define invalid 0xffffusing namespace std int main int argc,char argv if istrigger elsereturn true include using namespace std int ...