二级C公共基础题库

C语言通用复习资料

C语言的一个基本单位-函数。1 . main();②库函数;3.自定义功能。ABC();

两个函数的合成:1。函数的头和函数的第一行语句(包括返回值类型、函数名、函数参数类型和函数参数名)。()不能省略,例如:void main() 2。函数体,包括函数的声明部分(声明程序中要使用的函数)、定义部分(定义函数可能使用的变量)和执行部分(用于实现函数的功能)。

三个功能不可或缺的分号。

四个输入和输出使用的函数:scanf、getchar、gets、printf、putchar、puts等。

注5:不能嵌套。第94页练习18。

区分大小写:printf和Printf的区别。

7.C语言的计算机处理:编辑(。c)——& gt;编译(。obj)->;连接(。exe)->;跑步的结果。

八c程序执行从main()函数开始,到main函数结束结束。

十进制转换:重点掌握十进制、八进制和十六进制及其相互转换,以及原补码(要用到位运算)。

用户自定义标识符:1。字母、数字和下划线。第一个字母不能是数字。3.它不能与C语言定义的关键字相同,但可以与预定义的标识符相同。

11个常数:

1整数常量十进制、八进制(从0开始)和十六进制(从0x开始)没有负数。

2实常数2.78(小数点后至少有一边必须有数字)5.48 e-3(e前必须有数字,e后必须有整数)。

3字符常量a .通用字符‘a’;b .转义字符:通用转义字符和八进制\十六进制转义字符。\n ',' \\ ',' \t ',' \ ',' \64 ',' \82 ',' \x42 ',' \xff ',' a12 '。

4字符串常量“a”与“a”

十二个变量1。必须在使用前定义;2个变量,3个元素,变量类型,变量名,变量值

例1:下面是A. 02 B. 0 C.038 D.0xAL,不是C语言的塑性常数。

例2:法定实数常数为a.5e2.0b.e-3c.2e0d1.3e。

例3:如果有一个语句char a;;为了将字符a赋给变量a,下面正确的赋值表达式是

" a" B.a='a' C.a="97" D.a='97 '

例4:以下法律定义是:

A.float _ a = 1.1e-1;b .双b = 1+5e 2.5;C.long do = 0xfdaLd . float 2 _ and = 1-e-3;

十三。余数原理:1。两边都应该是整数;

2.首先求余数的绝对值,余数与被除数的符号相同。请特别注意“%”和“/”之间的区别。-10/3 10/-3

14.赋值运算符和表达式:运算顺序是从右到左,左边必须是变量(可以装东西)。

A=b=c=10(这个在定义上做不到);x+y = 10;x+1 = 10;

15.逗号表达式:a=(b=5,b+10);b=(a=4*9,a*2),a-3;考虑优先级。

十六。类型转换char a = ' aint b = 32浮动c = 32.5双s,d = 32s = a+b+c+d;

十七。强制类型转换浮动b = 3.5int a;a =(int)b;

例5:set int x = 11;表达式(x++*1/3)的值是一个3 B 4。

例6: Int A = 1,B = 1,C = 1;a = a+++b+++c;a、b、c的最终值为:a = 4;b = 2;c = 1;

例7:有以下定义和句群:float x = 1;int y = 2;y+= ++ x * ++ x;y的最终值是:11。

例8:int x = 2;printf("%d ",((x=4*5,x*5),x+25));45

例9:如果变量已经被正确定义和赋值,下面符合C语言语法的表达式是

a . a:= b+1 b . a = b = c+2 c . int 18.5% 3d . a = a+7 = c+b

十八种输入输出格式ch = getchar();putchar(ch);scanf("%d%f%c ",& amp一,& ampb & amp;c);printf("%d,%d ",a,b);

例10:有以下程序,输出结果为

main(){ int a;char c = 10;float f = 100.0;双x;

a = f/= c * =(x = 6.5);printf(" % d % d % 3.1f % 3.1f \ n ",a,c,f,x);}1 65 1.5 6.5(习题集2.13)

十九。逻辑运算及其短路现象(用于逻辑与和逻辑或)

20.关系运算符和表达式a & gtb & gtc优先级应该是明确的(即off >逻辑)

21.条件运算符和表达式a & gtb?答:c & gtD:c:d等价和a & gtb?答:(c & gtd?C:d)设A = 1,B = 2,C = 3,D = 4;四

例11:下面这个程序的输出是a . d = 0c = 50b . d = 0c = 2c . d = 1c = 50d . d = 1c = 2。

main(){int a=3,b=4,c=2,d;d = a & lt!b & amp& amp(c=50)>b;printf("d=%d c=%d ",d,s);}

22.if语句示例12:以下程序的输出结果是

int i=1,j=1,k = 2;if((j++ | | k++))& amp;& ampi++) printf("%d,%d,%d\n ",I,j,k);2,2,2

If-else语句注意:If之后只能管理一条语句。

main(){int a=2,b=-1,c = 2;如果(a & ltb)如果(b & lt0)c = 0;

else c++;printf("%d\n ",c);}

23.switch语句下面程序的输出是:main(){int x=1,a=0,b = 0;

开关(x){情况0:b++;案例1:a++;案例二:a++;b++;} printf("a=%d,b=%d\n ",a,b)} a=2,b=1

24.while vs do-while

主()

{int i=0,n = 0;

而(n!= 0){ i++;++i} printf("%d ",I);

}

主()

{int i=0,n = 0;

do { i++;++i} while(n!=0);printf("%d ",I);

}

25分钟休息vs继续

注意:break语句只能出现在循环体和switch语句中,continue语句只出现在循环中。

主()

{int sum,I;sum = 0;for(I = 10;我& gt0;I-){ if(I & gt;5)继续;sum = sum+I;} printf("%d\n ",sum);}

例13:下面这个程序的输出是:main(){int a,y;a = 5;y = 0;a=7 y=7

do { a+= 2;y+= a;printf("a=%d y=%d\n ",a,y);如果(y & gt10)破位;} while(a = = 7);}a=9 y=16

例14:下面这个程序的输出是:main(){int k=4,n = 0;for(;n & ltk;){ n++;if(n%3!=0)继续;k-;}

printf("%d,%d\n ",k,n);} 3,3

26.一维数组的定义、初始值和引用。注意:int a[10]= { 0 };括号中的常量表达式,下标从0开始。例15:如果有定义,float y[5]={1,2,3 };那么下面的描述是正确的: ()

A.y不代表一个数组元素b .定义这个数组的时候没有指定数组的宽度,定义效果是一样的。

C.数组包含三个元素,D.A. [3]的值为3。

例16:下面这个程序的输出是:main(){int z,y[3]={2,3,4 };z = y[y[0]];printf("%d ",z);} 4

例17:下面这个程序的输出是:main () {int p [7] = {11,13,14,15,16,17。

while(我& lt7 & amp& ampp[I]% 2){ k = k+p[I];i++}printf("%d\n ",k);} 24

示例18:以下程序的输出是:

main(){int n[5]={0,0,0},I,k = 2;for(I = 0;我& ltk;i++)n[I]= n[I]+1;printf("%d\n ",n[k])} 0

27.二维数组的定义、初始值和引用

例19:main(){ int A[3][3]= { { 1,2},{3,4},{5,6}},I,j,s = 0;for(I = 1;我& lt3;i++)

for(j = 0;j & lt= I;j++)s+= a[I][j];printf("%d\n ",s)} 18

示例20:无法正确定义以下二维数组:

A int a[2][2]={{1},{ 2 } };B int a[][2]={1,2,3 };C int a[2][2]={{1},2,3 };D int a[2][]={{1,2},{3,4 } };

例21:如果A是一个m行n列的数组,那么a[i][j]是该数组的第()个元素。

a I * m+j B I * m+j+1 C I * n+j D I * n+j+1

28字符数组的定义、初始值和引用

1.char arr[10]={'h ',' e ',' l ',' l ',' o ' };2.char arr[]={'h ',' e ',' l ',' l ',' \ 0 ' };

3 . char arr[10]= { " hello " };4 . char arr[10]= " hello ";

二十九个字符串输入输出if charstr [10] = "hello ",arr[10]= " me ";

scanf("%s ",str);printf("%s ",str);gets(str);卖出(str);

strcpy(arr,str);strcmp(str,arr);strlen(str);strcat(str,arr);

示例22:以下程序的输出是:

main(){ char ST[20]= " hel \ 0lo \ t ";printf("%d%d\n ",strlen(st),sizeof(st))} 3,20

例23:下面这个程序的输出是:char s[]= " \ \ 141 \ 141 ABC \ t ";printf("%d\n ",strlen(s));九

三十个指针和字符串char * a;a= "你好";char a[10];a= "你好";

例24:下列选项中正确的语句组是:()a . chars[8];s={ "北京" };

b . char * s;s={ "北京" };c . char s[8];s= "北京";d . char * s;s= "北京";

参数函数的声明、定义和调用。

float add(浮点x,浮点y);/*函数声明*/

麦()

{int a=3.5,b=4.0,d;

d=add(a,b);/*函数调用*/

}

Float add(float x,float y)/*函数定义*/

{ return x+y;}

32个函数的嵌套调用和递归调用

double fun1(双a){ return a * = a;}

双fun2(双x,双y)

{双a=0,b = 0;

a = fun 1(x);b = fun 1(y);

return(int)(a+b);}

主()

{双w;w=fun2(1.1,2.0);

printf("%f\n ",w);}/*嵌套调用*/

长纤维(整数)

{ if(n & gt;2)返回(fib(n-1)+fib(n-2));

否则返回2;}

main(){printf("%d\n ",fib(3));}/*递归调用*/

33个函数中的值传递和地址传递(不管传递什么,本质上都是值传递,只有一个是地址值传递)

func(int a){ a = 100;} func(int a[]){ a[0]= 100;}

main(){ int a = 10;func(a);printf("%d ",a);} main(){ int a[1];a[0]= 10;func(a);printf("%d ",a[0]);}

三十四局部变量和全局变量:局部变量的存储类型分为auto、register和static三种,其中auto和register变量的存储空间是动态的,程序一结束它们的值就消失了。程序结束后,静态变量的值仍然存在。全局变量是静态变量。

int a = 5;

fun(int b){ static int a = 10;a++ = b++;printf("%d ",a);}

main(){ int c = 20;乐趣(c);a++ = c++;printf("%d\n ",a);} 3025如果给main加个fun(c)会怎么样?305025

35个宏命令和文件包括

#定义编号10

#define S(x) x*x/*只要把这三个define语句放到一个文件hong.h */

#define f(x) (x*x)/*在主函数前加一个# include“hong . h”,程序运行结果是一样的*/

main(){int i1,I2;I 1 = 1000/S(N);I2 = 1000/f(N);printf("%d %d ",i1,I2);}1000 10

36个指针变量的定义、初始化和操作

主()

int n=5,* p = & ampn;printf("地址是:%d\n ",p);

printf("数据为:%d\n ",* p);

printf(" & amp;*p是:%d\n ",& amp* p);

printf(" * & amp;nis:%d\n ",* & ampn);}

例24:定义int n = 0,* p = &;n;正确的赋值语句是:a . p = 1;p=&。n;选项A不行,因为一个地址值要存放在P中,对于选项B,因为P已经指向了存储单元N,所以实际上相当于n=5。

三十七个指针和一维数组

int a[10],* p;/*a不同于P,A是数组名是常量,a++不能执行;A+=1,P可以是*/

p = & ampa[0];p = a;/*这两个语句是等价的,都是让P指针指向这个数组*/

执行上述语句后:p[i]等价于a[I];*(p+i)等价于*(a+i)

三十八指针和二维数组:下面是引用二维数组第I行第J列元素的不同方式。

1.a[I][j];

2.因为a[i]表示第I行的第一个地址,a[i]+j表示第I行和第J列的地址,*(a[i]+j)表示第I行和第J列的值。

3.因为a[i]可以写成*(a+i),所以2中的表达式可以写成*(*(a+i)+j)。

4.把1中的a[i]改成*(a+i),下面不变,可以写成(*(a+i))[j]。

通过行指针引用二维数组

int a[4][4],(* p)[4];p = a;

通过指针数组引用二维数组元素

int *p[4],a[4][4];for(I = 0;我& lt4;i++)p[I]= a[I];

以上两个知识点如上赋值后,要引用I行J列的元素,只需要把A改成P即可..

四十一函数指针和指针函数

int f(int x){……} main(){ int(* p)();int a,b = 2;p = f;a =(* p)(b);a = f(b);a = p(b);……}

函数指针:返回值是指针(地址)的函数。int *func(int a,int b);

例25: int a [] = {0,1,2,3,4,5,6,7,8,9},* p = a,I;其中0

A.a[p-a]b . *(& amp;a[I]c . p . d . a[10]

例26:如果定义了int a[3][2];能正确表示T数组元素地址的表达式是a . &;a[3]b[2]a[3]c a[1]d . * a[2]

例28:下面这个程序的输出结果是:a . 69825 b . 63825 c . 53825d。53886 . 68686866666

main(){char ch[2][5]={"6937 "," 8254"},* p[2];int i,j,s = 0;for(I = 0;我& lt2;i++)p[I]= ch[I];

for(I = 0;我& lt2;i++)for(j = 0;p[I][j]& gt;'\0';j+= 2)s = 10 * s+p[I][j]--0;printf("%d\n ",s);}

四十二个结构体的定义和初始值

结构学生{ int num字符名称[10];} *p,stu[2]={{123,"张" },{124,"李" } };p = stu

typedef struct student { } STU在这个语句之后,你可以使用STU来定义结构变量。

例子:斯图a,* p;相当于struct学生a,* p;

参考43个结构变量

printf("%d ",stu[1]。num);printf("%d ",stu[1]。姓名);printf("%d ",p[1]-& gt;num);

printf("%d ",p[1]-& gt;姓名);printf("%d ",stu);这是错误的

malloc,calloc,free函数,链表的操作见书p120 int *p,*pint。float * q;p =(int *)malloc(sizeof(int));q =(float *)malloc(sizeof(float));pint=(int*)calloc(10,sizeof(int));免费(p);习题12第16章。

例29:下面的赋值语句是正确的:struct worker { int numchar * name}*p,a;

A.worker . num = 1;b . p . num = 1;c . * p . num = 1;d . a . num = 1;

例30:在16位pc环境下,以下程序的结果如下:(这个问题你只需要有印象,不需要深究)

结构工作线程{ int numchar * name} a;Main () {printf ("%d ",sizeof(a))} 4(32位的话为8)。

例31:有如下定义:structss { charname[10]:intage:charsex:} stu[3],* p = STD下列输入语句是错误的: ()

A.scanf("%d ",& amp(*p)。年龄);B.scanf("%s ",& amp标准名称);C.scanf("%c ",& amp标准[0]。性);D.scanf("%c ",& amp(p->;性));

因为std是地址的意思,而地址不应该是这样的,应该是& amp;(标准->;姓名);

四十五位运算~,< & lt、gt;& gt、|、& amp示例5.4

46文件打开和文件操作FILE * fpchar str[10]= " hello ";int a,b;

1.if((fp=fopen("in.dat "," Rb ")= = NULL)printf("无法打开文件!");/*特别注意文件的打开方式,尤其是以“w”、“r+”、“w+”、“a”的方式打开对文件的影响。*/

2.fclose(FP);/*关闭文件*/feof(FP);/*测试文件是否完成,如果完成则返回1,否则返回0*/

3.fseek (FP,12,seek _ set)/*将文件指针移动到文件起始位置后面的第12个字节*/

4.fseek (FP,12,seek _ end)/*将文件指针移动到文件的倒数第二个字节*/

5.fseek(fp,0,SEEK_SET) /*使用rewind(fp) */功能将文件指针移动到文件的开头

6.fseek (FP,12,seek _ end)/*将文件指针移动到文件的末尾*/

7.ftell(FP);ch = fgetc(FP);putc(ch,FP);fgets(str,n,FP);fputs(str,FP);

8.fscanf(fp," %d%d ",& amp一,& ampb);/*从fp指向的文件中取出的两个数分别存储在A和B中*/

9.fprintf(fp," %d%d ",a,b);/*将A和B中存储的数据输出(存储)到fp指向的文件*/

10.fread(str,size,count,FP);/*从fp指向的文件中取出size*count字节,存放在str数组中*/

11.fwrite(str,size,count,FP);/*在fp所指向的文件中的str数组中存储size*count字节*/

有相关书籍吗?这是我当年考试用的一些资料!希望对你有帮助!!