麥粒c語言
❶ matlab編程
計算機程序就是計算機指令的集合,不同的編程語言指令與功能是不一樣的.MATLAB語言是一種面向對象的高級語言,它具有編程效率高、易學易用的優點.
MATLAB與其它大部分高級語言一樣,有它自己的控制流語句.控制流極其重要,因為它使過去的計算影響將來的運算。MATLAB提供如下幾種控制流結構:For循環,While循環,If-Else-End結構和switch-case-end結構。由於這些結構經常包含大量的MATLAB命令,故經常出現在M文件中.MATLAB支持的控制流語句和c語言支持的控制流語句在調用格式上非常相似.
1.For 循環
For循環允許一條語句或一組語句被重復執行預先指定的次數。For循環的一般形式是:
for x =array
語句
end
在for和end語句之間的語句按數組中的每一列執行一次。在每一次迭代中,x被指定為數組的下一列,即在第n次循環中,x=array(:, n)。例如,
for n=1:10
x(n)=sin(n*pi/10);
end
x
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
換句話,第一語句是說:對n等於1到10,執行所有語句,直至下一個end語句。第一次通過For循環n=1,第二次,n=2,如此繼續,直至n=10。在n=10以後,For循環結束,然後執行end語句後面的任何命令.注意,該循環結束後,n=10.
For循環的其它重要方面是:
(1)For循環不能用For循環內重新賦值循環變數n來終止。
For n=1:10
x(n)=sin(n*pi/10);
n=9;
end
x
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n
n=
9
執行過程是這樣的:
n=1,
x(1)=sin(pi/10),
n=9,
n=2,
x(2)=sin(2*pi/10),
n=9,
n=3,
...,
n=10,
x(10)=sin(10*pi/10),
n=9.
循環結束後,n=9.
(2)在For循環內接受任何有效的MATLAB數組。
data=[3 9 45 6; 7 16 -1 5]
data =
3 9 45 6
7 16 -1 5
for n=data
x=n(1)-n(2)
end
x =
-4
x =
-7
x =
46
x =
1
(3)For循環可按需要嵌套。
For n=1:5
for m=1:5
A(n,m)=n^2+m^2;
end
disp(n)
end
1
2
3
4
5
A
A =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
(4)當有一個等效的數組方法來解給定的問題時,應避免用For循環。例如,上面的第一個例子可被重寫為
n=1:10;
x=sin(n*pi/10)
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
兩種方法得出同樣的結果,而後者執行更快,更直觀,要求較少的輸入。
(5)為了得到最大的速度,在For循環(While循環)被執行之前,應預先分配數組。例如,前面所考慮的第一種情況,在For循環內每執行一次命令,變數x的大小增加1。迫使MATLAB每通過一次循環要花費時間對x分配更多的內存。為了消去這個步驟,For循環的例子應重寫為
x=zeros(1,10);
for n=1:10
x(n)=sin(n*pi/10);
end
現在,只有x(n)的值需要改變。
例1 相傳古代印度國王要褒獎他的聰明能乾的宰相達依爾(國際象棋發明者),問他要什麼?達依爾回答:「陛下只要在國際象棋棋盤的第一個格子上放一粒麥子,第二個格子上放二粒麥子,以後每個格子的麥子數都按前一格的兩倍計算。如果陛下按此法給我64格的麥子,就感激不盡,其他什麼也不要了。」國王想:「這還不容易!」讓人扛了一袋麥子,但很快用光了,再扛出一袋還不夠,請你為國王算一下共要給達依爾多少小麥?(1 小麥約 顆)
解: 麥粒總數為
程序如下:
a=1;
s=0
for i=1:64
s=s+a;
a=2*a;
end
s=s/1.4/10^8
運行後得:
s=
1.3176e+011
例2 公元前五世紀我國古代數學家張丘建在《算經》一書中提出了「百雞問題」:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、母、雛各幾何?
解 設 x:雞翁數,則x的范圍:0~19
y:雞母數,則y的范圍:0~33
z:雞雛數,則z的范圍:0~100
則:
x+y+z=100
5x+3y+z/3=100
這是一個不定方程。
for x=0:19
for y=0:33
for z=0:100
if (x+y+z==100)&(5*x+3*y+z/3==100)
d=[x,y,z]
end
end
end
end
運行後得結果:
d =
0 25 75
d =
4 18 78
d =
8 11 81
d =
12 4 84
2.While 循環
與For循環以固定次數求一組命令的值相反,While 循環以不定的次數重復執行一組語句。While循環的一般形式是:
while 表達式1
語句1
end
只要表達式1里的所有元素為真,就執行while和end之間的語句1,否則,就結束循環。通常,表達式的值給出一個標量值,但數組值也同樣有效。在數組情況下,當數組的所有元素為真(值不等零)時,就執行語句1,數組中有一個元素為假(值為零),就結束循環。
例3按下面的公式計算:
使誤差小於給定的 .
解: 把 作為誤差,程序如下:
error=input('請輸入誤差:');
x=1;
y=0;
n=1;
while x>error
y=y+1;
x=x/n;
n=n+1;
end
e=y
運行如下:
請輸入誤差:0.001
e =
2.7181
3.IF-ELSE-END 結構
很多情況下,命令的序列必須根據關系的檢驗有條件地執行。在編程語言里,這種邏輯由某種If-Else-End結構來提供。最簡單的If-Else-End結構是:
if 表達式1
語句1
end
如果在表達式1中的所有元素為真(非零),那麼就執行if和end語言之間的語句1。
假如有兩個選擇,If-Else-End結構是:
if 表達式1
語句1
else
語句2
end
在這里,如果表達式1為真,則執行語句1;如果表達式是假,則執行語句2。
當有三個或更多的選擇時,If-Else-End結構採用形式
if 表達式1
語句1
elseif 表達式2
語句2
elseif 表達式3
語句3
elseif 表達式4
語句4
elseif ……
.
.
.
else
語句
end
如果表達式1為真,則執行語句1,結束循環;如果表達式1為假,則檢驗表達式2,如果表達式2為真,則執行語句2,結束循環;如果表達式2為假,則檢驗表達式3,如此下去,如果所有表達式都為假時,則執行最後的語句。即只執行第一個真值表達式相關的語句;接下來的表達式不檢驗,跳過其餘的If-Else-End結構。而且,最後的else命令可有可無。
4.switch-case-end結構
如果在一個程序中,必須針對某個變數不同取值情況進行相應操作,switch語句比if else語句更方便。switch語句的一般形式為:
switch 分支條件(數值或字元串)
case 數值(或字元串)條件1
語句1
case 數值(或字元串)條件2
語句2
case 數值(或字元串)條件3
語句3
case ...
...
otherwise
語句
end
其中分支條件可以是一個函數、變數或者表達式.如果條件1與分支條件匹配就執行語句1,退出循環;否則,檢驗條件2,如果條件2與分支條件匹配執行語句2,退出循環;否則,檢驗條件3,...,當所有條件都不與分支條件匹配時就執行最後的語句。注意otherwise是可以省略的。
例4 在圖形界面上放置一個彈出式菜,點擊彈出式菜單可以設置曲線顏色。
解:程序如下:
x=linspace(-6,6,50);
y=sin(x);
h=plot(x,y,'linewidth',4);
h0=uicontrol('position',[600,500,100,30],...
'style','popupmenu',...
'string','紅色|藍色|黃色|黑色|青色',...
'callback',...
['v=get(h0,''value'');',...
'switch v;',...
'case 1;',...
'set(h,''color'',''r'');',...
'case 2;',...
'set(h,''color'',''b'');',...
'case 3;',...
'set(h,''color'',''y'');',...
'case 4;',...
'set(h,''color'',''k'');',...
'case 5;',...
'set(h,''color'',''c'');',...
'end;']);
❷ 用C語言編寫
第啟肢一:你沒悄差世有給main函數添加返回值類型
第二:最最重要的是,麥粒總共要1844 6744 0737 0955 1615粒,而C語言int類型的數值的慶蔽范圍太小,,這個小廟容不下這個大佛啊,即使是unsigned long int也不行
❸ C#編程題,大佬進
usingSystem;
namespaceq1
{
classProgram
{
staticvoidMain(string[]args)
{
ulongs=0;//麥粒總數
ulongn=4;//每格麥粒的數量,第一格為4粒
doubleg,v,a,h;
//循環累計,64格,累加64次
for(inti=0;i<64;++i)
{
s+=n;
//每格麥粒比前一格增加1倍
n*=2;
搜物}
//輸出麥粒總數
Console.WriteLine("統治者要向發明者獎勵的麥粒總數:"+s+"粒");
//小麥重量
g=s*5e-8;//每粒小麥50毫克=0.05克=0.00005千克=0.00000005噸
Console.WriteLine("小麥的重量為:"+g+"噸");
//輸入區域面積
Console.Write("輸入區域面積(平方千米):");
a=double.Parse(Console.ReadLine());
//計算小麥的體積(立方千米),每立方米小麥重量橋斗約0.75噸,換算為立方千米則為0.75e9噸
v=g*0.75e9;
//小麥的深世消液度為(千米)
h=v/a;
Console.WriteLine("深度:"+h+"千米");
Console.ReadKey();
}
}
}
❹ c語言中pow語句的問題
1/3是整除,在C中等於0,所以pow(h,1/3)=1
❺ 語言高手急救:象棋盤上有64個格子,第一個格子中放入一粒米,第二個格子中放入兩粒米……
格子序耐山禪號, 米粒昌塵數
1 1=2^0
2 2=2^1
3 4=2^2
4 8=2^3
........
64 2^63
和為2^0+2^1+2^2+2^3+。。。。+2^62+2^63= 2^64-1=18446744073709551615
這唯局個數量相當於現在全世界人口吃1000多年的 糧食產量
❻ 在國際棋盤的64個格子放置小麥粒,第一格放1粒,第二格放2粒,第三格放4粒,第四格放8粒,以此類推,最後
int i;
long int y=1;
for(i=1;i++;i<64)
y=2*y;
加個mian函數和輸出就ok了
(如果是總共的信冊兄話,再用姿橡個sum作下累加就行了)滑襲
❼ 國王的小麥c語言編程
你已經給出了4種不同的編程。
//(1)
doublep,i,t;
p=1,t=1;
i=1;
while(i<64)
{p=p*2;
t=t+p;
i++;
}
//(2)
doublep,i,t;
i=1;
for(;i<64;)
{p=p*2;
t=t+p;
i++;
}
//(3)
doublep,i,t;
for(i=1,t=1;i<64;i++)
{p=p*2;
t=t+p;
}
//(4)
doublei,t;
while(i<64)
{t=t+pow(2,i);
i++;
}
❽ 指針地址數據為0讀取錯誤
,用0作為一個數據結構的基地址,這樣其中的成員變數的地址,就是其在數據結構中的偏移地址了。 這樣做更容易獲取數據結構中成員變數的偏移地址了。
計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→數據結構、編譯原理、操作系統→計算機網路、資料庫原理、正則表達式→其它語言(包括C++)、架構 對學習編程者的忠告: 眼過千遍不如手過一遍! 書看千行不如手敲一行! 手敲千行不如單步一行! 單步源代碼千行不如單步對應匯編一行! VC調試時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編窗口、堆棧窗口、內存窗口和寄存器窗口看每句C對應的匯編、單步執行並觀察相應堆棧、內存和寄存器變化,這樣過一遍不就啥都明白了嗎。 對VC來說,所謂『調試時』就是編譯連接通過以後,按F10或F11鍵單步執行一步以後的時候,或者在某行按F9設了斷點後按F5執行停在該斷點處的時候。 (Turbo C或Borland C用Turbo Debugger調試,Linux或Unix下用GDB調試時,看每句C對應的匯編並單步執行觀察相應內存和寄存器變化。) 想要從本質上理解C指針,必須學習匯編以及C和匯編的對應關系。 從匯編的角度理解和學習C語言的指針,原本看似復雜的東西就會變得非常簡單! 指針即地址。「地址又是啥?」「只能從匯編語言和計判塵蠢算機組成原理的角度去解釋了。」 但我又不得不承認: 有那麼些人喜歡或者適合用「先具體再抽象」的方法學習和理解復雜事物; 而另一些人喜歡或者適合用「先抽象再具體」的方法學習和理解復雜事物。 而我本人屬前者。 不要企圖依賴輸出指針相關表達式的值【比如printf("%p
",...)】來理解指針的本質, 而要依賴調試時的反匯編窗口中的C/C++代碼【比如void *p=...】及其對應匯編指令以及內存窗口中的內存地址和內存值來理解指針的本掘陪質。 這輩子不看內存地址和內存值;只畫鏈表、指針示意圖,畫堆棧示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖能從本質上理解指針、理解函數參數傳遞嗎?本人深表懷疑! 這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃麵包、甚至從沒看過別人怎麼蒸饅頭,壓面條,烤麵包,能從本質上理解麵粉、理解麵食嗎?本人深表懷疑!! 提醒: 「學慣用匯編語言寫程序」 和 「VC調試(TC或BC用TD調試)時按Alt+8、Alt+7、Alt+6和Alt+5,打開匯編窗口、堆棧窗口、兄納內存窗口和寄存器窗口看每句C對應的匯編、單步執行並觀察相應堆棧、內存和寄存器變化,這樣過一遍不就啥都明白了嗎。 (Linux或Unix下可以在用GDB調試時,看每句C對應的匯編並單步執行觀察相應內存和寄存器變化。) 想要從本質上理解C指針,必須學習C和匯編的對應關系。」 不是一回事! 不要迷信書、考題、老師、回帖; 要迷信CPU、編譯器、調試器、運行結果。 並請結合「盲人摸太陽」和「駕船出海時一定只帶一個指南針。」加以理解。 任何理論、權威、傳說、真理、標准、解釋、想像、知識都比不上擺在眼前的事實! 有人說一套做一套,你相信他說的還是相信他做的? 其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎? 不要寫連自己也預測不了結果的代碼! 電腦內存或文件內容只是一個一維二進制位元組數組及其對應的二進制地址; 人腦才將電腦內存或文件內容中的這個一維二進制位元組數組及其對應的二進制地址的某些部分看成是整數、有符號數/無符號數、浮點數、復數、英文字母、阿拉伯數字、中文/韓文/法文字元/字元串、匯編指令、函數、函數參數、堆、棧、數組、指針、數組指針、指針數組、數組的數組、指針的指針、二維數組、字元點陣、字元筆畫的坐標、黑白二值圖片、灰度圖片、彩色圖片、錄音、視頻、指紋信息、身份證信息 十字鏈表交換任意兩個節點C源代碼(C指針應用終極挑戰)
❾ C語言求助
#include "stdio.h"
#include "conio.h"
/*舍罕是古印度的國王,據說他十分好玩,宰相達依爾為討好國王,發明了現今的國際象棋獻給國王。舍罕非常喜歡這項游戲,於是決定嘉獎達依爾,許諾可以滿足達依爾提出的任何要求。達依爾指著舍罕王前面的棋盤提出了要求:「陛下,請您按棋盤的格子賞賜我一點麥子吧,第1個小格賞我一粒麥子,第2個小格賞我兩粒,第3個小格賞四粒,以後每一小格都比前一個小格賞的麥粒數增加一倍,只要把棋盤上全部64個小格按這樣的方法得到的麥粒都賞賜給我,我就心滿意褲侍足了。」舍罕王聽了達依爾這個「胡姿吵小小」的要求,想都沒想就滿口答應下來。
結果在給達依爾麥子時舍罕驚奇地發現它要給達依爾的麥子比自己想像的要多得多,於是他進行了計算,結果令他大驚失色。問題是:舍罕王的計算結果是多少粒麥子?
*/
void main()
{
//定義一個冊伍變數,用來保存麥子的個數
double count=0;
//循環變數i
int i;
for(i=0;i<=64;i++){
//累加
count+=pow(2,i);
}
//輸出
printf("%lf",count);
}
❿ C語言進新手問題
for語句後多寫敗飢了一個零,這樣整個循環會變成空循環;當i等於n時循環才結束,再運行t=t*i和s=s+t這兩條語句,最後s會等於n+1的值。最後的輸出應該是s,不應該是n吧?循環的次數也少一次,察棗返當格數為2時,循環應該運行岩慧1次對吧?但是在這個程序中一次都沒有運行。
綜合上述整個程序可以改為:
#include "stdio.h"
void main()
{
int t,s,i,n;
printf("請輸入格數\n");
scanf("%d",&n);
t=1,s=1;
for(i=2;i<=n;i++)
{
t=t*i;
s=s+t;
}
printf("%d\n",s);
}