tft每日頭條

 > 生活

 > 程序員自學c語言

程序員自學c語言

生活 更新时间:2024-12-01 17:38:04

很多小夥伴都老是會碰到疑問,其實還是基礎沒打紮實,這些題如果你不看答案你能知道多少呢?如果還有很多不知道就證明基礎沒打紮實,如果你還在入門糾結,如果你還在苦惱怎麼入門!小編有個建議,可以加小編弄的一個C語言交流基地,大家可以進入交流基地:565122788,裡面新手入門資料,可以說從零到項目實戰,都是可以免費獲取的,還有程序員大牛為各位免費解答問題,熱心腸的小夥伴也是蠻多的。不失為是一個交流的的好地方,小編在這裡邀請大家加入我的大家庭。歡迎你的到來。一起交流學習!共同進步!小編等你!還有前面沒有看的同學最好從程序員教你學C語言(一)開始看哦,尤其是基礎還沒打紮實的同學!

今天隻舉幾個例子,主要幫大家鞏固循環的知識,每個例子大家都要敲鍵盤敲出來,然後運行成功了才算掌握了,不然還是眼高手低,看上去懂了,一到寫程序又犯難了。我發現有不少人熱衷于打印圖形,所以就弄了幾個圖形。第一個是打印金字塔。代碼和運行圖如下:

程序員自學c語言(程序員教你學C語言)1

可以看到,我們這個圖形是上下對稱的,所以打印菱形上半部分(就是上一個例子的打印金字塔)的代碼和下半部分的代碼十分相似,隻是把外層循環的頭部從for(i = 0;i < 6;i )變成了for(i = 6;i >= 0;i--),大家理解一下代碼,菱形的上半部分,打印的星星數會越來越多,從1到3再到5再到7...而星星前面的空格數會越來越少,從6到5再到4再到3...而菱形的下半部分剛好反過來了,所以隻需要修改很少的代碼就能實現菱形了

接下來是打印一個五角星,這是之前一個萌萌哒妹紙學習的代碼,因為我比較懶啦,所以沒做修改就直接拿來了,希望不要介意

#include <stdio.h>

#include <stdlib.h>

void main()

{

int n1,j1,k1;//n1表示行數,j1表示空格,k1表示*号

int n2,j2,k2;

int n3,j3,k3;

int n4,j4,k4;

int a4,b4;

system("color 0e");

for(n1=1;n1<6;n1 )//1;n1<=6就是5行;n1 後 1 n1=2

{

for(j1=1;j1<19-n1;j1 )//j1=1;j1<19-n1打印19-1=18個空格;j1 後 1 j1=2

printf(" ");

for(k1=1;k1<=2*n1-1;k1 )//k1=1;k1<=2*n1-1打印2*1-1=1個*号;j1 後 1 j1=2

printf("*");

printf("\n");

}

for(n2=1;n2<5;n2 )

{

for(j2=1;j2<3*n2-3;j2 )//j2=1;j2<3*n2-3;j2=3*1-3打印0個空格;j2

printf(" ");

for(k2=1;k2<=42-6*n2;k2 )//k2=1;k2<=42-6*n2;k2<=42-6*1打印36個*;k2

printf("*");

printf("\n");

}

for(n3=1;n3<3;n3 )

{

for(j3=1;j3<12-n3;j3 )

printf(" ");

for(k3=1;k3<=12 2*n3;k3 )

printf("*");

printf("\n");

}

for(n4=1;n4<5;n4 )

{

for(j4=1;j4<10-n4;j4 )

printf(" ");

for(k4=1;k4<=10-2*n4;k4 )

printf("*");

for(a4=1;a4<6*n4-3;a4 )

printf(" ");

for(b4=1;b4<10-2*n4;b4 )

printf("*");

printf("\n");

}

}

程序員自學c語言(程序員教你學C語言)2

這個程序很明顯分成了四塊,由四個外層for循環構成,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行,大家自己理解下代碼,不懂的就問

最後一個圖形是我剛剛寫的六芒星,完整的代碼輸出結果是這樣的:

程序員自學c語言(程序員教你學C語言)3

學習交流群(565122788)

但是我這裡隻給出一半代碼,剩下的需要大家自己學完成,當是對自己的考驗也好,作業也罷,還是希望大家能夠自己親自動手試一下的。不懂的就再問

#include <stdio.h>

#include <stdlib.h>

void main()

{

int i,j;

system("color 0e");

//輸出第一行

for(j = 15;j >= 1;j--)

{

printf(" ");

}

printf("*\n");

//輸出接下來四行

for(i = 1;i <= 4;i )

{

for(j = 14;j >= i;j--)

{

printf(" ");

}

printf("*");

for(j = 1;j < 2*i;j )

{

printf(" ");

}

printf("*\n");

}

//輸出最長的一行

for(i = 1;i < 17;i )

{

printf("* ");

}

printf("\n");

//打印接下來四行

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

{

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

{

printf(" ");

}

printf("*");

for(j = 7;j > 2*i;j--)

{

printf(" ");

}

printf("*");

for(j = 0;j < 2*i 11;j )

{

printf(" ");

}

printf("*");

for(j = 7;j > 2*i;j--)

{

printf(" ");

}

printf("*\n");

}

//輸出接下來一行,就2個星

printf(" * *\n");

}

這一半代碼的輸出結果是:

程序員自學c語言(程序員教你學C語言)4

更多的數據類型和循環

前面我們說為了讓計算機能夠識别一個變量到底占了多少字節,我們需要為變量定義數據類型,那究竟有多少種數據類型呢,其實前面我給出32個關鍵字裡面就已經包括了,short、int、long、char、float、double這6個關鍵字代表了C語言裡的6中基本數據類型,怎麼去理解它們呢,舉個例子:大家都見過剪卡器吧?(沒見過?手機卡總見過吧)。我們知道不同的手機使用的手機卡的大小是有區别的,我們通常是用剪卡器,拿着它把原來移動的大卡這麼一咔,一個小卡就出來了,不同型号的剪卡器咔出來的手機卡大小不一樣,比如蘋果手機的卡就特别小,三星的卡稍微大點......,現在我們聯想一下,short、int、long、char、float、double這六個東東是不是很像不同類型的剪卡器?拿着它們在内存上咔咔咔,不同大小的内存就分配好了。在32位的系統下short咔出來的内存大小是2個字節(也叫byte);int咔出來的内存大小是4個byte;long咔出來的内存大小是4個byte;float咔出來的内存大小是4個byte;double咔出來的内存大小是8個byte;char咔出來的内存大小是1個byte。接下來我們就寫程序看看這些基本的數據類型在我們自己電腦上的大小吧。

程序員自學c語言(程序員教你學C語言)5

其中sizeof關鍵字可以确定給定的類型占據了多少字節,它後面可以直接跟類型的關鍵字,比如sizeof(int),也可以跟變量(比如sizeof(i))甚至是表達式,比如最後一行的sizeof(i-1),它的結果是表達式的計算結果所占據的字節數,i-1的結果為0,0也是整數,所以占據的字節數為4。(注意這裡是指的32位的編譯環境下的情況,具體平台大家可以運行這個程序測試一下)。

然後接下來是對這6種基本數據的使用情況

程序員自學c語言(程序員教你學C語言)6

可以看到,兩組都是同樣的數據,但是最後打印出來的結果,上面一組數據中字符變量、浮點變量和雙精度變量打印出來的結果都不對。原因是什麼呢,因為是printf的第一個參數,%d這個符号,前面的%是占位符,後面的這個d代表是以整數形式打印出來,而不同的數據類型要以不同的形式打印出來,所以總結一下,%c表示打印字符、%f是打印浮點數、%lf是打印雙精度,%hd、%d、%ld分别是打印短整型、整型和長整型

關于上面的字符c='a'為什麼按%d整數打印是97的問題,這個其實就涉及到ascii碼表了,我們知道在計算機底層,所有的數據都是以0和1存儲的,那計算機如何識别像a、b、c這樣的字符呢,其他它們最終在計算機裡也是被以0、1數據的形式存放的,而且美國人就為它們指定了一個統一的标準,就是ascii編碼,圖片如下

程序員自學c語言(程序員教你學C語言)7

可以看到小寫字符a的ascii碼值的十進制就是97,而大寫A的ascii碼是65,printf中的%d就是以十進制整數方式輸出它在内存中的數據,所以就輸出了97

接下來将大家使用這些基本數據類型最容易犯錯的一點,就是極限值,我們知道計算機裡的一位隻能表示0或者1,而兩位隻能表示0、1、2、3,依次類推,我們如果有N位,那也隻能表示2的N次方個數據,我們說int是4字節的,就是32位,所以int也是有極限值的,那是不是就是2的32次方呢,理論上來講,它能表示這麼多的數據,但是因為有正負數的存在,這個值還得減半,我們接下來的程序就是測試你機器上的這些基本類型的極限值的,注意unsigned這個修飾符就是無符号的數,比如unsigned int,這就是無符号整數,這樣它能表示的範圍就是0~4294967295(2的32次方-1)了。不小心極限值的話,就會經常犯錯

程序員自學c語言(程序員教你學C語言)8

C/C 學習交流群,歡迎大家一起來交流提升。565122788進群就能獲取C語言新手學習大禮包

另外兩種循環:while循環和do...while循環(還有一種可以構成循環的是goto,但是先不講).

while循環的格式:

while(表達式)

{

循環執行語句;

}

下一條語句;

while循環和for循環的區别在于它的循環頭部沒有賦初值的操作,一開始就會進行循環表達式的判斷,如果表達式成立,則進入循環,否則跳到循環的下一條語句。看一個例子

# include <stdio.h>

void main()

{

int i;

printf("please enter the right password\n");

scanf("%d",&i);

while(i != 520)

{

printf("please enter the right password\n");

scanf("%d",&i);

}

printf("right!good boy!\n\n");

}

程序一開始定義了整數變量i,然後提示用戶輸入密碼,這時我們輸入i的值,來到while(i != 520)這句,i != 520這句是如果i不等于520,就進入循環裡面,并且提示密碼輸入錯誤,用戶重新輸入密碼,再次輸入密碼後,會再次來到循環頭部,如果i != 520成立,會再次進入循環提示用戶錯誤和重新輸入,直到用戶輸入正确的數(也就是520)後i != 520才不成立,就退出了循環。

再來看看do while循環的格式:

do

{

循環執行語句;

}while(表達式);

循環下一句;

do while和while的區别是它會首先執行一遍循環執行語句(所以do while最少都要執行一次),然後再循環尾部判斷表達式是否成立,如果成立就繼續進入循環,否則到達循環下一句。同樣的例子

# include <stdio.h>

void main()

{

int i;

do

{

printf("please enter the right password\n");

scanf("%d",&i);

}while(i != 520);

printf("right!good boy!\n\n");

}

仔細對比它們的差異,假設我們第一次i的值就輸入520,那麼while循環裡的循環執行語句就不會執行,但是do while還是會執行一次循環執行語句再在循環尾部判斷表達式是否成立

抱歉啦,最近實在比較忙,身體也有點不适,昨天沒有更新,常常會收到初學者的詢問,時間實在是有點緊,我後面盡量以更為主啦,有更多時間的話再幫大家解答問題吧

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved