第一篇:程序員C語言必背
Arithmeticoperator算術(shù)運(yùn)算符 Logicaloperator邏輯運(yùn)算符 function函數(shù)
Build-infunction內(nèi)置函數(shù)
UserDefinedFunction自定義函數(shù) prototype原型 void空值
Calledfunction被調(diào)函數(shù) Callingfunction調(diào)用函數(shù) return返回 scope作用域 auto自動(dòng)變量
Register寄存器變量 extern外部變量
Formalparameter形式參數(shù) Actualparameter實(shí)際參數(shù) queue隊(duì)列
Puts()把字符串?dāng)?shù)組輸出到顯示器 strlen()計(jì)算字符串的長度 strcpy()復(fù)制字符串 strcmp()字符串比較 strcat()字符串連接 struct定義結(jié)構(gòu) stack棧
Structuredprogramming結(jié)構(gòu)化程序member成員
Assignmentoperator賦值運(yùn)算符 Recursivefunction遞歸函數(shù) Random隨機(jī)數(shù) power冪
Parameter參數(shù)
Parameterizedfunction參數(shù)化函數(shù) Localvariable局部變量 Globalvariable全局變量 static靜態(tài)變量
Callbyreference傳值調(diào)用 Callbyvalue引用調(diào)用 String字符串
Stringliteral字符串常量 sequence序列
Gets()從標(biāo)準(zhǔn)鍵盤輸入讀入一個(gè)字符串string.h存放字符串函數(shù)的頭文件
第二篇:程序員教你學(xué)C語言
程序員教你學(xué)C語言
很多小伙伴都老是會(huì)碰到疑問,其實(shí)還是基礎(chǔ)沒打扎實(shí),這些題如果你不看答案你能知道多少呢?如果還有很多不知道就證明基礎(chǔ)沒打扎實(shí),如果你還在入門糾結(jié),如果你還在苦惱怎么入門!小編有個(gè)建議,可以加小編弄的一個(gè)C語言交流基地,大家可以進(jìn)入交流基地:565122788,里面新手入門資料,可以說從零到項(xiàng)目實(shí)戰(zhàn),都是可以免費(fèi)獲取的,還有程序員大牛為各位免費(fèi)解答問題,熱心腸的小伙伴也是蠻多的。不失為是一個(gè)交流的的好地方,小編在這里邀請大家加入我的大家庭。歡迎你的到來。一起交流學(xué)習(xí)!共同進(jìn)步!小編等你!還有前面沒有看的同學(xué)最好從程序員教你學(xué)C語言
(一)開始看哦,尤其是基礎(chǔ)還沒打扎實(shí)的同學(xué)!
今天只舉幾個(gè)例子,主要幫大家鞏固循環(huán)的知識,每個(gè)例子大家都要敲鍵盤敲出來,然后運(yùn)行成功了才算掌握了,不然還是眼高手低,看上去懂了,一到寫程序又犯難了。我發(fā)現(xiàn)有不少人熱衷于打印圖形,所以就弄了幾個(gè)圖形。第一個(gè)是打印金字塔。代碼和運(yùn)行圖如下:
首先定義了兩個(gè)變量i、j,然后使用system(“color 0e”)改變顏色。接下來會(huì)進(jìn)入一個(gè)外層循環(huán),其中的i代表層數(shù),我們可以看到這里金字塔有6層,所以i的取值范圍也是0<=i<6,第一次進(jìn)循環(huán)時(shí),i=0,然后到第一個(gè)內(nèi)層循環(huán),這個(gè)循環(huán)的初始條件是j=6-i=6,結(jié)束條件是j>0,所以這里會(huì)打印6個(gè)空格,然后來到第二個(gè)內(nèi)層循環(huán),這個(gè)循環(huán)的初始條件是j=1;結(jié)束條件是j<=2*i+1=1,所以這里會(huì)打印一個(gè)星,然后會(huì)以printf(“ ”)打印一個(gè)換行結(jié)束第一次外層循環(huán),然后開始第二次外層循環(huán),如此反復(fù),最后就得到了如上所示的圖形。
不理解的話可以把外層循環(huán)for(i = 0;i < 6;i++)的i<6改成i<3,這樣就只會(huì)打印三行,可以便于理解。
第二個(gè)是打印菱形,其實(shí)就是上一個(gè)圖形的變化,效果和代碼如下:
可以看到,我們這個(gè)圖形是上下對稱的,所以打印菱形上半部分(就是上一個(gè)例子的打印金字塔)的代碼和下半部分的代碼十分相似,只是把外層循環(huán)的頭部從for(i = 0;i < 6;i++)變成了for(i = 6;i >= 0;i--),大家理解一下代碼,菱形的上半部分,打印的星星數(shù)會(huì)越來越多,從1到3再到5再到7...而星星前面的空格數(shù)會(huì)越來越少,從6到5再到4再到3...而菱形的下半部分剛好反過來了,所以只需要修改很少的代碼就能實(shí)現(xiàn)菱形了
接下來是打印一個(gè)五角星,這是之前一個(gè)萌萌噠妹紙學(xué)習(xí)的代碼,因?yàn)槲冶容^懶啦,所以沒做修改就直接拿來了,希望不要介意 #include
這個(gè)程序很明顯分成了四塊,由四個(gè)外層for循環(huán)構(gòu)成,for(n1=1;n1<6;n1++)打印最上面5行,for(n2=1;n2<5;n2++)打印中間4行,for(n3=1;n3<3;n3++)打印下面2行行,for(n4=1;n4<5;n4++)打印最下面4行,大家自己理解下代碼,不懂的就問
最后一個(gè)圖形是我剛剛寫的六芒星,完整的代碼輸出結(jié)果是這樣的:
學(xué)習(xí)交流群(565122788)
但是我這里只給出一半代碼,剩下的需要大家自己學(xué)完成,當(dāng)是對自己的考驗(yàn)也好,作業(yè)也罷,還是希望大家能夠自己親自動(dòng)手試一下的。不懂的就再問 #include
更多的數(shù)據(jù)類型和循環(huán)
前面我們說為了讓計(jì)算機(jī)能夠識別一個(gè)變量到底占了多少字節(jié),我們需要為變量定義數(shù)據(jù)類型,那究竟有多少種數(shù)據(jù)類型呢,其實(shí)前面我給出32個(gè)關(guān)鍵字里面就已經(jīng)包括了,short、int、long、char、float、double這6個(gè)關(guān)鍵字代表了C語言里的6中基本數(shù)據(jù)類型,怎么去理解它們呢,舉個(gè)例子:大家都見過剪卡器吧?(沒見過?手機(jī)卡總見過吧)。我們知道不同的手機(jī)使用的手機(jī)卡的大小是有區(qū)別的,我們通常是用剪卡器,拿著它把原來移動(dòng)的大卡這么一咔,一個(gè)小卡就出來了,不同型號的剪卡器咔出來的手機(jī)卡大小不一樣,比如蘋果手機(jī)的卡就特別小,三星的卡稍微大點(diǎn)......,現(xiàn)在我們聯(lián)想一下,short、int、long、char、float、double這六個(gè)東東是不是很像不同類型的剪卡器?拿著它們在內(nèi)存上咔咔咔,不同大小的內(nèi)存就分配好了。在32位的系統(tǒng)下short咔出來的內(nèi)存大小是2個(gè)字節(jié)(也叫byte);int咔出來的內(nèi)存大小是4個(gè)byte;long咔出來的內(nèi)存大小是4個(gè)byte;float咔出來的內(nèi)存大小是4個(gè)byte;double咔出來的內(nèi)存大小是8個(gè)byte;char咔出來的內(nèi)存大小是1個(gè)byte。接下來我們就寫程序看看這些基本的數(shù)據(jù)類型在我們自己電腦上的大小吧。
其中sizeof關(guān)鍵字可以確定給定的類型占據(jù)了多少字節(jié),它后面可以直接跟類型的關(guān)鍵字,比如sizeof(int),也可以跟變量(比如sizeof(i))甚至是表達(dá)式,比如最后一行的sizeof(i-1),它的結(jié)果是表達(dá)式的計(jì)算結(jié)果所占據(jù)的字節(jié)數(shù),i-1的結(jié)果為0,0也是整數(shù),所以占據(jù)的字節(jié)數(shù)為4。(注意這里是指的32位的編譯環(huán)境下的情況,具體平臺(tái)大家可以運(yùn)行這個(gè)程序測試一下)。然后接下來是對這6種基本數(shù)據(jù)的使用情況
可以看到,兩組都是同樣的數(shù)據(jù),但是最后打印出來的結(jié)果,上面一組數(shù)據(jù)中字符變量、浮點(diǎn)變量和雙精度變量打印出來的結(jié)果都不對。原因是什么呢,因?yàn)槭莗rintf的第一個(gè)參數(shù),%d這個(gè)符號,前面的%是占位符,后面的這個(gè)d代表是以整數(shù)形式打印出來,而不同的數(shù)據(jù)類型要以不同的形式打印出來,所以總結(jié)一下,%c表示打印字符、%f是打印浮點(diǎn)數(shù)、%lf是打印雙精度,%hd、%d、%ld分別是打印短整型、整型和長整型
關(guān)于上面的字符c='a'為什么按%d整數(shù)打印是97的問題,這個(gè)其實(shí)就涉及到ascii碼表了,我們知道在計(jì)算機(jī)底層,所有的數(shù)據(jù)都是以0和1存儲(chǔ)的,那計(jì)算機(jī)如何識別像a、b、c這樣的字符呢,其他它們最終在計(jì)算機(jī)里也是被以0、1數(shù)據(jù)的形式存放的,而且美國人就為它們指定了一個(gè)統(tǒng)一的標(biāo)準(zhǔn),就是ascii編碼,圖片如下
可以看到小寫字符a的ascii碼值的十進(jìn)制就是97,而大寫A的ascii碼是65,printf中的%d就是以十進(jìn)制整數(shù)方式輸出它在內(nèi)存中的數(shù)據(jù),所以就輸出了97 接下來將大家使用這些基本數(shù)據(jù)類型最容易犯錯(cuò)的一點(diǎn),就是極限值,我們知道計(jì)算機(jī)里的一位只能表示0或者1,而兩位只能表示0、1、2、3,依次類推,我們?nèi)绻蠳位,那也只能表示2的N次方個(gè)數(shù)據(jù),我們說int是4字節(jié)的,就是32位,所以int也是有極限值的,那是不是就是2的32次方呢,理論上來講,它能表示這么多的數(shù)據(jù),但是因?yàn)橛姓?fù)數(shù)的存在,這個(gè)值還得減半,我們接下來的程序就是測試你機(jī)器上的這些基本類型的極限值的,注意unsigned這個(gè)修飾符就是無符號的數(shù),比如unsigned int,這就是無符號整數(shù),這樣它能表示的范圍就是0~4294967295(2的32次方-1)了。不小心極限值的話,就會(huì)經(jīng)常犯錯(cuò)
C/C++學(xué)習(xí)交流群,歡迎大家一起來交流提升。565122788進(jìn)群就能獲取C語言新手學(xué)習(xí)大禮包
另外兩種循環(huán):while循環(huán)和do...while循環(huán)(還有一種可以構(gòu)成循環(huán)的是goto,但是先不講).while循環(huán)的格式: while(表達(dá)式){ 循環(huán)執(zhí)行語句;} 下一條語句;while循環(huán)和for循環(huán)的區(qū)別在于它的循環(huán)頭部沒有賦初值的操作,一開始就會(huì)進(jìn)行循環(huán)表達(dá)式的判斷,如果表達(dá)式成立,則進(jìn)入循環(huán),否則跳到循環(huán)的下一條語句??匆粋€(gè)例子 # include
第三篇:C語言必背18個(gè)經(jīng)典程序(寫寫幫整理)
C語言必背18個(gè)經(jīng)典程序
1、/*輸出9*9口訣。共9行9列,i控制行,j控制列。*/ #include “stdio.h” main(){int i,j,result;for(i=1;i<10;i++)
{ for(j=1;j<10;j++)
{
result=i*j;
printf(“%d*%d=%-3d”,i,j,result);/*-3d表示左對齊,占3位*/
}
printf(“n”);/*每一行后換行*/
} system(“pause”);}
2、/*古典問題:有一對兔子,從出生后第3個(gè)月起每個(gè)月都生一對兔子,小兔子長到第三個(gè)月后每個(gè)月又生一對兔子,假如兔子都不死,問每個(gè)月的兔子總數(shù)為多少? 兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....*/ main(){ long f1,f2;int i;f1=f2=1;for(i=1;i<=20;i++)
{ printf(“%12ld %12ld”,f1,f2);
if(i%2==0)printf(“n”);/*控制輸出,每行四個(gè)*/
f1=f1+f2;/*前兩個(gè)月加起來賦值給第三個(gè)月*/
f2=f1+f2;/*前兩個(gè)月加起來賦值給第三個(gè)月*/
} }
3、/*判斷101-200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)及素?cái)?shù)的個(gè)數(shù)。
程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整除,則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù)。*/ #include “math.h” main(){
int m,i,k,h=0,leap=1;
printf(“n”);
for(m=101;m<=200;m++)
{ k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap)
/*內(nèi)循環(huán)結(jié)束后,leap依然為1,則m是素?cái)?shù)*/
{printf(“%-4d”,m);h++;
if(h%10==0)
printf(“n”);
}
leap=1;
}
printf(“nThe total is %d”,h);
system(“pause”);}
4、/*一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如6=1+2+3.編程
找出1000以內(nèi)的所有完數(shù)。*/ main(){
static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i {if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) {printf(“%d is a wanshu: ”,j); for(i=0;i printf(“%d,”,k[i]); printf(“%dn”,k[n]); } } system(“pause”); } 5、/*下面程序的功能是將一個(gè)4×4的數(shù)組進(jìn)行逆時(shí)針旋轉(zhuǎn)90度后輸出,要求原始數(shù)組的數(shù)據(jù)隨機(jī)輸入,新數(shù)組以4行4列的方式輸出,請?jiān)诳瞻滋幫晟瞥绦颉?/ main(){ int a[4][4],b[4][4],i,j; /*a存放原始數(shù)組數(shù)據(jù),b存放旋轉(zhuǎn)后數(shù)組數(shù)據(jù)*/ printf(“input 16 numbers: ”);/*輸入一組數(shù)據(jù)存放到數(shù)組a中,然后旋轉(zhuǎn)存放到b數(shù)組中*/ for(i=0;i<4;i++) for(j=0;j<4;j++) { scanf(“%d”,&a[i][j]); b[3-j][i]=a[i][j]; } printf(“array b:n”); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf(“%6d”,b[i][j]); printf(“n”); } system(“pause”);} 6、/*編程打印直角楊輝三角形*/ main(){int i,j,a[6][6];for(i=0;i<=5;i++) {a[i][i]=1;a[i][0]=1;} for(i=2;i<=5;i++) for(j=1;j<=i-1;j++) a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<=5;i++) {for(j=0;j<=i;j++) printf(“%4d”,a[i][j]); printf(“n”);} system(“pause”);} 7、/*通過鍵盤輸入3名學(xué)生4門課程的成績,分別求每個(gè)學(xué)生的平均成績和每門課程的平均成績。 要求所有成績均放入一個(gè)4行5列的數(shù)組中,輸入時(shí)同一人數(shù)據(jù)間用空格,不同人用回車 其中最后一列和最后一行分別放每個(gè)學(xué)生的平均成績、每門課程的平均成績及班級總平均分。*/ #include int i,j; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf(“%f”,&a[i][j]); for(i=0;i<3;i++) { sum1=0; for(j=0;j<4;j++) sum1+=a[i][j]; a[i][4]=sum1/4; } for(j=0;j<5;j++) { sum2=0; for(i=0;i<3;i++) sum2+=a[i][j]; a[3][j]=sum2/3; } for(i=0;i<4;i++) { for(j=0;j<5;j++) printf(“%6.2f”,a[i][j]); printf(“n”); } system(“pause”);} 8、/*完善程序,實(shí)現(xiàn)將輸入的字符串反序輸出,如輸入windows 輸出swodniw。*/ #include int i,j,k; printf(“Enter a string: ”); scanf(“%s”,c); k=strlen(c); for(i=0,j=k-1;i { c1=c[i];c[i]=c[j];c[j]=c1;} printf(“%sn”,c); system(“pause”);} 指針法: void invert(char *s){int i,j,k;char t;k=strlen(s);for(i=0,j=k-1;i { printf(“cannot open the filen”); exit(0); } printf(“input str:n”);gets(str); printf(“n%s”,str); fprintf(fp,“%s”,str);invert(str); printf(“n%s”,str); fprintf(fp,“n%s”,str); fclose(fp);} 9、/*下面程序的功能是從字符數(shù)組s中刪除存放在c中的字符。*/ #include int j,k; printf(“nEnter a string: ”); gets(s); printf(“nEnter a character: ”); c=getchar(); for(j=k=0;s[j]!= '