c語言課程複習資料一,c語言百度題庫

本文目錄一覽:

求專升本C語言複習資料

好好把c語言語法看懂,主要是多練,搞幾個題目練練,寫寫程序,就好了

誰有C語言的複習資料。。。我明天要考試啊。。。幫忙吶。。。

填空:

1.一個C程序的執行是從( A )

A 本程序的main函數開始,到main函數結束

B 本程序的第一個函數開始,到本程序文件的最後一個函數結束

C 本程序的main函數開始,到本程序文件的最後一個函數結束

D 本程序的第一個函數開始,到本程序main函數結束

2.以下能正確地定義整型變數a,b B int a和c並為其賦初值5的語句是( A )

A int a=5, b=5, B.c=5;,b,c=5; C a=5,b=5,c=5; D a=b=c=5;

3.為了避免在嵌套的條件語句if-else中產生二義性,C語言規定else子句總是與( B )配對。

A 縮排位置相同的if B 其之前最近的if

C 其之後最近的if D 同一行上的if

4.以下正確的描述是:( C )

A while、do-while、for循環中的循環體語句都至少被執行一次(有時while循環一次也不執行)

B do-while循環中,while(表達式)後面的分號可以省略(while循環中分號可以省略,do-while循環不能省略)

C while循環體中,一定要有能使while後面表達式的值變為「假」的操作

D do-while循環中,根據情況可以省略while

5.C語言規定,簡單變數作為實參時,它和對應形參之間的數據傳遞方式是( D )。

A 地址傳遞 B 由用戶指定傳遞方式

C 由實參傳給形參,再由形參傳回給實參 D 單向值傳遞(實參傳給形參)

6.凡是函數中未指定存儲類別的局部變數,其隱含的存儲類別為( A )。

A 自動(auto) B 靜態(static)

C 外部(extern) D 寄存器(register)

7.以下關於宏的敘述中正確的是( C )。

A 宏名必須用大寫字母表示 B 宏替換時要進行語法檢查

C 宏替換不佔用運行時間 D 宏定義中不允許引用已有的宏名

8.說明一個結構體變數時,系統分配給它的內存是( A )

A 各成員所需內存量的總和 B結構中第一個成員所需內存量

C 成員中占內存量最大都所需的容量 D結構中最後一個成員所需內存量

9.表達式0x130x17的值是( B )(這兩個十六進位數先化為十進位,再化為二進位,進行運算,再將二進位結果化為十進位,再化為十六進位)

A 0x17 B 0x13 C 0x f8 D 0xec

10.若要用fopen函數打開一個新的二進位文件,該文件既要能讀也要能寫,則文件方式字元串應是( B )

A “ab+” B “wb+” C “rb+” D “ab”

11.以下敘述中正確的是 ( C )

A C語言比其他語言高級

B C語言可以不用編譯就能被計算機識別執行

C C語言以接近英語國家的自然語言和數學語言作為語言的表達形式

D C語言出現得最晚,具有其他語言的一切優點

12.定義:int a=8,b=5,c;,執行語句c=a/b+0.4;後,c的值為( B )

A 1.4 B 1 C 2.0 D 2

13.以下非法的賦值語句是( C )

A. n=(i=2,++i); B. j++; C. ++(j+1); D. x=j0;

14.以下不能正確定義二維數組的選項是( D )

A. int a[2][2]={{1},{2}};

B. int a[][2]={1,2,3,4};

C. int a[2][2]={{1},{2,3}};

D. int a[][]={{1,2},{3,4}};

15.若有說明語句:int a,b,c,*d=c;,則能正確從鍵盤讀入3個整數分別賦給變數a、b、c的語句是( A )

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);

16.以下程序段中,b的值是( B )

int a[10]={1,2,3,4,5,6,7,8,9,10},*p,b;

p=a[0]; b=p[5];

A. 5 B. 6 C. 8 D. 9

17.以下哪一個表達式取值是正確的?( D )

A.65結果為6 B.6&&5結果為7

C.6||5結果為7 D.65結果為0

18.下列C語言標識符不合法的是: ( C )(C語言的標識符第一個字元必須為字母或下劃線)

A. PERFECT B. perfectname

C. 8_number D. _number1

19.有以下程序結果 ( C )

main( )

{ int x=102,y=012;

printf(「%2d,%2d\n」,x,y);}(012是八進位,轉化為十進位是10)

A. 10,01 B. 02,12

C. 102,10 D. 02,10

20.設有如下程序

char str[]=」hello」;

char *ptr;

ptr=str;

執行完上面的程序段後,*(ptr+5)的值為 ( B )

A. 『0』 B. 『\0』

C.不確定的值 D. 『0』的地址

21.C語言中,定義PI為一個符號常量,正確的是 ( A )

A.#define PI 3.14 B.define PI 3.14

C.#include PI 3.14 D.include PI 3.14

22.關於c表達式5||(a=b+c)==3的值,正確的說法為( A )

A.值為1 B.值為5 C.值為0 D.3

填空

1.若有定義語句:int x=3,y=2;float a=2.5,b=3.5;

則表達式(x+y)%2+(int)a/(int)b 的值為( 1 )。

2.設a、b、c均為int型變數且a=6,b=4,c=2,

則表達式 !(a-b)+c-1b+c/2的值是( 1 )。

3.若有定義:int a[3][4]={{1,2},{0},{4,6,8,10}};則初始化後,a[1][2]得到的初值是( 0 )。

4.從函數的形式看,函數分( 無參函數 )和( 有參函數 )兩類。

5.結構化程序由( 順序程序 )、( 選擇程序 )和( 循環 )。

6.在C語言中,作為雙目運算符時表示的是( 按位與運算符 ),而作為單目運算符時表示的是( 取地址運算符 )。

7.static對局部變數來說,它使變數由( 動態 )存儲方式改變為( 靜態 )存儲方式。

8.C語言的標識符只能有三種字元組成,它們是( 字母 )、( 數字 )和( 下劃線 )。

9.給以下程序輸入2個數值給a,b變數,b中的值給a,變數a中的值給b,實現a,b交換,輸出a,b的值。

#include stdio.h

main()

{int a,b,__t___;

printf(“enter a,b,”);scanf(“%d%d”,a,b);

____t=a____; __a=b____;_ b=t ;

printf(“%d%d”,a,b);

}

10.設int a[2][3]={{5},{6}};則數組元素( a[0][0] )的值為5。

11.若定義結構體變數

struct student

{ int num;

char name[10];

int age;

}student1;

則結構體變數student1在內存中占 14 位元組。

讀程序寫結果

1.寫出下列程序的執行結果。

#include stdio.h

void main( )

{

int i, j, m, n;

i=6; j=9;

m=++i; n=j++;

printf(「%d,%d,%d,%d\n」, i, j, m, n);

} 71079

2.寫出下列表達式的值:

(1) x+a%3*(int)(x+y)%2/4 設x=5.2,a=7, y=7.4

=5.2+7%3*(int)(5.2+7.4)%2/4

=5.2+1*12%2/4

=5.2

(2) (float)(a+b)/2+(int)x%(int)y 設a=2, b=3, x=5.3, y=5.2

=(float)(2+3)/2+(int)5.3%(int)5.2

=2.5+5%5

=2.5

3.寫出下列程序的執行結果。

#include stdio.h

void main( )

{

int x=2, y=-1, z=2;

if(xy)

if(y0) z=0;

else z+=1;

printf(「z=%d\n」, z);

} z=2

4.寫出下列語句的執行結果。

#include stdio.h

void main( )

{

int i;

for(i=1; i=5; i++)

switch(i%5)

{

case 0: printf(“*”); break;

case 1: printf(“#”); break;

default: printf(“\n”);

case 2: printf(“”);

}

}

#

*

5.寫出下列語句的執行結果。

#include stdio.h

void main( )

{

int a[6][6], i, j;

for(i=1; i6; i++)

for(j=1; j6; j++)

a[i][j]=(i/j)*(j/i);

for(i=1; i6; i++)

{ for(j=1; j6; j++)

printf(「%2d」,a[i][j]);

printf(「\n」);

}

}

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

6.寫出下列程序的執行結果。

#include stdio.h

void main( )

{

char a[ ]=”morning”, t;

int i, j=0;

for(i=1; i7; i++)

if(a[j]a[i]) j=i;

t=a[j]; a[j]=a[7]; a[7]=a[j];

puts(a);

}

mo

7.寫出下列語句的執行結果。

#include stdio.h

#define MAX 10

int a[MAX], i;

void sub1( )

{ for(i=0; iMAX; i++) a[i]=i+i; }

void sub2( )

{ int a[MAX], i, max;

max =5;

for(i=0; imax; i++) a[i]=i;

}

void sub3(int a[])

{ int i;

for(i=0; iMAX; i++) printf(“%d,”, a[i]);

printf(“\n”);

}

void main( )

{ printf(“\n”); sub1( ); sub3(a); sub2( ); sub3(a); }

空一行

0,2,4,6,8,10,12,14,16,18,

0,2,4,6,8,10,12,14,16,18,

8.寫出下列語句的執行結果。

#include stdio.h

void main( )

{ int a=2, i;

for(i=0; i3; i++) printf(「%4d」, f(a));

}

f(int a)

{ int b=0; static int c=3;

b++; c++;

return (a+b+c);

}

9.寫出下列程序的執行結果。

#include stdio.h

void swap(int *pt1, int *pt2)

{ int temp;

temp=*pt1; *pt1=*pt2; *pt2=temp;

}

void exchange(int *q1, int *q2, int *q3)

{ if(*q1*q2) swap(q1, q2); //if(ab) a b zuojiaohuan

if(*q1*q3) swap(q1, q3); //ac

if(*q2*q3) swap(q2, q3); //bc —-

}

void main( )

{

int a=5, b=7, c=9, *p1, *p2, *p3;

p1=a; p2=b; p3=c;

exchange(p1, p2, p3);

printf(「\n%d,%d,%d\n」, a, b, c);

}

空一行

9,7,5

10.寫出下列程序的執行結果。

#include stdio.h

int *p;

void pp(int a, int *b)

{ int c=4;

*p=*b+c;

a=*p-c;

printf(「(2):%d,%d,%d\n」, a, *b, *p);

}

void main( )

{ int a=1, b=2, c=3;

p=b; pp(a+c, b);

printf(「(1):%d,%d,%d\n」, a, b, *p);

}

(1):2,6,6

(2):1,6,6

11.以下程序的輸出結果是:( 2 )

main( )

{ int a=2,b=-1,c=2;

if(ab)

if(b0) c=0;

else c+=1;

printf(「%d\n」,c);

}

12.有以下程序輸出結果是: 6

main( )

{ int a=5,b=4,c=6,d;

printf( 「%d\n」, d=ab ? (ac ? a:c):(b));

}

13.有以下程序執行後的結果是 25

main()

{ int i, s=0;

for (i=0;i10;i+=2)

s+=i+1;

printf (「%d\n」,s);

}

14.執行以下程序後,輸出的是( ###### )

main( )

{ int i, j;

for( i=1;i3;i++)

for (j=2;j=4; j++)

printf (「#」);

}

15.有以下程序,執行結果為: 24

main( )

{

int p[7]={11,13,14,15,16,17,18},i=0,k=0;

while(i7 p[i]%2) {k=k+p[i];i++;}

printf(「%d\n」,k);

}

16.有以下程序的輸出結果是: 543

void f(int x, int y)

{ int t;

if (xy) { t=x; x=y; y=t;}

}

main()

{ int a=4,b=3,c=5;

f(a,b); f(a,c); f(b,c);

printf(「%d,%d,%d\n」,a,b,c);

}

17.有以下程序執行後的輸出結果是 3 6 9

main()

{ int m[][3]={1,4,7,2,5,8,3,6,9};

int i,k=2;

for(i=0;i3;i++)

{ printf(「%d 」,m[k][i]);}

}

18.有以下程序執行後的輸出結果是 8,7,7,8

main( )

{ int a=7,b=8,*p,*q,*r;

p=a; q=b;

r=p; p=q; q=r;

printf(「%d,%d,%d\n」,*p,*q,a,b);

}

19.以下程序的輸出結果是

int m=13;

int fun2(int x,int y)

{ int n=3;

return(x*y-n);

}

main( )

{ int a=7,b=5;

printf(「%d\n」,fun2(a,b)/m);

}

2

20.有以下程序,執行結果為:

main( )

{ int a=2,b=3,*P;

P=a; b= *P+4;

printf(「%d\n」,b);

*P=4;

printf(「%d,%d\n」,a, *P);

}

6

4,4

21.以下程序的輸出結果

main( )

{ int i=1,j=3;

printf(「%d,」,i++);

{ int i=0;

i+=j*2;

printf(「%d,%d,」,i,j);

}

printf(「%d,%d\n」,i,j);

}

1,6,3,2,3

編程題

1. 從鍵盤輸入12個整數,用起泡法對這12個整數進行由小到大的排序。(課本134頁)

2. 有一分數序列如下,求出這個數列的前40項之和。(課本129頁)

2/1,3/2,5/3,8/5,13/8,21/13,……

3. 從鍵盤輸入10個整數保存在一個一維數組中,利用指針編寫程序,將該數組中的10個整數按相反順序存放。(課本237頁)

4. 有一個4×5的矩陣如下,求所有元素中的最大值、最小值及其相應的下標。(課本139頁)

5. 用弦截法求方程f(x)=3×3+2×2-5x-6的根(課本168頁)

6. 用π/4≈1-1/3+1/5-1/7+∙∙∙公式求π的近似值,直到某一項的絕對值小於10-7為止。(課本124頁)

7. 利用指針編寫程序,將數組a中n個整數按相反順序存放。(同上例3)

8. 通過循環按行順序為一個5X5的二維數組a賦1~25的自然數,然後輸出該數組的左下三角

編程題答案

(1)

#includestdio.h

void main()

{

int a[12];

int i,j,t;

printf(「input 12 numbers:\n」);

for(i=0;i12;i++)

scanf(「%d」,a[i]);

printf(「\n」);

for(j=0;j11;j++)

for(i=0;i11-j;i++)

if(a[i]a[i+1])

{

t=a[i];

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

a[i+1]=t;

}

printf(「the sorted numbers :\n」);

for(i=0;i12;i++)

printf(「%d」,a[i]);

printf(「\n」);

}

(2)

#includestdio.h

void main()

{

int i,t,n=40;

float a=2,b=1,s=0;

for(i=1;i=n;i++)

{

s=s+a/b;

t=a;

a=a+b;

b=t;

}

printf(「sum=%9.6f\n」,s);

}

(3)

#includestdio.h

void main()

{

void inv(int x[],int n);

int i,a[10]={3,7,9,11,0,6,7,5,4,2};

prinf(「the oringal array:\n」);

for(i=0;i10;i++)

printf(「%d」,a[i]);

printf(「\n」);

inv(a,10);

printf(「the array has been inverted:\n」);

for(i=0;i=10;i++)

printf(「%d」,a[i]);

printf(「\n」);

}

void inv(int x[],int n)

{

int temp,i,j,m=(n-1)/2;

for(i=0;i=10;i++)

{

j=n-1-i;

temp=x[i];

x[i]=x[j];

x[j]=temp;

}

return;

}

(4)

#includestdio.h

void main()

{

int i,j,row=0,colum=0,max;

int a[4][5]={{1,3,5,7,9},{2,4,6,8,10},{-5,-4,-3,-2,-1},{15,17,19,21,0}};

max=a[0][0];

for(i=0;i=2;i++)

for(j=0;j=3;j++)

if(a[i][j]max)

{

max=a[i][j];

row=i;

colum=j;

}

printf(「max=%d,row=%d,colum=%d\n」,max,row,colum);

}

(5)

#includestdio.h

#includemath.h

float f(float x)

{

float y;

y=((x+2/3)*x-5/3)*x-2.0;

return(y);

}

float xpoint(float x1,floatx2)

{

float y;

y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); (此程序運行無錯誤,有兩警告)

return(y);

}

float root(float x1.float x2)

{

float x,y,y1;

y1=f(x1);

do

{

x=xpoint(x1,x2);

y=f(x);

If(y*y10)

{

y1=y;

x1=x;

}

else

x2=x;

}

while(fabs(y)=0.0001);

return(x);

}

void main()

{

float x1,x2,f1,f2,x;

do

{

printf(「input x1,x2:\n」);

scanf(「%f,%f」,x1,x2);

f1=f(x1);

f2=f(x2);

}

while(f1*f2=0);

x=root(x1,x2);

printf(「A root of equation is%8.4\n」,x);

}

(6)

#includestdio.h

#includemath.h

void main()

{

int s;

float n,t,pi;

t=1;

pi=0;

n=1.0;

s=1;

while(fabs(t)1e-6)

{

pi=pi+t;

n=n+2;

s=-s;

t=s/n;

}

pi=pi*4;

printf(「pi=%10.6f\n」,pi);

}

c語言複習題

對樓上的回答做下錯誤改正:

3.d(putchar只能輸出字元不能輸出字元串,puts才是輸出字元串)

8.d(前後都滿足相當於並||前後只要一個滿足結果為1即為真)

12.a(表達式為真即為「1」循環繼續,表達式為假即「0」是結束循環,或者在 真的情況下用break;跳出循環)

16.d(括弧中的類型表示強制轉型為該類型,如(int)3.2參考19題)

19.d(這個題我學c的時候就沒搞懂反正vc6.0++中運行就是這個答案)

20.b(a中先算括弧中a=3,此時a為常數,常數不能再次賦給常數a了,c中%運算符前後必須為整型,d中強制轉換錯誤)

如果對你有幫助的話請給分謝謝……

C語言複習資料!

總體上必須清楚的:

1)程序結構是三種: 順序結構 , 循環結構(三個循環結構), 選擇結構(if 和 switch)

2)讀程序都要從main()入口, 然後從最上面順序往下讀(碰到循環做循環,碰到選擇做選擇)。

3)計算機的數據在電腦中保存是以 二進位的形式. 數據存放的位置就是 他的地址.

4)bit是位 是指為0 或者1。 byte 是指位元組, 一個位元組 = 八個位.

5)一定要記住 二進位 如何劃成 十進位。

概念常考到的:

1、編譯預處理不是C語言的一部分,不再運行時間。C語言編譯的程序稱為源程序,它以ASCII數值存放在文本文件中。

2、每個C語言程序中main函數是有且只有一個。

3、在函數中不可以再定義函數。

4、演算法的是一定要有輸出的,他可以沒有輸入。

5、break可用於循環結構和switch語句。

6、逗號運算符的級別最低。

第一章

1)合法的用戶標識符考查:

合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。

並且第一個必須為字母或則是下劃線。第一個為數字就錯了。

關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If是可以做為用戶標識符。因為If中的第一個字母大寫了,所以不是關鍵字。

2)實型數據的合法形式:

2.333e-1 就是合法的,且數據是2.333×10-1。

考試口訣:e前e後必有數,e後必為整數。.

3)字元數據的合法形式::

‘1’ 是字元佔一個位元組,”1″是字元串佔兩個位元組(含有一個結束符號)。

‘0’ 的ASCII數值表示為48,’a’ 的ASCII數值是97,’A’的ASCII數值是65。

4) 整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組:

考試時候一般會說,在16位編譯系統,或者是32位系統。碰到這種情況,不要去管,一樣做題。掌握整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組就可以了。

5)轉義字元的考查:

在程序中 int a = 0x6d,是把一個十六進位的數給變數a 注意這裡的0x必須存在。

在程序中 int a = 06d, 是一個八進位的形式。

在轉義字元中,』\x6d』 才是合法的,0不能寫,並且x是小寫。

『\141』 是合法的, 0是不能寫的。

『\108』是非法的,因為不可以出現8。

6)算術運算符號的優先順序別:

同級別的有的是從左到右,有的是從右到左。

7)強制類型轉換:

一定是 (int)a 不是 int(a),注意類型上一定有括弧的。

注意(int)(a+b)和(int)a+b 的區別。 前是把a+b轉型,後是把a轉型再加b。

8)表達式的考查:

是表達式就一定有數值。

賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。

自加、自減表達式:假設a=5,++a(是為6), a++(為5);

運行的機理:++a 是先把變數的數值加上1,然後把得到的數值放到變數a中,然後再用這

個++a表達式的數值為6,而a++是先用該表達式的數值為5,然後再把a的數值加上1為6,

再放到變數a中。 進行了++a和a++後在下面的程序中再用到a的話都是變數a中的6了。

考試口訣:++在前先加後用,++在後先用後加。

逗號表達式:優先順序別最低 ;表達式的數值逗號最右邊的那個表達式的數值。

(2,3,4)的表達式的數值就是4。

9)位運算的考查:

會有一到二題考試題目。

總的處理方法:幾乎所有的位運算的題目都要按這個流程來處理(先把十進位變成二進位再變成十進位)。

例1: char a = 6, b;

b = a2; 這種題目的計算是先要把a的十進位6化成二進位,再做位運算。

例2: 一定要記住,

例3: 在沒有捨去數據的時候,左移一位表示乘以2;右移一位表示除以2。

10)018的數值是非法的,八進位是沒有8的,逢8進1。

11)%符號兩邊要求是整數。不是整數就錯了。

12) 三種取整丟小數的情況:

1、int a =1.6;

2、(int)a;

3、

第二章

1)printf函數的格式考查:

%d對應整型;%c對應字元;%f對應單精度等等。寬度的,左對齊等修飾。

%ld對應 long int;%lf 對應double。

2)scanf函數的格式考察:

注意該函數的第二個部分是a 這樣的地址,不是a;

Scanf(「%d%d%*d%d」,a,b,c); 跳過輸入的第三個數據。

3)putchar ,getchar 函數的考查:

char a = getchar() 是沒有參數的,從鍵盤得到你輸入的一個字元給變數a。

putchar(『y』)把字元y輸出到屏幕中。

4)如何實現兩個變數x ,y中數值的互換(要求背下來)

不可以把 x=y ,y=x; 要用中間變數 t=x;x=y;y=t。

5)如何實現保留三位小數,第四位四捨五入的程序,(要求背下來)

這個有推廣的意義,注意 x = (int)x 這樣是把小數部分去掉。

第三章

特別要注意:c語言中是用非0表示邏輯真的,用0表示邏輯假的。

1)關係表達式:

表達式的數值只能為1(表示為真),或0(表示假)

當關係的表達是為真的時候得到1。如 98這個是真的,所以表達式的數值就是1;

2)邏輯表達式:

只能為1(表示為真),或0(表示假)

a) 共有 || ! 三種邏輯運算符號。

b) !|| 優先的級別。

c) 注意短路現象。考試比較喜歡考到。

d) 要表示 x 是比0大,比10小的方法。0x10是不可以的(一定記住)。是先計算0x 得到的結果為1或則0;再用0,或1與10比較得到的總是真(為1)。所以一定要用 (0x)(x10)表示比0大比10小。

3)if 語句

else 是與最接近的if且沒有else的相組合的。

4)條件表達式:

表達式1 ?表達式2 :表達式3

注意是當非0時候是表達式2的數值,當為0是就是表達式2的數值。

考試口訣:真前假後。

5)switch語句:

a)一定要注意 有break 和沒有break的差別,書上(34頁)的兩個例子,沒有break時候,只要有一個case匹配了,剩下的都要執行,有break則是直接跳出了swiche語句。

b)switch只可以和break一起用,不可以和continue用。

第四章

1)三種循環結構:

a)for() ; while(); do- while()三種。

b)for循環當中必須是兩個分號,千萬不要忘記。

c)寫程序的時候一定要注意,循環一定要有結束的條件,否則成了死循環。

d) do-while()循環的最後一個while();的分號一定不能夠丟。(當心上機改錯)

2) break 和 continue的差別

記憶方法:

break:是打破的意思,(破了整個循環)所以看見break就退出真箇一層循環。

continue:是繼續的意思,(繼續循環運算),但是要結束本次循環,就是循環體內剩下的語句不再執行,跳到循環開始,然後判斷循環條件,進行新一輪的循環。

3)嵌套循環

就是有循環裡面還有循環,這種比較複雜,要一層一層一步一步耐心的計算,一般記住兩層是處理二維數組的。

4) while((c=getchar())!=』\n』) 和 while(c=getchar() !=』\n』)的差別

先看a = 3 != 2 和 (a=3)!=2 的區別:

(!=號的級別高於=號 所以第一個先計算 3!=2) 第一個a的數值是得到的1;第二個a的數值是3。

考試注意點: 括弧在這裡的重要性。

第五章

函數:是具有一定功能的一個程序塊;

1) 函數的參數,返回數值(示意圖):

main()

{

int a = 5,b=6,c;

c = add(a,b);

printf(「%d」,c);

}

調用函數

a,b是實參

整個函數得到一個數值就是

Add函數的返回數值。

int add ( int x, int y)

{

int z;

z=x+y;

return z;

}

被調用函數

x,y是形式參數

函數返回數值是整型

z就是這個add函數計算後得到的結果,就是函數返回給主程序的返回數值。

程序是在從上往下順序執行,當碰到了函數add後,把a,b的數值穿給調用函數,程序暫時中斷等待返回數值。當得到了返回數值後,再順序的往下執行

2)一定要注意參數之間的傳遞

實參和形參之間 傳數值,和傳地址的差別。(考試的重點)

傳數值的話,形參的變化不會改變實參的變化。

傳地址的話,形參的變化就會有可能改變實參的變化。

3)函數聲明的考查:

一定要有:函數名,函數的返回類型,函數的參數類型。

不一定要有:形參的名稱。

第六章

指針變數的本質是用來放地址,而一般的變數是放數值的。

int *p 中 *p和p的差別:

*p可以當做變數來用;*的作用是取後面地址p裡面的數值

p是當作地址來使用。

*p++ 和 (*p)++的之間的差別:改錯題目中很重要

*p++是 地址會變化。

(*p)++ 是數值會要變化。

三名主義:(考試的重點)

數組名:表示第一個元素的地址。數組名不可以自加,他是地址常量名。(考了很多次)

函數名:表示該函數的入口地址。

字元串常量名:表示第一個字元的地址。

第七章

1一維數組的重要概念:

對a[10]這個數組的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是一維數組名,所以它是列指針,也就是說a+1是跳一列。

對a[3][3]的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是二維數組名,所以它是行指針,也就是說a+1是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以對它進行賦值操作,同時它們都是列指針,a[0]+1,a[1]+1,a[2]+1都是跳一列。

5、注意a和a[0] 、a[1]、a[2]是不同的,它們的基類型是不同的。前者是一行元素,後三者是一列元素。

二維數組做題目的技巧:

如果有a[3][3]={1,2,3,4,5,6,7,8,9}這樣的題目。

步驟一:把他們寫成: 第一列 第二列 第三列

a[0]à 1 2 3 -第一行

a[1]à 4 5 6 —第二行

a[2]à 7 8 9 -第三行

步驟二:這樣作題目間很簡單:

*(a[0]+1)我們就知道是第一行的第一個元素往後面跳一列,那麼這裡就是a[0][1]元素,所以是1。

*(a[1]+2)我們就知道是第二行的第一個元素往後面跳二列。那麼這裡就是a[1][2]元素,所以是6。

一定記住:只要是二維數組的題目,一定是寫成如上的格式,再去做題目,這樣會比較簡單。

數組的初始化,一維和二維的,一維可以不寫,二維第二個一定要寫

int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3,4}非法。

二維數組中的行指針

int a[1][2];

其中a現在就是一個行指針,a+1跳一行數組元素。 搭配(*)p[2]指針

a[0],a[1]現在就是一個列指針。a[0]+1 跳一個數組元素。搭配*p[2]指針數組使用

還有記住脫衣服法則:

a[2] 變成 *(a+2) a[2][3]變成 *(a+2)[3]再可以變成 *(*(a+2)+3)

這個思想很重要!

此日誌來自QQ校友社區(xiaoyou.qq

C語言複習資料,希望高手幫忙給個答案,小弟急用!

1. 若有int y;則表示命題「y是奇數」成立的C語言表達式是

(y%2 == 1) 。

2. 在C語言中,表示邏輯「真」值用(true) 表示。

3. 條件「2<x<3或x<-10」的C表達式是((x2x3)||(x-10)) 。

4. 以下程序運行的結果是(20) 。

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 );

}

5. 若有說明語句:「int x=1, y=0;」,則表達式x――(y+x)?5:25y++?『1』:『2』的值是(49) 。

6. 以下程序段的運行結果是(**1****3**) 。

int x=1, y=0;

switch (x)

{ case 1: switch (y)

{ case 0: printf(「**1**」); break;

case 1: printf(「**2**」); break;

}

case 2: printf (「**3**」);

}

7. 以下程序運行的結果是(a=2, b=1) 。

#include stdio.h

main ( )

{ int x=1, y=0, a=0, b=0;

switch (x)

{ case 1: switch (y)

{ case 0: a++; break;

case 1: b++; break;

}

case 2: a++; b++; break;

}

printf (「a=%d, b=%d\n」,a, b);

}

c語言複習題zmc戕亟

C語言最重要的知識點複習資料

總體上必須清楚的:

1)程序結構是三種: 順序結構 , 循環結構(三個循環結構), 選擇結構(if 和 switch)

2)讀程序都要從main()入口, 然後從最上面順序往下讀(碰到循環做循環,碰到選擇做選擇)。

3)計算機的數據在電腦中保存是以 二進位的形式. 數據存放的位置就是 他的地址.

4)bit是位 是指為0 或者1。 byte 是指位元組, 一個位元組 = 八個位.

5)一定要記住 二進位 如何劃成 十進位。

概念常考到的:

編譯預處理不是C語言的一部分,不佔運行時間,不要加分號。C語言編譯的程序稱為源程序,它以ASCII數值存放在文本文件中。

每個C語言程序中main函數是有且只有一個。

在函數中不可以再定義函數。

演算法的是一定要有輸出的,他可以沒有輸入。

break可用於循環結構和switch語句。

逗號運算符的級別最低。

第一章

1)合法的用戶標識符考查:

合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。

並且第一個必須為字母或則是下劃線。第一個為數字就錯了。

關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If是可以做為用戶標識符。因為If中的第一個字母大寫了,所以不是關鍵字。

2)實型數據的合法形式:

2.333e-1 就是合法的,且數據是2.333×10-1。

考試口訣:e前e後必有數,e後必為整數。.

3)字元數據的合法形式::

‘1’ 是字元佔一個位元組,”1″是字元串佔兩個位元組(含有一個結束符號)。

‘0’ 的ASCII數值表示為48,’a’ 的ASCII數值是97,’A’的ASCII數值是65。

一般考試表示單個字元錯誤的形式:’65’ “1”

字元是可以進行算術運算的,記住: ‘0’-0=48

大寫字母和小寫字母轉換的方法: ‘A’+32=’a’ 相互之間一般是相差32。

4) 整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組:

考試時候一般會說,在16位編譯系統,或者是32位系統。碰到這種情況,不要去管,一樣做題。掌握整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組就可以了。

5)轉義字元的考查:

在程序中 int a = 0x6d,是把一個十六進位的數給變數a 注意這裡的0x必須存在。

在程序中 int a = 06d, 是一個八進位的形式。

在轉義字元中,』\x6d』 才是合法的,0不能寫,並且x是小寫。

『\141』 是合法的, 0是不能寫的。

『\108』是非法的,因為不可以出現8。

6)算術運算符號的優先順序別:

同級別的有的是從左到右,有的是從右到左。

7)強制類型轉換:

一定是 (int)a 不是 int(a),注意類型上一定有括弧的。

注意(int)(a+b) 和(int)a+b 的區別。 前是把a+b轉型,後是把a轉型再加b。

8)表達式的考查:

是表達式就一定有數值。

賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。

自加、自減表達式:假設a=5,++a(是為6), a++(為5);

運行的機理:++a 是先把變數的數值加上1,然後把得到的數值放到變數a中,然後再用這

個++a表達式的數值為6,而a++是先用該表達式的數值為5,然後再把a的數值加上1為6,

再放到變數a中。 進行了++a和a++後 在下面的程序中再用到a的話都是變數a中的6了。

考試口訣:++在前先加後用,++在後先用後加。

逗號表達式:優先順序別最低 ; 表達式的數值逗號最右邊的那個表達式的數值。

(2,3,4)的表達式的數值就是4。

9)位運算的考查:

會有一到二題考試題目。

總的處理方法:幾乎所有的位運算的題目都要按這個流程來處理(先把十進位變成二進位再變成十進位)。

例1: char a = 6, b;

b = a2; 這種題目的計算是先要把a的十進位6化成二進位,再做位運算。

例2: 一定要記住,異或的位運算符號。0 異或 1得到1。

0 異或 0得到0。兩個女的生不出來。

1 異或 1得到0。兩個男的生不出來。

考試記憶方法:一男(1)一女(0)才可以生個小孩(1)。

例3: 在沒有捨去數據的時候,左移一位表示乘以2;右移一位表示除以2。

10)018的數值是非法的,八進位是沒有8的,逢8進1。

11)%符號兩邊要求是整數。不是整數就錯了。

12) 三種取整丟小數的情況:

1、int a =1.6;

2、(int)a;

3、1/2; 3/2;

13)字元型和整數是近親:

char a = 65 ;

printf(「%c」, a); 得到的輸出結果:a

printf(「%d」, a); 得到的輸出結果:65

第二章

1)printf函數的格式考查:

%d對應整型;%c對應字元;%f對應單精度等等。寬度的,左對齊等修飾。

%ld對應 long int;%lf 對應double。

2)scanf函數的格式考察:

注意該函數的第二個部分是a 這樣的地址,不是a;

scanf(「%d%d%*d%d」,a,b,c); 跳過輸入的第三個數據。

3)putchar ,getchar 函數的考查:

char a = getchar() 是沒有參數的,從鍵盤得到你輸入的一個字元給變數a。

putchar(『y』)把字元y輸出到屏幕中。

4)如何實現兩個變數x ,y中數值的互換(要求背下來)

不可以把 x=y ,y=x; 要用中間變數 t=x;x=y;y=t。

5)如何實現保留三位小數,第四位四捨五入的程序,(要求背下來)

這個有推廣的意義,注意 x = (int)x 這樣是把小數部分去掉。

第三章

特別要注意:c語言中是用非0表示邏輯真的,用0表示邏輯假的。

1)關係表達式:

表達式的數值只能為1(表示為真),或0(表示假)

當關係的表達是為真的時候得到1。如 98這個是真的,所以表達式的數值就是1;

2)邏輯表達式:

只能為1(表示為真),或0(表示假)

共有 || ! 三種邏輯運算符號。

!|| 優先的級別。

注意短路現象。考試比較喜歡考到。

要表示 x 是比0大,比10小的方法。0x10是不可以的(一定記住)。是先計算0x 得到的結果為1或則0;再用0,或1與10比較得到的總是真(為1)。所以一定要用 (0x)(x10)表示比0大比10小。

3)if 語句

else 是與最接近的if且沒有else的相組合的。

4)條件表達式:

表達式1 ?表達式2 :表達式3

注意是當非0時候 是表達式2的數值,當為0是就是表達式2的數值。

考試口訣:真前假後。

5)switch語句:

a) 一定要注意 有break 和沒有break的差別,書上(34頁)的兩個例子,沒有break時候,只要有一個case匹配了,剩下的都要執行,有break則是直接跳出了swiche語句。

b) switch只可以和break一起用,不可以和continue用。

c) switch(x) x:是整型常量,字元型常量,枚舉型數據。

{case 1: …. 不可以是變數。

case 2: ….

}

第四章

1)三種循環結構:

a)for() ; while(); do- while()三種。

b)for循環當中必須是兩個分號,千萬不要忘記。

c)寫程序的時候一定要注意,循環一定要有結束的條件,否則成了死循環。

d) do-while()循環的最後一個while();的分號一定不能夠丟。(當心上機改錯),do-while循環是至少執行一次循環。

2) break 和 continue的差別

記憶方法:

break:是打破的意思,(破了整個循環)所以看見break就退出真箇一層循環。

continue: 是繼續的意思,(繼續循環運算),但是要結束本次循環,就是循環體內剩下的語句不再執行,跳到循環開始,然後判斷循環條件,進行新一輪的循環。

3)嵌套循環

就是有循環裡面還有循環,這種比較複雜,要一層一層一步一步耐心的計算,一般記住兩層是處理二維數組的。

4) while((c=getchar())!=』\n』) 和 while(c=getchar() !=』\n』)的差別

先看a = 3 != 2 和 (a=3)!=2 的區別:

(!=號的級別高於=號 所以第一個先計算 3!=2) 第一個a的數值是得到的1;第二個a的數值是3。

考試注意點: 括弧在這裡的重要性。

第五章

函數:是具有一定功能的一個程序塊;是C語言的基本組成單位。

1) 函數的參數,返回數值(示意圖):

2)一定要注意參數之間的傳遞

實參和形參之間 傳數值,和傳地址的差別。(考試的重點)

傳數值的話,形參的變化不會改變實參的變化。

傳地址的話,形參的變化就會有可能改變實參的變化。

3)函數聲明的考查:

一定要有:函數名,函數的返回類型,函數的參數類型。

不一定要有:形參的名稱。

4)要求掌握的庫函數:

sqrt() fabs() pow() sin() 其中pow(a,b)是重點。23是由pow(2,3)表示的。

第六章

指針變數的本質是用來放地址,而一般的變數是放數值的。

int *p 中 *p和p的差別:

*p可以當做變數來用;*的作用是取後面地址p裡面的數值

p是當作地址來使用。

*p++ 和 (*p)++的之間的差別:改錯題目中很重要

*p++是 地址會變化。

(*p)++ 是數值會要變化。

三名主義:(考試的重點)

數組名:表示第一個元素的地址。數組名不可以自加,他是地址常量名。(考了很多次)

函數名:表示該函數的入口地址。

字元串常量名:表示第一個字元的地址。

考試重要的話語:

指針變數是存放地址的。並且指向哪個就等價哪個,所有出現*p的地方都可以用它等價的代替。

例如:int a=2,*p=a;

*p=*p+2;

(由於*p指向變數a,所以指向哪個就等價哪個,這裡*p等價於a,可以相當於是a=a+2)

指針變數兩種初始化

方法一:int a=2,*p=a;(定義的同時初始化)

方法二:int a=2,*p; (定義之後初始化)

p=a;

第七章

1)一維數組的重要概念:

對a[10]這個數組的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是一維數組名,所以它是列指針,也就是說a+1是跳一列。

對a[3][3]的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是二維數組名,所以它是行指針,也就是說a+1是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以對它進行賦值操作,同時它們都是列指針,a[0]+1,a[1]+1,a[2]+1都是跳一列。

5、注意a和a[0] 、a[1]、a[2]是不同的,它們的基類型是不同的。前者是一行元素,後三者是一列元素。

2) 二維數組做題目的技巧:

如果有a[3][3]={1,2,3,4,5,6,7,8,9}這樣的題目。

步驟一:把他們寫成: 第一列 第二列 第三列

a[0] 1 2 3 -第一行

a[1] 4 5 6 —第二行

a[2] 7 8 9 -第三行

步驟二:這樣作題目間很簡單:

*(a[0]+1)我們就知道是第一行的第一個元素往後面跳一列,那麼這裡就是a[0][1]元素,所以是1。

*(a[1]+2)我們就知道是第二行的第一個元素往後面跳二列。那麼這裡就是a[1][2]元素,所以是6。

一定記住:只要是二維數組的題目,一定是寫成如上的格式,再去做題目,這樣會比較簡單。

3) 數組的初始化,一維和二維的,一維可以不寫,二維第二個一定要寫

int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3,4}非法。

4) 二維數組中的行指針

int a[1][2];

其中a現在就是一個行指針,a+1跳一行數組元素。 搭配(*)p[2]指針

a[0],a[1]現在就是一個列指針。a[0]+1 跳一個數組元素。搭配*p[2]指針數組使用

5) 還有記住脫衣服法則:

a[2] 變成 *(a+2) a[2][3]變成 *(a+2)[3]再可以變成 *(*(a+2)+3)

這個思想很重要!

其它考試重點

文件的複習方法:

把上課時候講的文件這一章的題目要做一遍,一定要做,基本上考試的都會在練習當中。

1)字元串的 strlen() 和 strcat() 和strcmp() 和strcpy()的使用方法一定要記住。他們的參數都是地址。其中strcat() 和strcmp()有兩個參數。

2)strlen 和 sizeof的區別也是考試的重點;

3)define f(x)(x*x) 和 define f(x) x*x 之間的差別。一定要好好的注意這寫容易錯的地方,替換的時候有括弧和沒有括弧是很大的區別。

4)int *p;

p = (int *)malloc(2);

p = (int *)malloc(sizeof(int));以上兩個等價

當心填空題目,malloc的返回類型是 void *

5)還有main(int argc,char **argv) {} 這種含有參數的題目,是很呆板的題目。第一個參數是表示輸入的字元串的數目,第二個參數是指向存放的字元串。

6)函數的遞歸調用一定要記得有結束的條件,並且要會算簡單的遞歸題目。要會作遞歸的題目

7)結構體和共用體以及鏈表要掌握最簡單的。typedef考的很多,而且一定要知道如何引用結構體中的各個變數,鏈表中如何填加和刪除節點,以及何如構成一個簡單的鏈表,一定記住鏈表中的節點是有兩個域,一個放數值,一個放指針。

8)函數指針的用法(*f)()記住一個例子:

int add(int x, int y)

{….}

main()

{ int (*f)();

f=add;

}

賦值之後:合法的調用形式為1、add(2,3);

2、f(2,3);

3、(*f)(2,3)

9)兩種重要的數組長度:

char a[]={『a』,』b』,』c』}; 數組長度為3,字元串長度不定。sizeof(a)為3。

char a[5]={ 『a』,』b』,』c』} 數組長度為5,字元串長度3。sizeof(a)為5。

10)scanf 和 gets的數據:

如果輸入的是 good good study!

那麼scanf(「%s」,a); 只會接收 good. 考點:不可以接收空格。

gets(a); 會接收 good good study! 考點:可以接收空格。

11)共用體的考查:

union TT

{ int a;

char ch[2];}

考點一: sizeof (struct TT) = 2;

考點二: TT t1 ; t1=0x1234;

那麼 ch[0]=0x 34; ch[1]=0x12

12)「文件包含」的考查點:

no1.c no2.c

這裡一個C語言程序是有兩個文件組成,分別是no1.c, no2.c。那麼no1.c中最開始有個#include」no2.c」他表示把第二個文件的內容給包含過來,那麼no1.c中調用add()函數的時候就可以了把數值傳到no2.c中的被調用函數add()了。

一個文件必須要有main函數。 這句話錯了。 例如:no2.c就沒有。

頭文件一定是以.h結束的。 這句話錯了。例如:no1.c中就是#include」no2.c」以.c結尾的。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/206358.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 17:50
下一篇 2024-12-07 17:51

相關推薦

  • Python第一章題庫

    本篇文章將從以下幾個方面對Python第一章題庫進行詳細的闡述,包括基本語法、數據類型、控制語句、函數和模塊等方面。 一、基本語法 Python是一門簡單易學、功能強大的編程語言,…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python股票量化投資課程 百度網盤

    本文將從以下幾個方面對Python股票量化投資課程 百度網盤做詳細闡述。 一、量化投資的意義 量化投資是指利用數學模型和計算機技術,對市場進行數據挖掘、統計分析,採用科學的方法制定…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28

發表回復

登錄後才能評論