您的位置:首頁>正文

C語言程式設計基礎知識學習:淺析對for的理解

C語言是面向過程的, 而C++是物件導向的

C和C++的區別:

C是一個結構化語言, 它的重點在於演算法和資料結構。 C程式的設計首要考慮的是如何通過一個過程, 對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++, 首要考慮的是如何構造一個物件模型, 讓這個模型能夠契合與之對應的問題域, 這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。 之所以說C++比C更先進, 是因為“ 設計這個概念已經被融入到C++之中 ”。

C與C++的最大區別:在於它們的用於解決問題的思想方法不一樣。 之所以說C++比C更先進, 是因為“ 設計這個概念已經被融入到C++之中 ”, 而就語言本身而言, 在C中更多的是演算法的概念。 那麼是不是C就不重要了, 錯!演算法是程式設計的基礎, 好的設計如果沒有好的演算法, 一樣不行。 而且, “C加上好的設計”也能寫出非常好的東西。

記得教員講for輪回是用一個菱形

講的, 不成否認, 講的很好, 但我就是不懂, 這到底是怎樣實現的。 我曉得一行一個*號

怎樣打出的.也就是

for(i=0;i<5;i++)

printf(“* ”);

但對付這個一行多個 就不曉得怎樣打了, 更別說每行*號還不一樣多。 沒方法, 是在不懂就只需問人了, 問同窗問網友, 終於問道了能使我理解的回覆了。 他是如許講的:(以菱形為列)

for(i=0;i<4;i++)

{

for(j=0;j<=2-i;j++)

printf(" ");

for(k=0;k<=2*i;k++)

printf("*");

printf(" ");

}

既然不能理解, 那就一步一步的不雅觀不雅觀點式是若何運轉的, 當i=0時, i<4建立, 則實行下一步, 也就是j=0 。 2-i也就是2, j<2建立, 實行下一步, 輸出一個空格;J自加是1,1也小於2, 建立, 實行下一步, 輸出一個空格;j繼續自加為2,2小於便是2建立, 實行下一步, 輸出一個空格;j繼續自加為3,

並不是小於便是2, 不建立, 所以此次輪回實行完畢, 軌範向下實行。 2*i=0, 0小於便是0, 建立, 實行下一步, 輸出一個*號, k自加為1並不是小於便是0, 此輪回實行完畢, 實行下一步, 輸出一個換行。 軌範回到i輪回了, i自加為1, 1是小於4的, 所以軌範向下實行……如許, 就會把上面的三角形打出來。 下面的也不異, 連系在一起就是一個菱形了。

由此, 我曉得了對付這些圖形, 都是一個一個列印出來的, 我不息覺得是一行一行打出來的, 呵呵, 懂了之和, 考試考試做了幾個一樣的, 比如

還有這個 ,

怎樣樣, 是不是勾起了童年的疾苦回憶?

#include

int main()

{

int i,j;

for(i=1;i<=9;i++)

{

for(j=1;j<=i;j++)

printf("%dX%d=%d ",j,i,i*j);

printf(" ");

}

}其實代碼就只怎樣點, 呵呵。

1. 點星文件

這題, 弄懂了for輪回之後, 就考試考試做這個了, 照剛剛弄懂的思緒, 沒一行*號是成線性紀律添加的,

應該能寫出來, . 號也是呈線性紀律添加的, 也寫的出來, 於是寫了一個

#include "stdio.h"

void main()

{

int i ,j,k;

for(i=1;i<=8;i++)

{

for(j=1;j<=i;j++)

printf("*");

for(k=2;k<=i;k++)

printf(".");

printf(" ");

}

}

但運轉出來的成效卻是 。 後來想想, . 號是鑲嵌在*號裡的, 那把列印 . 號的輪回也鑲嵌在列印 * 號的輪回是不是就可以了呢?說幹就幹, 就改寫成如下情勢

#include

int main()

{

int i, j,k;

for(i=1;i<=8;i++)

{

for(j=1;j<=i;j++)

{

printf("*");

for(k=2;k<=i;k++)

printf(".");

}

printf(" ");

}

}哈哈, 果真成功了。

1. 後來教員把題改成如斯情勢

, 鑒於第一次失敗的經歷, 此次一看就明白了, 兩個軌範後面局部都一樣, 只是改後的題前面多了並列的空格圖形, 此題只需在原代碼列印點星的輪回前加個並列的for就OK了。

1. 還記得阿誰水仙花數麼, 書上給出的演算法是

設一個數N, 把N/100的值賦給i, 把N/10-i*10的值賦給j, 把N對10求餘的值賦給k, 再來斷定i^3+j^3+k^3是否便是N。 不息看不懂, 索性就按照本身的思緒寫了一個,

直接就是(n==100*i+10*j+k && n==i*i*i+j*j*j+k*k*k) 呵呵, 是不是好理解了良多。 於是寫代碼如下

#include "stdio.h"

void main()

{

int i,j,k,a;

for(i=1;i<=9;i++)

for(j=0;j<=9;j++)

for(k=0;k<=9;k++)

{

a=i*100+j*10+k;

if(a==i*i*i+j*j*j+k*k*k)

printf("%d=%d^3+%d^3+%d^3 ",a,i,j,k);

}

}很精練吧, 了局是

1. 好了, 學到了陣列。 用陣列能使一些問題變的很隨意理解。 比如說阿誰兔子數列, 不消陣列, 關頭演算法是f1=f1+f2;f2=f2+f1, 天!剛起頭看到這裡時, 我認可我糾結了, 怎樣也理解不了。 但若是用陣列, 就能很清楚的表達兔子數列的關頭演算法了, f[i]=f[i-1]+f[i-2],很容意使人明白, 後一位數, 是前兩位數之和了。

了局:

代碼是:

#include "stdio.h"

void main()

{

int i;

long int a[40];

a[0]=a[1]=1;

for(i=2;i<40;i++)

{

a[i]=a[i-2]+a[i-1];

}

for(i=0;i<40;i++)

{

if(i%5==0)

printf(" ");

printf("%12d",a[i]);

}

printf(" ");

}

1. 恩,書上講的是10個數停止枚舉,可是,若是不是十個數呢,而是肆意,那該若何表達?老譚說,陣列名稱[常量運算式]中的常量運算式中可以網羅常量和常量符號,不能包含變數。也就是說,C說話不容許對陣列的巨細作動態界說,即陣列的巨細不依靠于軌範運轉過程中變數的值。那若何才能對肆意的陣列停止枚舉呢,我想到了#define 。

#define N 10

Int a[N]

如許就可以了。若是要對15個數枚舉就把#define N 後面的10換成15 。雖然不是百分百的肆意數停止枚舉,但也可以棍騙棍騙本身。

後來在網上搜了下,才恍然大悟。既然不能前進履態界說,那就界說一個充足大的陣列,對它停止肆意賦值。至於後面的沒有賦值的,預設為0的元素,則不息止列印就OK了。詳細實現是

#include "stdio.h"

void main()

{ char c;

int a[100];

int i,j,t,M;

printf("你想停止昇冪枚舉仍是降冪枚舉?請按 < 或 > 選擇: ");

scanf("%c",&c);

printf("你想對幾個數停止枚舉? ");

scanf("%d",&M);

printf("請輸入你要枚舉的%d個數 ",M);

for(i=0;i

scanf("%d",&a[i]);

printf("枚舉前的數: ");

for(i=0;i

printf("%d ",a[i]);

for(i=0;i

{

for(j=0;j

{

if(c=='<')

{

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

if(c=='>')

{

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

}

}

printf(" 枚舉後的數: ");

for(i=0;i

printf("%d ",a[i]);

printf(" ");

}了局圖是:

對上面填補一點。

起頭時把對昇冪仍是降冪枚舉的選擇是放在輸入要枚舉的數後面的,但創造scanf(“%c”,&c);這一步根柢就不運轉,導致後面停止枚舉的代碼也沒有運轉。苦思不的其果,遂改來改去,無意中創造把scanf(“%c”,&c);放在最前面就可以了。問網友才曉得,本來體系把我輸入後按的回車也當成字元給了c。若是輸入完15個數之後,直接按<或>再按回車就可以了,或者如我試出來的樣,把scanf(“%c”,&c);移到其他scanf語句前面就可以了,還有一種編制,就是在scanf(“%c”,&c)其前面加一句getchar()接收回車鍵也行。我想到了有的網友問道,翻開編好的.exe檔時,表示軌範實行的視窗在軌范停止時俄然消失。若是碰著這種情形,那麼可以使軌範停息,直到按下[Enter]鍵。要做到這一點,請在軌範的末尾,剛好在return語句之前,添加下面一行: getchar();

改行讀取一次按鍵,是以軌範將停息直到按下[Enter]鍵。又是,按照軌範函數的必要,可能已經有一個等待按鍵的指令。在這種情形下,必要使用getchar()兩次。

好了,說了這麼多,大師也煩了,如今就只上圖了。 逆序枚舉

肆意矩陣轉置:

肆意矩陣相加:

肆意方陣對角線之和:

楊輝三角:

這個三角很斑斕,那下面的呢?

是不是要難一點,呵呵。還記得阿誰點星擴展圖形麼?同樣的前面都是空格圖形,同樣的鑲嵌,點星擴展圖形*號中心鑲嵌的是 . 號,這個三角數字中心鑲嵌的空格。

希望對付新手們有必定的輔佐,末了,感激大師的支撐!!!

這些是C/C++能做的

伺服器開發工程師、人工智慧、雲計算工程師、資訊安全(駭客反駭客)、大資料 、資料平臺、嵌入式工程師、流媒體伺服器、資料控解、影像處理、音訊視頻開發工程師、遊戲伺服器、分散式系統、遊戲輔助等

1. 恩,書上講的是10個數停止枚舉,可是,若是不是十個數呢,而是肆意,那該若何表達?老譚說,陣列名稱[常量運算式]中的常量運算式中可以網羅常量和常量符號,不能包含變數。也就是說,C說話不容許對陣列的巨細作動態界說,即陣列的巨細不依靠于軌範運轉過程中變數的值。那若何才能對肆意的陣列停止枚舉呢,我想到了#define 。

#define N 10

Int a[N]

如許就可以了。若是要對15個數枚舉就把#define N 後面的10換成15 。雖然不是百分百的肆意數停止枚舉,但也可以棍騙棍騙本身。

後來在網上搜了下,才恍然大悟。既然不能前進履態界說,那就界說一個充足大的陣列,對它停止肆意賦值。至於後面的沒有賦值的,預設為0的元素,則不息止列印就OK了。詳細實現是

#include "stdio.h"

void main()

{ char c;

int a[100];

int i,j,t,M;

printf("你想停止昇冪枚舉仍是降冪枚舉?請按 < 或 > 選擇: ");

scanf("%c",&c);

printf("你想對幾個數停止枚舉? ");

scanf("%d",&M);

printf("請輸入你要枚舉的%d個數 ",M);

for(i=0;i

scanf("%d",&a[i]);

printf("枚舉前的數: ");

for(i=0;i

printf("%d ",a[i]);

for(i=0;i

{

for(j=0;j

{

if(c=='<')

{

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

if(c=='>')

{

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

}

}

printf(" 枚舉後的數: ");

for(i=0;i

printf("%d ",a[i]);

printf(" ");

}了局圖是:

對上面填補一點。

起頭時把對昇冪仍是降冪枚舉的選擇是放在輸入要枚舉的數後面的,但創造scanf(“%c”,&c);這一步根柢就不運轉,導致後面停止枚舉的代碼也沒有運轉。苦思不的其果,遂改來改去,無意中創造把scanf(“%c”,&c);放在最前面就可以了。問網友才曉得,本來體系把我輸入後按的回車也當成字元給了c。若是輸入完15個數之後,直接按<或>再按回車就可以了,或者如我試出來的樣,把scanf(“%c”,&c);移到其他scanf語句前面就可以了,還有一種編制,就是在scanf(“%c”,&c)其前面加一句getchar()接收回車鍵也行。我想到了有的網友問道,翻開編好的.exe檔時,表示軌範實行的視窗在軌范停止時俄然消失。若是碰著這種情形,那麼可以使軌範停息,直到按下[Enter]鍵。要做到這一點,請在軌範的末尾,剛好在return語句之前,添加下面一行: getchar();

改行讀取一次按鍵,是以軌範將停息直到按下[Enter]鍵。又是,按照軌範函數的必要,可能已經有一個等待按鍵的指令。在這種情形下,必要使用getchar()兩次。

好了,說了這麼多,大師也煩了,如今就只上圖了。 逆序枚舉

肆意矩陣轉置:

肆意矩陣相加:

肆意方陣對角線之和:

楊輝三角:

這個三角很斑斕,那下面的呢?

是不是要難一點,呵呵。還記得阿誰點星擴展圖形麼?同樣的前面都是空格圖形,同樣的鑲嵌,點星擴展圖形*號中心鑲嵌的是 . 號,這個三角數字中心鑲嵌的空格。

希望對付新手們有必定的輔佐,末了,感激大師的支撐!!!

這些是C/C++能做的

伺服器開發工程師、人工智慧、雲計算工程師、資訊安全(駭客反駭客)、大資料 、資料平臺、嵌入式工程師、流媒體伺服器、資料控解、影像處理、音訊視頻開發工程師、遊戲伺服器、分散式系統、遊戲輔助等

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示