C語言程式設計基礎知識學習:淺析對for的理解
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(" ");
}
既然不能理解,那就一步一步的不雅觀不雅觀點式是若何運轉的,
由此,我曉得了對付這些圖形,都是一個一個列印出來的,我不息覺得是一行一行打出來的,呵呵,懂了之和,考試考試做了幾個一樣的,比如
還有這個 ,
怎樣樣,是不是勾起了童年的疾苦回憶?
#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++能做的
伺服器開發工程師、人工智慧、雲計算工程師、資訊安全(駭客反駭客)、大資料 、資料平臺、嵌入式工程師、流媒體伺服器、資料控解、影像處理、音訊視頻開發工程師、遊戲伺服器、分散式系統、遊戲輔助等
此次一看就明白了,兩個軌範後面局部都一樣,只是改後的題前面多了並列的空格圖形,此題只需在原代碼列印點星的輪回前加個並列的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++能做的
伺服器開發工程師、人工智慧、雲計算工程師、資訊安全(駭客反駭客)、大資料 、資料平臺、嵌入式工程師、流媒體伺服器、資料控解、影像處理、音訊視頻開發工程師、遊戲伺服器、分散式系統、遊戲輔助等