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