當前位置:首頁 » 編程語言 » c語言基礎知識第一章程序設計初步
擴展閱讀
iphone自動點擊屏幕腳本 2022-09-25 13:23:28
如何做可以永久刪除照片 2022-09-25 13:21:32

c語言基礎知識第一章程序設計初步

發布時間: 2022-08-11 09:27:01

❶ 初二學c語言

c程序設計 作者:姚國清//夏軍寶//何勇強
ISBN:10位〔780243081X〕 13位〔9787802430815〕
出版社:航空工業出版社
出版日期:2008-3-1
定價:¥32.00 元
[編輯本段]內容提要
本書為高等院校規劃教材,主要講述了使用C語言設計程序的方法。本書不僅對C語言的基本概念和基本知識進行了深入淺出的講解,同時還將作者多年來在C語言教學過程中積累的經驗和體會告訴了讀者。在每章的最後,我們為讀者提供了有針對性的類型多樣的習題,另外,在本書最後,還為讀者安排了大量綜合練習。希望讀者學練結合,逐步培養閱讀程序和編寫程序的能力。
本書語言淺顯易懂、實例和習題眾多,可以作為高等院校計算機專業和非計算機專業通用教材,也可供大專院校學生和程序愛好者自學使用。
[編輯本段]編輯推薦
本書為高等院校規劃教材,主要講述了使用C語言設計程序的方法。書中以簡短的篇幅介紹C語言的基本概念和基本語法,使讀者通過學習可以具有初步使用C來解決問題的能力。 本書可以作為高等院校計算機專業和非計算機專業通用教材,也可供大專院校學生和程序愛好者自學使用。
[編輯本段]目錄
第0章 程序設計概論
0.1 程序與程序設計語言
0.1.1 程序
0.1.2 程序設計語言
0.2 C語言的歷史和發展
0.3 一個簡單程序的誕生
0.3.1 簡單的C語言程序概貌
0.3.2 第一個程序的誕生
本章小結
復習題
第1章 C程序設計基礎知識
1.1 變數
1.1.1 有關內存的基礎概念
1.1.2 變數的引入
1.2 常量
1.2.1 字面常量
1.2.2 符號常量
1.2.3 const常量
1.3 算術運算符與算術表達式
1.3.1 運算符概述
1.3.2 算術運算符
1.3.3 算術表達式
1.4 賦值運算符與賦值表達式
1.4.1 簡單賦值運算符
1.4.2 復合算術賦值運算符
1.4.3 賦值運算時的數據類型轉換
1.5 自加、自減、逗號運算符
1.5.1 自加和自減運算符:++
1.5.2 逗號運算符
1.6 位運算
1.6.1 位運算的基本規律
1.6.2 位運算符
本章小結
復習題
第2章 簡單C語句
2.1 C語句概述
2.1.1 表達式語句
2.1.2 控制語句
2.1.3 函數調用語句
2.1.4 復合語句
2.1.5 空語句
2.2 輸入輸出的概念
2.3 基本輸入輸出函數
2.3.1 格式化輸出庫函數:printf
2.3.2 格式輸入庫函數:scanf
2.3.3 字元輸入輸出函數
本章小結
復習題
第3章 分支結構程序設計
3.1 演算法與基本程序結構
3.1.1 演算法簡介
3.1.2 演算法的表示
3.1.3 基本程序結構
3.2 關系運算和邏輯運算
3.2.1 關系運算
3.2.2 邏輯運算
3.3 if語句
3.3.1 簡單if語句
3.3.2 if~else語句
3.3.3 if語句的嵌套
3.3.4 if語句使用注意事項
3.4 switch語句
3.5 條件運算符
本章小結
復習題
第4章 循環結構程序設計
4.1 循環的引入
4.2 for循環
4.3 while循環
4.4 do-while循環
4.5 循環的比較
4.5.1 for語句和while語句
……
第5章 函數
第6章 數組
第7章 指針
第8章 字元數據處理
第9章 結構
第10章 文件
第11章 Turbo C圖形
第12章 存儲類型
附錄A C語言預處理器
附錄B 綜合練習題
附錄C 常用函數
附錄D 圖形驅動程序和模式

❷ c語言基礎知識入門我哪有

c語言基礎知識入門:

C語言功能豐富,表達能力強、使用靈活方便、應用面廣、目標程序效率高、可移植性好,既具有高級語言的優點,又具有低級語言的許多特點,因此特別適合於編寫系統軟體。

C語言不需要基礎只是有計算的地方要用二進制計算,C+要有C語言的基礎,主要是知道那些關鍵字,還有編程語法。以及基本演算法。知道這些c語言就差不多了。至於數學之類的那是對你比較高深的編程才用到的。

特性

1、C語言是一個有結構化程序設計、具有變數作用域(variablescope)以及遞歸功能的過程式語言。

2、C語言傳遞參數均是以值傳遞(passbyvalue),另外也可以傳遞指針(apointerpassedbyvalue)。

3、不同的變數類型可以用結構體(struct)組合在一起。

4、只有32個保留字(reservedkeywords),使變數、函數命名有更多彈性。

5、部分的變數類型可以轉換,例如整數型和字元型變數。

6、透過指針(pointer),C語言可以容易的對存儲器進行低端控制。


❸ C語言入門

1、 DIP40雙列直插;
2、 P0,P1,P2,P3四個8位準雙向I/O引腳;(作為I/O輸入時,要先輸出高電平)
3、 電源VCC(PIN40)和地線GND(PIN20);
4、 高電平復位RESET(PIN9);(10uF電容接VCC與RESET,即可實現上電復位)
5、 內置振盪電路,外部只要接晶體至X1(PIN18)和X0(PIN19);(頻率為主頻的12倍)
6、 程序配置EA(PIN31)接高電平VCC;(運行單片機內部ROM中的程序)
7、 P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1

單片機內部I/O部件:(所胃學習單片機,實際上就是編程式控制制以下I/O部件,完成指定任務)
1、 四個8位通用I/O埠,對應引腳P0、P1、P2和P3;
2、 兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1)
3、 一個串列通信介面;(SCON,SBUF)
4、 一個中斷控制器;(IE,IP)

針對AT89S52單片機,頭文件AT89x52.h給出了SFR特殊功能寄存器所有埠的定義。

C語言編程基礎正式內容:

1、 十六進製表示位元組0x5a:二進制為01011010B;0x6E為01101110。
2、 如果將一個16位二進數賦給一個8位的位元組變數,則自動截斷為低8位,而丟掉高8位。
3、 ++var表示對變數var先增一;var—表示對變數後減一。
4、 x |= 0x0f;表示為 x = x | 0x0f;
5、 TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變數TMOD的低四位賦值0x5,而不改變TMOD的高四位。
6、 While( 1 ); 表示無限執行該語句,即死循環。語句後的分號表示空循環體,也就是{;}
一、常量

(1)無符號單位元組數

(2)帶符號單位元組數

(3)無符號雙位元組數

(4)帶符號雙位元組數

(5)浮點數,佔用4個位元組

二、變數

(1)無符號單位元組數:unsigned char

(2)帶符號單位元組數:char

(3)無符號雙位元組數:unsigned int

(4)帶符號雙位元組數:int

(5)浮點數,佔用4個位元組:float

(6)位變數:sbit

(7)數組:Arrary[ ][ ]

(8)聯合體:union

union{

inti_Data;

unsigned char b_Data[2];

}u_int;

(9)結構體:struct

struct Stu_Channel_Info{

unsigned char Device_Info;

unsigned intDevice_ID;

unsigned intDevice_Time;

}Channel_Info[con_MaxNumber];

(10)指針:在C51語言中,我們盡量避免指針。

三、存儲類型

code:指放到程序存儲器中,不可變得常數 比如:unsigned char code x

data:指內部RAM低128位元組空間 00~7FH比如:unsigned char data x

idata:指全部內部RAM空間00H~FFH。unsigned char idata x

bdata:指放到可位定址區域20H~2FH中 unsigned char bdata x

pdata:指可用Ri定址的區域,通常固定為外部RAM256位元組unsigend char pdata x

xdata:指外部64KBRAM空間 unsiged char xdata x

四、關於運算符號

+:加法運算

-:減法運算

*:乘法運算

/:除法運算

%:取余數

<<:左移

>>:右移

=:等於

&:與操作

|:或操作

~:取反

&&:邏輯與

||:邏輯或

五、關於位操作

(1)口線位操作

sbit Left_Red P1^0表示用Left_Red來表示P1.0位

Left_Red = 0則表示將P1.0清零Left_Red = 1則表示將P1.0置位

(2)位變數的操作方法

unsigend char bdata Control_Port;// 聲明一個可位定址的位元組變數

sbitOutput1 = Control_Port^1;// 引用該位元組變數的某一位

sbitOutput2 = Control_Port^2;

sbitOutput3 = Control_Port^3;

則我們可以對Control_Port操作,也可以直接對其中定義好的位變數直接操作

六、關於外部埠的操作

#define LED_Address XBYTE[0xC400]固定LED_Address為0xC400地址

讀該埠的方法:x = LED_Address;

寫該埠的方法:LED_Address = x;LED_Address = 0x33; LED_Address = Arr[5];

七、外部RAM區的操作

unsigned char xdata Arr[20]; 表示聲明了20個位元組的外部RAM空間

寫方法:Arr[1] = 1;

讀方法:x = Arr[1];

unsigned char xdata Arr[20] _at_ 0x0000;表示這20個外部RAM的起始地址為0x0000

八、普通函數的書寫方法:

void Delay( void ){

}

void Output( unsigned char x ){

}

unsigned char Input( void ){

}

unsigned char Key_Disp( unsigned char *P ){

}

九、中斷服務函數的寫法:

void p_Int0( void ) interrupt 0 using 0{

}

其中interrupt 0 表示第0號中斷,即INT0中斷

using0 表示中斷服務程序中使用的工作組為0區。

十、常用語句

if (){}

else{}

for(;;; ) {}

while( ) {}

switch( ){

case:break;

case:barek;

default:break;

}

十一、書寫規范

x = x + 1;

for( i = 1; i < 10; i++ ){

j = Arr[5] + i;

}

void Delay_10ms( void ){

unsigned char i;

for( i = 0; i < 100; i++ ) { }

}

❹ c語言有哪些基礎知識

C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。

C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

(4)c語言基礎知識第一章程序設計初步擴展閱讀:

C語言的字元串其實就是以''字元結尾的char型數組,使用字元型並不需要引用庫,但是使用字元串就需要C標准庫裡面的一些用於對字元串進行操作的函數。

它們不同於字元數組。使用這些函數需要引用頭文件<string.h>。

在C語言中,輸入和輸出是經由標准庫中的一組函數來實現的。在ANSI C中,這些函數被定義在頭文件<stdio.h>;中。

❺ 在C語言中,在執行 char str[10]=」ch\nina」 ; strlen(str) 的結果是( )。 A、5 B、6 C、7 D、9

Neusoft

《C語言程序設計》習題集
《C程序設計》習題集
第一章C語言基礎知識

1.1 填空題
1.要把高級語言編寫的源程序轉換為目標程序,需要使用
A) 編輯程序 B) 驅動程序 C) 診斷程序 D) 編譯程序
2. 若有說明語句:int a,b,c,*d=&c;,則能正確從鍵盤讀入三個整數分別賦給變數a、b、c的語句是
A) scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);
C) scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);
3.以下選項中合法的用戶標識符是______。
A) long B) _2Test C) 3Dmax D) A.dat
4.設a和b均為double型常量,且a=5.5、b=2.5,則表達式(int)a+b/b的值是______。
A) 6.500000 B) 6 C) 5.500000 D) 6.000000
5.已知i、j、k為int型變數,若從鍵盤輸入:1,2,3<回車>,使i的值為1、j的值為2、k的值為3,以下選項中正確的輸入語句是______。
A) scanf("%2d%2d%2d",&i,&j,&k);
B) scanf(""%d %d %d",&i,&j,&k);
C) scanf("%d,%d,%d",&i,&j,&k);
D) scanf("i=%d,j=%d,k=%d",&i,&j,&k);
6.C語言程序的執行,總是起始於()。
A) 程序中的第一條可執行語句
B) 程序中的第一個函數
C) main函數
D) 包含文件中的第一個函數

7.下列說法中正確的是()
A) C程序書寫時,不區分大小寫字母
B) C程序書寫時,一行只能寫一個語句
C) C程序書寫時,一個語句可分成幾行書寫
D) C程序書寫時每行必須有行號

8.若有說明語句:int a; float b;,以下輸入語句正確的是()
A) scanf("%f%f",&a,&b);
B) scanf("%f%d",&a,&b);
C) scanf("%d,%f",&a,&b);
D) scanf("%6.2f%6.2f",&a,&b);
9.以下程序的輸出結果是()
main( )
{ int x=11,y=11;
printf("%d%d\\n",x--,--y);
}
A) 11,11 B) 10,10 C) 10,11 D) 11,10

10.執行下面程序段,給x、y賦值時,不能作為數據分隔符的是()
int x,y;
scanf("%d%d",&x,&y);
A) 空格 B) Tab鍵 C) 回車 D) 逗號

11.執行下面程序時,欲將25和2.5分別賦給a和b,正確的輸入方法是。
int a;
float b;
scanf("a=%d,b=%f",&a,&b);
A) 25□2.5
B) 25,2.5
C) a=25,b=5.5
D) a=25□b=2.5

12.英文小寫字母d的ASCII碼為100,英文大寫字母D的ASCII碼為
A) 50 B) 66 C) 52 D) 68
13.以下定義語句中錯誤的是( )。
A)int a=3,b=5; B)float x1; x2;
C)char c1,c2,c3; D)double y3, y4;
14.若將整數4和5賦給整型變數a和b,對於語句scanf("%d%d" , &a,&b);在從鍵盤輸入數據時,正確的數據輸入格式為( )。
A)4,5 B)4 5 C)4:5 D)4#5
15.若整型變數a和b的值分別為6和8,則下列語句printf("a=%d,b=%d",a,b); 的輸出結果為( )。
A)6, 8 B)6 8 C)a=6 b=8 D)a=6, b=8
16.C語言中的字元常量是以( )括起來的一個字元。
A)雙引號 B)單引號 C)\……\ D)*……*
17.C語言中的轉義字元\n的作用是( )。
A)回車換行 B)橫向跳格
C)縱向跳至本列下行 D)將游標移至本行行首
18.若有定義:int a=8,b=5,c;,執行語句c=a/b+0.4;後,c的值為
A) 1.4 B) 1 C) 2.0 D) 2
19.如果要把常量327存入變數a中,a可以定義成哪些類型?(多選)
A. int B. char
C. long D. float
20.下面哪個表達式的值為4.(單選)
A. 11/3 B. 11.0/3
C. (float)11/3 D. (int)(11.0/3+0.5)
#include<stdio.h>
#include<math.h>
main( )
{int a=1,b=4,c=2;
float x=5.5,y=9.0,z;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
printf("%f\n",z);
}
A).9.800000 B).9.300000 C).8.500000 D).8.000000

21.main( )
{int x = 10, y = 3;
printf("%d\n",y=x/y);
}
A).0 B).1 C).3 D).不確定的值

22.main( )
{int a;
printf("%d\n";(a=3*5,a*4,a+5));
}
A).65 B).20 C).15 D).10

23.已知小寫字母a的ASCII碼為97,大寫字母A的ASCII碼為65。以下程序
main()
{ unsigned int a=32, b=66;
printf("%c\n", a+b);
}
的結果為:
A).66 B).98 C).b D).B

24.設有如下定義
int x=10,y=3,z;
則語句
printf("%d\n",z=(x%y,x/y));
的輸出結果是
A).1 B).0 C).4 D).3

25.#define SQR(X) X*X
main()
{
int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
A).10 B).1 C).9 D).0

26.#define MAX(x, y) (x)>(y)?(x):(y)
main()
{ int a=1, b=2, c=3, d=2, t;
t=MAX(a+b, c+d)*100;
printf("%d\n",t);
}
的運行結果為:
A).500 B).5 C).3 D).300

27.以下程序的輸出結果是
main()
{
int x=10,y=10;
printf("%d %d\n",x--,--y);
}
A).10 10 B).9 9 C).0 10 D).10 9

28.語句:printf("%d",(a=2)&&(b= -2));的輸出結果是
A).無輸出 B).結果不確定 C).-1 D).1
33、當c的值不為0時, 能正確將c的值賦給變數a、b
A).c=b=a;
B).(a=c)||(b=c)
C).(a=c)&&(b=c)
D).a=c=b

29.能正確表示a和b同時為正或同時為負的邏輯表達式是
A).(a>=0||b>=0)&&(a<0||b<0) B).(a>=0&&b>=0)&&(a<0&&b<0)
C).(a+b>0)&&(a+b<=0) D).a*b>0

30.下面合法的賦值語句是
A) x+y=2002; B) ch="green"; C) x=(a+b)++; D) x=y=0316;

31.下面哪個表達式的值為4.(單選)
A. 11/3 B. 11.0/3
C. (float)11/3 D. (int)(11.0/3+0.5)

32.已知a為整型變數,那麼與表達式 a!=0 真假值情況相同的表達式有哪些?(多選)
A. a>0||a<0 B. a
C. !a= =0 D. !a

33.以下非法的賦值語句是
A) n=(i=2,++i); B) j++; C) ++(i+1); D) x=j>0;
34.若有以下程序:
main()
{int k=2,i=2,m;
m=(k+=i*=k); printf("%d,%d\n",m,i);
}
執行後的輸出結果是______。
A) 8,6 B) 8,3 C) 6,4 D) 7,4

35.已有定義:int x=3,y=4,z=5;,則表達式!(x+y)+z-1&&y+z/2的值是______。
A) 6 B) 0 C) 2 D) 1

36.以下程序的輸出結果是
main()
{
int a=3;
printf("%d\n",(a+=a-=a*a) );
}
A) -6 B)12 C) 0 D) –12

37.設a、b、c、d、m、n均為int型變數,且a=5、b=6、c=7、d=8、m=2、n=2,則邏輯表達式(m=a>b)&&(n=c>d)運算後,n的值為
A) 0 B) 1 C)2 D) 3

38.假定w、x、y、z、m均為int型變數,有如下程序段:
w=1; x=2; y=3; z=4;
m=(w<x)?w: x;
m=(m<y)?m:y;
m=(m<z)?m: z;
則該程序運行後,m的值是
A) 4 B) 3 C) 2 D) 1

1.2 填空題
1.下面程序段的輸出結果是。
int k=10;
float a=3.5,b=6.7,c;
c=a+k%3*(int)(a+b)%2/4;

2.表達式5%(-3)的值是,表達式-5%(-3)的值是。

3.已知:int a=5;則執行a+=a-=a*a;語句後,a的值為。

4.下面程序的運行結果是x=,y=。
main( )
{ float x=4.9;int y;
y=(int)x;
printf ("x=%f , y=%d", x ,y); }

5.若有定義:int a=8,b=5,c;,執行語句c=a/b+0.4;後,c的值為。

6.以下程序的輸出結果是。
main()
{ int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}

7.以下程序的輸出結果是。
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}

8.當a=3,b=4,c=5時,寫出下列各式的值。
a<b的值為___, a<=b的值為___,
a==c的值為___, a!=c的值為___,
a&&b的值為___, !a&&b的值為___,
a||c的值為___, !a||c的值為___,
a+b>c&&b==c的值為___。

9.整型變數a的值是5,表達式a/=a+a;的值。

10.已知a=3,b=4,c=5,邏輯表達式a||b+c&&b-c的值

11.已知a=3,b=4,c=5,邏輯表達式!(a>b)&&!c||1的值

1.3 程序設計題
1.編寫程序:在屏幕上顯示一句話「hello neusoft!」。

2.編寫程序在屏幕上輸出如下圖型:
*
***
*****
*******
3.已知圓的半徑是5.6,求其直徑、周長、面積並輸出。
4.從鍵盤輸入圓的半徑,求其直徑、周長、面積並輸出。

5.編寫程序求任意圓的體積

6.求任意一元二次方程度兩個實根。

第二章 順序程序結構設計

2.1 填空題
1.計算機語言提供三種基本控制結構,即,,。人們提倡使用這三種結構編寫程序,並稱這樣的程序設計為。
2.2 程序設計題
1.從鍵盤輸入5個整數,求它們的和、平均值並輸出。

2.編寫程序,從鍵盤輸入兩個整數分別存放在變數c1,c2中,要求通過程序交換它們的值。

第三章 分支結構程序設計

3.1 填空題
1.能正確表示「當x的值在[1,10]和[200,210]范圍內為真,否則為假」的表達式是()。
A)(x>=1)&& (x<=10) && (x>=200) || (x<=210)
B)(x>=1)|| (x<=10) || (x>=200) || (x<=210)
C)(x>=1)&& (x<=10) || (x>=200) && (x<=210)
D)(x>=1)|| (x<=10) && (x>=200) || (x<=210)
2.判斷char型變數ch是否為大寫字母的正確表達式是()。
A)』A』<=ch<=』Z』 B) (ch>=』A』) & (ch<=』Z』)
C) (ch>=』A』) && (ch<=』Z』) D)(『A』<=ch) AND (『Z』>=ch)
3.請閱讀以下程序:
main()
{ int a=5, b=0, c=0;
if (a=b+c) printf(「***\n」);
else printf(「$$$\n」);
}
以上程序()。
A) 有語法錯誤不能通過編譯 B) 可以通過編譯但不能通過連接
C) 輸出*** D) 輸出$$$
4.當a=1,b=3,c=5,d=4時,執行完下面一段程序後x的值是()。
if (a<b)
if(c<d) x=1;
else
if (a<c)
if (b<d) x=2;
else x=3;
else x=6;
else x=7;
A) 1 B) 2 C) 3 D) 6
5.以下程序的輸出結果是()。
main()
{ int x=2, y=-1, z=2;
if (x<y)
if (y<0) z=0;
else z=z+1;
printf(「%d\n」, z);
}
A) 3 B) 2 C) 1 D) 0
6.若運行時給變數x輸入12,則以下程序的運行結果是()。
main()
{ int x, y;
scanf(「%d」, &x);
y=x>12?x+10:x-12;
printf(「%d\n」, y);
}
A) 0 B) 22 C) 12 D) 10

3.2 填空題
1.輸入一個字元,如果它是一個大寫字母,則把它變成小寫字母;如果它是一個小寫字母,則把它變成大寫字母;其它字元不變。請在橫線上填寫正確的內容。
main()
{ char ch;
scanf(「%c」, &ch);
if () ch=ch+32;
else if ( ch>=』a』 && ch<=』z』 ) ;
printf(「%c」, ch);
}
2.以下程序實現:輸入三個整數,按從大到小的順序進行輸出。請在橫線上填寫正確內容。
main()
{ int x, y, z, c;
scanf(「%d %d %d」, &x, &y, &z);
if ( )

if ( )

if ()

printf(「%d, %d,%d」, x, y, z);
}
3.以下程序的運行結果是。
main()
{ int a, b, c, d, x;
a=c=0; b=1; d=20;
if (a) d=d-10;
else if (!b)
if (!c) x=15;
else x=25;
printf(「%d\n」,d);
}
4.下面程序根據以下函數關系,對輸入的每個x值,計算出y值。請在橫線上填寫正確內容。
x y
2<x<=10 x(x+2)
-1<x<=2 2x
X<=-1 x-1
main()
{ int x, y;
scanf(「%d」, &x);
if () y=x*(x+2);
else if () y=2*x;
else if ( x<=-1 ) y=x-1;
else ;
if (y!=-1) printf(「%d」, y);
else printf(「error」);
}
5.設有程序片段:
switch (grade)
{ case 『A』 : printf(「 85-100\n」);
case 『B』 : printf(「 70-84\n」);
case 『C』 : printf(「 60-69\n」);
case 『D』 : printf(「<60\n」);
default : printf(「error!\n」);
}
若grade的值為』C』,則輸出結果是。
6.以下程序段的運行結果是。
int x=1, y=0;
switch (x)
{ case 1:
switch (y)
{ case 0 : printf(「**1**\n」); break;
case 1 : printf(「**2**\n」); break;
}
case 2: printf(「**3**\n」);
}

3.3 程序設計題
1.寫一程序,從鍵盤上輸入一年份year(為十進制數),判斷其是否為閏年。(閏年的條件是:能被4整除、但不能被100整除,或者能被400整除)

2.從鍵盤輸入x的值,求y的值並輸出。

3.從鍵盤輸入四個整數,輸出其中的最大者。

4.求任意二次方程的根。(包括虛根)

5.根據輸入的X值計算並輸出如下分段函數的值。

6.某百貨公司採用購物打折扣的方法來促銷商品,該公司根據輸入的購物金額,計算並輸出顧客實際付款金額,顧客一次性購物的折扣率是:
(1)少於500元不打折;
(2)500元以上且少於1000元者,按九五折優惠;
(3)1000元以上且少於2000元者,按九折優惠;
(4)2000元以上且少於3000元者,按八五折優惠;
(5)3000元以上者,按八折優惠。

7.根據輸入的三個邊長a,b,c,判斷它們能否構成三角形;若能構成三角形,繼續判斷該三角形是等邊、等腰還是一般三角形。

第四章 循環結構程序設計

4.1 選擇題
1.設有程序段
int k=10;
while (k=0) k= k—1;
則下面描述中正確的是()
A) while循環執行10次 B)循環是無限循環
C)循環體語句一次也不執行 D)循環體語句執行一次
2.下面程序的功能是計算:至50中是7的倍數的數值之和,請選擇填空。
#include <stdio.h>
main()
{int i,sum= 0;
for(i=1;i<=50;i++)
if( () ) sum+=i;
printf("%d",sum);
}
A) (int)(i/7)==i/7 B) (int)i/7==i/7
C) i%7= 0 D) i%7==0
3.下面程序段的運行結果是
a=1;b= 2;c=2;
while(a<b<c)
{
t= a;
a= b;
b=t;
c- -;
}
printf("%d,%d,%d",a,6,c);
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1
4.下面程序的功能是計算 1至10之間的奇數之和及偶數之和。請選擇填空
#include <stdio.h>
main()
{int a,b,c,i;
a=c=0;
for(i=0;i<=10;i+=2)
{ a+=i;
() ;
c+=b;
}
printf("偶數之和=%d\n",a);
printf("奇數之和=%d\n",c-11),
}
A)b=i-- B) b=i+1 C)b=i++ D)b=i-1
5.下面程序段:
for (t=1; t<=100;t++)
{
scanf("%d",&x);
if(x<0) continue;
printf("%3d",t);
}
A) 當x<0時整個循環結束
B) x>=0時什麼也不輸出
C) printf函數永遠也不執行
D)最多允許輸出100個非負整數
6.下面程序的運行結果是:
#include "stdio.h"
main()
{int i;
for(i=1;i<=5;i++)
{if (i%2) printf("*");
else continue;
printf("#");
}
printf("#");}
A) *#*#$ B) #*#*#*$ C) *#*#$ D)#*#*$
7.設有程序段
int k=10;
while(k=5) k=k-1;
則下面描述正確的是
A)while循環執行10次 B)是死循環
C)循環語句一次也不執行 D)循環體語句執行一次
8.以下程序運行後的輸出結果是________。
main()
{int x=15;
while(x>10&&x<50)
{x++;
if(x/3)
else continue;
}
printf("%d\n",x);
}

4.2 程序設計題
1.求1~1000內所有能被3整除的整數,所有數右對齊,每行輸出10個數,每屏輸出20行。
2.從鍵盤上接受10個數,求和。要求:
(1)、先提示「請輸入第1個數:」 ,輸入第一個數後再提示「請輸入第2個數」,依次類推;
(2)、輸入完十個數後,輸出十個數求和的結果。

3.求n! ,n的值從鍵盤輸入.

4.從鍵盤上輸入一個正整數(VC下少於10位,winTC下小於32767),求其各數位之和.
5.從鍵盤輸入10個數,找出其中最大的數。分別用while和for語句實現。
6.輸出2~100(不含100)之間的全部同構數。所謂同構數是指:如果某數與其右起若干位的平方數相等,則稱該數為同構數。

7.編寫輸出以下圖形的程序(要求行數從鍵盤輸入)。

1
12
123
1234
12345
123456
……
8.計算200以內的所有素數的和。

5.1 選擇題
1.以下對一維數組a的正確說明是( )
(A)int a(10);
(B)int n=10,a[n];
(C)int n; scanf(「%d」,&n); int a[n];
(D)#define SIZE 10
int a[SIZE];
2.對以下說明語句的正確理解是( )
int a[10]=;
(A)將5個初值依次賦給a[1]至a[5]
(B)將5個初值依次賦給a[0]至a[4]
(C)將5個初值依次賦給a[6]至a[10]
(D)因為數組長度與初值的個數不相同,所以此語句不正確
3.下面程序的運行結果是( )
char c[5]=; printf(「%s」,c);
(A)ab (B)abc (C)abc+亂碼 (D)ab\0c\0
4.對兩個數組a和b進行如下初始化
char a[]=」ABCDEF」;
char b[]=;
則以下敘述正確的是 ( )
(A)a與b數組完全相同 (B)a與b長度相同
(C)a和b中都存放字元串 (D)a數組比b數組的長度長
5.下面是對s的初始化,其中不正確的是( )
(A)char s[5]=; (B)char s[5]=;
(C)char s[5]=」」; (D)char s[5]=」abcdef」;
6.以下程序運行的結果是( )
char s[6];
s=」abcd」;
printf(「%s\n」,s);
(A)」abcd」 (B)abcd (C)abcd+亂碼 (D)編譯出錯
7.若有說明語句char u[]=」Microsoft」,則數組的大小是( )
(A)100 (B)80 (C)10 (D)9
8.以下不正確的定義語句是 ( )
(A)double y[5]=;
(B)int y[5]=;
(C)char c[]=;
(D)char c[]=;
9.當執行下面的程序時,如果輸入ABC,則輸出結果是( )
A) ABC6789 B) ABC67 C) 12345ABC6 D) ABC456789
#include "stdio.h"
#include "string.h"
main()
{ char ss[10]="1,2,3,4,5";
gets(ss); strcat(ss, "6789"); printf("%s\n",ss);
}
10.下列程序段的輸出結果是 。
main()
{ char b[]="Hello,you";
b[5]=0;
printf("%s \n", b );
}
11. 以下程序的輸出結果是( )
main()
{ int i, a[10];
for(i=9;i>=0;i--) a[i]=10-i;
printf("%d%d%d",a[2],a[5],a[8]);
}
A) 258 B) 741 C) 852 D) 369
12.在定義int a[10];之後,對a的引用正確的是( )。
A.a[10] B.a[6.3] C.a(6) D.a[10-10]

13.以下對一維數組a進行正確初始化的是( )。
A.int a[10]=(0,0,0,0,0); B.int a[10]={};
C.int a[]=; D.int a[10]=;

14.以下對字元數組word進行不正確初始化的是( )。
A.char word[]=』Trubo\0』;
B.char word[]=;
C.char word[]=;
D.char word[]=」Trubo\0」;
15.以下正確的定義語句是( )。
A.int A[『a』]; B.int A[3,4]; C.int A[][3]; D.int A[10];

16.以下給字元數組str定義和賦值正確的是( )。
A.char str[10]; str=;
B.char str[]=;
C.char str[10]; strcpy(str,「abcdefghijklmnop」);
D.char str[10]=;

17.在執行char str[10]=」China\0」; strlen(str)的結果是( )。
A.5 B.6 C.7 D.9

18.在執行char str[10]=」Ch\nina\0」; strlen(str)的結果是( )。
A.5 B.6 C.7 D.9

19.當接受用戶輸入的含空格的字元串時,應使用( )函數。
A.scanf() B.gets() C.getchar() D.getc()

20.當輸出含空格的字元串時,應使用( )函數。
A.printf() B.puts() C.putchar() D.putc()

5.2 填空題
1. 若有定義語句char c[10]=」hello」,s[]=」world」;,則字元數組c的長度為,字元數組c的長度為,字元串」hello」的長度是,字元串「world」的長度為_。
2. 字元串」hello,world!」的長度為,若有說明語句char s[]=」hello,world!」,則數組s的大小是。
3.以下程序執行時輸入Language Programming<回車>的結果是。
#include <stdio.h>
main( )
{
char str[30];
scanf(「%s」, str);
printf(「str=%s\n」, str);
}

4.以下程序執行時輸入Language Programming<回車>的結果是。
#include <stdio.h>
main( )
{
char str[30];
gets(str);
printf(「str=%s\n」, str);
}

5.以下程序的執行結果是。
#include <stdio.h>
main( )
{
int a[]=, i, j, s=0;
j=0;
for (i=3; i>=0; i--)
{
s=s+a[i]*j;
j=j*10;
}
printf(「s=%d\n」, s);
}

6.以下程序的執行結果是。
#include <stdio.h>
main( )
{
char str[]=;
int i;
for (i=0; str[i]!=』\0』; i++)
if (str[i]>=』0』 && str[i]<=』9』)
printf(「%c」, str[i]);
printf(「\n」);
}
5.3 程序設計題
1.從鍵盤輸入5個整數,保存到數組a中,先正序輸出再逆序輸出
2.從鍵盤輸入6個整數保存到數組中,求值最大的元素,將這個值最大的元素與數組的最後一個元素交換。最後輸出整個數組
3.從鍵盤輸入8個整數保存到數組中,運用選擇法按從大到小排序後輸出數組。
4.編程實現:從鍵盤輸入10個字元,存儲到字元型一維數組str中,再從鍵盤上輸入另一個字元ch,要求將str中出現的第一個ch字元刪除。將刪除ch後的數組str輸出到屏幕上。
5.編寫程序實現:將兩個字元串數組進行交換。
6.編程求兩個3×4 (3行4列)矩陣之和,然後輸出(矩陣元素的值從鍵盤輸入)
7.定義一個4行5列的二維整型數組,對其進行賦值,然後從該數組中選擇出一個最小數及該數的下標值(行和列的下標值都要記錄)。
另外,虛機團上產品團購,超級便宜

❻ C語言知識總結

c語言概要
第一章、 概述
1、 c語言的基本知識
1.1、 c語言的執行步驟
編輯-程序代碼的錄入,生成源程序*.c
編譯-語法分析查錯,翻譯生成目標程序*.obj
(語法或邏輯錯誤,從第一個開始改,變數定義,語句格式,表達式格式等)
鏈接-與其他目標程序或庫鏈接裝配,生成可執行程序*.exe
執行
1.2、 main函數的基本知識
main()函數的位置
c程序總是從main( )函數開始執行
一個c程序可以包含一個主函數,即main()函數;也可以包含一個main()函數和若干其它函數
1.3、 c程序的結構
函數與主函數
程序由一個或多個函數組成
必須有一個且只能有一個主函數main()
程序執行從main開始,在main中結束,其他函數通過嵌套調用得以執行
程序語句
C程序由語句組成
用「;」作為語句終止符
注釋
//

/* */ 為注釋,不能嵌套
不產生編譯代碼
1.4、c 程序書寫的規則
習慣用小寫字母,大小寫敏感
不使用行號,無程序行概念:通常一個語句佔一行
可使用空行和空格
常用鋸齒形的書寫格式;同一層次結構的語句上下對齊。
第二章、基本數據類型與運算
2.1、c程序的數據類型
注意類型和變數含義的不同(類型是固定好的名字,變數是自己起的名字)
變數佔用的存儲空間
數據類型
基本類型:整型、字元型、浮點型(單精度型,雙精度型)
構造類型:數組類型、結構體類型
指針類型
空類型
注意基本類型賦初值的方式
基本數據類型的表示形式
整形數據
十進制:以非0數字開頭,如:123,-9,0
八進制;以0數字開頭,如:0123,067
十六進制:以0x開頭,如:0x123,0xff
實型數據
十進制:必須帶小數點,如:123.0,-9.0
指數形式;如:1.23E3,0.9e-2,5e2
字元型數據
普通字元:如:』a』,』2』,』H』,』#』
轉義字元:如:』\n』,』\167』,』\xlf,』\\』
(實現幾列的對齊:指定寬度。如%100\ 『\t』製表位)
(字元串長度。「abc\n\t\\」 strlen 6; sizeof 7)
基本數據類型的存儲長度
整型
Int 位元組數 2 位數 16 數的表示範圍 -32768—32767
Short 2 16 -32768—32767
Long 4 32 -2147483648—2147483647
實型
Float 4 32 3.4e-38---3.4e38
Double 8 64 1.7e-308---1.7e308
字元型
Char 1 8 -128----127
2.2、標識符命名規則
C語言標志符命名規則
標識符有數字,字母,下劃線組成
標識符的首字元必須為字母和下劃線
標識符不能為c語言的保留字(關鍵字)
如:auto extern sizeof float static case for struct char goto switch continue in typedef const if union default long unsigned do register void double return else short while enum signed
算術運算符 + - * / %
關系運算符 > < == >= <= !=
邏輯運算符 ! && ||
位運算符 << >> ~ | ^ &
賦值運算符 = 及其擴展賦值運算符
條件運算符 ? :
逗號運算符 ,
指針運算符 * &
求位元組數運算符 sizeof
強制類型轉換運算符 (類型)
分量運算符 . ->
下標運算符 [ ]
其他 如函數調用運算符()
運算符的優先順序
由高到低:單目運算符,算數運算符,關系運算符,賦值運算符
說明:單目運算符:自增運算符,自減運算符,類型裝換運算符。結合方向:自右至左
如:++--I 先—i.。
算術運算 結合方向自左至右
2.3基本運算和表達式
關系表達式和邏輯表達式
(a>b)&&(x>y) (a==b)||(x==y) !=a||(a>b)
A&&b.a為0.不執行b
A||b a為1.不執行b
在 c 中邏輯運算結果:1代表「真」,0代表「假」;
判斷一個表達式是否真:0代表「假」,非0代表「真」
條件表達式 逗號表達式
如:k=5,k++
逗號值為5;k為6.
表達式1?表達式2 :表達式3
K=5>6 ? 1 : 0
2.4、混合運算的數據類型轉換
2/3+0.5 雙精度浮點型
第三章、順序結構程序設計
3.1、c語句的分類
簡單語句
表達式語句 表達式+分號
空語句 只有分號的語句
復合語句 用花括弧將若干語句括起來
流程式控制制語句
選擇語句 if ,switch
循環語句 while, do while , for
轉移語句 break ,continue ,return goto
3.2、格式輸入函數scanf
一般形式:scanf(「格式控制字元串「,地址列表);
使用scanf函數時,需要注意:
格式字元的個數必須與輸入項的個數相同,數據類型必須一一對應,非格式字元串(說明性的)要原封不動的輸入。
輸入實行數據時,可以不帶小數點,即按整型數據輸入
數值型數據與字元或字元串混合輸入時,需要注意輸入方式。
3.3、格式輸出函數printf
Printf(「格式控制字元串「,輸出列表);
指定輸出格式,由格式字元串和非格式字元串兩種組成,非格式字元串照原樣輸出。
%[標志][輸出最小寬度][.精度][長度]類型
標志:- 左對齊;+ 右對齊;
%f, %d, %c, %s
3.4、其他輸入輸出函數
Putchar getchar puts gets
第四章、選擇結構程序設計
If選擇結構
單分支
If(表達式)
語句
雙分支
If(表達式)
語句1
Else
語句2
多分支
If (表達式1)
語句1
Else if(表達式2)
語句2
。。。
Else if(表達式m)
語句m
Else
語句n
Switch(表達式)
{
Case 常量表達式1:語句1;break;
Case 常量表達式2:語句2;break;
。。。
Case 常量表達式m:語句m;break;
Default:語句n;break;
}
注意break的使用
第五章、循環結構程序設計
循環三要素
初始條件 ;終止條件 ;在初始條件和終止條件間反復做某件事情(循環體)
While(表達式)
語句

Do
語句
While(表達式);

For(循環體變數賦初值;循環條件;循環變數增量)
( for( ) ; // ; 進行時間延遲。在信息交換等時用。如for(i=0,i<100) ; 互相通訊的時間延遲。 Delay )
Break語句 :不能用於循環語句和switch語句之外的任何其他語句;跳出循環。
Continue語句 :跳過循環體中剩餘的語句而強行執行下一次循環;跳出本次循環。
第六章、函數與編譯預處理
6.1、函數的定義和調用
類型標識符 函數名 (形式參數列表)
{ 聲明部分
語句
}
例:
Int max (int x,int y)
{int z;<br>Z=x>y?x:y;<br>Return(z);}
6.2、局部變數和全局變數
注意函數中靜態變數的定義和使用
6.3、變數的存儲類型
局部變數的存儲類型
自動變數(auto) 動態存儲
局部靜態變數(static) 靜態存儲
寄存器變數(register) 靜態存儲
全局變數的存儲類型
自動變數(auto) 動態存儲
外部變數 (extern) 靜態存儲
全局靜態變數(static )靜態存儲
Extern 外部引用
Static 不能用extern 引用。
第七章、數組
7.1、一維數組的定義和使用
特別需要注意循環體的初值,終止條件
例:
Main()
{
Int I,a[10];
For(i=0;i<=9;i++)
A=I;
For(i=9;i>=0;i--)
Printf(「%d」,a);
}
注意下標問題
7.2、二維數組的定義和使用
二維數組的初始化
例如:
Int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={{1,2,3,4},{5},{9,10,11,12}};
例如:int a[3][3]={{1},{2},{3}};
是對每一行的第一列元素賦值,未賦值的元素取0
7.3、字元數組和 字元串
字元串用字元數組來處理,結束標志符 『\0』
如:char c[ ]={「I am happy」};
用字元串常量使字元數組初值化
Char c[ ]={『I』,』 『,』a』,』m』,』 『,』h』,』a』,』p』,』p』,』y』,』\0』};
第八章、指針
8.1、地址和指針的概念
Int I;
Int *i_point;
8.2、指針變數和變數的地址
操作符:* &
8.3、指針和一維數組
若有定義
Int a[10];
Int *p=a;
分析下面表達式的含義:
A, &a,
*(a+i), a+I,
*(p+i), p+i
A=*(a+i)=*(P+i)
&a=a+i=p+i
8.4、指針與字元串
Main()
{
Char string[ ]=」I love china!」;
Printf(「%s\n」,string);
}
Main()
{ char *string=」I love china!」;
Printf(「%s\n」,string);
}
8.5、指針變數作為函數參數
形參的定義方式;實參的形式;參數的傳遞方式。
第九章、結構體
9.1、結構體類型和變數的定義
Struct 結構體名
{成員列表};
Struct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};

Stuct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};
Struct student stu1, stu2;
9.2、結構體變數的引用
一般形式為:
結構體變數名.成員名
9.3、結構體數組
結構體數組 結構體數組元素.成員名
指向結構體的指針變數
(*p).成員名
p->成員名
其他
Strcpy(字元數組1,字元串2)
Strcat(字元數組1,字元數組2)
Strcmp(字元串1,字元串2)
Strlen(字元數組)

❼ C語言入門知識

char a[20],b[20],c[20];上面的a,b,c都是數組變數,在定義時已經為其分配棧內存,而char (*str1)[20],(*str2)[20],(*str3)[20]; 只是分配了4個位元組的內存來保存指針變數(即變數本身),而指針的值(即指向)還沒有,所以這些指針還不能保存數據!--------------char (*str1)[20],(*str2)[20],(*str3)[20]; str1 str2 str3均為指針,都指向長度為20的char數組.你只定義了指針,但是沒有對其進

❽ C語言程序設計這門課程第一章C語言編程基礎(初級)的知識點有哪些

C語言程序設計這門課第一章C語言編程基礎(初級)的知識點包含【初級】第1講-C程序的結構,【初級】第2講-運算符,【初級】第3講-創建和調用函數,【初級】第4講-輸入輸出函數,【初級】第5講-整型變數,【初級】第6講-浮點型變數,【初級】第7講-字元型變數,【初級】第8講-類型轉換,【初級】第9講-常量,。

❾ 求c語言基礎知識

如何學好c語言
教了多年《C程序設計》課程,大多學生覺的這門課程難學。其實,按照我們現在的教學大綱和教學要求,只要同學們掌握一些方法,克服心理上畏難、不輕言放棄,是完全可以學好的。
《C程序設計》的內容很豐富,按照我們現在的教學大綱,教學的主要內容是基礎知識、四種結構的的程序設計、函數與數組的應用和一些簡單的演算法。在學習時,同學們應該把主要精力放在這些部分,通過實踐(練習和上機調試等熟練掌握。當然,在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數學學習中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完後面的章節知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學最欠缺,大多學不好的就是因為一開始遇到困難就放棄,曾經和好多同學談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎麼說自己聽不懂呢?相應的根本就沒學習,又談何學的好?
學習C語言始終要記住「曙光在前頭」和「千金難買回頭看」,「千金難買回頭看」是學習知識的重要方法,就是說,學習後面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學生最不易做到的,然而卻又是最重要的。比如:在C語言中最典型的是關於結構化程序設計構思,不管是那種教材,一開始就強調這種方法,這時也許你不能充分體會,但是學到函數時,再回頭來仔細體會,溫故知新,理解它就沒有那麼難了。學習C語言就是要經過幾個反復,才能前後貫穿,積累應該掌握的C知識。
那麼,我們如何學好《C程序設計》呢?
一.學好C語言的運算符和運算順序
這是學好《C程序設計》的基礎,C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之後,記住這些運算也就不困難了,有些運算符在理解後更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。
先要明確運算符按優先順序不同分類,《C程序設計》運算符可分為15種優先順序,從高到低,優先順序為1 ~ 15,除第2、3級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序。下面我們通過幾個例子來說明:
(1) 5*8/4%10 這個表達式中出現3種運算符,是同級運算符,運算順序按從左至右結合,因此先計算5 *8=40,然後被4除,結果為10,最後是%(求余數)運算,所以表達式的最終結果為10%10 = 0;
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
對於c=++a*b來說,按表中所列順序,+ +先執行,*後執行,所以+ + a執行後,a的值為4,由於+ +為前置運算,所以a的值4參與運算,C的值計算式為4*5=20而不是3*5=15了;而對於d=a++*b來說,由於a + +為後置運算,所以a值為4參與運算,使得d的值仍為20,而a參與運算後其值加1,值為5。 這個例子執行後,a的值為5,b的值為5,c的值為20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b* 5)
例子中的「,」是逗號結合運算,上式稱為逗號表達式,自左向右結合,最後一個表達式的結果值就是逗號表達式的結果,所以上面的逗號表達式結果為40,a的值為3,b的值為8,c的值為40。
(4)a=5;b=6;c=a>b?a:b;
例中的a>b?a:b是一個三目運算,它的功能是先做關系運算a>b部分,若結果為真,則取問號後a的值,否則取冒號後b的值,因此c的值應該為6,這個運算可以用來代替if…else…語句的簡單應用。
二.學好C語言的四種程序結構
(1)順序結構
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
例如;a = 3,b = 5,現交換a,b的值,這個問題就好象交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為: c = a; a = b; b = c; 執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b = c; 則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。 順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。
(2) 分支結構
順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。分支結構適合於帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。
學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的功能,嵌套結構也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結構。
①if(條件)
{
分支體
}
這種分支結構中的分支體可以是一條語句,此時「{ }」可以省略,也可以是多條語句即復合語句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0) x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若干條語句構成。如:求ax^2+bx+c=0的根
分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個共軛復根。其程序段如下:

d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(「x1=%8.4f,x2=%8.4f\n」,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(「x1=%8.4f+%8.4fi\n」r, i);
printf(「x2=%8.4f-%8.4fi\n」r,i)
}
③嵌套分支語句:其語句格式為:
if(條件1) {分支1};
else if(條件2) {分支2}
else if(條件3) {分支3}
……
else if(條件n) {分支n}
else {分支n+1}
嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套後,語句結構變得非常復雜,對於程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用下面的語句。
④switch開關語句:該語句也是多分支選擇語句,到底執行哪一塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else 語句,它的所有分支都是並列的,程序執行時,由第一分支開始查找,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。這個語句在應用時要特別注意開關條件的合理設置以及break語句的合理應用。
(3)循環結構:
循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do –while循環和for循環。四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,在學習中我們主要學習while、do…while、for三種循環。常用的三種循環結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環的格式和執行順序,將每種循環的流程圖理解透徹後就會明白如何替換使用,如把while循環的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。特別要注意在循環體內應包含趨於結束的語句(即循環變數值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。
在學完這三個循環後,應明確它們的異同點:用while和do…while循環時,循環變數的初始化的操作應在循環體之前,而for循環一般在語句1中進行的;while 循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行一次,而while 循環和for就可能一次都不執行。另外還要注意的是這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與if構成的循環,是不能用break和 continue語句進行控制的。
順序結構、分支結構和循環結構並不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現各種演算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。
(4)模塊化程序結構
C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。 因些,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。
三.掌握一些簡單的演算法
編程其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的編程語言寫出代碼。這就要求掌握演算法,根據我們的《C程序設計》教學大綱中,只要求我們掌握一些簡單的演算法,在掌握這些基本演算法後,要完成對問題的分析就容易了。如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些演算法的內在含義,其中選擇法排序和冒泡法排序稍難,但只要明白排序的具體過程,對代碼的理解就不難了。如用選擇法對10個不同整數排序(從小到大),選擇法排序思路:設有10個元素a[1]~a[10],將a[1]與a[2]~a[10]比較,若a[1]比a[2]~a[10]都小,則不進行交換,即無任何操作;若a[2]~a[10] 中有一個比a[1]小,則將其中最大的一個(假設為a[i])與a[1]交換,此時a[1]中存放了10個中最小的數。第二輪將a[2]與a[3]~a[10]比較,將剩下9個數中的最小者a[i]與a[2]交換,此時a[2] 中存放的10個數中第2小的數;依此類推,共進行9輪比較,a[1]到a[10]就已按從小到大的順序存放。即每一輪都找出剩下數中的最小一個,代碼如下:
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a[i]>a[j]
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
結語:當我們把握好上述幾方面後,只要同學們能克服畏難、厭學、上課能專心聽講,做好練習與上機調試,其實C語言並不難學。