學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 公共基礎(chǔ)知識(shí) > 二級(jí)c語(yǔ)言公共知識(shí)點(diǎn)

二級(jí)c語(yǔ)言公共知識(shí)點(diǎn)

時(shí)間: 謝君787 分享

二級(jí)c語(yǔ)言公共知識(shí)點(diǎn)

  c語(yǔ)言是計(jì)算機(jī)二級(jí)考試重要科目,那么你對(duì)二級(jí)c語(yǔ)言了解多少呢?以下是由學(xué)習(xí)啦小編整理關(guān)于二級(jí)c語(yǔ)言公共知識(shí)點(diǎn)的內(nèi)容,希望大家喜歡!

  二級(jí)c語(yǔ)言公共知識(shí)點(diǎn)

  1.知識(shí)點(diǎn):main()函數(shù)的參數(shù)

  l 定義形式:main(int argc,char *argv[])

  {…

  }

  l int argc是命令行中的字符串?dāng)?shù),char *argv[]是指向字符串的指針數(shù)組,系統(tǒng)使用空格把各個(gè)字符串隔開(kāi)。

  2.知識(shí)點(diǎn):不帶參數(shù)的宏定義

  l 一般形式:#define 宏名 字符串(或數(shù)值)

  即用字符串或數(shù)值取代宏名。

  l 宏名一般采用大寫字母表示,以與變量名區(qū)別,也可用小寫字母。

  l 宏定義不是C語(yǔ)句,不必在行末加分號(hào)。

  例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)程序有錯(cuò)無(wú)輸出結(jié)果

  【解析】此題考查宏的定義形式。由于宏定義并不是語(yǔ)句,故#define后面不能有分號(hào),故該程序有錯(cuò)無(wú)法輸出結(jié)果,所以,正確答案:D。

  例2:(2011-03-30)以下函數(shù)的功能是:通過(guò)鍵盤輸入數(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

  【解析】要求給每個(gè)元素賦值,while循環(huán)的變量i必須不斷增加,所以A、B顯然不行,i++是先參與運(yùn)算在自增1,++i是先自增1再參與運(yùn)算,所以D會(huì)出現(xiàn)x[0]未賦值的情況,故選C。

  l 對(duì)程序中用“”括起來(lái)的字符串內(nèi)的字符,即使與宏名相同,也不進(jìn)行置換。

  l 宏定義可以嵌套使用,例如:

  #define R 3.0

  #define PI 3.14159

  #define L L*PI*R

  3.知識(shí)點(diǎn):帶參數(shù)的宏定義

  l 一般形式:#define 宏名(參數(shù)表) 字符串

  l 帶參數(shù)的宏不占運(yùn)行時(shí)間,只占編譯時(shí)間;只是簡(jiǎn)單、機(jī)械字符替換;宏名無(wú)類型。

  l 要注意有括號(hào)和沒(méi)括號(hào)的區(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ù)沒(méi)有類型,僅為字符序列,不能當(dāng)作表達(dá)式運(yùn)算。宏展開(kāi)時(shí),把實(shí)參字符串原樣寫在替換文本中。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ī)械簡(jiǎn)單的置換S(k+j)=S(5+2)=4*(5+2)*5+2+1=143

  4.知識(shí)點(diǎn):文件包含

  l 一般形式:#include <文件名>或者#include “文件名”

  l < >與” ”的區(qū)別:<>即系統(tǒng)到存放C庫(kù)函數(shù)頭文件的目錄中尋找要包含的文件;” ”即系統(tǒng)先在用戶當(dāng)前目錄中尋找,若找不到,再到存放C庫(kù)函數(shù)頭文件的目錄中尋找。

  l 文件包含可以嵌套。

  l 凡是以“#”開(kāi)頭的行都是預(yù)處理命令行。

  5.知識(shí)點(diǎn):calloc()函數(shù)

  l 函數(shù)原型:void *calloc(unsigned n,unsigned size);

  l 功能:分配n個(gè)數(shù)據(jù)項(xiàng)的內(nèi)存連續(xù)空間,每個(gè)數(shù)據(jù)項(xiàng)的大小為size

  6.知識(shí)點(diǎn):free()函數(shù)

  l 函數(shù)原型:void free(void *p);

  l 功能:釋放p所指的內(nèi)存區(qū)

  7.知識(shí)點(diǎn):malloc()函數(shù)

  l 函數(shù)原型:void *malloc(unsigned size);

  l 功能:分配size字節(jié)的存儲(chǔ)區(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)申請(qǐng)一個(gè)20個(gè)字符大小的空間,首地址賦給字符指針變量p,strcpy(p,"welcome");將字符串"welcome"賦值給p所指向的空間,for循環(huán)實(shí)現(xiàn)從后往前輸出這個(gè)字符串,free(p)為釋放申請(qǐng)的空間。

  8.知識(shí)點(diǎn):文件的概念和文件指針

  l 在C程序中文件可以用順序方式存取,可以用隨機(jī)方式存取。

  l C程序把文件分為ASCII文件(文本文件)和二進(jìn)制文件。

  例1:(2009-09-40)下列關(guān)于C語(yǔ)言文件的敘述中正確的是(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語(yǔ)言中根據(jù)數(shù)據(jù)的組織形

  式,分為二進(jìn)制文件和ASCII碼文件。一個(gè)C文件時(shí)一個(gè)字節(jié)序列或者二進(jìn)制序列,而不是一個(gè)記錄(結(jié)構(gòu))序列。

  l 文件類型指針:FILE *fp;fp是一個(gè)指向FILE類型結(jié)構(gòu)體的指針變量,通過(guò)文件指針變量找到與它相關(guān)的文件。

  例2:(2010-09-15)以下程序打開(kāi)新文件f.txt,并調(diào)用字符輸出函數(shù)將a數(shù)組中的字符寫入其中,請(qǐng)?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);

  }

1215586