二級c語言公共知識點(diǎn)
二級c語言公共知識點(diǎn)
c語言是計算機(jī)二級考試重要科目,那么你對二級c語言了解多少呢?以下是由學(xué)習(xí)啦小編整理關(guān)于二級c語言公共知識點(diǎn)的內(nèi)容,希望大家喜歡!
二級c語言公共知識點(diǎn)
1.知識點(diǎn):main()函數(shù)的參數(shù)
l 定義形式:main(int argc,char *argv[])
{…
}
l int argc是命令行中的字符串?dāng)?shù),char *argv[]是指向字符串的指針數(shù)組,系統(tǒng)使用空格把各個字符串隔開。
2.知識點(diǎn):不帶參數(shù)的宏定義
l 一般形式:#define 宏名 字符串(或數(shù)值)
即用字符串或數(shù)值取代宏名。
l 宏名一般采用大寫字母表示,以與變量名區(qū)別,也可用小寫字母。
l 宏定義不是C語句,不必在行末加分號。
例1:(2009-04-36)有以下程序
#include<stdio.h>
#define PT 3.5;
#define S(x) PT*x*x;
main()
{int a=l,b=2;printf("%4.1f\n",S(a+b));}
程序運(yùn)行后輸出的結(jié)果是(D)
A)14.0 B)31.5 C)7.5 D)程序有錯無輸出結(jié)果
【解析】此題考查宏的定義形式。由于宏定義并不是語句,故#define后面不能有分號,故該程序有錯無法輸出結(jié)果,所以,正確答案:D。
例2:(2011-03-30)以下函數(shù)的功能是:通過鍵盤輸入數(shù)據(jù),為數(shù)組中的所有元素賦值。
#define N 10
void fun(int x[N])
{ inti=0;
while(i<N)scanf(“%d”,_________);
}在程序中下劃線處應(yīng)填入的是
A)x+i B)&x[i+1] C)x+(i++) D)&x[++i]
答案:C
【解析】要求給每個元素賦值,while循環(huán)的變量i必須不斷增加,所以A、B顯然不行,i++是先參與運(yùn)算在自增1,++i是先自增1再參與運(yùn)算,所以D會出現(xiàn)x[0]未賦值的情況,故選C。
l 對程序中用“”括起來的字符串內(nèi)的字符,即使與宏名相同,也不進(jìn)行置換。
l 宏定義可以嵌套使用,例如:
#define R 3.0
#define PI 3.14159
#define L L*PI*R
3.知識點(diǎn):帶參數(shù)的宏定義
l 一般形式:#define 宏名(參數(shù)表) 字符串
l 帶參數(shù)的宏不占運(yùn)行時間,只占編譯時間;只是簡單、機(jī)械字符替換;宏名無類型。
l 要注意有括號和沒括號的區(qū)別
例1:(2009-09-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);
}程序運(yùn)行后的輸出結(jié)果是(A)
A)10,64 B)10,10 C)64,10 D)64,64
【解析】本題考點(diǎn)為帶參數(shù)的宏定義,宏定義中的參數(shù)沒有類型,僅為字符序列,不能當(dāng)作表達(dá)式運(yùn)算。宏展開時,把實參字符串原樣寫在替換文本中。s=f(a+1)=a+1*a1*a+1=10;t=f((a+1))= (a+1)* (a+1)* (a+1)=64
例2:(2011-03-35)有以下程序
#define S(x) 4*(x)*x+1
main()
{ intk=5,j=2;
printf("%d\n",S(k+j));
}程序運(yùn)行后的輸出結(jié)果是(B)
A)197 B)143 C)33 D)28
【解析】#define宏定義,只是機(jī)械簡單的置換S(k+j)=S(5+2)=4*(5+2)*5+2+1=143
4.知識點(diǎn):文件包含
l 一般形式:#include <文件名>或者#include “文件名”
l < >與” ”的區(qū)別:<>即系統(tǒng)到存放C庫函數(shù)頭文件的目錄中尋找要包含的文件;” ”即系統(tǒng)先在用戶當(dāng)前目錄中尋找,若找不到,再到存放C庫函數(shù)頭文件的目錄中尋找。
l 文件包含可以嵌套。
l 凡是以“#”開頭的行都是預(yù)處理命令行。
5.知識點(diǎn):calloc()函數(shù)
l 函數(shù)原型:void *calloc(unsigned n,unsigned size);
l 功能:分配n個數(shù)據(jù)項的內(nèi)存連續(xù)空間,每個數(shù)據(jù)項的大小為size
6.知識點(diǎn):free()函數(shù)
l 函數(shù)原型:void free(void *p);
l 功能:釋放p所指的內(nèi)存區(qū)
7.知識點(diǎn):malloc()函數(shù)
l 函數(shù)原型:void *malloc(unsigned size);
l 功能:分配size字節(jié)的存儲區(qū)
例1:(2011-03-14)以下程序運(yùn)行后的輸出結(jié)果是 emoclew 。
main()
{ char *p; int i;
p=(char *)malloc(sizeof(char)*20);
strcpy(p,"welcome");
for(i=6;i>=0;i--) putchar(*(p+i));
printf("\n"); free(p);
}
【解析】(char*)malloc(sizeof(char)*20)申請一個20個字符大小的空間,首地址賦給字符指針變量p,strcpy(p,"welcome");將字符串"welcome"賦值給p所指向的空間,for循環(huán)實現(xiàn)從后往前輸出這個字符串,free(p)為釋放申請的空間。
8.知識點(diǎn):文件的概念和文件指針
l 在C程序中文件可以用順序方式存取,可以用隨機(jī)方式存取。
l C程序把文件分為ASCII文件(文本文件)和二進(jìn)制文件。
例1:(2009-09-40)下列關(guān)于C語言文件的敘述中正確的是(C)
A)文件由一系列數(shù)據(jù)依次排列組成,只能構(gòu)成二進(jìn)制文件
B)文件由結(jié)構(gòu)序列組成,可以構(gòu)成二進(jìn)制文件或文本文件
C)文件由數(shù)據(jù)序列組成,可以構(gòu)成二進(jìn)制文件或文本文件
D)文件由字符序列組成,其類型只能是文本文件
【解析】本題考點(diǎn)為文件的基本概念。正確答案為C。C語言中根據(jù)數(shù)據(jù)的組織形
式,分為二進(jìn)制文件和ASCII碼文件。一個C文件時一個字節(jié)序列或者二進(jìn)制序列,而不是一個記錄(結(jié)構(gòu))序列。
l 文件類型指針:FILE *fp;fp是一個指向FILE類型結(jié)構(gòu)體的指針變量,通過文件指針變量找到與它相關(guān)的文件。
例2:(2010-09-15)以下程序打開新文件f.txt,并調(diào)用字符輸出函數(shù)將a數(shù)組中的字符寫入其中,請?zhí)羁铡?/p>
#include <stdio.h>
main()
{ FILE *fp;
char a[5]={‘1’,’2’,’3’,’4’,’5’},i;
fp=fopen(“f.txt”,”w”);
for(i=0;i<5;i++)fputc(a[i],fp);
fclose(fp);
}