數據類型,運算符與表達式;程序結構:順序,選擇,循環; 數組,函數,預處理命令,指針,結構體與共用體,文件,位運算;
創新互聯建站專注于北辰企業網站建設,響應式網站設計,商城網站建設。北辰網站建設公司,為北辰等地區提供建站服務。全流程按需規劃網站,專業設計,全程項目跟蹤,創新互聯建站專業和態度為您提供的服務
當然,C程序的靈魂是算法。
c學起來也不是很難,主要是指針和其他的知識點入數組、函數等組合起來難理解一些
要想學習,主要有幾點需要注意
一、記憶部分
1、保留字,如if,int,for等
2、常規的結構,如條件,循環,switch、數組的結構,指針定義,結構體的定義等
3、語法的構成,如printf,scanf等一些語句的構成
4、一些系統帶的函數,常用的要記住,如strlen,printf等
5、一些經典的算法,如素數的計算,排序的寫法等
二、算法,語法等
這個就是解決問題的方法,沒有好的捷徑,只要慢慢的積累,數學方面的算法要加深
其實,c基礎也就是那么一些基礎點
1、保留字
2、定義變量等,int,float等
3、條件語句if,選擇語句switch,循環,do--while、for、while、goto
4、注意逗號語句,scanf和printf要熟練,知道格式(這個很基礎,用錯了很麻煩)
5、數組,這里注意二維數組和字符串的一些函數
6、指針,這個是難點,也就是說很難理解,特別是和數組函數結構體等結合使用的時候
7、結構體共用體,這個不難,就是繁瑣而已。這里涉及到鏈表,其實不難理解,可以想象成一串珠子,next指針就是串珠子的線,結構體就是珠子
8、文件操作,這個就是套用格式,沒難度
9、宏定義,這個沒難度,就是最簡單的直接替換。注意一點就是在定義宏的時候多用幾個括號增加優先級沒壞處
10、函數。這個難度不大,主要是要理解,參數是在調用的時候另外開辟內存空間。除了數組和用定義的參數。要不然子函數改變了參數變量,調用它的地方的變量時不會改變的
其實就是這些基本的知識點
您好,SA團隊給出的答案(直接給你試題看看吧,這樣比較詳細)2009年9月全國計算機等級考試筆試試卷
二級公共基礎知識和C語言程序設計
(考試時間90分鐘,滿分100分)
一、選擇題((1)~(10)、(21)~(40)每題2分,(11)~(20)每題1分,70分)
(1)下列數據結構中,屬于非線性結構的是( )。
A)循環隊列 B)帶鏈隊列
C)二叉樹 D)帶鏈棧
(2)下列數據結構中,能夠按照“先進后出”原則存取數據的是( )。
A)循環隊列 B)棧
C)隊列 D)二叉樹
(3)對于循環隊列,下列敘述中正確的是( )。
A)隊頭指針是固定不變的
B)隊頭指針一定大于隊尾指針
C)隊頭指針一定小于隊尾指針
D)隊頭指針可以大于隊尾指針,也可以小于隊尾指針
(4)算法的空間復雜度是指( )。
A)算法在執行過程中所需要的計算機存儲空間
B)算法所處理的數據量
C)算法程序中的語句或指令條數
D)算法在執行過程中所需要的臨時工作單元數
(5)軟件設計中劃分模塊的一個準則是( )。
A)低內聚低耦合B)高內聚低耦合
C)低內聚高耦合D)高內聚高耦合
(6)下列選項中不屬于結構化程序設計原則的是( )。
A)可封裝 B)自頂向下 C)模塊化 D)逐步求精
(7)軟件詳細設計產生的圖如下:
begin
1
該圖是( )。
A)N-S圖 B)PAD圖
C)程序流程圖D)E-R圖
(8)數據庫管理系統是( )。
A)操作系統的一部分B)在操作系統支持下的系統軟件
C)一種編譯系統D)一種操作系統
(9)在E-R圖中,用來表示實體聯系的圖形是( )。
A)橢圓形 B)矩形 C)菱形 D)三角形
(10)有三個關系R,S和T如下:
2
R S T
A
B
C
A
B
C
A
B
C
a
1
2
d
3
2
a
1
2
b
2
1
b
2
1
c
3
1
c
3
1
d
3
2
其中關系T由關系R和S通過某種操作得到,該操作為( )。
A)選擇 B)投影 C)交 D)并
(11)以下敘述中正確的是( )。
A)程序設計的任務就是編寫程序代碼并上機調試
B)程序設計的任務就是確定所用數據結構
C)程序設計的任務就是確定所用算法
D)以上三種說法都不完整
(12)以下選項中,能用作用戶標識符的是( )。
A)void B)8_8 C)_0_ D)unsigned
(13)閱讀以下程序
# include stdio.h
main()
{ int case; float printF;
printf ("請輸入2個數:");
scanf ("%d %f", case, printF);
printf ("%d %f\n", case, printF);
}
該程序在編譯時產生錯誤,其出錯原因是( )。
A)定義語句出錯,case是關鍵字,不能用作用戶自定義標識符
B)定義語句出錯,printF不能用作用戶自定義標識符
C)定義語句無錯,scanf不能作為輸入函數使用
D)定義語句無錯,printf不能輸出case的值
(14)表達式:(int)((double)9/2)-(9)%2的值是( )。
A)0 B)3 C)4 D)5
(15)若有定義語句:int x=10;,則表達式x-=x+x的值為( )。
A)-20 B)-10 C)0 D)10
(16)有以下程序
# include stdio.h
main()
{ int a=l, b=0;
printf ("%d,", b=a+b);
printf ("%d\n", a=2*b);
}
程序運行后的輸出結果是( )。
A)0,0 B)1,0 C)3,2 D)1,2
(17)設有定義:int a=l, b=2, c=3;,以下語句中執行效果與其它三個不同的是( )。
A)if(ab)c=a,a=b,b=c; B)if(ab){c=a,a=b,b=c;}
C)if(ab)c=a;a-b;b=c; D)if(ab){c=a;a-b;b=c;}
(18)有以下程序
# include stdio.h
3
main()
{ int c=0, k,
for(k=1; k3; k++)
switch (k)
{ default: c+=k;
case 2: c++; break;
case 4: c+=2; break;
}
printf("%d\n", c);
}
程序運行后的輸出結果是( )。
A)3 B)5 C)7 D)9
(19)以下程序段中,與語句:k=ab?(bc ? 1 : 0) : 0;功能相同的是( )。
A)if((ab) (bc)) k=l; B)if((ab)||(bc))k=l;
else k=0; else k=0;
C)if(a=b)k=0; D)if(ab) k=l;
else if(b=c)k=1; else if(bc)k=1;
else k=0;
(20)有以下程序
# include stdio.h
main()
{ char s[]={"012xy"}; int i, n=0;
for (i=0; s[i]!=0; i++)
if(S[i]='a' s[i]='z') n++;
printf("%d\n",n);
}
程序運行后的輸出結果是( )。
A)0 B)2 C)3 D)5
(21)有以下程序
# include stdio.h
main()
{ int n=2,k=0;
while (k++ n++2);
printf("%d %d\n",k,n);
}
程序運行后的輸出結果是( )。
A)0 2 B)1 3 C)5 7 D)l 2
(22)有以下定義語句,編譯時會出現編譯錯誤的是( )。
A)char a='a'; B)char a='\n'; C)char a='aa'; D)char a='\x2d';
(23)有以下程序
# include stdio.h
main()
{ char c1,c2;
c1='A'+'8'-'4';
c2='A'+'8'-'5';
printf("%c,%d\n",c1,c2);
4
}
已知字母A的ASCII碼為65,程序運行后的輸出結果是( )。
A)E,68 B)D,69 C)E,D D)輸出無定值
(24)有以下程序
# include stdio.h
void fun (int p)
{ int d=2;
p=d++; printf("%d",p);}
main()
{ int a=1;
fun(a); printf("%d\n",a);}
程序運行后的輸出結果是( )。
A)32 B)12 C)21 D)22
(25)以下函數findmax擬實現在數組中查找最大值并作為函數值返回,但程序中有錯導致不能實現預定功能。
# define MIN -2147483647
int findmax (int x[],int n)
{ int i,max;
for(i=0;in;i++)
{ max=MIN;
if(maxx[i]) max=x[i];}
return max;
}
造成錯誤的原因是( )。
A)定義語句int i,max;中max未賦初值
B)賦值語句max=MIN;中,不應給max賦MIN值
C)語句if(maxX[i])max=X[i];中判斷條件設置錯誤
D)賦值語句max=MIN;放錯了位置
(26)有以下程序
# include stdio.h
main()
{ int m=1, n=2, *p=m, *q=n, *r;
r=p; p=q; q=r;
printf("%d,%d,%d,%d\n",m,n,*p,*q);
}
程序運行后的輸出結果是( )。
A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2
(27)若有定義語句:int a[4][10],*p,*q[4];且0≤i4,則錯誤的賦值是( )。
A)p=a B)q[i]=a[i] C)p=a[i] D)p=a[2][1]
(28)有以下程序
# include stdio.h
# include string.h
main()
{ char str[][20]={"One*World","One*Dream!"},*p=str[1];
printf("%d,",strlen(p));printf("%s\n",p);
}
5
程序運行后的輸出結果是( )。
A)9,One*World B)9,One*Dream! C)10,One*Dream! D)10,One*World
(29)有以下程序
# include stdio.h
main()
{ int a[]={2, 3, 5, 4}, i;
for(i=0;i4;i++)
switch(i%2)
{ case 0 : switch(a[i]%2)
{case 0 : a[i]++;break;brcase 1 : a[i]--;br}break;
case 1 : a[i]=0;
}
for(i=0;i4;i++)printf("%d",a[i]);printf("\n");
}
程序運行后的輸出結果是( )。
A)3 3 4 4 B)2 0 5 0 C)3 0 4 0 D)0 3 0 4
(30)有以下程序
# include stdio.h
# include string.h
main()
{ char a[10]="abcd";
printf("%d,%d\n",strlen(a),sizeof(a));
}
程序運行后的輸出結果是( )。
A)7,4 B)4,10 C)8,8 D)10,10
(31)下面是有關C語言字符數組的描述,其中錯誤的是( )。
A)不可以用賦值語句給字符數組名賦字符串
B)可以用輸入語句把字符串整體輸入給字符數組
C)字符數組中的內容不一定是字符串
D)字符數組只能存放字符串
(32)下列函數的功能是( )。
fun(char *a,char *b)
{ while((*b=*a)!='\0') {a++; b++;} }
A)將a所指字符串賦給b所指空間
B)使指針b指向a所指字符串
C)將a所指字符串和b所指字符串進行比較
D)檢查a和b所指字符串中是否有'\0'
(33)設有以下函數:
void fun(int n,char *s) {……}
則下面對函數指針的定義和賦值均正確的是( )。
A)void (*pf)(); pf=fun; B)void *pf(); pf=fun;
C)void *pr(); *pf=fun; D)void(*pf)(int,char);pf=fun;
(34)有以下程序
# include stdio.h
6
int f(int n);
main()
{ int a=3,s;
s=f(a);s=s+f(a);printf("%d\n",s);
}
int f(int n)
{ static int a=1;
n+=a++;
return n;
}
程序運行后的輸出結果是( )。
A)7 B)8 C)9 D)10
(35)有以下程序
# include stdio.h
# define f(x) x*x*x
main()
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf("%d,%d\n",s,t);
}
程序運行后的輸出結果是( )。
A)10,64 B)10,10 C)64,10 D)64,64
(36)下面結構體的定義語句中,錯誤的是( )。
A)struct ord {int x; int y; int z;}; struct ord a;
B)struct ord {int x; int y; int z;} struct ord a;
C)struct ord {int x; int y; int z;}a;
D)struct {int x; int y; int z;} a;
(37)設有定義:char *c;,以下選項中能夠使字符型指針c正確指向一個字符串的是( )。
A)char str[]="string";c=str; B)scanf("%s",c);
C)c=getchar(); D)*c=*string";
(38)有以下程序
# include stdio.h
# include string.h
Struct A
{ int a; char b[10]; double c;};
struct A f(struct A t);
main()
{ struct A a={1001,"ZhangDa",1098.0};
a=f(a); printf("%d,%s,%6.1f\n",a.a,a.b,a.c);
}
struct A f(Struct A t)
{ t.a=1002; strcpy(t.b,"ChangRong");t.c=1202.0;return t;}
程序運行后的輸出結果是( )。
A)1001,ZhangDa,1098.0 B)1002,ZhangDa,1202.0
C)1001,ChangRong,1098.0 D)1002,ChangRong,1202.0
(39)若有以下程序段
7
int r=8;
printf("%d\n",r1);
輸出結果是( )。
A)16 B)8 C)4 D)2
(40)下列關于C語言文件的敘述中正確的是( )。
A)文件由一系列數據依次排列組成,只能構成二進制文件
B)文件由結構序列組成,可以構成二進制文件或文本文件
C)文件由數據序列組成,可以構成二進制文件或文本文件
D)文件由字符序列組成,其類型只能是文本文件
二、填空題(每空2分,共30分)
(1)某二叉樹有5個度為2的結點以及3個度為1的結點,則該二叉樹中共有【1】個結點。
(2)程序流程圖中的菱形框表示的是【2】。
(3)軟件開發過程主要分為需求分析、設計、編碼與測試四個階段,其中【3】階段產生“軟件需求規格說明書”。
(4)在數據庫技術中,實體集之間的聯系可以是一對一或一對多或多對多的,那么“學生”和“可選課程”的聯系為【4】。
(5)人員基本信息一般包括:身份證號,姓名,性別,年齡等。其中可以作為主關鍵字的是【5】。
(6)若有定義語句:int a=5;,則表達式:a++的值是【6】。
(7)若有語句double x=17; int y;,當執行y=(int)(x/5)%2;之后y的值為【7】。
(8)以下程序運行后的輸出結果是【8】。
# include stdio.h
main()
{ int x=20;
printf("%d",0x20);
printf("%d\n",0x x20); }
(9)以下程序運行后的輸出結果是【9】。
# include stdio.h
main()
{ int a=1,b=7;
do {
b=b/2; a+=b;
} while (b1);
printf ("%d\n",a); }
(10)有以下程序
# include stdio.h
main()
{ int f,fl,f2,i;
f1=0; f2=1;
printf("%d %d",fl,f2);
for(i=3;i=5;i++)
{ f=fl+f2; printf("%d",f);
f1=f2; f2=f;
}
printf("\n");
}
程序運行后的輸出結果是【10】。
8
(11)有以下程序
# include stdio.h
int a=5;
void fun(int b)
{ int a=10;
a+=b; printf("%d",a);
}
main()
{ int c=20;
fun(c); a+=c; printf("%d\n",a);
}
程序運行后的輸出結果是【11】。
(12)設有定義:
struct person
{ int ID; char name[12];}p;
請將scanf("%d", 【12】); 語句補充完整,使其能夠為結構體變量p的成員ID正確讀入數據。
(13)有以下程序
# include stdio.h
main()
{ char a[20]="How are you?",b[20];
scanf("%s",b); printf("%s %s\n",a,b);
}
程序運行時從鍵盤輸入:How are you?回車
則輸出結果為【13】。
(14)有以下程序
# include stdio.h
typedef struct
{ int num; double s; } REC;
void funl(REC x) {x.num=23; x.s=88.5;}
main()
{ REC a={16,90.0};
funl (a);
printf("%d\n",a.num);
}
程序運行后的輸出結果是【14】。
(15)有以下程序
# include stdio.h
fun(int x)
{ if(x/20) fun(x/2);
printf("%d", x);
}
main()
{ fun(6); printf("\n"); }
程序運行后的輸出結果是【15】。
C語言程序設計這門課第八章函數進階(中級)的知識點包含【中級】第48講-參數的2種傳遞方式,【中級】第49講-編寫一個strlwr函數,【中級】第50講-數組作為函數參數,【中級】第51講-指針數組作為函數參數,【中級】第52講-指向指針的指針作為函數參數,【中級】第53講-結構體作為函數參數,【中級】第54講-函數的作用范圍,【中級】第55講-變量的作用范圍,。
第六章
指針變量的本質是用來放地址,而一般的變量是放數值的。
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)
C語言基礎知識點集錦
【知識點1】C程序
C語言程序結構有三種: 順序結構 , 循環結構(三個循環結構), 選擇結構(if 和 switch)
【知識點2】main函數
每個C語言程序中main 函數是有且只有一個。讀程序都要從main()入口, 然后從最上面順序往下讀(碰到循環做循環,碰到選擇做選擇)。
【知識點3】存儲形式
計算機的數據在電腦中是以二進制的形式保存。最低的存儲單元是bit(位),位是由為 0 或者1構成。 byte 是指字節, 一個字節 = 八個位。數據存放的位置就是它的地址。
【知識點4】注釋
是對程序的說明,可出現在程序中任意合適的地方,注釋從“/*”開始到最近一個“*/”結束,其間任何內容都不會被計算機執行,注釋不可以嵌套。
【知識點5】書寫格式
每條語句的后面必須有一個分號,分號是語句的一部分。一行內可寫多條語句,一個語句可寫在多行上。
【知識點6】標識符
合法的用戶標識符考查:
合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。
并且第一個必須為字母或則是下劃線。第一個為數字就錯了。
C語言標識符分如下3類
(1)關鍵字。它們在程序中有固定的含義,不能另作他用。如int、for、switch等。
(2)預定義標識符。預先定義并具有特定含義的標識符。如define、include等。
(3)用戶標識符。用戶根據需要定義的標識符,符合命名規則且不與關鍵字相同。
關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If 是可以做為用戶標識符。因為If 中的第一個字母大寫了,所以不是關鍵字。
【知識點7】實型數據
實型數據的.合法形式:小數形式和指數形式。掌握判定指數形式合法性。
2.333e-1 就是合法的,且數據是2.333×10-1。
【知識點8】字符
字符數據的合法形式::
1 是字符占一個字節,"1"是字符串占兩個字節(含有一個結束符號)。
0 的ASCII 數值表示為48,a 的ASCII 數值是97,A的ASCII 數值是65。
字符型和整數是近親:
char a = 65 ;
printf(“%c”, a); 得到的輸出結果:a
printf(“%d”, a); 得到的輸出結果:65
一般考試表示單個字符錯誤的形式:65 "1"
字符是可以進行算術運算的,記住: 0-0=48
大寫字母和小寫字母轉換的方法: A+32=a 相互之間一般是相差32。
【知識點9】整型數據
整型一般是兩個字節, 字符型是一個字節,雙精度一般是4 個字節:
考試時候一般會說,在16 位編譯系統,或者是32 位系統。碰到這種情況,不要去管,
一樣做題。掌握整型一般是兩個字節, 字符型是一個字節,雙精度一般是4 個字節就可以了。
【知識點10】轉義字符
轉義字符的考查:
在程序中 int a = 0x6d,是把一個十六進制的數給變量a 注意這里的0x 必須存在。
在程序中 int a = 06d, 是一個八進制的形式。
在轉義字符中, ’x6d’ 才是合法的,0 不能寫,并且x 是小寫。
‘141’ 是合法的, 0 是不能寫的。
‘108’是非法的,因為不可以出現8。
【知識點11】算術運算
算術運算符一共有+、—、*、/、%這五個。%符號兩邊要求是整數。不是整數就錯了。
三種取整丟小數的情況:不是四舍五入是舍掉小數部分。
1、int a =1.6;
2、(int)a;
3、1/2; 3/2;
【知識點12】強制類型轉換
將一個運算對象轉換成指定類型,格式為(類型名)表達式
一定是 (int)a 不是 int(a),注意類型上一定有括號的。
注意(int)(a+b) 和(int)a+b 的區別。前是把a+b 轉型,后是把a 轉型再加b。
【知識點13】賦值
是表達式就一定有數值。
賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。
復合賦值運算符:注意:a*=m+2 是 a=a*(m+2)
自加、自減表達式:假設a=5,++a(表達式的值為6), a++(表達式的值為5);
j=a++;等價于j=a;a=a+1; 而j=++a;等價于a=a+1;j=a;。
考試口訣:++在前先加后用,++在后先用后加。
【知識點14】逗號運算
逗號表達式:優先級別最低; 表達式的數值逗號最右邊的那個表達式的數值。
(2,3,4)的表達式的數值就是4。
【知識點15】數制轉換
一定要記住二進制 如何轉換成十進制。
八進制是沒有8 的,逢8 進1,018 的數值是非法的。
分享題目:c語言函數知識點 c語言函數知識點測試
當前路徑:http://m.newbst.com/article46/hihghg.html
成都網站建設公司_創新互聯,為您提供Google、面包屑導航、微信公眾號、手機網站建設、品牌網站建設、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯