国家二级C语言机试(编译预处理和指针)模拟试卷7
- 格式:doc
- 大小:34.65 KB
- 文档页数:7
国家二级C语言机试(编译预处理和指针)模拟试卷6(总分:50.00,做题时间:90分钟)一、选择题(总题数:25,分数:50.00)1.设有某函数的说明为int*func(int a[10],int n);则下列叙述中,正确的是(分数:2.00)A.说明中的a[10]写成a[]或*a效果完全一样√B.形参a对应的实参只能是数组名C.func的函数体中不能对a进行移动指针(如a++)的操作D.只有指向10个整数内存单元的指针,才能作为实参传给a解析:解析:函数func为返回值为指针的函数,有两个形参,形参数组a为指针变量,保存实参数组的首地址,其元素个数由实参数组决定,因此说明中的a[10]写成a[]或*a效果完全一样。
2.设有定义:int x=0,*p;紧接着的赋值语句正确的是(分数:2.00)A.*p=NULL;B.p=NULL;√C.p=x;D.*p=x:解析:解析:定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址。
3.以下叙述中错误的是(分数:2.00)A.函数可以返回地址值B.改变函数形参的值,不会改变对应实参的值C.当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULLD.可以给指针变量赋一个整数作为地址值√解析:解析:指针变量的值只能是存储单元地址,而不能是一个整数,选项D)的描述是错误,为待选答案。
函数可以返回内存空间的地址,同时函数形参和实参分别占用不同的内存单元,改变形参的值不会改变对应实参的值,在头文件stdio.h中,NULL被定义为void型的指针。
4.设已有定义:float x;则以下对指针变量p进行定义且赋初值的语句中正确的是(分数:2.00)A.int*p=(float)x;B.float*p=&x;√C.float p=&x;D.float*p=1024;解析:解析:定义指针变量的一般形式为:类型名 *指针变量名 1,*指针变量名2……;。
国家二级C语言机试(操作题)模拟试卷7(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.给定程序中,函数fun的功能是:将形参S所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。
例如,形参s 所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <string.h>#include <ctype.h>int fun(char *s){ int sum=0;while(*s) {/**********found**********/if(isdigit(*s))sum+=*s____1____;/**********found**********/____2____;}/**********found**********/return____3____;}main( ){ char s[81];int n;printf(“\nEnter a string:\n\n”);gets(s);n=fun(s);printf(“\nThe result is:%din\n”,n);}正确答案:(1)48或’0’(2)s++(3)sum解析:第一空:“if(isdigit(*s)) sum+=*s-___1___;”如果木s是数字字符的话,sum累加其对应的数字的和,第一空处是将*s转化为对应的数字,由审题分析可知,第一空为“‘0’”或“48”,’0’的ASCII码值为48。
第二空:“while(*s)”循环的终止条件是达到s字符串的结束,因此在循环体内s应该不断往字符串尾移动,故第二空处应为“s++”。
国家二级C语言(函数、指针、编译预处理和动态存储分配)机试模拟试卷2(题后含答案及解析)题型有:1. 选择题选择题1.若有定义语句double a,*p=&a;,下列叙述中错误的是( )。
A.定义语句中的*号是一个间址运算符B.定义语句中的*号是一个说明符C.定义语句中的p只能存放double类型变量的地址D.定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p正确答案:A解析:在变量定义double a,水p=&a;中,木号是一个指针运算符,而非间址运算符,所以A错误。
知识模块:指针2.有以下程序:#include<stdio.h>main( ) { int a=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(‘‘%d\n’’,c);} 程序的运行结果是( )。
A.1B.2C.3D.4正确答案:C解析:该程序中int*p1=&a,*p2=&b,*p=&c;指定义3个指针变量,并赋值,即使p1指向a;p2指向b;p指向c。
*p=*p1*(*p2);语句是给p所指的存储单元c赋值,就是p1所指的存储单元的值,即a的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3,因此C选项正确。
知识模块:指针3.有以下程序:#include<stdio.h>main( ) { int n.*pP=NULL;*p=&n:printf(‘‘Input n:’’);scanf(‘‘%d’’,&p);printf(‘‘output n:’’);printf(‘‘%d\n’’,p);} 该程序试图通过指针p为变量n读人数据并输出,但程序有多处错误,下列语句中正确的是( )。
A.int n,*p=NULL;B.*p=&n;C.scanf(‘‘%d’’,&p)D.printf(‘‘%d\n’’,p);正确答案:A解析:B选项的正确写法应为p=&n;C选项的正确写法应为scanf(‘‘%d’’,p);选项D的正确写法应为printf(‘‘%d\n’’,*p)。
国家二级C语言机试(操作题)模拟试卷365(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.给定程序中,函数fun的功能是:有N×N矩阵,将矩阵的外围元素顺时针旋转。
操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。
例如,若N=3,有下列矩阵: 1 2 3 计算结果为7 4 1 4 5 6 8 5 2 7 8 9 9 6 3 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!1 #include<stdio.h>2 #define N 43 void fun(int(*t)[N])4 { int j,r[N];5 for(j=0;j<N;j++)r[j]=t[0][j];6 for(j=0;j<N;j++)7 /**********found**********/8 t[0][N-j-1]=t[j][__1__];9 for(j=0;j<N;j++)10 t[j][0]=t[N-1][j];11 /**********found**********/12 for(j=N-1;j>=0;__2__)13 t[N-1][N-1-j]=t[j][N-1];14 for(j=N-1;j>=0;j--)15 /**********found**********/16 t[j][N-1]=r[__3__];17 }18 main( )19 {int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;20 printf(‘‘\nThe original array:\n’’);21 for(2=0;i<N;i++)22 {for(j=0;j<N;j++)printf(‘‘%2d”,t[i][j]);23 printf(‘‘\n’’);24 }25 fun(t);26 printf(‘‘\nThe result is:\n’’);27 for(i=0;i<N;i++)28 { for(j=0;j<N;j++)printf(‘‘%2d’’,t[i][j]);29 printf(‘‘\n’’);30 }31 }正确答案:(1)0 (2)j-- (3)j解析:第一空:由审题分析可知,此处是使第一列成为第一行,即把第一列元素移动到第一行,第一列元素是“t[j][0]”,第一行元素是“t[0][N-j-1]”,故第一空处应为“0”。
国家二级计算机考试c语言试题及答案一、选择题(每题2分,共20分)1. 下列关于C语言中变量的描述,错误的是:A. 变量名必须以字母开头B. 变量名可以包含数字和下划线C. 变量名区分大小写D. 变量名可以以数字开头答案:D2. C语言中,用于定义一个整型变量的关键字是:A. intB. floatC. doubleD. char答案:A3. 在C语言中,以下哪个运算符用于计算两个数的乘积?A. +B. -C. *D. /答案:C4. 下列哪个选项不是C语言中的控制结构?A. 顺序结构B. 选择结构C. 循环结构D. 函数结构5. 在C语言中,用于定义函数的关键字是:A. intB. voidC. returnD. function答案:B6. C语言中,用于声明一个字符型变量的关键字是:A. intB. charC. floatD. double答案:B7. 在C语言中,以下哪个选项是正确的注释方式?A. //B. /* */C.D. @@答案:B8. C语言中,用于定义一个浮点型变量的关键字是:A. intB. floatC. doubleD. char答案:B9. 在C语言中,以下哪个选项不是合法的整数常量?B. 0x1AC. 0123D. 1.23答案:D10. 在C语言中,以下哪个选项不是合法的标识符?A. _nameB. name2C. 2nameD. name-name答案:C二、填空题(每题2分,共20分)1. 在C语言中,使用________关键字可以定义一个数组。
答案:int2. C语言中,使用________函数可以输出格式化的字符串。
答案:printf3. 如果要定义一个指向整型数据的指针,应该使用________关键字。
答案:int*4. 在C语言中,使用________关键字可以定义一个结构体。
答案:struct5. 使用________函数可以获取当前系统时间。
答案:time6. 在C语言中,使用________关键字可以定义一个枚举类型。
国家二级C语言(C语言基础知识)机试模拟试卷7(题后含答案及解析)题型有:1. 选择题选择题1.计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是A.C语言程序仅可以编译执行B.C语言程序仅可以解释执行C.C语言程序既可以编译执行又可以解释执行D.以上说法都不对正确答案:A解析:C语言是编译型语言,只在编译链接后才能执行。
知识模块:C语言基础知识2.以下选项中关于程序模块化的叙述错误的是A.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块B.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序C.把程序分成若干相对独立的模块,可便于编码和调试D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序正确答案:B解析:如果应用结构化程序设计方法设计程序,那么可采用自顶向下,逐步细化的设计方法把若干独立模块组装成所要求的程序,知识模块:C语言基础知识3.以下叙述中正确的是A.在C语言程序设计中,所有函数必须保存在一个源文件中B.在算法设计时,可以把复杂任务分解成一些简单的子任务C.只要包含了三种基本结构的算法就是结构化程序D.结构化程序必须包含所有的三种基本结构,缺一不可正确答案:B解析:模块化设计思想,就是把复杂的任务分成简单的子任务,用函数或者过程描述子任务,C语言中一个程序可以包括多个源文件,每个源文件可以有若干个函数,结构化的程序由顺序结构、循环结构和选择结构三种基本结构组成,不一定全要包括这三种结构,而算法不等于程序。
知识模块:C语言基础知识4.以下叙述中正确的是A.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行B.C语言程序将从源程序中第一个函数开始执行C.main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等D.C语言规定必须用main作为主函数名,程序将从此开始执行正确答案:D解析:C语言规定必须以main作为主函数名。
计算机二级c语言考试题目及答案考试题目一:1. 下面哪个选项是 C 语言中的预处理指令?A. #includeB. intC. printfD. if答案:A. #include考试题目二:2. 在 C 语言中,如何声明一个整型变量?A. String num;B. int num;C. float num;D. num int;答案:B. int num;考试题目三:3. C 语言中的逻辑与运算符是什么?A. &&B. ||C. !D. &答案:A. &&考试题目四:4. 下面哪个选项是正确的C语言定义和初始化数组的方法?A. int arr[5] = {1, 2, 3, 4, 5};B. int arr[5] = (1, 2, 3, 4, 5);C. int arr = [1, 2, 3, 4, 5];D. int arr[5] = [1, 2, 3, 4, 5];答案:A. int arr[5] = {1, 2, 3, 4, 5};考试题目五:5. 下面程序的输出结果是什么?```c#include <stdio.h>int main() {int i = 5;if (i == 5) {printf("Hello, World!");}else {printf("Goodbye, World!");}return 0;}```A. Hello, World!B. Goodbye, World!C. 编译错误D. 运行错误答案:A. Hello, World!考试题目六:6. 下面哪个选项是 C 语言中的循环语句?A. chooseB. forC. switchD. if答案:B. for考试题目七:7. 在 C 语言中,如何访问数组的第一个元素?A. arr[0]B. arr[1]C. arr[-1]D. arr[first]答案:A. arr[0]考试题目八:8. 下面哪个选项是 C 语言中的条件语句?A. do-whileB. switchC. breakD. continue答案:B. switch考试题目九:9. 下面哪个选项是 C 语言中的自增运算符?A. +=B. -=C. ++D. --答案:C. ++考试题目十:10. 下面程序的输出结果是什么? ```c#include <stdio.h>int main() {int i = 0;while (i < 5) {printf("%d ", i);i++;}return 0;}```A. 0 1 2 3 4B. 1 2 3 4 5C. 0 1 2 3 5D. 编译错误答案:A. 0 1 2 3 4以上是计算机二级C语言考试题目及答案。
国家二级C++机试(数据结构与算法)模拟试卷7(题后含答案及解析)题型有:1. 选择题选择题1.下列叙述中正确的是( )。
A.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B.循环队列中的元素个数随队头指针的变化而动态变化C.循环队列中的元素个数随队尾指针的变化而动态变化D.循环队列中的元素个数不会变化正确答案:A解析:所谓循环结构就是将队列存储空间的最后一个位置绕到第一个位置上,形成逻辑上的环状空间,循环使用。
在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针from指向队头元素的前一个位置,因此,队列中的元素数等于从队头指针舶nt指向的后一个位置与队尾指针rear指向位置之间的元素数量。
知识模块:数据结构与算法2.下列关于线性链表的叙述中,正确的是( )。
A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C.进行插入与删除时,不需要移动表中的元素D.以上都不正确正确答案:C解析:线性表的链式存储结构称为线性链表。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
知识模块:数据结构与算法3.下列叙述中正确的是( )。
A.线性表链式存储结构的存储空间一般要少于顺序存储结构B.线性表链式存储结构与顺序存储结构的存储空间都是连续的C.线性表链式存储结构的存储空间可以是连续的,也可以是不连续的D.以上都不正确正确答案:C解析:线性表的存储分为顺序存储和链式存储。
在顺序存储中,所有元素所占的存储空间是连续的。
而在链式存储的方式中,将存储空间的每一个存储结点分为两部分,一部分用于存储数据元素的值,称为数据域;另一部分用于存储下一个元素的存储序号,称为指针域。
所以线性表的链式存储方式比顺序存储方式的存储空间要大一些。
国家二级C语言机试(选择题)模拟试卷100(题后含答案及解析) 题型有:1. 选择题选择题1.数据结构主要研究的是数据的逻辑结构、数据的运算和( )。
A.数据的方法B.数据的存储结构C.数据的对象D.数据的逻辑存储正确答案:B解析:数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。
2.一棵二叉树的前序遍历结果是ABCEDF,中序遍历结果是CBAEDF,则其后序遍历的结果是( )。
A.DBACEFB.CBEFDlAC.FDAEBCD.DFABEC正确答案:B解析:由于该二叉树的前序遍历结果是ABCEDF,显然A结点为根结点,所以后序遍历时A结点是最后遍历的,其后序遍历的结果为CBEFDA。
3.在数据处理中,其处理的最小单位是( )。
A.数据B.数据项C.数据结构D.数据元素正确答案:B解析:数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加工处理的信息载体,数据处理的最小单位是数据项。
4.在数据库系统的内部结构体系中,索引属于( )。
A.模式B.内模式C.外模式D.概念模式正确答案:B解析:内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备级上(如磁盘及磁盘操作)。
5.以下( )不属于对象的基本特征。
A.继承性B.封装性C.分类性D.多态性正确答案:A解析:对象具有特征:标识惟一性,指对象是可区分的:分类性,指可以将具有相同属性和操作的对象抽象成类;多态性,指同一个操作可以是不同对象的行为;封装性,从外面看只能看到对象的外部特征,而不知道也无需知道数据的具体结构以及实现操作的算法:模块独立性好,对象是面向对象的软件的基本模块,对象内部各种元素彼此结合得很紧密,内聚性强。
6.数据库系统的核心是( )。
国家二级(C语言)机试模拟试卷120(总分86,考试时间90分钟)1. 选择题1. 下列关于栈和队列的描述中,正确的是( )。
A. 栈是先进先出B. 队列是先进后出C. 队列允许在队头删除元素D. 栈在栈顶删除元素2. 已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历序列是( )。
A. ABCDEB. ECABDC. EACDBD. CDEAB3. 在数据流图中,带有箭头的线段表示的是( )。
A. 控制流B. 数据流C. 模块调用D. 事件驱动4. 结构化程序设计的3种结构是( )。
A. 顺序结构,分支结构,跳转结构B. 顺序结构,选择结构,循环结构C. 分支结构,选择结构,循环结构D. 分支结构,跳转结构,循环结构5. 下列方法中,不属于软件调试方法的是( )。
A. 回溯法B. 强行排错法C. 集成测试法D. 原因排除法6. 下列选项中,不属于模块间耦合的是( )。
A. 内容耦合B. 异构耦合C. 控制耦合D. 数据耦合7. 下列特征中不是面向对象方法的主要特征的是( )。
A. 多态性B. 标识惟一性C. 封装性D. 耦合性8. 在数据库设计中,将E—R图转换成关系数据模型的过程属于( )。
A. 需求分析阶段B. 概念设计阶段C. 逻辑设计阶段D. 物理设计阶段9. 在一棵二叉树上,第5层的结点数最多是( )。
A. 8B. 9C. 15D. 1610. 下列有关数据库的描述,正确的是( )。
A. 数据库设计是指设计数据库管理系统B. 数据库技术的根本目标是要解决数据共享的问题C. 数据库是一个独立的系统,不需要操作系统的支持D. 数据库系统中,数据的物理结构必须与逻辑结构一致11. 以下关于C语言的叙述中正确的是( )。
A. 预处理命令通常位于函数体外面,但也可以位于函数体中间B. C语言中的变量定义须在其他语句之前C. 在C语言程序的书写中,一个语句必须单占一行D. —个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的ma1n函数12. 下列叙述中错误的是( )。
国家二级C语言机试(编译预处理和指针)模拟试卷7(总分:56.00,做题时间:90分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序:#include<stdio.h>void main() void fun(char*c) {char s[81];{while(*c) gets(s);fun(s);puts(s); {if(*c>='a'&&*c<='z')*c=*c-('a'-'A'); } c++: }} 当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是(分数:2.00)A.HELLO BEIJING √B.Hello BeijingC.hello BeijingD.hELLO Beijing解析:解析:子函数fun的功能是把小写字母转换成大写字母,所以程序的输出结果为选项A)。
2.有以下程序#include<stdio.h>void f(int*p,int*q) void f(int*p,int*q);{ main() p==p+1;*q=*q+1; { int m=1,n=2,*r=&m; } f(r,&n);printf("%d,%d",m,n); }程序运行后的输出结果是(分数:2.00)A.2,3B.1,3 √C.1,4D.1,2解析:解析:本题考查函数的调用与指针。
fun()函数的作用是:使指针p指向原来所指变量的下一个变量,使q指针指向的值加1。
主函数中,指针r指向m,调用fun()函数的结果是,使r指向地址位于m后面的变量,使位丁n的地址上的变量(就是n)的值加1,因此,结果为1,3。
3.有以下程序 #include<stdio.h> main() void fun(int*a,int*b) { int x=3,y=5,*p=&x,*q=&y;{ int*c;fun(p,q);printf("%d,%d,",*p,*q);c=a;a=b;b=c;} fun(&x,&y);printf("%d,%d\n",*p,*q);}程序运行后的输出结果是(分数:2.00)A.3,5,5,3B.3,5,3,5 √C.5,3,3,5D.5,3,5,3解析:解析:本题考查函数的调用与指针。
p和q分别为指向x和y的指针,函数fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。
而主函数中,fun(p,q)、fun(&x,&y)的实参均为x与y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。
4.有下列程序:void f(int b[]) {int I;for(i=2;i<6;i++)b[i]*=2;} main() {int a[10]={1,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0;i<10,i++)printf("%d,",a[i]);}程序运行后的输出结果是(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,3,4,10,12,14,16,9,10,C.1,2,6,8,10,12,7,8,9,10,√D.1,2,6,8,10,12,14,16,9,10,解析:解析:函数void f(int b[])的功能是对数组b[]中第2个到第5个元素的值逐个扩大2倍。
所以在main()函数中,f(a)语句的作用是对数组a[10]中从a[2]到a[5]的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,9,10}。
5.有以下程序 #include<stdio.h> int fun(char s[]) main() {int n==0; {char s[10]={'6','1','*','4','*','9','*','0','*'};while(*s<='9'&&*s>='0') printf("%d\n",fun(s));{n=10*n+*s-'0';s++;} } return(n);}程序的运行结果是(分数:2.00)A.61490B.61 √C.9D.5解析:解析:在fun函数中,while循环的功能是逐个取字符数组s的字符判断其是否是数字。
若是则将这些数字组成一个数保存到变量n中,并返回变量n的值。
所以在主函数中调用fun(s)时,将把字符数组s中的数字组成一个数输出。
因为当指针s指向数组的第3位时,即字符'*',循环条件不成立,循环结束,返回n的值。
所以输出n的值为61。
6.若有以下程序 #include<stdio.h> void sp(int*a){ int b=2; main(){int k=3,*p=&k; a=&b;sp(p); *a=*a*2; printf("%d,%d\n",k,*p); printf("%d,",*a);} }则程序的输出结果是(分数:2.00)A.4,3,4B.4,3,3 √C.6,3,6D.6,6,6解析:解析:主函数中定义指针变量p指向k,调用函数sp(p),将k的地址传递给形参指针a,函数转到sp运行,a指向b的地址,表达式*a=*a*2,相当于b=b*2,得到*a的数据4输出。
函数调用结束,此时a 和b的空间撤销,而对实参k和p的值并没有改变,仍旧是3。
7.若有以下程序 #include<stdio.h> int k=7: void f(int**s){int*t=&k; *s=t:printf("%d,%d,%d,",k,*t,**s);} main(){int i=3,*p=&i,**r=&p;f(r);printf("%d,%d,%d\n",i,*p,**r);}则程序的输出结果是(分数:2.00)A.3,7,7,7,7,7B.7,7,7,3,3,3C.3,3,3,7,7,7D.7,7,7,3,7,7 √解析:解析:本题考查了二级指针,二级指针可以保存一级指针的地址。
主函数中p指向i,r指向p,函数调用后s指向p,在f函数中t指向全局变量k=7,s指向t,同时s保存了实参p的地址,此时p也指向t,输出三个7,流程转到主函数,i的值为3,p以及r的值为7。
8.若有以下程序#include<stdio.h>int*f(int*s,int*t){int*k;if(*s<*t){ k=s;s=t;t=k;} return s;} main(){ int i=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*P,*q,*r);}则程序的输出结果是(分数:2.00)A.3,5,5,3,5B.5,3,5,3,5C.5,3,3,5,5D.3,5,3,5,5 √解析:解析:本题考查了返回值为指针的函数,函数f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。
最后返回比较大的元素的地址。
主函数中p指向i,q指向j,调用r=f(p,q),返回q的地址,因此*p=3,*q=5,*r=5。
9.若有以下程序#include<stdio.h>main(){int k=3;void sp(int*a){int b=2;sp(&k);*a=*a*2;printf("%d\n",k); printf("%d,",*a); } a=&b; *a=*a*2; pfintf("%d,",*a);}则程序的输出结果是(分数:2.00)A.6,4,6 √B.6,4,3C.6,12,12D.9,4,9解析:解析:本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实参的值。
主函数调用sp(&k),执行sp函数a指向向k,执行语句*a=*a*2后a指向空间的值k的值为6,改变a的指向以后,此时a指向b,则执行*a=*a*2以后,a指向空间b的值为4。
调用结束返回主函数,输出k的值为6。
10.若有以下程序#include<stdio.h>int k=7,m=5;void f(int**s){int*t=&k;s=&t;*s=&m;printf("%d,%d,%d,",k,*t,**s);} main(){int i=3,*p=&i,**r=&p; f(r); printf("%d,%d,%d\n",i,*P,**r);}则程序的输出结果是(分数:2.00)A.7,5,7,3,3,3,B.7,5,7,3,5,7,C.7,5,5,3,3,3,√D.7,7,5,3,3,3,解析:解析:本题考查二级指针作为函数的参数,可以通过函数调用来改变主函数中一级指针的指向。
主函数中指针变量p指向i,r指向p,调用f函数,形参指针s指向p,流程转到f函数执行,指针变量t指向k,s指向t,此时更改了s的指向,s指向了t,更改了s指向的地址空间内容为m的地址,同时t也指向变量m,因此**s的值为m的值,*t为m的值,k为7。
流程返回到主函数,没有对主函数空间的数据和指向作出更改,因此全部为3。
11.若有以下程序#include<stdio.h>int*f(int*s,int*t){int k;if(*s<*t){ k=*s;*s=*t;*t=k;} return s;} main(){int i=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}则程序的输出结果是(分数:2.00)A.3,5,5,3,5B.3,5,3,5,5C.5,3,5,3,5 √D.5,3,3,5,5解析:解析:函数f为返回值为指针的函数,主要功能是返回s和t指向空间值大的数据的地址,同时如何s指向空间数据大于t指向空间的数据,那么交换。