真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言ackmann函數(shù) ackman函數(shù)是什么

C語言Ackemann函數(shù)程序設計

#include stdio.h

創(chuàng)新互聯(lián)公司主營曲周網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,重慶APP軟件開發(fā),曲周h5成都小程序開發(fā)搭建,曲周網(wǎng)站營銷推廣歡迎曲周等地區(qū)企業(yè)咨詢

void main()

{ int Ack(int m,int n);

int m,n;

printf("\nEnter m and n:\n");

scanf("%d,%d",m,n);

printf("Ack(%d,%d)=%d\n",m,n,Ack(m,n));

}

int Ack(int m,int n)

{ if(m==0)

return(n+1);

else if(n==0)

return(Ack(m-1,1));

else

return(Ack((m-1),Ack(m,n-1)));

}

用簡單的C的遞歸就可以實現(xiàn)了 ,由于電腦問題,結(jié)果圖片上傳不了,不過可以運行

求PASCAL的算法

學習計算機語言不是學習的最終目的。語言是描述的工具,如何靈活地運用語言工具,設計和編寫能解決實際問題的程序,算法是程序設計的基礎。算法的作用是什么呢?著名數(shù)學家高斯(GAUSS)從小就勤于思索。1785年,剛上小學二年級的小高斯,對老師出的計算題S=1+2+3+…+99+100,第一個舉手報告S的結(jié)果是5050。班上的同學都采用依次逐個相加的“算法”,要相加99次;而小高斯則采用首尾歸并,得出S=(1+100)*50的“算法”,只需加一次和乘一次,大大提高了效率??梢?,算法在處理問題中的重要性。學習計算機編程,離不開基本算法。剛開始學習程序設計時,就應注重學習基本算法。

第一節(jié) 遞推與遞歸算法

遞推和遞歸是編程中常用的基本算法。在前面的解題中已經(jīng)用到了這兩種方法,下面對這兩種算法基本應用進行詳細研究討論。

一、遞推

遞推算法是一種用若干步可重復的簡單運算(規(guī)律)來描述復雜問題的方法。

[例1] 植樹節(jié)那天,有五位參加了植樹活動,他們完成植樹的棵數(shù)都不相同。問第一位同學植了多少棵時,他指著旁邊的第二位同學說比他多植了兩棵;追問第二位同學,他又說比第三位同學多植了兩棵;…如此,都說比另一位同學多植兩棵。最后問到第五位同學時,他說自己植了10棵。到底第一位同學植了多少棵樹?

解:設第一位同學植樹的棵數(shù)為a1,欲求a1,需從第五位同學植樹的棵數(shù)a5入手,根據(jù)“多兩棵”這個規(guī)律,按照一定順序逐步進行推算:

①a5=10;

②a4=a5+2=12;

③a3=a4+2=14;

④a2=a3+2=16;

⑤a1=a2+2=18;

Pascal程序:

Program Exam1;

Var i, a: byte;

begin

a:=10; {以第五位同學的棵數(shù)為遞推的起始值}

for i :=1 to 4 do {還有4人,遞推計算4次}

a:= a+2; {遞推運算規(guī)律}

writeln(’The Num is’, a);

readln

end.

本程序的遞推運算可用如下圖示描述:

遞推算法以初始{起點}值為基礎,用相同的運算規(guī)律,逐次重復運算,直至運算結(jié)束。這種從“起點”重復相同的方法直至到達一定“邊界”,猶如單向運動,用循環(huán)可以實現(xiàn)。遞推的本質(zhì)是按規(guī)律逐次推出(計算)下一步的結(jié)果。

二、遞歸

遞歸算法是把處理問題的方法定義成與原問題處理方法相同的過程,在處理問題的過程中又調(diào)用自身定義的函數(shù)或過程。

仍用上例的計算植樹棵數(shù)問題來說明遞歸算法:

解:把原問題求第一位同學在植樹棵數(shù)a1,轉(zhuǎn)化為a1=a2+2;即求a2;而求a2又轉(zhuǎn)化為a2=a3+2; a3=a4+2; a4=a5+2;逐層轉(zhuǎn)化為求a2,a3,a4,a5且都采用與求a1相同的方法;最后的a5為已知,則用a5=10返回到上一層并代入計算出a4;又用a4的值代入上一層去求a3;...,如此,直到求出a1。

因此:

其中求a x+1 又采用求ax 的方法。所以:

①定義一個處理問題的過程Num(x):如果X 5就遞歸調(diào)用過程Num(x+1);

②當遞歸調(diào)用到達一定條件(X=5),就直接執(zhí)行a :=10,再執(zhí)行后繼語句,遇End返回到調(diào)用本過程的地方,將帶回的計算結(jié)果(值)參與此處的后繼語句進行運算(a:=a+2);

③最后返回到開頭的原問題,此時所得到的運算結(jié)果就是原問題Num(1)的答案。

Pascal程序:

Program Exam1_1;

Var a: byte;

Procedure Num(x: integer);{過程Num(x)求x的棵數(shù)}

begin

if x=5 then a:=10

else begin

Num(x+1); {遞歸調(diào)用過程Num(x+1)}

a:=a+2 {求(x+1)的棵數(shù)}

end

end;

begin

Num(1); {主程序調(diào)用Num(1)求第1個人的棵數(shù)}

writeln(’The Num is ’, a);

readln

end.

程序中的遞歸過程圖解如下:

參照圖示,遞歸方法說明如下:

①調(diào)用原問題的處理過程時,調(diào)用程序應給出具體的過程形參值(數(shù)據(jù));

②在處理子問題中,如果又調(diào)用原問題的處理過程,但形參值應是不斷改變的量(表達式);

③每遞歸調(diào)用一次自身過程,系統(tǒng)就打開一“層”與自身相同的程序系列;

④由于調(diào)用參數(shù)不斷改變,將使條件滿足(達到一定邊界),此時就是最后一“層”,不需再調(diào)用(打開新層),而是往下執(zhí)行后繼語句,給出邊界值,遇到本過程的END,就返回到上“層”調(diào)用此過程的地方并繼續(xù)往下執(zhí)行;

⑤整個遞歸過程可視為由往返雙向“運動”組成,先是逐層遞進,逐層打開新的“篇章”,(有可能無具體計算值)當最終遞進達到邊界,執(zhí)行完本“層”的語句,才由最末一“層”逐次返回到上“層”,每次返回均帶回新的計算值,直至回到第一次由主程序調(diào)用的地方,完成對原問題的處理。

[例2] 用遞歸算法求X n 。

解:把X n 分解成: X 0 = 1 ( n =0 )

X 1 = X * X 0 ( n =1 )

X 2 = X * X 1 ( n 1 )

X 3 = X * X 2 ( n 1 )

…… ( n 1 )

X n = X * X n-1 ( n 1 )

因此將X n 轉(zhuǎn)化為:

其中求X n -1 又用求X n 的方法進行求解。

①定義過程xn(x,n: integer)求X n ;如果n 1則遞歸調(diào)用xn (x, n-1) 求X n—1 ;

②當遞歸調(diào)用到達n=0,就執(zhí)行t t :=1, 然后執(zhí)行本“層”的后繼語句;

③遇到過程的END就結(jié)束本次的調(diào)用,返回到上一“層”調(diào)用語句的地方,并執(zhí)行其后續(xù)語句tt:=tt*x;

④繼續(xù)執(zhí)行步驟③,從調(diào)用中逐“層”返回,最后返回到主程序,輸出tt的值。

Pascal程序:

Program Exam2;

Var tt, a, b: integer;

Procedure xn(x, n: integer); {過程xn(x, n)求xn }

begin if n=0 then tt:=1

else begin

xn(x, n-1); {遞歸調(diào)用過xn(x,n-1)求x n-1}

tt:=tt*x

end;

end;

begin

write(’input x, n:’); readln(a,b); {輸入a, b}

xn(a,b); {主程序調(diào)用過程xn(a, b)求a b}

writeln(a, ’^’, b, ’=‘, tt);

readln

end.

遞歸算法,常常是把解決原問題按順序逐次調(diào)用同一“子程序”(過程)去處理,最后一次調(diào)用得到已知數(shù)據(jù),執(zhí)行完該次調(diào)用過程的處理,將結(jié)果帶回,按“先進后出”原則,依次計算返回。

如果處理問題的結(jié)果只需返回一個確定的計算值,可定義成遞歸函數(shù)。

[例3]用遞歸函數(shù)求x!

解:根據(jù)數(shù)學中的定義把求x! 定義為求x*(x-1)! ,其中求(x-1)! 仍采用求x! 的方法,需要定義一個求a!的過程或函數(shù),逐級調(diào)用此過程或函數(shù),即:

(x-1)!= (x-1)*(x-2)! ;

(x-2)!= (x-2)*(x-3)! ;

……

直到x=0時給出0!=1,才開始逐級返回并計算各值。

①定義遞歸函數(shù):fac(a: integer): integer;

如果a=0,則fac:=1;

如果a0,則調(diào)用函數(shù)fac:=fac(a-1)*a;

②返回主程序,打印fac(x)的結(jié)果。

Pascal程序:

Program Exam3;

Var x: integer;

function fac(a: integer): integer; {函數(shù)fac(a) 求a !}

begin

if a=0 then fac:=1

else fac:=fac(a-1)*a {函數(shù)fac(a-1)遞歸求(a-1) !}

end;

begin

write(’input x’); readln(x);

writeln(x, ’!=’, fac(x)); {主程序調(diào)用fac(x) 求x !}

readln

end.

遞歸算法表現(xiàn)在處理問題的強大能力。然而,如同循環(huán)一樣,遞歸也會帶來無終止調(diào)用的可能性,因此,在設計遞歸過程(函數(shù))時,必須考慮遞歸調(diào)用的終止問題,就是遞歸調(diào)用要受限于某一條件,而且要保證這個條件在一定情況下肯定能得到滿足。

[例4]用遞歸算求自然數(shù)A,B的最大公約數(shù)。

解:求最大公約數(shù)的方法有許多種,若用歐幾里德發(fā)明的輾轉(zhuǎn)相除方法如下:

①定義求X除以Y的余數(shù)的過程;

②如果余數(shù)不為0,則讓X=Y,Y=余數(shù),重復步驟①,即調(diào)用過程;

③如果余數(shù)為0,則終止調(diào)用過程;

④輸出此時的Y值。

Pascal程序:

Program Exam4;

Var a,b,d: integer;

Procedure Gdd(x, y: nteger);{過程}

begin

if x mod y =0 then d :=y

else Gdd(y, x mod y) {遞歸調(diào)用過程}

end;

begin

write(’input a, b=’); readln(a, b);

Gdd(a, b);

writeln(’(’, a, ’,’, b, ’)=’, d );

readln

end.

簡單地說,遞歸算法的本質(zhì)就是自己調(diào)用自己,用調(diào)用自己的方法去處理問題,可使解決問題變得簡潔明了。按正常情況有幾次調(diào)用,就有幾次返回。但有些程序可以只進行遞歸處理,不一定要返回時才進行所需要的處理。

[例5] 移梵塔。有三根柱A,B,C在柱A上有N塊盤片,所有盤片都是大的在下面,小片能放在大片上面?,F(xiàn)要將A上的N塊片移到C柱上,每次只能移動一片,而且在同一根柱子上必須保持上面的盤片比下面的盤片小,請輸出移動方法。

解:先考慮簡單情形。

如果N=3,則具體移動步驟為:

假設把第3步,第4步,第6步抽出來就相當于N=2的情況(把上面2片捆在一起,視為一片):

所以可按“N=2”的移動步驟設計:

①如果N=0,則退出,即結(jié)束程序;否則繼續(xù)往下執(zhí)行;

②用C柱作為協(xié)助過渡,將A柱上的(N-1)片移到B柱上,調(diào)用過程sub(n-1, a,b,c);

③將A柱上剩下的一片直接移到C柱上;

④用A柱作為協(xié)助過渡,將B柱上的(N-1)移到C柱上,調(diào)用過程sub(n-1,b,c,a)。

Pascal程序:

Program Exam65;

Var x,y,z : char;

N, k : integer;

Procedure sub(n: integer; a, c , b: char);

begin

if n=0 then exit;

sub(n-1, a,b,c);

inc(k);

writeln(k, ’: from’, a, ’-->’, c);

sub(n-1,b,c,a);

end;

begin

write(’n=’; readln(n);

k:=0;

x:=’A’; y:=’B’; Z:=’C’;

sub(n,x,z,y);

readln

end.

程序定義了把n片從A柱移到C柱的過程sub(n,a,c,b),這個過程把移動分為以下三步來進行:

①先調(diào)用過程sub(n-1, a, b, c),把(n-1)片從A柱移到B柱, C柱作為過渡柱;

②直接執(zhí)行 writeln(a, ’-->’, c),把A柱上剩下的一片直接移到C柱上,;

③調(diào)用sub(n-1,b,c,a),把B柱上的(n-1)片從B移到C柱上,A柱是過渡柱。

對于B柱上的(n-1)片如何移到,仍然調(diào)用上述的三步。只是把(n-1)當成了n,每調(diào)用一次,要移到目標柱上的片數(shù)N就減少了一片,直至減少到n=0時就退出,不再調(diào)用。exit是退出指令,執(zhí)行該指令能在循環(huán)或遞歸調(diào)用過程中一下子全部退出來。

習題6.1

1.過沙漠。希望一輛吉普車以最少的耗油跨越1000 km的沙漠。已知該車總裝油量500升,耗油率為1升/ km,必須利用吉普車自己沿途建立臨時加油站,逐步前進。問一共要多少油才能以最少的耗油越過沙漠?

2.樓梯有N級臺階,上樓可以一步上一階,也可以一步上二階。編一遞歸程序,計算共有多少種不同走法?

提示:如N級樓梯有S(N)種不同走法,則有:

S(N)=S(N-2)+S(N-1)

3.阿克曼(Ackmann)函數(shù)A(x,y)中,x,y定義域是非負整數(shù),函數(shù)值定義為:

A(x,y)=y+1 (x = 0)

A(x,0)=A(x-1,1) (x 0, y = 0)

A(x,y)=A(x-1, A(x, y-1)) (x, y 0)

設計一個遞歸程序。

4.某人寫了N封信和N個信封,結(jié)果所有的信都裝錯了信封。求所有的信都裝錯信封共有多少種不同情況??捎孟旅婀剑?/p>

Dn=(n—1) ( D n—1+D n—2)

寫出遞歸程序。

第二節(jié) 回溯算法

在一些問題求解進程中,有時發(fā)現(xiàn)所選用的試探性操作不是最佳選擇,需退回一步,另選一種操作進行試探,這就是回溯算法。

例[6.6] 中國象棋半張棋盤如下,馬自左下角往右上角跳。現(xiàn)規(guī)定只許往右跳,不許往左跳。比如下圖所示為一種跳行路線。編程輸出所有的跳行路線,打印格式如下:

1 (0,0)—(1,2)—(3,3)—(4,1)—(5,3)—(7,2)—(8,4)

解:按象棋規(guī)則,馬往右跳行的方向如下表和圖所示:

水平方向用x表示; 垂直方向用y表示。右上角點為x=8, y=4, 記為(8, 4) ; 用數(shù)組tt存放x方向能成行到達的點坐標;用數(shù)組t存放y方向能成行到達的點坐標;

①以(tt(K), t(k))為起點,按順序用四個方向試探,找到下一個可行的點(x1, y1);

②判斷找到的點是否合理 (不出界),若合理,就存入tt和t中;如果到達目的就打印,否則重復第⑴步驟;

③如果不合理,則換一個方向試探,如果四個方向都已試過,就退回一步(回溯),用未試過的方向繼續(xù)試探。重復步驟⑴;

④如果已退回到原點,則程序結(jié)束。

Pascal程序:

Program Exam66;

Const xx: array[1..4] of 1..2 =(1,2,2,1);

yy: array[1..4] of -2..2=(2,1,-1,-2);

Var p: integer;

t, tt : array[0..10] of integer;

procedure Prn(k: integer);

Var i: integer;

Begin

inc(p); write(‘ ‘, p: 2, ’ ‘, ’ ‘:4, ’0,0’);

for i:=1 to k do

write(‘— ( ‘, tt[ I ], ’ , ’, t[ I ], ’)’ );

writeln

End;

Procedure Sub(k: integer);

Var x1, y1, i: integer;

Begin

for I:=1 to 4 do

Begin

x1:=tt[k-1]+xx[ i ]; y1:=t[k-1]+yy[ i ];

if not( (x1 8) or (y1 0) or (y1 4) ) then

Begin

tt[k]:=x1; t[k]=y1;

if (y1=4) and (x1=8) then prn(k);

sub(k+1);

end;

end;

end;

Begin

p:=0; tt[0]:=0; t[0]:=0;

sub(1);

writeln( ‘ From 0,0 to 8,4 All of the ways are ’, p);

readln

end.

例[6.7] 輸出自然數(shù)1到n所有不重復的排列,即n的全排列。

解:①在1~n間選擇一個數(shù),只要這個數(shù)不重復,就選中放入a數(shù)組中;

②如果這個數(shù)巳被選中,就在d數(shù)組中作一個被選中的標記 (將數(shù)組元素置1 );

③如果所選中的數(shù)已被占用(作了標記),就另選一個數(shù)進行試探;

④如果未作標記的數(shù)都已試探完畢,那就取消最后那個數(shù)的標記,退回一步,并取消這一步的選數(shù)標記,另換下一個數(shù)試探,轉(zhuǎn)步驟①;

⑤如果已退回到0,說明已試探全部數(shù)據(jù),結(jié)束。

Pascal程序:

Program Exam67;

Var p,n: integer;

a,d: array[1..500] of integer;

Procedure prn (t : integer);

Var i: integer;

Begin

write(‘ ‘, p:3, ’ ‘, ’ ‘:10);

for I:=1 to t do

write(a[ I ]:4);

writeln;

end;

Procedure pp(k: integer);

var x: integer;

begin

for x:=1 to n do

begin

a[k]:=x; d[x]:=1;

if k n then pp(k+1)

else

begin

p:=p+1;

prn(k);

end;

end;

end;

Begin

write(‘Input n=‘); readln(n);

for p:=1 to n do d[p]=0;

p:=0;

pp(1);

writeln(‘All of the ways are ‘, p:6);

End.

例[6.8] 設有一個連接n個地點①—⑥的道路網(wǎng),找出從起點①出發(fā)到過終點⑥的一切路徑,要求在每條路徑上任一地點最多只能通過一次。

解:從①出發(fā),下一點可到達②或③,可以分支。具體步驟為:

⑴假定從起點出發(fā)數(shù)起第k個點Path[k],如果該點是終點n就打印一條路徑;

⑵如果不是終點n,且前方點是未曾走過的點,則走到前方點,定(k+1)點為到達路徑,轉(zhuǎn)步驟⑴;

(3)如果前方點已走過,就選另一分支點;

(4)如果前方點已選完,就回溯一步,選另一分支點為出發(fā)點;

(5)如果已回溯到起點,則結(jié)束。

為了表示各點的連通關系,建立如下的關系矩陣:

第一行表示與①相通點有②③,0是結(jié)束 標志;以后各行依此類推。

集合b是為了檢查不重復點。

Program Exam68;

const n=6;

roadnet: array[1..n, 1..n] of 0..n=( (2,3,0,0,0,0),

(1,3,4,0,0,0),

(1,2,4,5,0,0),

(2,3,5,6,0,0),

(3,4,6,0,0,0),

(4,5,0,0,0,0) );

var b: set of 1..n;

path: array[1..n] of 1..n;

p: byte;

procedure prn(k: byte);

var i: byte;

begin

inc(p); write(’’, p:2, ’’, ’ ’:4);

write (path[1]:2);

for I:=2 to k do

write (’--’, path[ i ]:2);

writeln

end;

procedure try(k: byte);

var j: byte;

begin

1 2 3 4 5

6 X 8 9 10

11 12 13 14 15

j:=1;

repeat

path[k]:=roadnet [path [k-1], j ];

if not (path [k] in b) then

begin b:=b+[path [k] ];

if path [k]=n then prn (k)

else try(k+1);

b:=b-[path [k] ];

end;

inc(j);

until roadnet [path [k-1], j ]=0

end;

begin

b:=[1]; p=0; path[1]:=1;

try(2);

readln

end.

習題[6.2]

1. 有A,B,C,D,E五本書,要分給張、王、劉、趙、錢五位同學,每人只能選一本。事先讓每個人將自己喜愛的書填寫在下表中。希望你設計一個程序,打印分書的所有可能方案,當然是讓每個人都能滿意。

A B C D E

張 Y Y

王 Y Y Y

劉 Y Y

趙 Y

錢 Y Y

2. 右下圖所示的是空心框架,它是由六個單位正方體組成,問:從框架左下外頂點走到右上內(nèi)頂點共有多少條最短路線?

3.城市的街道示意圖如右:問從甲地去到乙地可以有多少條最短路線?

4.有M×N張(M行, N列)郵票連在一起,

但其中第X張被一個調(diào)皮的小朋友控掉了。上圖是3×5的郵票的形狀和編號。從這些郵票中撕出四張連在一起的郵票,問共有多少種這樣四張一組的郵票?注:因為給郵票編了序號,所以1234和2345應該看作是不同的兩組。

5.有分數(shù)12 ,13 ,14 ,15 ,16 ,18 ,110 ,112 ,115 , 求將其中若干個相加的和恰好為1的組成方案,并打印成等式。例如:

1 12 +13 +16 = 1

2 ...

6.八皇后問題。在8*8的國際象棋盤上擺上8個皇后。要求每行,每列,各對角線上的皇后都不能互相攻擊,給出所可能的擺法。

systemverilog設計哪方面的,學習要具備哪方面的基礎知識啊

你要學SV的話,要確保你首先VerilogHDL語言要有一定功底,如果你VerilogHDL很熟,那其實SV并不難,如果說VerilogHDL等同于C語言的話,那么SV就等同于C++。

再者就是要看你學習SV時選擇的方向,是測試方向還是綜合方向,我用SV是寫可綜合程序的,在可綜合的方面,SV與VerilogHDL的不同之處在于:1.對部分原有的語法進行了擴充;2.增加了新的語法結(jié)構(gòu)。

SV中常用的有包(package),變量細分為對象類型和數(shù)據(jù)類型,automatic關鍵字,enum,結(jié)構(gòu)體,三種alwyas結(jié)構(gòu),unique和priority關鍵字,還有interface接口等,其實還有類(class)的應用,但這是不能綜合的。

如果你對VerilogHDL很熟的話,我推薦給你兩本書:

可綜合方向的:

《SystemVerilog硬件設計及建?!?/p>

作者:[英]Stuart Sutherland, [英]Simon Davidmann, [英]Peter Flake 著;

于敦山, 韓臨, 何進, 李瑩, 路衛(wèi)軍 譯

仿真測試方向的:

《SystemVerilog驗證——測試平臺編寫指南》

作者:(美)克里斯·斯皮爾,

張春 譯

這兩本書翻譯的都是不錯的,但我建議看英文原版,這樣更好的理解原作者在字里行間所表述的意思??磿且环矫妫豢床蛔鼍毩?,白扯,《SystemVerilog硬件設計及建?!窌辛谐龅木W(wǎng)站可下載SV的源碼,下載下來,看懂練會,然后用SV重寫很容易找到的VerilogHDL的實例,做仿真,時間長了你就會了。

C語言編程題,小白不會編程序

#includestdio.h

#includestring.h

int?main(){

int?i?=?0;

char?ch[3][100];

char?max[100];

for(;?i??3;?++i)

scanf("%s",?ch[i]);

strcpy(max,?ch[0]);

for(i?=?1;?i??3;?++i)

if(strcmp(max,?ch[i])??0)

strcpy(max,?ch[i]);

printf("the?max?string?is?:?%s",?max);

return?0;

}

#includestdio.h

#includestring.h

#includectype.h

//有一篇文章,共有三行字符,每行80個字符,分別統(tǒng)計其中英文大寫字母,小寫字母,數(shù)字,空格以及其他字符的個數(shù)

void?calc(char?ch[3][80],?int?col){

int?i?=?0,?j?=?9,?upp_cnt,?low_cnt,?num_cnt,?space_cnt,?other_cnt;

upp_cnt?=?low_cnt?=?num_cnt?=?space_cnt?=?other_cnt?=?0;

for(;?i??col?;?++i)

for(j?=?0;?j??80;?++j){

if(isupper(ch[i][j]))

upp_cnt++;

else?if(islower(ch[i][j]))

low_cnt++;

else?if('?'?==?ch[i][j])

space_cnt++;

else?if?(isdigit(ch[i][j]))

num_cnt++;

else

other_cnt++;

}

printf("upper?count?:?%d\n",upp_cnt?);

printf("lower?count?:?%d\n",low_cnt?);

printf("space?count?:?%d\n",space_cnt?);

printf("nun?count?:?%d\n",num_cnt?);

printf("other?count?:?%d\n",other_cnt?);

}

int?main(){

char?ch[3][80]?=?{

???{"Hello,?my?name?is?Ann.?I'm?taking?an?American?accent?training."},

???{"And?I?have?paid?$?100.?I?think?I?can?do?it.?So?insist?it."},

???{"Now?I?am?making?a?programming?and?I?want?to?mannage?it."}

};

calc(ch,?3);

return?0;

}

這些都是很基礎的,希望LZ好好學習,不要談戀愛了

利用遞歸法求阿克曼函數(shù)

這里給出C語言的阿克曼遞歸函數(shù):首先,阿克曼函數(shù)標準定義:#include stdio.h

#include stdlib.hint Ackmann(int n,int m)

{

if(m==0)return n+1;

else if(m0 n==0)return Ackmann(m-1,1);

else return Ackmann(m-1,Ackmann(m,n-1));

}int main()

{

int m,n;

printf("輸入m和n:");

scanf("%d,%d",m,n);

printf("結(jié)果是:%d",Ackmann(n,m));

system("pause");

return 0;

}

c++ 指針與數(shù)組的轉(zhuǎn)換

指針與數(shù)組,在理論上,數(shù)組在程序編碼時就已經(jīng)定義好了空間準備存放數(shù)據(jù),而指針只是在程序編碼時就已經(jīng)定義好了一個存儲地址內(nèi)容的空間。

在實際操作中,指針與數(shù)組的操作基本是一樣的。

看下面的例子:

char msg[]="yuejian is a handsome man\n";

通過數(shù)組元素打?。?/p>

int i;

int len=strlen(msg);

for(i=0;ilen;i++)

coutmsg[i];

通過數(shù)組地址打印:

int i;

for(i=0;*(msg+i);i++)

cout*(msg+i);

通過指針打印:

char *cp;

for (cp = msg; *cp; cp++)

cout*cp;

你給出的第3個for語句;

for (cp = msg; cp[0]; cp++)

在C語言中通過不這樣寫,應該這樣寫:

for (cp = msg; *cp; cp++)

具體含義:

數(shù)組msg的地址賦給指針cp,打印指針cp指向的第一個字符,將指針下移一個字符的位置,看當前字符是否為“\0”,如是則結(jié)束循環(huán),否則打印當前字符,將指針下移一個字符的位置,進入循環(huán)。


當前文章:c語言ackmann函數(shù) ackman函數(shù)是什么
當前鏈接:http://weahome.cn/article/docoeed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部