通俗點(diǎn)講就是 一個名字
成都創(chuàng)新互聯(lián)公司始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)10年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的網(wǎng)絡(luò)營銷推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:三維植被網(wǎng)等企業(yè),備受客戶認(rèn)可。
c語言中變量跟函數(shù)還有符號常量都要有個名字
nzp這個就是用戶自定義的一個函數(shù)名字
這個名字是任意的
你可以改為hello,sdfjklsdfj……,隨便你怎么起名字,只要不是關(guān)鍵字(比如定義整型int,這個int就是關(guān)鍵字,關(guān)鍵字就是c編譯系統(tǒng)里面本身就有的,一般不能成為用戶自定義的名字)
數(shù)組元素就是下標(biāo)變量,它與普通變量并無區(qū)別。 因此它作為函數(shù)實(shí)參使用與普通變量是完全相同的,在發(fā)生函數(shù)調(diào)用時,把作為實(shí)參的數(shù)組元素的值傳送給形參,實(shí)現(xiàn)單向的值傳送?!纠?-4】說明了這種情況。
【例8-7】判別一個整數(shù)數(shù)組中各元素的值,若大于0 則輸出該值,若小于等于0則輸出0值。編程如下:#include stdio.hvoid nzp(int v){ if(v0) printf("%d ",v); else printf("%d ",0);}int main(void){ int a[5],i; printf("input 5 numbers\n"); for(i=0;i5;i++){ scanf("%d",a[i]); nzp(a[i]); } return 0;}
本程序中首先定義一個無返回值函數(shù)nzp,并說明其形參v為整型變量。在函數(shù)體中根據(jù)v值輸出相應(yīng)的結(jié)果。在main函數(shù)中用一個for語句輸入數(shù)組各元素,每輸入一個就以該元素作實(shí)參調(diào)用一次nzp函數(shù),即把a(bǔ)[i]的值傳送給形參v,供nzp函數(shù)使用。
數(shù)組名作為函數(shù)參數(shù)
用數(shù)組名作函數(shù)參數(shù)與用數(shù)組元素作實(shí)參有幾點(diǎn)不同。
1) 用數(shù)組元素作實(shí)參時,只要數(shù)組類型和函數(shù)的形參變量的類型一致,那么作為下標(biāo)變量的數(shù)組元素的類型也和函數(shù)形參變量的類型是一致的。因此,并不要求函數(shù)的形參也是下標(biāo)變量。換句話說,對數(shù)組元素的處理是按普通變量對待的。用數(shù)組名作函數(shù)參數(shù)時,則要求形參和相對應(yīng)的實(shí)參都必須是類型相同的數(shù)組,都必須有明確的數(shù)組說明。當(dāng)形參和實(shí)參二者不一致時,即會發(fā)生錯誤。
2) 在普通變量或下標(biāo)變量作函數(shù)參數(shù)時,形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個不同的內(nèi)存單元。在函數(shù)調(diào)用時發(fā)生的值傳送是把實(shí)參變量的值賦予形參變量。在用數(shù)組名作函數(shù)參數(shù)時,不是進(jìn)行值的傳送,即不是把實(shí)參數(shù)組的每一個元素的值都賦予形參數(shù)組的各個元素。因?yàn)閷?shí)際上形參數(shù)組并不存在,編譯系統(tǒng)不為形參數(shù)組分配內(nèi)存。那么,數(shù)據(jù)的傳送是如何實(shí)現(xiàn)的呢?在我們曾介紹過,數(shù)組名就是數(shù)組的首地址。因此在數(shù)組名作函數(shù)參數(shù)時所進(jìn)行的傳送只是地址的傳送,也就是說把實(shí)參數(shù)組的首地址賦予形參數(shù)組名。形參數(shù)組名取得該首地址之后,也就等于有了實(shí)在的數(shù)組。實(shí)際上是形參數(shù)組和實(shí)參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間。
上圖說明了這種情形。圖中設(shè)a為實(shí)參數(shù)組,類型為整型。a占有以2000為首地址的一塊內(nèi)存區(qū)。b為形參數(shù)組名。當(dāng)發(fā)生函數(shù)調(diào)用時,進(jìn)行地址傳送,把實(shí)參數(shù)組a的首地址傳送給形參數(shù)組名b,于是b也取得該地址2000。于是a,b兩數(shù)組共同占有以2000為首地址的一段連續(xù)內(nèi)存單元。從圖中還可以看出a和b下標(biāo)相同的元素實(shí)際上也占相同的兩個內(nèi)存單元(整型數(shù)組每個元素占二字節(jié))。例如a[0]和b[0]都占用2000和2001單元,當(dāng)然a[0]等于b[0]。類推則有a[i]等于b[i]。
【例8-8】數(shù)組a中存放了一個學(xué)生5門課程的成績,求平均成績。#include stdio.hfloat aver(float a[5]){ int i; float av,s=a[0]; for(i=1;i5;i++) s=s+a[i]; av=s/5; return av;}int main(void){ float sco[5],av; int i; printf("\ninput 5 scores:\n"); for(i=0;i5;i++) scanf("%f",sco[i]); av=aver(sco); printf("average score is %5.2f",av); return 0;}
本程序首先定義了一個實(shí)型函數(shù)aver,有一個形參為實(shí)型數(shù)組a,長度為5。在函數(shù)aver中,把各元素值相加求出平均值,返回給主函數(shù)。主函數(shù)main 中首先完成數(shù)組sco的輸入,然后以sco作為實(shí)參調(diào)用aver函數(shù),函數(shù)返回值送av,最后輸出av值。 從運(yùn)行情況可以看出,程序?qū)崿F(xiàn)了所要求的功能。
3) 前面已經(jīng)討論過,在變量作函數(shù)參數(shù)時,所進(jìn)行的值傳送是單向的。即只能從實(shí)參傳向形參,不能從形參傳回實(shí)參。形參的初值和實(shí)參相同,而形參的值發(fā)生改變后,實(shí)參并不變化,兩者的終值是不同的。而當(dāng)用數(shù)組名作函數(shù)參數(shù)時,情況則不同。由于實(shí)際上形參和實(shí)參為同一數(shù)組,因此當(dāng)形參數(shù)組發(fā)生變化時,實(shí)參數(shù)組也隨之變化。當(dāng)然這種情況不能理解為發(fā)生了“雙向”的值傳遞。但從實(shí)際情況來看,調(diào)用函數(shù)之后實(shí)參數(shù)組的值將由于形參數(shù)組值的變化而變化。為了說明這種情況,把【例5.4】改為【例5.6】的形式。
【例8-9】題目同【例8.7】。改用數(shù)組名作函數(shù)參數(shù)。#include stdio.hvoid nzp(int a[5]){ int i; printf("\nvalues of array a are:\n"); for(i=0;i5;i++){ if(a[i]0) a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i5;i++) scanf("%d",b[i]); printf("initial values of array b are:\n"); for(i=0;i5;i++) printf("%d ",b[i]); nzp(b); printf("\nlast values of array b are:\n"); for(i=0;i5;i++) printf("%d ",b[i]); return 0;}
本程序中函數(shù)nzp的形參為整數(shù)組a,長度為5。主函數(shù)中實(shí)參數(shù)組b也為整型,長度也為5。在主函數(shù)中首先輸入數(shù)組b的值,然后輸出數(shù)組b的初始值。然后以數(shù)組名b為實(shí)參調(diào)用nzp函數(shù)。在nzp中,按要求把負(fù)值單元清0,并輸出形參數(shù)組a的值。 返回主函數(shù)之后,再次輸出數(shù)組b的值。從運(yùn)行結(jié)果可以看出,數(shù)組b的初值和終值是不同的,數(shù)組b的終值和數(shù)組a是相同的。這說明實(shí)參形參為同一數(shù)組,它們的值同時得以改變。
用數(shù)組名作為函數(shù)參數(shù)時還應(yīng)注意以下幾點(diǎn):
①形參數(shù)組和實(shí)參數(shù)組的類型必須一致,否則將引起錯誤。
②形參數(shù)組和實(shí)參數(shù)組的長度可以不相同,因?yàn)樵谡{(diào)用時,只傳送首地址而不檢查形參數(shù)組的長度。當(dāng)形參數(shù)組的長度與實(shí)參數(shù)組不一致時,雖不至于出現(xiàn)語法錯誤(編譯能通過),但程序執(zhí)行結(jié)果將與實(shí)際不符,這是應(yīng)予以注意的。
【例8.10】如把例8.9修改如下:#include stdio.hvoid nzp(int a[8]){ int i; printf("\nvalues of array aare:\n"); for(i=0;i8;i++){ if(a[i]0)a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i5;i++) scanf("%d",b[i]); printf("initial values of array b are:\n"); for(i=0;i5;i++) printf("%d ",b[i]); nzp(b); printf("\nlast values of array b are:\n"); for(i=0;i5;i++) printf("%d ",b[i]); return 0;}
本程序與【例8.9】程序比,nzp函數(shù)的形參數(shù)組長度改為8,函數(shù)體中,for語句的循環(huán)條件也改為i8。因此,形參數(shù)組a和實(shí)參數(shù)組b的長度不一致。編譯能夠通過,但從結(jié)果看,數(shù)組a的元素a[5]、a[6]、a[7]顯然是無意義的。
③在函數(shù)形參表中,允許不給出形參數(shù)組的長度,或用一個變量來表示數(shù)組元素的個數(shù)。例如,可以寫為:
void nzp(int a[])
或?qū)憺?/p>
void nzp( int a[], int n )
其中形參數(shù)組a沒有給出長度,而由n值動態(tài)地表示數(shù)組的長度。n的值由主調(diào)函數(shù)的實(shí)參進(jìn)行傳送。由此,【例8-10】又可改為【例8-11】的形式。
【例8-11】復(fù)制純文本新窗口
#include stdio.hvoid nzp(int a[],int n){ int i; printf("\nvalues of array a are:\n"); for(i=0;in;i++){ if(a[i]0) a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i5;i++) scanf("%d",b[i]); printf("initial values of array b are:\n"); for(i=0;i5;i++) printf("%d ",b[i]); nzp(b,5); printf("\nlast values of array b are:\n"); for(i=0;i5;i++) printf("%d ",b[i]); return 0;}
void nzp(int a[]);
你可以說他需要的是一個數(shù)組, 但實(shí)際上他需要的就是一個地址, 這個地址就是a數(shù)組的首地址.
你也沒法把整個數(shù)組都傳過去.
c語言主函數(shù)不是個數(shù),而是一個叫main的函數(shù)。
C語言中main函數(shù)有兩種:
1.原型:int main(void) 其中參數(shù)為空,即不需要參數(shù),返回值為int類型
2.原型:int main(int argc,char* argv[])
參數(shù): argc是int類型的,表示參數(shù)的個數(shù)
argv[]是char類型的指針數(shù)組,里面的char指針分別指向各個參數(shù)所在的地址。
返回值: int 類型
實(shí)例:
#includegraphics.h
#includemath.h
#definepi3.1415926
int main(int argc, char **argv)
{
intx,y,r1,rs,color;
doublea;
intgdriver=DETECT,gmode;
if(strcmp(argv[1],"pass")!=0)//設(shè)置口令的比較
{printf("passworderror!\n");
exit(0);
}
initgraph(gdriver,gmode,"..\\bgi");
r1=atoi(argv[2]);
rs=atoi(argv[3]);
color=atoi(argv[4]);
cleardevice();
setbkcolor(color);
setcolor⑷;
for(a=0;a=2*pi;a+=pi/18)
{
x=r1*cos(a)+320;
y=r1*sin(a)+240;
circle(x,y,rs);
}
getch();
closegraph();
return0;
}
這個C語言編程的話你可以通過書籍對照一下它的原理進(jìn)行改變輸入的代碼一定要正確不能有一點(diǎn)錯誤
c語言怎么學(xué)不會
C語言是一個實(shí)用性很強(qiáng)的語言。你如果想要學(xué)好它,就得下一翻功夫??墒谴蠖鄶?shù)人都認(rèn)為它太難學(xué)了。所以就沒有認(rèn)真的學(xué),也當(dāng)然學(xué)不好了。即使是學(xué)計(jì)算機(jī)的學(xué)生也不能把它學(xué)的很好,這是因?yàn)樗麄儧]有掌握學(xué)習(xí)這門語言的方法。我也是一個學(xué)計(jì)算機(jī)的人,我用C語言過了全國計(jì)算機(jī)等級考試。所以我有一些心得,想和大家分享。
首先你要有一個正確的態(tài)度,沒有一個正確態(tài)度的人是學(xué)不好任何東西的。你如果真想學(xué)好C語言的話,你就要做好好好學(xué)它的準(zhǔn)備,不要三心二意。
其次,你要了解你學(xué)這個語言的目的。你是想過計(jì)算機(jī)等級考試呢?
還是想真正想用這一門語言。這就有很大的區(qū)別,這決定你學(xué)習(xí)的程度。
再次,你要了解你需要的教材。什么樣的教材才是適合你。你要認(rèn)真的選,不要太隨意了。因?yàn)椴煌慕滩某潭炔煌?也不一定適合你。
然后,就是學(xué)的問題了。你做好了上面的準(zhǔn)備,就好好開始學(xué)了。可是學(xué)好一門語言,一個好的方法很重要的。你要從整體上來理解C語言,認(rèn)識到C語言的優(yōu)勢,還有C語言的特點(diǎn)。C語言是面向過程的一門語言,特別強(qiáng)調(diào)各個程式的關(guān)系。像程式之間的呼叫,這是很平常的。
一門語言的基礎(chǔ)部分不過是一些關(guān)于數(shù)的型別,字元的型別的定義。你只要認(rèn)真看不難明白的。不過最好的方法還是上機(jī)除錯。在這一階段做一些簡單的程式。來明白C語言的程式設(shè)計(jì)環(huán)境,數(shù)字的型別。這樣理解起來會更快些,也比較容易記憶。
后來,就是學(xué)習(xí)一些過程語言的基礎(chǔ)的模式。順序,回圈,選擇這些東西。這些東西都是一些活的東西,千萬不要死記硬背,這是沒有用的。在這一階段,你可以編一些比較簡單的程式。像資料的計(jì)算,成績的判定等等。
隨著學(xué)習(xí)的深入,你會發(fā)現(xiàn)C語言有許多東西很有趣的。這樣學(xué)習(xí)不再是一個多么難的事了,而是一件快樂的事。最后C語言和任何一門語言一樣需要多上機(jī)除錯,多動腦。C語言的基礎(chǔ)部分很快就會掌握的。
C語言怎么學(xué)不會呢?有點(diǎn)煩…
應(yīng)該從最基礎(chǔ)的開始,一點(diǎn)一滴,題題攻破。
c語言學(xué)不會怎么辦
學(xué)不懂。 。。
那是你沒有認(rèn)真學(xué)。。。
其實(shí)學(xué)習(xí)C語言是很簡單的。。。
我給他們電子系的輔導(dǎo)過。。。。
主要是把基本的弄懂就行了(有參考書,好好看看。)。。
還有就是要程式設(shè)計(jì)。。。。
有c語言上機(jī)的軟體。。。
自己好好練練。。。。
C語言學(xué)不會
很簡單
printf( "\0hello world " ); 上面\0后面的就取消的了
system("pause"); 這個就是按任意鍵繼續(xù)
C語言剛學(xué)不會
if(p!=i)
{
strcpy(st,cs[i]);
strcpy(cs[i],cs[p]);
strcpy(cs[p],st);
}
當(dāng)P!=I的時候
做括號里面的
否
這跳過
輸入5個國家名字。
用gets(cs[i]); 讀入,存放在cs[0]; cs[1]; 。。cs[4];中。
st是工作單元。
用途一,臨時存放一個國家名字,用來同別的國家名字比較字元值的大?。窗醋帜概判颍trcmp(cs[j],st)0 就是比較字元值的大小。
用途二,臨時存放,用于兩個國家名字換序:
strcpy(st,cs[i]); strcpy(cs[i],cs[p]); strcpy(cs[p],st);
[把i單元國名,放入st,把p單元國名考貝到i單元,把st里的國名考貝到i單元,完成了交換]。
排序完成,列印結(jié)果。
字串比較函式strcmp 格式: strcmp(字元陣列名1,字元陣列名2) 功能:按照ASCII碼順序比較兩個陣列中的字串,并由函式返回值返回比較結(jié)果。
字串1=字串2,返回值=0;
字串2〉字串2,返回值〉0;
字串1〈字串2,返回值〈0。
本函式也可用于比較兩個字串常量,或比較陣列和字串常量。
通俗點(diǎn)講就是 一個名字
c語言中變數(shù)跟函式還有符號常量都要有個名字
nzp這個就是使用者自定義的一個函式名字
這個名字是任意的
你可以改為hello,sdfjklsdfj……,隨便你怎么起名字,只要不是關(guān)鍵字(比如定義整型int,這個int就是關(guān)鍵字,關(guān)鍵字就是c編譯系統(tǒng)里面本身就有的,一般不能成為使用者自定義的名字)
C語言基礎(chǔ)學(xué)不會
首先我覺得學(xué)習(xí)程式語言首先就是多看,看多了自然就對一些東西比較明白,其次是多上機(jī)練習(xí),對于計(jì)算機(jī)語言,最重要的就是上機(jī)敲程式碼,一個高手程式設(shè)計(jì)師肯定是敲過上萬行的程式碼的。如果你覺得自己沒有自制力去敲程式碼,就像我一樣,到網(wǎng)上去回答一些關(guān)于程式語言的問題(你能獨(dú)立解決的,或者你學(xué)習(xí)之后再幫人解決),這樣不但學(xué)習(xí)了,換能體會到幫助別人的樂趣。