《二级C语言程序设计》章节题库(编译预处理和动态存储分配)【圣才出品】
c语言二级考试题库及详解答案
c语言二级考试题库及详解答案C语言二级考试题库及详解答案一、选择题1. 在C语言中,以下哪个选项是合法的标识符?A. 2variableB. variable2C. 3numberD. variable#答案:B2. C语言中,整型变量int所占的字节数是:A. 1字节B. 2字节C. 4字节D. 8字节答案:C(注:实际字节数可能因编译器和平台而异,但通常为4字节)3. 下列哪个不是C语言的控制语句?A. ifB. switchC. forD. goto答案:B(注:switch也是C语言的控制语句,此题有误)二、填空题1. 在C语言中,若要定义一个整型数组,可以使用以下语法:___________。
答案:int array_name[array_size];2. C语言中,用于计算两个数的乘积的运算符是:___________。
答案:*三、简答题1. 简述C语言中数组和指针的区别。
答案:数组是一种数据结构,用于存储相同类型的元素集合。
指针是一个变量,它存储了另一个变量的内存地址。
数组名可以作为指针使用,但数组本身不是指针。
数组的大小在定义时确定,而指针可以指向不同大小的内存块。
2. 解释C语言中的递归函数。
答案:递归函数是一种函数,它在执行过程中调用自己。
递归函数通常用于解决可以分解为相似子问题的问题。
递归函数必须有一个明确的终止条件,以避免无限递归。
四、编程题1. 编写一个C语言程序,实现求1到100的和。
答案:```c#include <stdio.h>int main() {int sum = 0, i;for(i = 1; i <= 100; i++) {sum += i;}printf("1到100的和是:%d\n", sum);return 0;}```2. 编写一个C语言函数,实现字符串反转。
答案:```cvoid reverseString(char *str) {int len = 0;while(str[len] != '\0') {len++;}for(int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - 1 - i];str[len - 1 - i] = temp;}}```五、论述题1. 论述C语言中函数的作用和重要性。
全国计算机二级《C语言》考试题库与答案
全国计算机二级《C语言》考试题库与答案全国计算机二级《C语言》考试题库与答案在学习、工作中,我们都离不开试题,借助试题可以检验考试者是否已经具备获得某种资格的基本能力。
什么样的试题才能有效帮助到我们呢?以下是店铺为大家收集的全国计算机二级《C语言》考试题库与答案,欢迎大家分享。
全国计算机二级《C语言》考试题库与答案篇1(1)下列关于栈叙述正确的是( )。
A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先被删除(2)下列叙述中正确的是( )。
A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D.以上说法都不正确某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( )。
A.3B.4C.6D.7软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。
下面属于应用软件的是( ):A.学生成绩管理系统B.c语言编译程序C.UNIX操作系统D.数据库管理系统(5)结构化程序所要求的基本结构不包括( )。
A.顺序结构B.GOT0跳转C.选择(分支)结构D.重复(循环)结构(6)下面描述中错误的是( )。
A.系统总体结构图支持软件系统的详细设计B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD图是软件详细设计的表示工具(7)负责数据库中查询操作的数据库语言是( )。
A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言一个教师可讲授多门课程,一门课程可由多个教师讲授。
则实体教师和课程间的联系是( )。
A.1:1联系B.1:m联系C.m:1联系D.m:n联系(9)已知大写字母A的ASCIl码值是65,小写字母a的ASCIl码值是97。
以下不能将变量C中的大写字母转换为对应小写字母的语句是( )。
全国计算机等级考试二级C语言真题题库22024年3月
由于计算机等级考试的试题是有版权的,根据版权法的保护,我不能为您提供具体的试题内容。
但是,我可以为您提供一些关于计算机等级考试二级C语言的常见考题类型和一些备考建议。
1.程序分析与设计该部分的考题主要着重考察考生对问题的分析能力和设计能力,需要考生能够根据题目要求进行程序结构设计、算法设计等。
备考建议:多阅读相关算法和数据结构的书籍,多进行程序练习和项目实践,提高自己的问题分析与设计能力。
2.C语言基础知识该部分的考题主要考察考生对C语言的基本知识掌握程度,包括C语言的基本语法、变量类型、运算符、控制语句、函数等。
备考建议:系统学习C语言基础知识,掌握C语言的基本语法和常用函数,多进行编码练习,增加对C语言的熟练度。
3.数组与字符处理该部分的考题主要考察考生对数组和字符处理的掌握程度,包括数组的定义和使用、字符的输入输出和处理、字符串的操作等。
备考建议:多进行数组和字符的练习题,掌握数组和字符的常见操作方法,多进行字符串处理的练习。
4.文件操作该部分的考题主要考察考生对文件操作的掌握程度,包括文件的打开和关闭、文件的读写等。
备考建议:学习文件操作的基本方法和函数,多进行文件的读写操作练习。
5.数据结构该部分的考题主要考察考生对数据结构知识的掌握程度,包括链表、栈、队列等数据结构的定义和操作。
备考建议:学习常见的数据结构知识,掌握相关的常用操作方法,多进行数据结构的练习。
在备考过程中,要注重理论知识的学习,同时也要注重实践操作的练习。
可以通过自己编写程序、参与项目实践或者进行在线编程练习等方式提高自己的编程技能。
此外,了解考试的命题规律,多进行模拟考试,提高自己的应考能力。
希望以上信息对您有所帮助,祝您考试顺利!。
全国计算机等级考试二级C语言程序设计真题精选3(含答案)
全国计算机等级考试二级C语言程序设计真题精选3一、单项选择题1.下列关于C语言文件的叙述中正确的是()。
A.文件由一系列数据依次排列组成,只能构成二进制文件B.文件由结构序列组成,可以构成二进制文件或文本文件C.文件由数据序列组成,可以构成二进制文件或文本文件√D.文件由字符序列组成,其类型只能是文本文件解析:C语言将文件看作是一个字符(字节)的序列,即由一个一个字符(字节)数据顺序组成。
根据数据的组成形式,可将文件分为两种:①ASCII文件,又称文本(text)文件,它的每一个字节可放一个ASCII码,代表一个字符;②二进制文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。
所以C文件就是一个字节流或一个二进制流。
2.有以下程序:#includ<stdio.h>main()inm=1,n=2,*p=&m,*q=&n,*r; r=p,p=q;q=r; printf("%d,%d,%d,%",m,n,*p,*q);}程序运行后的输出结果是()。
A.1,2,1,2B.1,2.2,1 √C.2,1,2,1D.2,1.1,2解析:本题定义了两个整型变量,然后用两个指针分别指向这两个整型变量,接着对指针进行交换,那么原来指向第一个整数的指针将指向第二个整数,原来指向第二个整数的指针将指向第一个整数。
3.有以下程序:#includ<stdio.h>#include<string.h>strucAina;chab[10];doublc;};strucf (struct);main()struca={1001,"ZhangDa",1098.0}; a=f(a);printf ("%d,%s,%6.1",a.a,a.b,a.c);}strucf(struct)t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;returt;}程序运行后的输出结果是()。
计算机二级C语言章节练习题及答案
1.2算法1[填空题]一颗二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为【2】O参考解析:[2】DEBFCA【解析】根据二叉树的中序遍历原则可知D为二叉树的最左边的叶子结点,根据二叉树的前序遍历原则可知A是二叉树的根结点,就可以确定二叉树的结构,所以二叉树的后序遍历结果为:DEBFCA02[填空题]队列是限定在表的一端进行插入和在另一端进行删除操作的线性表。
允许删除的一端称作。
参考解析:队头【解析】队列是只允许在一端删除,在另一端插入的顺序表,在队列中。
允许插入的一端叫做“队尾”,允许删除的一端叫做“队头”。
3[填空题]在最坏情况下,堆排序需要比较的次数为。
参考解析:0(nlog2n)【解析】在最坏情况下,冒泡排序所需要的比较次数为n(nr1)/2;简单插入排序所需要的比较次数为n(n-1)/2;希尔排序所需要的比较次数为0(nl.5);堆排序所需要的比较次数为0(nlog2n)。
4[单选题]算法的有穷性是指()。
Λ,算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用参考答案:A参考解析:算法具有5个特性:①有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义。
③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
,④输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
⑤输出:一个算法有一个或多个输出。
5[单选题]下列叙述中正确的是()。
A.数据的逻辑结构与存储结构是一一对应的B.算法的时间复杂度与空间复杂度一定相关C.算法的效率只与问题的规模有关,而与数据的存储结构无关D.算法的时间复杂度是指执行算法所需要的计算工作量参考答案:D参考解析:根据时间复杂度和空间复杂度的定义可知,算法的时间复杂度与空间复杂度并不相关。
计算机二级C语言第12章 编译预处理与动态存储分配
正确答案:D 【解析】ANSI C标准规定malloc函数的返回值类型为void *,要是p指向double类型的动态存储单 元,需要使用强制类型转换double *,本题答案为D。
假设short int型数据占2字节、float型数据占4字节存储单元,则以下程序段将使Pi指向一个short int类型的存 储单元,使pf指向一个float类型的存储单元: short int *pi; float * pf; pi = ( short * ) malloc ( 2 ); pf = ( float * ) malloc(4); malloc函数返回的指针为void *(无值型),在调用函数时,必须利用强制类型转换将其转成所需的类型。上面的 程序段中,调用malloc函数时括号中的*号不可少,否则就转换成普通变量类型而不是指针类型了。
C语言中还有一种称作“动态存储分配”的内存空间分配方式:在程序执行期间需要空间来 存储数据时, 通过“申请”得到指定的内存空间;当有闲置不用的空间时,可以随时将其释放,由系统另作他用。
malloc函数
函数的调用形式为:malloc ( size)。
该函数包含在头文件stdlib.h里,返回值的类型为void *, malloc函数用来分配size个字节的存储区,返回一 个指向存储区首地址的基类型为void的地址。若没有足够的内存单元供分配,函数返回空(null)。
目录页
CONTENTS PAGE
计算机二级C语言 第12章 编译预处理与动态存储分配
所谓“编译预处理”就是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命 令行进行处理的过程。 预处理命令行必须在一行的开头以“#”号开始,每行的末尾不得用“;”号结束。 这些命令行的语法与C语言中其他部分的语法无关。根据需要,命令行可以出现在程序的任何一行的开 始部位,其作用一直持续到源文件的末尾。 重点是:#define 和 #include 命令行
《全国计算机等级考试二级教程——C语言程序设计》课后题及参考答案
《全国计算机等级考试二级教程——C语言程序设计》课后题及参考答案《全国计算机等级考试二级教程——C语言程序设计》课后题及参考答案(教育部考试中心)高等教育出版社出版(第一章、第二章、第三章)第一章程序设计基本概念1.1 在TRUBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是______。
答案:.exe1.2 C语言源程序文件的后缀是_____,经过编译后,生成文件的后缀是_____,经过连接后,生成文件的后缀是_____。
答案:.c .obj .exe1.3 结构化程序由_____、_____、_____三种基本结构组成。
答案:顺序、选择、循环第二章 C程序设计的初步知识一、选择题2.1 以下选项中正确的整型常量是A)12. B)-20 C)1,000 D)4 5 6答案:B2.2 以下选项中正确的实型常量是A)0 B)3. 1415 C)0.329×10(2)(10的2次方)D).871答案:D2.3 以下选项中不正确的实型常量是A)2.607E-1 B)0.8103e 2 C)-77.77 D)456e-2答案:B2.4 以下选项中不合法的用户标识符是A)abc.c B)file C)Main D)PRINTF答案:A2.5 以下选项中不合法的用户标识符是A)_123 B)printf C)A$ D)Dim答案:C2.6 C语言中运算对象必需是整型的运算符是A)% B)/ C)! D)**答案:A2.7 可在C程序中用作用户标识符的一组标识符是A)void define WORDB)as_b3 _123 IfC)For -abc caseD)2c DO SIG答案:B2.8 若变量已正确定义并赋值,符合C语言语法的表达式是A)a=a+7; B)a=7+b+c,a++ C)int(12.3%4) D)a=a+7=c+b答案:B2.9 以下叙述中正确的是A)a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。
计算机二级C语言章节练习题及答案
计算机二级C语言章节练习题及答案2017年计算机二级C语言章节练习题及答案计算机二级统一成绩查询入口为教育部考试中心,部分省市如江苏、黑龙江等也可通过省市考试院或者人事考试中心进行查询。
这是店铺准备的2017年计算机二级C语言章节练习题及答案,快来看看吧。
1.1 程序和程序设计1[单选题] 数据库概念设计的过程中,以下各项中不属于视图设计设计次序的是( )。
A.自顶向下B.由整体到个体C.由内向外D.由底向上参考答案:B参考解析:数据库概念设计的过程中,视图设计一般有三种设计次序,它们是:自顶向下。
这种方法是先从抽象级别高且普遍性强的对象开始逐步细化、具体化与特殊化。
由底向上。
这种设计方法是先从具体的对象开始,逐步抽象,普遍化与一般化,最后形成一个完整的视图设计。
由内向外。
这种设计方法是先从最基本与最明显的对象着手逐步扩充至非基本、不明显的其他对象。
2[单选题] 关系数据库管理系统能实现的专门关系运算包括( )。
A.选择、投影、连接B.排序、查找、统计C.关联、更新、排序D.显示、打印、制表参考答案:A参考解析:关系数据库管理系统能实现的专门关系运算,包括选择运算、投影运算、连接运算。
3[单选题] 关系表中的每一横行称为一个( )。
A.字段B.元组C.行D.码参考答案:B参考解析:在关系数据库中,关系模型采用二维表来表示,简称“表”。
二维表由表框架及表元组组成。
在表框架中,按行可以存放数据,每行数据称为元组。
本题答案是B)。
4[单选题] 下列叙述中正确的是( )。
A.数据库不需要操作系统的支持B.数据库设计是指设计数据库管理系统C.数据库是存储在计算机存储设备中的、结构化的相关数据的集合D.数据库系统中,数据的.物理结构必须与逻辑结构一致参考答案:C参考解析:数据库是存储在计算机存储设备中的、结构化的相关数据的集合。
数据库中的数据不只是面向某一项特定的应用,而是面向多种应用,可以被多个用户、多个应用程序共享,不具有独立的系统。
2013年计算机二级C语言编译预处理和动态存储分配考点归纳
第13章编译预处理和动态存储分配考点归纳13.1 宏定义(不带参数的宏定义,带参数的宏定义)1.编译预处理就是对C源程序进行编译前,由″编译预处理程序″对预处理命令行进行处理的过程。
2.C语言中,凡是以″#″开头的行,都称为″编译预处理″命令行。
C语言中的编译预处命令有:#define,#undef,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#line,#pragma,#error。
这些预处理命令组成的预处理命令行必须在一行的开头以″#″号开始,每行的未尾不得加″;″号,以区别于C语句、定义和说明语句。
3.不带参数的宏定义:命令的一般形式为:#define 标识符字符串定义中的″标识符″为用户定义的标识符,称为宏名。
在预编译时,C预编译程序将出现的宏名替换成″字符串″的内容,这一过程也称为宏展开。
4.带参数的宏定义:命令的一般形式为#define宏名(形式参数) 字符串定义中的″字符串″应包含括号中所指定的形式参数。
注意宏名与括号之间不要加空格,否则就成为不带参数的宏定义了。
5.预编译时,遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换,原则是:遇到实参则以实参代替,非形参字符原样保留,从而成展开后的内容。
13.2 “文件包含”处理1.文件包含的一般形式为:#include″头文件名″#include<头文件名>头文件名一般由C语言提供,也可以是用户自己编写的,头文件通常用.h作为后缀。
2.当头文件名用双引号括起来时,系统首先在使用此命令的文件所在的目录中查找被包含的文件,找不到时,再按系统指定的标准方式检索其它目录;当头文件名用尖括号括起来时,则直接按系统指定的标准检索方式查找被包含的文件。
3.预编译时,将被包含文件的内容全部复制到包含文件中,这就是文件″包含处理″。
13.3 条件编译C语言中的条件编译命令可对源程序代码的各部分有选择地进行编译。
《全国计算机等级考试二级教程——C语言程序设计》课后习题详细解答及答案
《全国计算机等级考试二级教程——C语言程序设计》习题分析与详细解答第一章程序设计基本概念习题分析与解答1.1 【参考答案】EXE1.2 【参考答案】[1].C [2].OBJ [3].EXE1.3 【参考答案】[1]顺序结构[2]选择结构[3]循环结构第二章C程序设计的初步知识习题分析与解答一、选择题2.1 【参考答案】B)2.2 【参考答案】D)2.3 【参考答案】B)2.4 【参考答案】A)2.5 【参考答案】C)2.6 【参考答案】A)2.7 【参考答案】B)2.8 【参考答案】B)2.9 【参考答案】D)2.10 【参考答案】C)2.11 【参考答案】B)2.12 【参考答案】B)2.13 【参考答案】A)二、填空题2.14 【参考答案】[1]11 [2]122.15 【参考答案】[1]4.2 [2]4.22.16 【参考答案】[1]{ [2]} [3]定义[4]执行2.17 【参考答案】[1]关键字[2]用户标识符2.18 【参考答案】[1]int [2]float [3]double2.19 【参考答案】float a1=1.0, a2=1.0;或float a1=1, a2=1;(系统将自动把1转换为1.0)2.20 【参考答案】存储单元2.21 【参考答案】 3.52.22 【参考答案】[1]a*b/c [2]a/c*b [3]b/c*a2.23 【参考答案】把10赋给变量s2.24 【参考答案】[1]位[2]1位二进制数据(0或1)2.25 【参考答案】[1]8 [2]127 [3]01111111 [4]-128 [ 5 ] 100000002.26 【参考答案】[1]32767 [2]-32768 [3]10000000000000002.27 【参考答案】[1]十[2]八[3]十六三、上机改错题2.28 【分析与解答】第1行的错误:(1) include是一个程序行,因此在此行的最后不应当有分号(;)。
国家二级C语言(编译预处理和指针)机试模拟试卷4(题后含答案及解析)
国家二级C语言(编译预处理和指针)机试模拟试卷4(题后含答案及解析)题型有:1. 选择题选择题1.以下叙述中正确的是A.在C语言中,预处理命令行都以”#”开头B.预处理命令行必须位于C源程序的起始位置C.#include必须放在C程序的开头D.C语言的预处理不能实现宏定义和条件编译的功能正确答案:A解析:在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。
预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。
预处理命令有宏定义、文件包含和条件编译三类。
#include<stdio.h>命令行表示程序中要引用C标准函数库中的标准输入输出函数。
知识模块:编译预处理和指针2.有以下程序,程序运行后的输出结果是#include<stdio.h>#define S(x)4*(x)*x4+1void main( ){int k=5,j=2;printf(“%d\n”,S(k+j));} A.197B.143C.33D.28正确答案:B解析:这道题涉及到带参数的宏的定义和替换这个知识点。
在程序中定义了带参数的宏S(x),当在主函数中用参数k—+j调用宏S时,根据宏替换的原则,则S(k+j)=S(5+2)=4*7*5+2+1=143。
知识模块:编译预处理和指针3.有以下程序,程序运行后的输出结果是#include<stdio.h>#define fix)x*x*xmain( ){int a=3,s,t;s=f(a+1);t=f((a+1));printf(“%d,%d\n”,s,t);}A.10,10B.10,64C.64,10D.64,64正确答案:B解析:根据题目中宏f(x)的定义,运算过程应为:s=f(a+1)=a+1*a+1*a+1=a+a+a+1=10,因此最后s的结果为10,而t=f((a+1))=(a+1)*(a+1)*(a+1)=4*4*4=64的结果为64。
知识模块:编译预处理和指针4.若程序中有宏定义行:#define N 100则以下叙述中正确的是A.宏定义行中定义了标识符N的值为整数100B.上述宏定义行实现将100赋给标示符NC.在运行时用100替换标识符ND.在编译程序对C源程序进行预处理时用100替换标识符N正确答案:D解析:在C语言中,凡是以“#”号开头的行,都称为“编译预处理”。
计算机二级c语言考试试题及答案
计算机二级c语言考试试题及答案计算机二级C语言考试通常包括选择题、填空题、简答题和编程题等几种类型。
以下是一些模拟试题及答案,供参考:# 一、选择题1. 下列哪个是C语言的关键字?- A. `int`- B. `float`- C. `double`- D. `string`答案:A2. C语言中,以下哪个不是合法的变量名?- A. `my_var`- B. `2variable`- C. `variable_name`- D. `variable`答案:B3. 在C语言中,哪个运算符用于求余数?- A. `%`- B. `/`- C. `*`- D. `+`答案:A4. 以下哪个语句用于结束C程序?- A. `return 0;`- B. `exit(0);`- C. `end;`- D. `void main()`答案:A5. 在C语言中,数组的索引是从哪个数字开始的?- A. 0- B. 1- C. -1- D. 随机数答案:A# 二、填空题1. 在C语言中,`printf`函数用于______。
答案:输出信息2. 定义一个整型变量`a`并初始化为10,应使用语句:`int a =______;`答案:103. C语言中,`for`循环的一般形式为:`for(初始化表达式; 条件表达式; 迭代表达式) ______;`答案:{循环体}4. 字符串在C语言中以______字符结尾。
答案:'\0'5. 使用`scanf`函数从键盘读取数据时,需要在格式字符串中使用______来指定变量的地址。
答案:&# 三、简答题1. 请简述C语言中函数的作用和基本结构。
答案:函数是C语言中实现代码复用的一种方式。
一个函数通常用于执行一个特定的任务。
基本结构包括函数原型声明和函数定义。
函数原型声明了函数的返回类型、名称和参数列表。
函数定义则包含了函数的实现细节,即函数体。
2. 解释C语言中指针的概念及其用途。
计算机二级《C语言》考试题库与答案
计算机二级《C语言》考试题库与答案一、程序填空题(共18分)、下列给定程序中,函数flm的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的次序。
例如,s所指的字符串为“def35adh3kjsdt7”,执行后结果为“defadhajsdt3537”。
请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANKl.c中。
不得增行或删行,也不得更改程序的结构!二、程序修改题(共l8分)下列给定程序中函数fun的功能是:用冒泡法对6个字符串进行升序排列。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODIl.C中,不得增行或删行,也不得更改程序的结构!三、程序设计题(共24分)编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符为l,则输出3。
注意:部分源程序在文件PROCl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填人你编写的若干语句。
参考答案一、程序填空题【参考答案】(1)j++或j+=1或++j或j=j+1(2)s[i]=t1[i](3)j【考点分析】本题考查:指针型变量;数组变量赋值;for循环语句。
【解题思路】填空1:根据函致fun中的内容可知,数组t1存储了s中的非数字字符,数组口存储了s中的数字字符,为了存储下一个数字字符,下标j要进行加1操作。
填空2:将S串中的数字与非数字字符分开后,要先将非数字字符放入字符串s中,因此填入s[i]=t1[i]。
填空3:最后将敦字字符加到s串之后,并且i要小于数字的.个数j。
二、程序修改题【参考答案】(1)fh(j=i+1;j<6;j++)(2)*(pstr+i)=}(pstr+j);【考点分析】本题考查:冒泡排序算法;for循环语句格式;指针数组。
计算机二级c语言题库及答案
2016年计算机二级c语言题库及答案一、选择题(每小题1分,共40小题,共40分)1.设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。
现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为( )。
A.20B.0或35C.15D.162.下列关于栈的叙述中,正确的是( )。
A.栈底元素一定是最后入栈的元素B.栈操作遵循先进后出的原则C.栈顶元素一定是最先入栈的元素D.以上三种说法都不对3.下列链表中,其逻辑结构属于非线性结构的是( )0、A.双向链表B.带链的栈C.二叉链表D.循环链表4.在关系数据库中,用来表示实体间联系的是( )。
A.网状结构B.树状结构C.属性D.二维表5.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。
则实体部门和职员间的联系是( )。
A.1:m联系B.m:n联系C.1:1联系D.m:l联系6.右两个关系R和S如下:则由关系R得到关系S的操作是( )。
A.自然连接B.并C.选择D.投影7.数据字典(DD)所定义的对象都包含于( )。
A.软件结构图B.方框图C.数据流图(DFD图)D.程序流程图8.软件需求规格说明书的作用不包括( )。
A.软件设计的依据B.软件可行性研究的依据C.软件验收的依据D.用户与开发人员对软件要做什么的共同理解9.下面属于黑盒测试方法的是( )。
A.边界值分析B.路径覆盖C.语句覆盖D.逻辑覆盖10.下面不属于软件设计阶段任务的是( )。
A.制订软件确认测试计划B.数据库设计C.软件总体设计D.算法设计11.以下叙述中正确的是( )。
A.在C语言程序中,main函数必须放在其他函数的最前面B.每个后缀为C的C语言源程序都可以单独进行编译C.在C语言程序中,只有main函数才可单独进行编译D.每个后缀为.C的C语言源程序都应该包含一个main函数12.C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是( )。
《全国计算机等级考试二级教程——C语言程序设计》习题分析与解答(二)--3 4 5
《全国计算机等级考试二级教程——C语言程序设计》习题分析与解答(二)第三章顺序结构习题分析与解答一、选择题 (单选题)3.1 【参考答案】 C)3.2 【参考答案】 C)3.3 【参考答案】 D)3.4 【参考答案】 C)3.5 【参考答案】 D)3.6 【参考答案】 B)3.7 【参考答案】 C)3.8 【参考答案】 C)3.9 【参考答案】 A)3.10 【参考答案】 B)3.11 【参考答案】 C)3.12 【参考答案】 D)3.13 【参考答案】 D)3.14 【参考答案】 A)3.15 【参考答案】 C)3.16 【参考答案】 C)3.17 【参考答案】 C)3.18 【参考答案】 D)3.19 【参考答案】 C)3.20 【参考答案】 B)二、填空题3.21 【参考答案】(1) -200,2500 (2) i=-200,j=2500(3) i=-200j=25003.22 【参考答案】[1] 12 [2] 0 [3] 03.23 【参考答案】[1]一条语句[2]分号(或;)3.24 【参考答案】分号(;)3.25 【参考答案】[1]:100 25.82 1.89234[2]: 100 <回车符>25.82 <回车符>1.89234 <回车符>[3]:100 <制表符> 25.82 <制表符> 1.892343.26 【参考答案】 x=127, x= 127, x= 177,x= 7f, x= 1273.27 【参考答案】 x=127, x=127 , x=$127 ,x=$ 000127, x=%06d3.28 【参考答案】 a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500三、编程题和改错题3.29 【分析与解答】(1) 主函数名main后应有一对圆括号。
(2) 变量定义语句中,v的前面缺逗号。
全国计算机等级考试二级C语言程序设计真题精选6(含答案)
全国计算机等级考试二级C语言程序设计真题精选6一、单项选择题1.有以下程序:#includ<stdio.h>#defin4voifun(ina[][N],inb[])ini; for(i=0;i<N;i++)b[i]=a[i][i];}main()inx[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i; fun(x,y); for(i=0;i<N;i++)printf("%d,",y[i]); printf("");}程序运行的结果是()。
A.1,2,3,4,B.1,0,7,0, √C.1,4,5,9D.3,4,8,0解析:数组x有4列。
fun函数中for循环的作用是将二维数组前4行的对角线元素赋给b[0],b[1],b[2],b[3]。
在主函数中,二维数组初始化为{1,2,3},{4},{5,6,7,8},{9,10},所以可以看出对角线元素为1,0,7,0,。
2.有以下程序:#includ<stdio.h>main()chaa=4; printf("%",a=a<<1);}程序运行的结果是()。
A.40B.16C.8 √D.4解析:左移一位相当于原数乘以2,右移一位相当于除以2。
a<<1结果为4*2=8,没有超过char类型的范围。
3.一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。
A.12345ABCDEB.EDCBA54321 √C.ABCDE12345D.54321EDCBA解析:栈是按照“先进后出”的原则组织数据的,入栈的顺序为12345ABCDE,则出栈的顺序应为其逆序,即EDCBA54321。
4.有以下程序:#includ<stdio.h>strucstinx,y;data[2]={1,10,2,20};main ()strucs*p=data; printf("%d,",p->y);printf("%",(++p)->x);}程序运行的结果是()。
国家二级C语言(函数、指针、编译预处理和动态存储分配)机试模
国家二级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语言教程章节测试13.编译预处理和动态存储分配
二级C语言教程章节测试13.编译预处理和动态存储分配一、选择题(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 6C)7 2D)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#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) 有以下程序#includemain(){ 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”,strlen(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}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#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#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) 请读程序:#includevoid 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#define MIN(x,y) (x)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语言题库
计算机二级c语言题库【原创实用版】目录1.计算机二级 C 语言概述2.计算机二级 C 语言题库的构成3.如何有效利用计算机二级 C 语言题库4.计算机二级 C 语言题库的重要性正文【计算机二级 C 语言概述】计算机二级 C 语言考试是中国计算机等级考试中的一个重要科目,旨在检验考生对 C 语言编程基础的掌握程度。
通过这个考试,可以让考生更好地掌握 C 语言编程的基本技能,为以后深入学习计算机科学相关知识打下坚实基础。
【计算机二级 C 语言题库的构成】计算机二级 C 语言题库主要包括选择题、填空题、判断题、程序阅读题和编程题等几种题型。
其中,选择题和填空题主要考察考生对 C 语言基本概念和语法的掌握;判断题则要求考生判断一些编程实践的正确性;程序阅读题要求考生阅读一段 C 语言程序,理解其功能并找出其中的错误;编程题则是让考生根据题目要求编写 C 语言程序。
【如何有效利用计算机二级 C 语言题库】要充分利用计算机二级 C 语言题库,首先要对题库中的知识点进行系统性的学习和理解。
针对不同题型,可以采用不同的方法进行练习。
例如,选择题和填空题可以通过做模拟题来进行训练;程序阅读题则需要多阅读优秀的 C 语言程序,提高自己的阅读能力;编程题则需要动手实践,多编写代码。
此外,及时总结自己在做题过程中遇到的问题和不足,查漏补缺,也是非常重要的。
【计算机二级 C 语言题库的重要性】计算机二级 C 语言题库的重要性不言而喻。
首先,通过题库的练习,考生可以全面了解 C 语言编程的基本知识和技能,为考试做好充分的准备。
其次,题库可以帮助考生检验自己对 C 语言的掌握程度,发现自己的薄弱环节,并进行针对性的学习。
最后,通过题库的练习,考生可以提高自己的编程能力和解决实际问题的能力,为将来从事计算机相关工作奠定基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第13章编译预处理和动态存储分配
1.以下叙述中正确的是()。
A.在C语言中,预处理命令行都以“#”开头
B.预处理命令行必须位于C源程序的起始位置
C.#include<stdio.h>必须放在C程序的开头
D.C语言的预处理不能实现宏定义和条件编译的功能
【答案】A
【解析】“编译预处理”就是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程。
A项正确,在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。
B项错误,预处理命令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾;C项错误,#include <stdio.h>可以出现在程序的任意一行的开始部位;D项错误,预处理可以实现宏定义、条件编译和文件包含。
答案选择A选项。
2.以下关于编译预处理的叙述中错误的是()。
A.预处理命令行必须位于源程序的开始
B.源程序中凡是以#开始的控制行都是预处理命令行
C.一行上只能有一条有效的预处理命令
D.预处理命令是在程序正式编译之前被处理的
【答案】A
【解析】通常,预处理命令位于源文件的开头,也可以写在函数与函数之间。
答案选择A选项。
3.以下关于宏的叙述中正确的是()。
A.宏名必须用大写字母表示
B.宏定义必须位于源程序中所有语句之间
C.宏替换没有数据类型限制
D.宏调用比函数调用耗费时间
【答案】C
【解析】A项错误,在C语言中,宏名可以是任何合法的C语言标识符,只不过通常习惯用大写字母;B项错误,宏可以根据需要出现在程序的任何一行的开始部位;D项错误,宏定义是“编译预处理”命令,它们的替换过程在编译时期就已经完成了,因此不会占有程序运行的时间。
答案选择C选项。
4.以下关于宏的叙述错误的是()。
A.宏替换不具有计算功能
B.宏是一种预处理指令
C.宏名必须用大写字母构成
D.宏替换不占用运行时间
【答案】C
【解析】宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母,答案选择C选项。
5.以下叙述中错误的是()。
A.在程序中凡是以“#”开始的语句行都是预处理命令行
B.预处理命令行的最后不能以分号表示结束
C.#define MAX是合法的宏定义命令行
D.C程序对预处理命令行的处理是在程序执行的过程中进行的
【答案】D
【解析】在C语言中,以“#”开头的行都称为“编译预处理命令行”,其中的末尾不得用“;”结束,区别语句的定义和说明语句,选项A、B正确。
C项中的宏定义为不带参数的宏命令行,宏名之后可以有替换文本,也可以没有,选项C正确。
编译预处理是在编译程序对C源程序进行编译前执行的,选项D错误。
答案选择D选项。
6.若程序中有宏定义行:
#define N 100
则以下叙述中正确的是()。
A.宏定义行中定义了标识符N的值为整数100
B.在编译程序对C源程序进行预处理时用100替换标识符N
C.上述宏定义行实现将100赋给标识符N
D.在运行时用100替换标识符N
【答案】D
【解析】D项正确,预处理程序对源程序中所有使用宏名的地方进行直接替换。
A项错误,宏定义没有类型限制;B项错误,预处理程序进行宏替换,而非编译程序;C项错误,宏定义不是赋值操作,而是进行在预编译时进行替换。
答案选择D选项。
7.以下选项中的编译预处理命令行,正确的是()。
A.#define PI 3.14
B.##define eps 0.001
C.#DEFINE TRUE
D.#define int INT
【答案】A
【解析】A项正确。
不带参数的宏定义是用一个指定的标识符来代表一个字符串,其一般形式如下:#define宏名替换文本。
需要注意:①在#define、宏名和替换文本之间用空格隔开;②在C程序中,宏定义的定义位置一般写在程序的开头;③宏名一般用大写字母表示,便于与变量名区别;④宏定义是用宏名来表示一个字符串,在宏展开时以该字符串取代宏名,这只是一种简单的代换,预处理程序对它不做任何检查;⑤宏定义不是语句,在行末不加分号,如加上分号则连分号也一起替换。
B项define前多了一个#。
C项缺少“替换文本”。
D项不能将一个自定义标识符宏定义为关键字。
答案选择A选项。
8.下面关于编译预处理的命令行,正确的是()。
A.#define PAI 3.14
B.#Define Eps 0.00001
C.##DEFINE FALSE 0
D.#define int INT
【答案】A
【解析】宏定义用法一般表达式为:
#define 宏名替换文本
A项满足宏定义用法;C语言中是区分大小写的,define属于C语言的关键字,不可以大写,B、C项错误;D项中,int是代表整数类型,不满足define用法,D项错误。
答案选择A选项。
9.有如下程序:
#include <stdio.h>
#define D(x)4*x+1
main()
{
int i=2,j=4;
printf("%d\n",D(i+j));
}
程序运行后的输出结果是()。
A.25
B.13
C.9
D.12
【答案】B
【解析】带参数的宏定义不是进行简单的字符串替换,而是要进行参数替换。
替换过程是:用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。
调用函数D(i+j),进行替换为4*i+j+1=13,输出13,答案选择B选项。
10.有以下程序:
#include<stdio.h>
#define S(x) x *x
main()
{
int k=5,j=2;
printf("%d,%d\n",S(k+j+2),S(j+k+2));
}
程序的运行结果是()。
A.21,18
B.81,81
C.21,21
D.18,18
【答案】A
【解析】带参数的宏的替换过程是,用宏调用提供的实参字符串直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。
S(k+j+2)被置换成k+j+2*k+j+2,计算时先计算2*k,结果为21;S(j+k+2)被置换成j+k+2*j+k+2,计算时先计算2*j,结果为18。
程序的运行结果是21,18。
答案选择A选项。