第11章 编译预处理和动态存储分配
- 格式:ppt
- 大小:217.00 KB
- 文档页数:13
一、C语言概述选择题(1)以下不正确的叙述是 DA)在C程序中,逗号运算符的优先级最低B)在C程序中,APH和aph是两个不同的变量C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值(2)请选出可用作C语言用户标识符的是 BA)void,define,WORDB)a3_b3,_123,IFC)FOR,--abc,CaseD)2a,Do,Sizeof(3)以下选项中,不能作为合法常量的是 BA)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0(4)以下4个选项中,不能看作一条语句的是 DA);B)a=5,b=2.5,c=3.6;C)if(a<5);D)if(b!=5)x=2;y=6;(5)下面四个选项中,均是不合法的用户标识符的选项是 CA)A P_0 doB)float la0_AC)b-a goto intD)_123 temp int(6)以下选项中不属于字符常量的是 BA)′C′B)′′C′′C)′\xCC′D) ′\072′(7)下面各选项中,均是C语言合法标识符的选项组是 BA)33 we autoB)_23 me _3ewC)_43 3e_ elseD)ER -DF 32(8)可在C程序中用作用户标识符的一组标识符是 AA)and B)Date C)Hi D)case_2007 y-m-d Dr.Tom Bigl(9)以下对C语言函数的有关描述中,正确的是 AA)在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参B)C函数既可以嵌套定义又可以递归调用C)函数必须有返回值,否则不能使用函数D)函数必须有返回值,返回值类型不定(10)以下关于long、int和short类型数据占用内存大小的叙述中正确的是 DA)均占4个字节B)根据数据的大小来决定所占内存的字节数C)由用户自己定义D)由C语言编译系统决定(11)C语言规定,在一个源程序中,main函数的位置 CA)必须在最开始B)必须在系统调用的库函数的后面C)可以任意D)必须在最后(12)以下叙述中错误的是 DA)计算机不能直接执行用C语言编写的源程序B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件D)后缀为.obj和.exe的二进制文件都可以直接运行(13)下列选项可以正确表示字符型常量的是 AA)′\r′B)"a"C)"\897"D)296(14)以下叙述中正确的是 AA)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数C)main()函数必须放在其他函数之前D)C函数定义的格式是K&R格式(15)下列叙述中错误的是 AA)一个C语言程序只能实现一种算法B)C程序可以由多个程序文件组成C)C程序可以由一个或多个函数组成D)一个C函数可以单独作为一个C程序文件存在(16)下面四个选项中,均是不正确的八进制数或十六进制数的选项是 DA)016 0x8f 018B)0abc 017 0xaC)010 -0x11 0x16D)0a12 7ff -123(17)以下叙述不正确的是 DA)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面(18)以下不合法的用户标识符是 CA)j2_KEYB)DoubleC)4dD)_8_(19)下列是用户自定义标识符的是 AA)_w1B)3_xyC)intD)LINE-3(20)若有说明语句:char c=′\72′;则变量c AA)包含1个字符B)包含2个字符C)包含3个字符D)说明不合法,c的值不确定(21)算法中,对需要执行的每一步操作,必须给出清楚、严格的规定。
(1)有以下程序main(){ char p[]={'a', 'b', 'c'}, q[]="abc";printf("%d %d\n", sizeof(p),sizeof(q)); };程序运行后的输出结果是A)4 4 B)3 3 C)3 4 D)4 3(2)有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3 D)64, 64(3)有以下程序main(){ char a[7]="a0\0a0\0";int i,j;i=sizeof(a); j=strlen(a);printf("%d %d\n",i,j);}程序运行后的输出结果是A)2 2B)7 6D)6 2(4)以下叙述中正确的是A)预处理命令行必须位于源文件的开头B)在源文件的一行上可以有多条预处理命令 C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间(5) 有以下程序main( ){ char a[]=”abcdefg”,b[10]=”abcdefg”;printf(“%d%d\n”,sizeof(A) ,sizeof(B) );}执行后输出结果是A) 7 7 B) 8 8 C) 8 10 D) 10 10(6) 有以下程序#define f(x) x*xmain( ){ int i;i=f(4+4)/f(2+2);printf(“%d\n”,i);}执行后输出结果是A) 28 B) 22 C) 16 D) 4(7) 有以下程序#include <stdio.h>#define F(X,Y) (X)*(Y)main (){ int a=3, b=4;printf("%d\n", F(a++,b++));}程序运行后的输出结果是A) 12 B) 15 C) 16 D) 20(8) 有以下程序main(){ char s[]="\n123\\";printf("%d,%d\n",strlen(s),sizeof(s));}执行后输出结果是A) 赋初值的字符串有错 B) 6,7 C) 5,6 D) 6,6(9) 有以下程序main(int arge,char *argv[]){ int n,i=0;while(arv[1][i]!='\0'{ n=fun(); i++;}printf(%d\n",n*argc);}int fun(){ static int s=0;s+=1;return s;}假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行 exam 123<回车>则运行结果为(10) 有以下程序main(){ char a[ ]={…a‟,…b‟,…c‟,…d‟, …e‟, …f‟, …g‟,…h‟,…\0‟}; int i,j;i=sizeof(a); j=strlen(a);printf(“%d,%d\b”i,j);}程序运行后的输出结果是A)9,9 B)8,9 C)1,8 D)9,8(11) 程序中头文件typel.h 的内容是:#define N 5#define M1 N*3程序如下:#define “type1.h”#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 30(12) 有以下程序#include <stdlib.h>main(){ char *p,*q;p=(char*)malloc(sizeof(char)*20); q=p;scanf(“%s%s”,p,q);printf(“%s%s\n”,p,q);}若从键盘输入:abc def<回车>,则输出结果是:A) def def B) abc def C) abc d D) d d(13) 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是A) p=2*(int*)malloc(sizeof(int));B) p=(int*)malloc(2*sizeof(int));C) p=(int*)malloc(2*2);D) p=(int*)calloc(2,sizeof(int));(14) 以下程序的输出结果是main(){ char st[20]= “hello\0\t\\\”;printf(%d %d \n”,st rlen(st),sizeof(st));}A) 9 9 B) 5 20 C) 13 20 D) 20 20(15) 以下程序的输出结果是amovep(int p, int (a)[3],int n){ int i, j;for( i=0;i<;i++)for(j=0;j<n;j++){ *p=a[i][j];p++; }}main(){ int *p,a[3][3]={{1,3,5},{2,4,6}};p=(int *)malloc(100);amovep(p,a,3);printf(“%d %d \n”,p[2],p[5]);free(p);}A) 56 B) 25 C) 34 D) 程序错误(16) 以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 12(17) 以下程序的输出结果是A) 16 B) 2 C) 9 D) 1#define SQR(X) X*Xmain(){ int a=16, k=2, m=1;a/=SQR(k+m)/SQR(k+m);printf(“d\n”,a);}(18) 若定义了以下函数:void f(……){……*p=(double *)malloc( 10*sizeof( double));……}p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是A) double *p B) float **p C) double **p D) float *p(19) 有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6 C) 7 D) 8(20) 下列程序执行后的输出结果是A) 6 B) 8 C) 10 D) 12#define MA(x) x*(x-1)main(){ int a=1,b=2; printf("%d \n",MA(1+a+b));}(21) 若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);(22) 以下程序的输出结果是A) 1 B) 4 C) 7 D) 5#includeint a[3][3]={1,2,3,4,5,6,7,8,9,},*p;main( ){ p=(int*)malloc(sizeof(int));f(p,a);printf("%d \n",*p);}f(int *s,int p[][3]){ *s=p[1][1];}(23) 以下程序的输出结果是A) 9 B) 6 C) 36 D) 18#define f(x) x*xmain( ){ int a=6,b=2,c;c=f(a) / f(b);printf("%d \n",c);}(24) 以下程序运行后,输出结果是A) 49.5 B) 9.5 C) 22.0 D) 45.0#include<stdio,h>#define PT 5.5#define S(x) PT* x * xmain(){ int a=1,b=2;printf("%4.1f\n",S(a+b));}(25) 以下程序运行后,输出结果是A) 1 B) 7 C) 9 D) 11fut(int **s, int p[2][3]){ **s=p[1][1];}main(){ int a[2][3]={1,3,5,7,9,11}, *p;p=(int *) malloc(sizeof(int));fut(&p,a);printf("%d\n",*P);}(26) 设有以下宏定义:#define N 3#define Y(n) ( (N+1)*n)则执行语句:z=2 * (N+Y(5+1));后,z的值为A) 出错 B) 42 C) 48 D) 54(27) 若有说明,double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是 A)*p=&a; scanf("%lf",p); B)p=(double *)malloc(8);scanf("%f",p);C) p=&a;scanf("%lf",a); D)p=&a; scanf("%le",p);(28) 执行下面的程序后,a的值是#define SQR(X) X*Xmain( ){ int a=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a); }A) 10 B) 1 C) 9 D) 0(29) 以下程序的输出结果是fut (int**s,int p[2][3]){ **s=p[1][1]; }main( ){ int a[2][3]={1,3,5,7,9,11},*p;p=(int*)malloc(sizeof(int));fut(&p,a);primtf("%d\n",*p); }A) 1 B) 7 C) 9 D) 11(30) 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元: int *p;p=__________ malloc( sizeof(int));则应填入A) int B) inst * C) (*int) D) (int *)(31) 请读程序:#include<stdio.h>#define SUB(X,Y) (X)*Ymain(){ int a=3, b=4;printf("%d", SUB(a++, b++));}上面程序的输出结果是A) 12 B) 15 C) 16 D) 20(32) 请读程序:#include<stdio.h>void fun(float *pl, float *p2, float *s){ s=( float * )calloc( 1, sizeof(float));*s=*p1+ *(p2++);}main(){ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;fun(a, b, s)printf("%f\n",*s);}上面程序的输出结果是A) 11.100000 B) 12.100000 C) 21.100000 D) 1.100000(33) 在宏定义#define PI 3.14159中,用宏名PI代替一个A) 单精度数 B) 双精度数 C) 常量 D) 字符串(34) 请选出以下程序段的输出结果#include<stdio.h>#define MIN(x,y) (x)<(y)? (x):(y)main(){ int i,j,k;i=10; j=15;k=10*MIN(i,j);printf("%d\n",k);}A) 15 B) 100 C) 10 D) 150(35) sizeof(double)是【35】。
c语言cpu分配内存的原则:
以下是一些关于C语言中内存分配的原则:
1.静态存储区:这部分内存是在程序编译时分配的,包括全局变量和静态变量。
这些
变量的生命周期是整个程序的执行期间。
2.栈内存:这部分内存是在程序执行期间动态分配的,主要用来存储函数调用的局部
变量和函数参数。
当函数执行结束时,这部分内存会自动释放。
3.堆内存:这是动态内存分配区域,通过malloc,calloc等函数分配。
当不再需要这部
分内存时,应使用free函数释放。
需要注意的是,如果不正确地使用这些函数(例如,试图释放同一块内存两次或者在释放内存后继续使用它),可能会导致程序崩溃或未定义的行为。
4.代码段:也称为文本段,这是用来存储程序的二进制代码的区域。
这部分内存通常
不可写,因为它是只读的,以防止程序意外地修改其指令。
5.运行时内存分配:C语言标准库提供了一些函数用于在运行时动态分配和释放内存,
如malloc()、calloc()、realloc()和free()。
这些函数允许程序员在运行时分配和释放内存,这在处理大量数据或需要根据程序运行情况动态调整数据结构大小时非常有用。
编译原理复习题一、填空题:1、编译方式与解释方式的根本区别在于(是否生成目标代码)。
2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。
3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。
4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。
5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。
6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。
7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。
8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。
9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。
10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。
11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。
12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。
13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。
全国计算机等级考试《二级C语言程序设计》复习全书【核心讲义+历年真题详解]最新资料,WORD格式,可编辑修改!目录第一部分备考指南......................................................第1章考试概述....................................................第2章复习技巧.................................................... 第二部分核心讲义......................................................【公共基础知识】....................................................第1章数据结构与算法..........................................第2章程序设计基础............................................第3章软件工程基础............................................第4章数据库设计基础..........................................【C语言程序设计】..................................................第1章程序设计基本概念........................................第2章C程序设计的初步知识....................................第3章顺序结构................................................第4章选择结构................................................第5章循环结构................................................第6章字符型数据..............................................第7章函数..................................................第8章地址和指针..............................................第9章数组..................................................第10章字符串.................................................第11章对函数的进一步讨论.....................................第12章C语言中用户标识符的作用域和存储类 .....................第13章编译预处理和动态存储分配...............................第14章结构体、共用体和用户定义类型...........................第15章位运算.................................................第16章文件................................................. 第三部分历年真题及详解................................................全国计算机等级考试《二级C语言程序设计》真题及详解(一)............全国计算机等级考试《二级C语言程序设计》真题及详解(二)............全国计算机等级考试《二级C语言程序设计》真题及详解(三)............全国计算机等级考试《二级C语言程序设计》真题及详解(四)............全国计算机等级考试《二级C语言程序设计》真题及详解(五)............全国计算机等级考试《二级C语言程序设计》真题及详解(六)............ 第四部分模拟试题及讲解................................................全国计算机等级考试《二级C语言程序设计》模拟试题及详解(一)........全国计算机等级考试《二级C语言程序设计》模拟试题及详解(二)........第一部分备考指南第1章考试概述一、考试简介全国计算机等级考试(National Computer Rank Examination,简称NCRE),是经原国家教育委员会(现教育部)批准,由教育部考试中心主办,面向社会,用于考查应试人员计算机应用知识与技能的全国性计算机水平考试体系。