聲明:文中觀點(diǎn)僅代表個(gè)人,其中文字、圖片未經(jīng)本人許可,不得部分或全部轉(zhuǎn)載,違者所造成影響后后果自負(fù)!聯(lián)系本人方式:80368704@qq.com QQ:80368704
第1章 C語(yǔ)言概述
1.1和1.2自己看吧........
1.3 簡(jiǎn)單的C語(yǔ)言程序介紹
例1.1
#include<stdio.h>
void main() {
printf("This is a C program!/n");
}
1。關(guān)于#include<stdio.h>
void main(){.........}
讓我們從向黑板上書(shū)寫(xiě)文字開(kāi)始吧.......
我們寫(xiě)信有一定的格式, 大致分為3部分:開(kāi)頭、正文和結(jié)尾。
信是我們寫(xiě)來(lái)給別人看得,大家都使用諸如上面的格式, 無(wú)論什么人拿到信,均能很快知道, 是誰(shuí)寫(xiě)的信,寫(xiě)給誰(shuí)的,主要說(shuō)的什么。 由此可見(jiàn),人和人之間溝通的書(shū)面文字是有一定書(shū)寫(xiě)規(guī)范的。
那么同樣的道理,作為人類(lèi)和計(jì)算機(jī)之間溝通的書(shū)面文字(實(shí)質(zhì)是就是 人向機(jī)器發(fā)出的命令的集合體——程序), 也要遵循一定的格式,而且 簡(jiǎn)單的C程序也大致分為3部分:開(kāi)頭、正文和結(jié)尾,和信比較如下圖 :
XXX,你好: -----------開(kāi)頭----------- #include<stdio.h>
void main(){
。。。 -----------正文------------ 。 。 。
此致
敬禮 -----------結(jié)尾------------ }
XXX
XX年XX月XX日
反過(guò)來(lái)說(shuō)就是:
(1) 開(kāi)頭: #include<stdio.h>
void main(){ 相當(dāng)于 XXX,你好:
(2)正文: 你要讓機(jī)器執(zhí)行的命令寫(xiě)在開(kāi)頭和結(jié)尾之間 相當(dāng)于 信的正文內(nèi)容部分
(3)結(jié)尾: } 相當(dāng)于 此致 敬禮 XXX XX年XX月XX日
舉例 : 我想讓人和計(jì)算機(jī)完成寫(xiě)星號(hào)的任務(wù),命令的對(duì)比如下:
現(xiàn)在要在黑板上寫(xiě)個(gè)星號(hào)* 現(xiàn)在要讓在屏幕上寫(xiě)個(gè)星號(hào)*
對(duì)方:人 , 表達(dá)形式:信 對(duì)方:計(jì)算機(jī) , 表達(dá)形式:c語(yǔ)言
xxx 你好: #include<stdio.h>
void main(){
在黑板上寫(xiě)一個(gè)*號(hào) printf("*");
此致 }
敬禮
xxx
XX年XX月XX日
說(shuō)明:
就像人類(lèi)信的開(kāi)頭和結(jié)尾部分一般都是固定的一樣,c語(yǔ)言程序的開(kāi)始和結(jié)束部分一般也是固定的,簡(jiǎn)單程序更是如此,
開(kāi)頭照抄 #include void main(){ , 結(jié)尾照抄一個(gè)大括號(hào) } .
比如 現(xiàn)在我要讓在屏幕上寫(xiě)個(gè)#的程序如下 用c語(yǔ)言
#include<stdio.h> ------------開(kāi)頭兩句照抄
void main(){
printf("#"); ------------屏幕書(shū)寫(xiě)#的命令
} -----------結(jié)尾用個(gè)右大括號(hào)
再比如 現(xiàn)在我要讓在屏幕上寫(xiě)兩個(gè)井號(hào)#的程序如下 用c語(yǔ)言
#include<stdio.h> ------------開(kāi)頭兩句照抄
void main(){
printf("##"); ------------屏幕書(shū)寫(xiě)#的命令
} ----------- 結(jié)尾用個(gè)右大括號(hào)
我們看到程序是如此的相似, 開(kāi)頭和結(jié)尾完全相同,
2.關(guān)于printf
屏幕書(shū)寫(xiě)命令是printf("XXXX");其中XXXX就是向屏幕上書(shū)寫(xiě)的內(nèi)容
比如 在屏幕上寫(xiě)兩個(gè)星 ** 的程序如下 ,c語(yǔ)言
#include<stdio.h> ------------開(kāi)頭兩句照抄
void main(){
printf("**"); ------------屏幕書(shū)寫(xiě)**的命令
} ----------- 結(jié)尾用個(gè)右大括號(hào)
我們讓計(jì)算機(jī)向屏幕上書(shū)寫(xiě)的術(shù)語(yǔ)叫 "輸出",而且可以向屏幕輸出的內(nèi)容 可以是字母,數(shù)字以及#!@$%&^&*)(*_等等好多東西.
現(xiàn)在我們讓計(jì)算機(jī)向屏幕上輸出一串英文文字"This is a C program !" , C程序顯然如下:
#include<stdio.h> ------------------開(kāi)頭兩句照抄
void main(){
printf("This is a C program !");---屏幕輸出命令
} -----------結(jié)尾用個(gè)右大括號(hào)

3. 關(guān)于'/n'
現(xiàn)在讓我們將如下圖案輸出到屏幕上:
*
* *
* * *
很容易想到的程序是:
#include<stdio.h>
void main(){
printf("*");
printf("* *");
printf("* * *");
}
計(jì)算機(jī)執(zhí)行此程序后屏幕顯示如下:

為什么會(huì)這樣呢?解釋這個(gè)問(wèn)題必須先說(shuō)明一些關(guān)于屏幕的基礎(chǔ)知識(shí)。。。。。
早期計(jì)算機(jī)的屏幕整個(gè)區(qū)域被分成25行80列,如下所示:總共80x25個(gè)位置,每個(gè)位置可以放一個(gè)字符。
設(shè)列為x軸,行為y軸,原點(diǎn)是屏幕左上角,

用(x,y)表示屏幕上第x列第y行的輸出位置,比如第3列,第5行表示為(3,5),注意:(列,行)
假設(shè)系統(tǒng)最初將當(dāng)前輸出位置設(shè)定在(1,1),printf將在以(1,1),(2,1),(3,1)(4,1).....的順序從左到右放置輸出內(nèi)容,直到第一行最右端的(80,1),再?gòu)牡?行最左端的(1,2)開(kāi)始顯示,(2,2),(3,2),.......,當(dāng)?shù)?行放滿(mǎn),再放第3行,......如此直到25行全部寫(xiě)滿(mǎn)后,上卷屏。
現(xiàn)在明白上面的程序輸出的結(jié)果是為什么了吧。
如何能輸出那個(gè)圖案呢?
讓我們來(lái)分析一下,畫(huà)一個(gè)顯示了預(yù)想圖案的屏幕:

用"_"表示空格(鍵盤(pán)上有空格的歐),改寫(xiě)程序如下
#include<stdio.h>
void main( ){
printf("_ _ * _ _ _ _ _ _ _ _ _ ......_ _ _ _ _ _ _");
/*星號(hào)后面有80-3個(gè)空格*/
printf("_ * _ * _ _ _ _ _ _ _ _ ......_ _ _ _ _ _ _");
/*第2個(gè)星號(hào)后面有80-4個(gè)空格*/
printf("* _ * _ * _ _ _ _ _ _ _ ......_ _ _ _ _ _ _");
/*第3個(gè)星號(hào)后面有80-5個(gè)空格*/
}
空格太多了,能省嗎?
當(dāng)然,printf支持從某行的某位置直接將輸出位置變到下一行的行首,稱(chēng)為換行控制。
在需要換行的位置,加'/n',比如:我們剛才的程序用'/n'改變?nèi)缦拢?/span>
#include<stdio.h>
void main(){
printf("_ _ * /n");
/*在從(1,1)開(kāi)始先輸出_ _ *,然后'/n'將當(dāng)前輸出位置移動(dòng)到第2行的行首(1,2)*/
printf("_ *_ * /n");
/*在從(1,2)開(kāi)始先輸出 * _ *_ *,然后'/n'將當(dāng)前輸出位置移動(dòng)到第3行的行首(1,3)*/
printf("* _ *_ * /n");
/*在從(1,3)開(kāi)始先輸出 * _ * _ *,然后'/n'將當(dāng)前輸出位置移動(dòng)到第3行的行首(1,4)*/
}
那么,有沒(méi)有能讓我們指定輸出位置到任意的行列呢?比如:現(xiàn)在指定在(5,5)輸出一個(gè)星號(hào)。
有!!!!,gotoxy(5,5);可以定位輸出位置到(5,5);
#include<stdio.h>
void main(){
gotoxy(5,5);
printf("*");
}
當(dāng)gotoxy(5,5);將輸出位置定在(5,5)后,printf輸出一個(gè)星號(hào)到該位置上。
至于用gotoxy()函數(shù)實(shí)現(xiàn)我們上面的星號(hào)組成的3角形,留給讀者思考了。
總結(jié):例1.1的知識(shí)點(diǎn)3個(gè):
1。關(guān)于簡(jiǎn)單C程序的基本結(jié)構(gòu)的介紹
#include<stdio.h>
void main(){.........}
2。關(guān)于屏幕輸出的基礎(chǔ)知識(shí)和printf
3. 關(guān)于 '/n'的應(yīng)用
例1.2
#include<stdio.h>
void main(){
int a,b,sum;
a=123;
b=456;
sum=a+b;
printf("sum=%d/n",sum);
}
一、數(shù)據(jù)存儲(chǔ)和使用變量
在開(kāi)始講解以前,先按我的要求完成一個(gè)數(shù)學(xué)題的求解:
1.設(shè)有3個(gè)變量a,b,sum,(a,b,sum均∈整數(shù))
2.已知 a=123,b=456, 有 sum=a+b
3.求 sum
4.答案不要告訴我,而是把結(jié)果寫(xiě)在黑板上,
寫(xiě)時(shí)用“sum=?”的格式,?用具體的結(jié)果值代替
你能按要求完成本題目嗎?我想你應(yīng)該能寫(xiě)下:sum=579
好,以上我是讓“人”計(jì)算并寫(xiě)出結(jié)果,
下面如果讓機(jī)器完成上述問(wèn)題的解答,我該如何把問(wèn)題描述給機(jī)器呢?我們一句一句對(duì)比著來(lái):
對(duì)方:人 對(duì)方:計(jì)算機(jī)
設(shè)有3個(gè)變量a,b,sum,(a,b,sum均∈整數(shù)) int a,b,sum;/*int 表示后面寫(xiě)的3個(gè)是整數(shù)變量*/
已知 a=123,b=456,sum=a+b 求 sum a=123,b=456;sum=a+b;
答案不要告訴我,而是把結(jié)果寫(xiě)在黑板上 printf("sum=%d",sum);
寫(xiě)時(shí)用"sum=?"的格式, ?用sum具體值代替 /*printf表示向屏幕寫(xiě),
寫(xiě)時(shí)用"sum=%d"的格式,
%d用sum具體值代替,%d就是?*/
二、scanf("......",.......);
將上面對(duì)人的描述的第2步做更改如下:
2.任意給定 a和 b, 有sum=a+b
任意給定的意思是給出題目時(shí)不指定。那么什么時(shí)候給出具體值呢?
舉例:有甲和乙兩個(gè)人,甲把上面的題目讓乙做,那么乙解題的詳細(xì)步驟如下:
1. 第1句,
乙了解到將有3個(gè)變量,這3個(gè)變量將用于整數(shù)計(jì)算。
2. 第2句,
乙了解到此時(shí)需要讓甲給出a和b的具體整數(shù)值,因此乙將一直等待,當(dāng)甲給出a和b的具體的整數(shù)值后,乙繼續(xù)進(jìn)行解題,即進(jìn)入第3步。
3. 第3句,
乙將a和b相加求出sum的值
4. 第4句,
乙將sum的值用指定的格式寫(xiě)在黑板上:sum=?
現(xiàn)在,我是甲方,計(jì)算機(jī)是乙方,道理相同,對(duì)機(jī)器描述的第2步做更改如下:
a=123;b=456; 改成 scanf("%d%d",&a,&b);
就可以讓計(jì)算機(jī)在按步驟解題時(shí),到達(dá)第2步停下來(lái)等待,直到我給出a、b的具體值,才再繼續(xù)。
完整的程序如下:
#include<stdio.h>
void main(){
int a,b,sum;
scanf("%d%d",&a,&b);
sum=a+b;
printf("sum=%d/n",sum);
}
程序運(yùn)行如下:
123 456 ↓ /*↓表示按Enter鍵,即按回車(chē)鍵*/
sum=579

例1.3
#include<stdio.h >
void main(){
int max(int x,int y);
int a,b,c;
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("max=%d/n",c);
}
int max(int x, int y)
{
int z;
if(x>y)z=x;
else z=y;
return z;
}
讓甲、乙、丙 3 個(gè)人合作完成求 2 個(gè)數(shù)中較大者的任務(wù):
甲:提供 2 個(gè)整數(shù)給乙
乙:等待,直到甲給出 2 個(gè)整數(shù) a,b
呼叫丙,并且將 a,b 兩數(shù)告訴丙
等待,直到丙回復(fù)一個(gè)整數(shù),
將該整數(shù)用 ”max=?” 的格式寫(xiě)在黑板上。
丙:將呼叫者給出的兩個(gè)整數(shù)分別給變量 x 和 y
找出 x,y 中較大的數(shù),將其回復(fù)給呼叫者。
將甲改稱(chēng) ren
乙改稱(chēng) main
丙改稱(chēng) max 更具體且嚴(yán)格的描述如下:
習(xí)題1.5<;/font>
請(qǐng)參考如下圖案輸出到屏幕上的講解:
<;p> *
* *
* * *
習(xí)題1.5參考答案:
#include<stdio.h>
void main(){
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /n");
printf(" Very good!/n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /n");
}
習(xí)題1.6
1.給你一個(gè)標(biāo)準(zhǔn)c的較經(jīng)典并且好理解的解答:
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return z;
}
main()
{
int a,b,c,max_abc;
scanf("%d%d%d",&a,&b,&c);
max_abc=max(a,b);
max_abc=max(max_abc,c);
printf("max=%d",max_abc);
}
參考文獻(xiàn):《C語(yǔ)言程序設(shè)計(jì)》 譚浩強(qiáng) 第一章例1.3
2.求最大值,用函數(shù)的較精簡(jiǎn)的寫(xiě)法
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return z;
}
main()
{
int a,b,c,maxium;
printf("please input 3 number/n");
scanf("%d%d%d",&a,&b,&c);
maxium=max(max(a,b),c); /*a和b大的那個(gè)數(shù)和c比較大小*/
printf("%d",maxium);/*輸出a,b,c三個(gè)當(dāng)中最大的那個(gè)數(shù)*/
getch();
}
3 要說(shuō)寫(xiě)法較簡(jiǎn)單的,給你一個(gè)
main()
{
int a,b,c,max;
scanf("%d%d%d",&a,&b,&c);
printf(" max=%d",((max=(a>b)?a:b))>c?max:c);
getch();
}
4 實(shí)質(zhì)相同的好理解的,給你一個(gè)
main()
{
int a,b,c,max;
printf("please input 3 number/n");
scanf("%d,%d,%d",&a,&b,&c);
if(a<b) max=b;
else max=a;
if(max<c)
max=c;
printf("max=%d/n",max);
}
5 要輸出最大值和最小值怎么寫(xiě)?
給你一個(gè)標(biāo)準(zhǔn)c的較經(jīng)典并且好理解的解答:
#include<stdio.h>
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return z;
}
int min(int x,int y)
{
int z;
if(x<y)z=x;
else z=y;
return z;
}
main()
{
int a,b,c,max_abc,min_abc;
scanf("%d%d%d",&a,&b,&c);
max_abc=max(a,b);
max_abc=max(max_abc,c);
printf("max=%d ",max_abc);
min_abc=min(a,b);
min_abc=min(min_abc,c);
printf(" min=%d/n",min_abc);
getch();
}
參考文獻(xiàn):《C語(yǔ)言程序設(shè)計(jì)》 譚浩強(qiáng) 第一章例1.3
6 要輸出a,b,c,d,e,f,g中的最大值和最小值怎么寫(xiě)?
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return z;
}
int min(int x,int y)
{
int z;
if(x<y)z=x;
else z=y;
return z;
}
main()
{
int a,b,c,d,e,f,g,max_abc,min_abc;
scanf("%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g);
max_abc=max(a,b);
max_abc=max(max_abc,c);
max_abc=max(max_abc,d);
max_abc=max(max_abc,e);
max_abc=max(max_abc,f);
max_abc=max(max_abc,g);
printf("max=%d ",max_abc);
min_abc=min(a,b);
min_abc=min(min_abc,c);
min_abc=min(min_abc,d);
min_abc=min(min_abc,e);
min_abc=min(min_abc,f);
min_abc=min(min_abc,g);
printf(" min=%d/n",min_abc);
}
參考文獻(xiàn):5
7.輸入a,b,c,輸出最大值MAX,中間值MID,最小值MIN
#include <stdio.h>
main()
{
int a,b,c;
int t;
printf("/nintput a :");
scanf("%d",&a);
printf("/nintput b :");
scanf("%d",&b);
printf("/nintput c :");
scanf("%d",&c);
/*將a,b,c的值按由大到小重新排列*/
if(a<b){t=a;a=b;b=t;}
if(a<c){t=a;a=c;c=t;}
if(b<c){t=b;b=c;c=t;}
printf("max: %d mid: %d min: %d /n",a,b,c);
getch();
}
8 請(qǐng)問(wèn)有更經(jīng)典的解法嗎? 學(xué)習(xí)了循環(huán)和數(shù)組以后,再。。。。。。。。。
OVER