當前位置:首頁 » 操作系統 » 計算機演算法基礎答案

計算機演算法基礎答案

發布時間: 2022-04-29 11:20:43

1. 給出一些基本的演算法問題並給出答案

C語言演算法基礎
演算法(Algorithm):計算機解題的基本思想方法和步驟。演算法的描述:是對要解決一個問題或要完成一項任務所採取的方法和步驟的描述,包括需要什麼數據(輸入什麼數據、輸出什麼結果)、採用什麼結構、使用什麼語句以及如何安排這些語句等。通常使用自然語言、結構化流程圖、偽代碼等來描述演算法。
一、計數、求和、求階乘等簡單演算法
此類問題都要使用循環,要注意根據問題確定循環變數的初值、終值或結束條件,更要注意用來表示計數、和、階乘的變數的初值。
例:用隨機函數產生100個[0,99]范圍內的隨機整數,統計個位上的數字分別為1,2,3,4,5,6,7,8,9,0的數的個數並列印出來。
本題使用數組來處理,用數組a[100]存放產生的確100個隨機整數,數組x[10]來存放個位上的數字分別為1,2,3,4,5,6,7,8,9,0的數的個數。即個位是1的個數存放在x[1]中,個位是2的個數存放在x[2]中,……個位是0的個數存放在x[10]。
void main()
{ int a[101],x[11],i,p;
for(i=0;i<=11;i++)
x[i]=0;
for(i=1;i<=100;i++)
{ a[i]=rand() % 100;
printf("%4d",a[i]);
if(i%10==0)printf("\n");
}
for(i=1;i<=100;i++)
{ p=a[i]%10;
if(p==0) p=10;
x[p]=x[p]+1;
}
for(i=1;i<=10;i++)
{ p=i;
if(i==10) p=0;
printf("%d,%d\n",p,x[i]);
}
printf("\n");
}
二、求兩個整數的最大公約數、最小公倍數
分析:求最大公約數的演算法思想:(最小公倍數=兩個整數之積/最大公約數)
(1) 對於已知兩數m,n,使得m>n;
(2) m除以n得余數r;
(3) 若r=0,則n為求得的最大公約數,演算法結束;否則執行(4);
(4) m←n,n←r,再重復執行(2)。
例如: 求 m=14 ,n=6 的最大公約數. m n r
14 6 2
6 2 0
void main()
{ int nm,r,n,m,t;
printf("please input two numbers:\n");
scanf("%d,%d",&m,&n);
nm=n*m;
if (m<n)
{ t=n; n=m; m=t; }
r=m%n;
while (r!=0)
{ m=n; n=r; r=m%n; }
printf("最大公約數:%d\n",n);
printf("最小公倍數:%d\n",nm/n);
}
三、判斷素數
只能被1或本身整除的數稱為素數 基本思想:把m作為被除數,將2—INT( )作為除數,如果都除不盡,m就是素數,否則就不是。(可用以下程序段實現)
void main()
{ int m,i,k;
printf("please input a number:\n");
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<k;i++)
if(m%i==0) break;
if(i>=k)
printf("該數是素數");
else
printf("該數不是素數");
}
將其寫成一函數,若為素數返回1,不是則返回0
int prime( m%)
{int i,k;
k=sqrt(m);
for(i=2;i<k;i++)
if(m%i==0) return 0;
return 1;
}

2. 求解計算機演算法的題!!!!!

填空1:

設M1的計算速度為x, M2的計算速度為ax,時間是t
則: x * t = 3n1, ax * t = 3n2
則: n1 : n2 = x*t : ax*t = 1 : a
既,填空1的答案是 1:a
填空2:

設M1的計算速度為x, M2的計算速度為ax,時間是t
則: x * t = 3n1², ax * t = 3n2²
則: n1² : n2² = x*t : ax*t = 1 : a

等式兩邊同時求根號,得到n1:n2的答案。
既,填空2的答案是 1:√a
碼子不易,望採納。

3. 計算機基礎試題及答案

這些裡面就有簡單的轉換題目啊,這些都會的話,那麼綜合應該也就差不多會了哈,這些不難,就是很麻煩就是,很容易弄模糊了,呵呵~~ 有一個公式:二進制數、八進制數、十六進制數的各位數字分別乖以各自的基數的(N-1)次方,其和相加之和便是相應的十進制數。個位,N=1;十位,N=2...舉例:
110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D
110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D
110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D
2、十進制數轉二進制數、八進制數、十六進制數
方法是相同的,即整數部分用除基取余的演算法,小數部分用乘基取整的方法,然後將整數與小數部分拼接成一個數作為轉換的最後結果。
3、二進制數轉換成其它數據類型
3-1二進制轉八進制:從小數點位置開始,整數部分向左,小數部分向右,每三位二進制為一組用一位八進制的數字來表示,不足三位的用0補足,
就是一個相應八進制數的表示。
010110.001100B=26.14Q
八進制轉二進制反之則可。
3-2二進制轉十進制:見1
3-3二進制轉十六進制:從小數點位置開始,整數部分向左,小數部分向右,每四位二進制為一組用一位十六進制的數字來表示,
不足四位的用0補足,就是一個相應十六進制數的表示。
00100110.00010100B=26.14H
十進制轉各進制
要將十進制轉為各進制的方式,只需除以各進制的權值,取得其餘數,第一次的余數當個位數,第二次余數當十位數,其餘依此類推,直到被除數小於權值,最後的被除數當最高位數。
一、十進制轉二進制
如:55轉為二進制
2|55
27――1 個位
13――1 第二位
6――1 第三位
3――0 第四位
1――1 第五位
最後被除數1為第七位,即得110111
二、十進制轉八進制
如:5621轉為八進制
8|5621
702 ―― 5 第一位(個位)
87 ―― 6 第二位
10 ―― 7 第三位
1 ―― 2 第四位
最後得八進制數:127658
三、十進制數十六進制
如:76521轉為十六進制
16|76521
4726 ――5 第一位(個位)
295 ――6 第二位
18 ――6 第三位
1 ―― 2 第四位
最後得1276516
二進制與十六進制的關系
2進制 0000 0001 0010 0011 0100 0101 0110 0111
16進制 0 1 2 3 4 5 6 7
2進制 1000 1001 1010 1011 1100 1101 1110 1111
16進制 8 9 a(10) b(11) c(12) d(13) e(14) f(15)
可以用四位數的二進制數來代表一個16進制,如3A16 轉為二進制為:
3為0011,A 為1010,合並起來為00111010。可以將最左邊的0去掉得1110102
右要將二進制轉為16進制,只需將二進制的位數由右向左每四位一個單位分隔,將各單位對照出16進制的值即可。
二進制與八進制間的關系
二進制 000 001 010 011 100 101 110 111
八進制 0 1 2 3 4 5 6 7
二進制與八進制的關系類似於二進制與十六進制的關系,以八進制的各數為0到7,以三位二進制數來表示。如要將51028 轉為二進制,5為101,1為001,0為000,2為010,將這些數的二進制合並後為1010010000102,即是二進制的值。
若要將二進制轉為八進制,將二進制的位數由右向左每三位一個單位分隔,將事單位對照出八進制的值即可。

一.在計算機應用中,二進制使用後綴b表示;十進制使用後綴d表示,八進制用Q表示,十六制使用後綴H表示。
二.二進制,十六進制與十進制的計算轉換
1.二進制轉換為十進制
計算公式:二進制數據X位數字乘以2的X-1次方的積的總和
例:10101011b=( )d

數據
1 0 1 0 1 0 1 1
X-1位
7 6 5 4 3 2 1 0

相應的十進制值即為:27 +25+23+21+20=128+32+8+2+1=171
2.十六進制轉換十進制
計算公式:二進制數據X位數字乘以16的X-1次方的積的總和(與二進制轉換十制進同理的,將底數換為16)
注意:在十六進制中,10-16依次用A,B,C,D,E,F表示
例:1F3E H=( )d
計算:1*16的3次方+16*16的2次方+3*16的1次方+15*16的0次方=1*4096+16*256+3*16+15*16=4096+4096+48+240=8480

三.十進制與二進制,十六制的計算轉換
1.十進制轉換為二進制
十進制數據數字除以2的余數的逆序組合
例:404d=( )b
2|404 餘0
2|202 餘0
2|101 餘0
2|50 餘1
2|25 餘0
2|12 餘1
2|6 餘0
2|3 餘1
2|1
計算結果便是:110101000
2.十進制轉換十六進制。。。與上面同理,注意的是10以上的數字用字母表示,除數是16

十六進制與二進制的轉換,建議通過十進制來進行中轉。
帶小數點的十進制轉換為二進制時同理,小數店後的數位指數為負指數

一、二進制數轉換成十進制數
由二進制數轉換成十進制數的基本做法是,把二進制數首先寫成加權系數展開式,然後按十進制加法規則求和。這種做法稱為"按權相加"法。

二、十進制數轉換為二進制數
十進制數轉換為二進制數時,由於整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換後,再加以合並。
1. 十進制整數轉換為二進制整數
十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余數,如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。

2.十進制小數轉換為二進制小數
十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。
然後把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,後取的整數作為低位有效位。
回答者:HackerKinsn - 試用期 一級 2-24 13:31

1.二進制與十進制的轉換
(1)二進制轉十進制<BR>方法:"按權展開求和"
例:
(1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10
=(8+0+2+1+0+0.25)10
=(11.25)10
(2)十進制轉二進制

· 十進制整數轉二進制數:"除以2取余,逆序輸出"
例: (89)10=(1011001)2
2 89
2 44 …… 1
2 22 …… 0
2 11 …… 0
2 5 …… 1
2 2 …… 1
2 1 …… 0
0 …… 1
· 十進制小數轉二進制數:"乘以2取整,順序輸出"
例:
(0.625)10= (0.101)2
0.625
X 2
1.25
X 2
0.5
X 2
1.0

4. 1、計算機演算法必須具備輸入、輸出和________等特性。 A、可執行性 B、可移植性 C、確定性 D、有窮

選ACD 希望可以幫助你哈~~~
解釋:
1.有窮性:一個演算法必總是在執行有窮步驟之後結束,並且每一步都可以在有窮時間內完成;
2.確定性:演算法的每一條指令必須有確切的含義 ,讀者理解時不會產生二義性,並且在任何條件下,演算法只有唯一的一條執行路徑,對於相同的輸入只能達到相同的輸出;
3.可行性:一個演算法是能行的,就是說演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現;
4.輸入:一個演算法有零個或者是多個輸入,這個輸入取決於某個特定的對象集合;
5.輸出:一個演算法有一個或者多個的輸出,這些輸出是同輸入有著某種特定關系的量;

5. 一個計算機演算法的基礎題求解答

根據你給出的問題,可以得到以下幾個信息:

  1. 每對夫妻肯定是沒辦法握手的;

  2. 自己和自己沒辦法握手;

  3. 一共只有20個人

所以,小明得到了19種握手數,那麼就是從0到18.

對於握手數是0的人,小紅肯定認識;

對於握手數18的人,小紅肯定不認識;

因此,小紅的握手數是1-17中的一種。

6. 計算機演算法的三種基本結構

演算法有順序結構、條件分支結構、循環結構三種基本邏輯結構。

1、順序結構

序貫結構是最簡單的演算法結構,在語句之間、框之間自上而下進行。它由依次執行的幾個處理步驟組成。

它是任何演算法都不能缺少的基本演算法結構。方框圖中的順序結構是將程序框從上到下與流水線連接,按順序執行演算法步驟。

2、條件分支結構

條件結構是指通過判斷演算法中的條件,根據條件是否為真來選擇不同流向的演算法結構。

如果條件P為真,則選擇執行框A或框B。無論P條件是否為真,只能執行A盒或B盒中的一個。不可能同時執行盒子A和B,盒子A和B不執行也是不可能的。一個判斷結構可以有多個判斷框。

3、循環結構

在某些演算法中,經常會出現某一處理步驟按照某一條件從某一地點重復執行的情況。這就是循環結構。重復執行的處理步驟是循環體,顯然,循環結構必須包含條件結構。循環結構又稱重復結構,可分為兩類:

一種是當循環結構,功能是P時形成時給定的條件下,執行一個盒子,一個盒子在執行後,確定條件P,如果仍然設置和執行一個盒子,等等來執行一個盒子,直到一個條件P並不不再執行一個盒子,這個時候離開循環結構。

另一種類型是直到型循環結構,作用是先執行,然後判斷給定條件P是否為真。如果P仍然不為真,將繼續執行盒子A,直到給定條件P為真一段時間。

(6)計算機演算法基礎答案擴展閱讀:

共同特徵

1、只有一個入口和出口

2、結構的每個部分都有執行的機會,即對於每個盒子,應該有一個從入口到出口的路徑。如圖A所示,從入口到出口沒有經過它的路徑,這是不符合要求的演算法結構。

3、結構中不存在死循環,即沒有結束循環。

7. 求《計算機演算法設計與分析第5版習題及答案》全文免費下載百度網盤資源,謝謝~

《計算機演算法設計與分析第5版習題及答案》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1oxH2d3SdEUN0rx6LJRNBoA

?pwd=8i4l 提取碼:8i4l
簡介:本書是與「十二五」普通高等教育本科國家級規劃教材《計算機演算法設計與分析(第5版)》配套的輔助教材和國家精品課程教材,分別對主教材中的演算法分析題和演算法實現題給出了解答或解題思路提示。為了提高學生靈活運用演算法設計策略解決實際問題的能力,本書還將主教材中的許多習題改造成演算法實現題,要求學生設計出求解演算法並上機實現。本書教學資料包含各章演算法實現題、測試數據和答案,可在華信教育資源網免費注冊下載。本書內容豐富,理論聯系實際,可作為高等學校計算機科學與技術、軟體工程、信息安全、信息與計算科學等專業本科生和研究生學習計算機演算法設計的輔助教材,也是工程技術人員和自學者的參考書。

8. 誰幫我看看這個幾個計算機演算法基礎...

一、簡答題。
1. 某程序根據輸入的總分和課程數目計算平均分。寫出實現下面輸入輸出形式的輸入和輸出語句。
Input total score : 300
Input numbers: 4
The average score is : 75.0
其中,「Input total score :」、「Input numbers:」、「The average score is :」、」75.0」為屏幕輸出信息;300、4為從鍵盤輸入的數據。
1.float score;
int n;
printf("Input total score:");
scanf("%f",&score);
printf("Input numbers:");
scanf("%d",&n);
printf("The average score is :%.1f",score/n);
2. 敘述變數名、變數值、變數地址之間有什麼關系?
值是存在內存中的
變數名是通俗說相當於一個地址的別名
地址即你存入內存單元的那個值的起始地址
3. 結構化演算法的原則是什麼?
採取以下方法來保證得到結構化演算法
由上而下;
逐步細化;
問題模塊化。

4. 寫出一組數 84、97、50、37、8、51利用冒泡法排序進行排序的過程(不寫演算法)。
84 50 37 8 51 97
50 37 8 51 84 97
37 8 50 51 84 97
8 37 50 51 84 97
5. 字元型數據的存儲原理是什麼?
在內存中char以補碼形式存儲,最高位位符號位,unsigned無符號位
6. 將下面的語義用C表達式的形式描述。
(1)3個整數a,b,c可以構成一個直角三角形。
(2)數學成績(math)和語文成績(Chinese)都高於90分。
(1)(a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)
(2)math>90&&Chinese>90
7. 設day=31,m_count=7,設計輸出語句。輸出形式為:there are 217 days。其中,「217」由day和m_count計算得到。
printf("there are %d days。",day*m_count);
8. 設主函數main( )調用函數f1( ),函數f1( )調用函數f2( ),f2( )調用函數f3( ),畫圖表示出這些函數調用的過程及關系。
f3()-f2()-f1()-main(),

9. 畫圖表示一個二維字元數組(每行最多存儲9個字元)存儲5個字元串:「China」、「German」、「Russian」、「Japan」、「American」的示意圖。
a[5][9]

10. 函數smallest帶有3個整型參數x、y、z,返回一個整型結果。寫出該函數的首部。
int smallest(int x,int y,int z)
11. 設x=12345,則printf(「%10d\n」,x); 的輸出結果是什麼?
(有5個空格) 12345(加換行)
12. 從鍵盤讀取兩個整數並把讀入的整數分別存儲在整數變數a、b中,該輸入語句是什麼?
scanf("%d",&a);scanf("%d",&b);
13. 字元串的結束表示』\0』在字元串使用過程中的作用是什麼?
是字元串的一個結束標志,例如輸出的話根據判斷是否遇到\0
來控制輸出

判斷是否到字元串結尾。
14. 某程序中有如下定義:
int func(int a , int b , int c)
{
return( 2*a + 4*b/c );
}
在主函數中分別執行語句:k=func(1,2,1)*10; 後,k的取值是多少?
k=100
15. 窮舉法解題的好處是什麼?適合於解什麼類型的題目?
簡單,適合列舉個數有限且較少情況。
16. 結構化演算法中有哪幾種基本控制結構,它們的共同點是什麼,控制結構之間的連接方式如何?
演算法是解決問題所需操作步驟的集合,是程序設計的根本,就如同人們為了完成一件事情必須有一個正確的步驟一樣.
演算法的表示有三種,自然語言,流程圖和偽碼.
自然語言:來表示具有表示選擇結構或循環結構演算法時不方便且不清楚.
流程圖:優點是直觀容易看懂,不足之處就是比較費事.
偽碼:非正式語言,採用文字和圖形符號表示,介於自然語言和計算機語言,具備了自然語言的通俗易懂,同時兼備了計算機語言的簡明緊湊,因此,編程人員常藉助此方法完成演算法設計.
順序,循環,選擇。
共同點
只有一個入口
只有一個出口
結構中的每一部分都有機會被執行到
結構內不存在死循環
相互之間通過組合 連接在一起 如 嵌套

二、畫出解決下列問題的演算法的N-S圖。
1. 輸入三角形的三條邊,判斷其能否構成三角形,若能構成,判斷它是不是直角
.輸入a、b、c三個數——判斷a+b>c&&b+c>a&&a+c>b——是則判斷是否直角,是則輸出是直角三角形,否則輸出不是直角三角形——否則不構成三角形。

2. 輸出n個數中最小的數。
.輸入n個數,並設置min為第一個數——從第一個數到第n個數,如果少於min,則令min等於那個數——輸出min

3. 輸入n,求n!。
s=1;
for(i=1;i<=n;i++)
s*=i;
輸出s

4. 解數學燈謎。已知有以下算式成立,其中 A、B、C 均為一位正整數,求它們各為多少。 A B C - C B = C A

5. 寫出折半查找的演算法。

6. 輸入一個3行4列的整數類型數組a,並按3行4列的形式將其輸出。
輸入a[3][4]——for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d",a[i][j]);

7. 編寫一個演算法,實現字元串復制的功能。設目標字元串的名字為str_des,源字元串的名字為str_src。
將源字元串str_scr[0]~strscr[長度-1]分別賦值到str_des[0]~strdes[長度-1]

8. 輸入三角形的三條邊,判斷其能否構成三角形,若能構成三角形判斷它是哪種三角形(等邊、等腰或一般三角形)

9. 已知一數學函數為:
0 x<0
x 0≤x<10
f(x)= x+10 10≤x<20
-x 20≤x<30
-x-10 x≥30
其中,自變數x為整數。設計雙分支演算法解決該問題。
if(x<0) f(x)=0;else{
if(0<=x<10) f(x)=x
else{
...}}嵌套選擇語句

10. 編寫一個人口統計演算法,1982 年我國人口為 12 億,如果按年增長率分別為:2%、1.5%、1%、0.5%計算,各需多少年後,我國人口會翻一番(24億)
for(p=0.02;p>0;p-=0.005){
s=12;
n=0;
while(s<24){
s*=(1+p);
n++;
}
printf("%d",n);
}

11. 編寫演算法,輸出一個4×4的矩陣a中最小數所在的位置。

12. 按下列規則將電文原文譯成密碼,將字母『A』變成『F』,『B』變成『G』,……,『V』變成『A』,『W』變成『B』,……,『Z』變成『E』,即將字母後移5個字母,其餘字元不變,輸入以『!』結束。
輸入字元串str,i=0;while(ch!='!'){str[i++]=ch;scanf("%c",&ch);}
解碼:if(str[i]>='A'&&str[i]<='Z') str[i]='A'+(str[i]-'A'+5)%26

13. 寫出冒泡法排序的演算法。

14. 輸出100以內的所有素數。
for(i=2;i<100;i++){
flag=0;
for(j=2;j<=sqrt(i);j++){
if(i%j==0){
flag=1;break;}
}
if(flag==0)printf("%d ",i);
}

15. 輸入三角形的三條邊,判斷其能否構成三角形,若能構成,判斷它是不是直角三角形。

16. 求1+2+…+100。
s=0;
for(i=1;i<100;i++)
s+=i;
printf("%d",s);

17. 列印Fibonacci數列的前25項。
利用數組儲存a[0]~a[24],a[0]=1;a[1]=1;
for(i=2;i<25;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<25;i++)
printf("%d",a[i]);

18. 寫出判斷一個數是否是素數的演算法。

19. 輸出n個數中最大的數。

20. 統計一個字元串中有多少個大寫字母。
n=0;
for(i=0;str[i]!=NULL;i++)
if(str[i]>='A'&&str[i]<='Z')
n++;
輸出n;

21. 輸入一個具有10個元素的一維數組a,並將其列印輸出。

熱點內容
垃圾緩存的英文 發布:2024-10-05 01:13:34 瀏覽:947
md5加密c實現 發布:2024-10-05 01:13:31 瀏覽:299
updatesql兩個表 發布:2024-10-05 01:13:30 瀏覽:4
趙南起韓國訪問 發布:2024-10-05 01:04:00 瀏覽:985
基於pid演算法 發布:2024-10-05 00:41:22 瀏覽:925
有什麼手機配置低的還好玩 發布:2024-10-05 00:40:23 瀏覽:669
redis資料庫查詢 發布:2024-10-05 00:27:43 瀏覽:946
如何消除安卓的彈窗 發布:2024-10-05 00:26:59 瀏覽:427
wget下載文件夾 發布:2024-10-05 00:26:22 瀏覽:44
mysql調用存儲過程out 發布:2024-10-05 00:03:30 瀏覽:231