第3章 数组(习题答案及解析)
数组试题及答案

数组试题及答案1. 定义一个整型数组,包含10个元素,并初始化为0。
答案:```cint array[10] = {0};```2. 编写一个函数,用于计算数组中所有元素的和。
答案:```cint sumArray(int arr[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += arr[i];}return sum;}```3. 给定一个数组,编写一个函数来找到数组中的最大值。
答案:```cint findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```4. 编写一个程序,将一个数组中的所有元素逆序输出。
答案:```cvoid reverseArray(int arr[], int size) {for (int i = size - 1; i >= 0; i--) {printf("%d ", arr[i]);}}```5. 给定一个整数数组,编写一个函数,将数组中的所有负数移到数组的开头,所有非负数移到数组的末尾。
答案:```cvoid moveNegativesToFront(int arr[], int size) {int j = 0;for (int i = 0; i < size; i++) {if (arr[i] < 0) {arr[j++] = arr[i];}}for (int i = j; i < size; i++) {arr[i] = 0;}}```6. 编写一个函数,用于检查数组中是否存在重复元素。
答案:```cbool hasDuplicates(int arr[], int size) {for (int i = 0; i < size; i++) {for (int j = i + 1; j < size; j++) {if (arr[i] == arr[j]) {return true;}}}return false;}```7. 给定一个数组,编写一个函数,用于找出数组中第二大的元素。
数据结构练习题第三章栈、队列和数组习题及答案

第三章栈、队列和数组一、名词解释:1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵二、填空题:1.栈修改的原则是_________或称________,因此,栈又称为________线性表。
在栈顶进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________或________。
2.栈的基本运算至少应包括________、________、________、________、________五种。
3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。
4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。
5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。
6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。
7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。
int InitStack(SqStackTp *sq){ ________;return(1);}8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。
Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{________________:________________=x;return(1);}}9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。
数组经典题和解析

数组经典题和解析(原创版)目录1.数组经典题概述2.数组经典题的解题技巧3.数组经典题解析示例正文【数组经典题概述】数组经典题是计算机编程领域中常见的一类题目,主要考察程序员对数组数据结构的掌握程度以及相应的算法应用能力。
数组作为一种重要的数据结构,其操作涵盖了诸多方面,如排序、查找、插入、删除等。
因此,掌握数组经典题的解题技巧,对于提高编程水平具有重要意义。
【数组经典题的解题技巧】1.分析题目,确定数组操作需求:首先要对题目进行仔细阅读和分析,明确题目所要求的数组操作类型,如排序、查找等。
2.选择合适的算法:根据题目需求,选择合适的算法进行实现。
例如,对于排序问题,可以选择冒泡排序、快速排序、归并排序等不同类型的排序算法;对于查找问题,可以选择顺序查找、二分查找等方法。
3.注意数组边界条件:在实现数组操作时,要特别注意数组的边界条件,避免出现数组越界等错误。
4.优化算法性能:在保证算法正确的前提下,要尽量优化算法的性能,提高程序的运行效率。
【数组经典题解析示例】例题:给定一个整数数组,求数组中任意两个数之差的绝对值不超过1 的元素个数。
解题思路:1.遍历数组,对于每个元素,判断其与相邻元素之差的绝对值是否小于等于 1,如果是,则计数器加 1。
2.返回计数器的值,即为满足条件的元素个数。
具体代码实现如下:```pythondef countElements(arr):count = 0for i in range(len(arr) - 1):if abs(arr[i] - arr[i + 1]) <= 1:count += 1return count```总之,掌握数组经典题的解题技巧,可以帮助程序员更好地应对各种编程挑战,提高编程水平。
数组典型例题及参考答案

第7章数组7-1输入一个正整数n(1≤n≤10),再输入n个整数(1)输出最大数和最小数,并输出平均值。
(2)将最小数与第一个数交换,最大数与最后一个数交换,然后输出交换后的结果。
(3)输出所有比平均值大的数。
(4)找到最接近平均值的数。
(提示:考虑差的绝对值)OutputPlease input 10 integers:17 34 -11 2 5 10 7 -9 0 25 /* input */The maximum is: 34, the minimum is: -11, the average is 8.00After exchange: -11 25 17 2 5 10 7 -9 0 34Larger than the average: 25 17 10 34The number closest to the average is: 77-2输入一个日期(按照year-month-day格式),计算该日期为当年的第几天。
(提示:注意闰年)(1)使用数组存储当年每个月应有的天数;(2)不使用数组完成;OutputPlease input a date: (year-month-day) 2008-4-14↵/* input */This date is the 105th day in the year.7-3输入一个正整数n(1≤n≤10),再输入n个整数,将这n个整数从大到小排序,然后在已经排序后的数组中插入平均数(取整),保持数组的升序,将插入平均数后的数组输出。
(1)用冒泡法排序;(2)用选择法排序。
OutputHow many numbers you want to sort? 5↵/* input */Please input 5 numbers:17 34 -11 2 5↵/* input */34 17 9 5 2 -117-4输入两个数组A和B(各5个元素),将其按照升序排序,然后将A和B合并到数组C中(合并的过程中保持升序,不要合并后再排序)。
数组选择试题及答案解析

数组选择试题及答案解析一、选择题1. 下列关于数组的描述中,错误的是:A. 数组是一种基本的数据结构,可以存储相同类型的多个元素B. 数组在内存中是连续存储的C. 数组的大小在定义后可以改变D. 数组可以通过索引来访问元素2. 假设有一个整型数组 int[] arr = {1, 2, 3, 4, 5}; 以下哪个表达式是正确的:A. arr[0] = 10B. arr[5] = 6C. arr[-1] = 0D. arr[5]3. 在Java中,以下哪个方法可以用来获取数组的长度:A. length()B. size()C. count()D. total()4. 假设有一个数组 int[] numbers = new int[5]; 以下哪个操作是合法的:A. numbers[5] = 10B. numbers[-1] = 0C. numbers[4] = 100D. numbers[0] = 55. 在C语言中,以下哪个数组声明是正确的:A. int arr[] = {1, 2, 3};B. int arr[3] = {1, 2, 3};C. int arr[3] = 1, 2, 3;D. int arr = {1, 2, 3};二、答案解析1. 答案:C解析:数组的大小在定义后是不可变的,这是数组的一个基本特性。
2. 答案:A解析:数组索引从0开始,arr[0]是第一个元素,可以赋值为10。
3. 答案:A解析:在Java中,数组的长度通过length属性获取。
4. 答案:C解析:数组索引从0到数组长度减一,所以索引4是合法的,可以赋值为100。
5. 答案:A解析:在C语言中,数组的声明可以不指定大小,编译器会根据初始化列表的长度自动计算数组的大小。
选项A是正确的声明方式。
数据结构练习题 第三章 栈、队列和数组 习题及答案

第三章栈、队列和数组一、名词解释:1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵二、填空题:1.栈修改的原则是_________或称________,因此,栈又称为________线性表。
在栈顶进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________或________。
2.栈的基本运算至少应包括________、________、________、________、________五种。
3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。
4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。
5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。
6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。
7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。
int InitStack(SqStackTp *sq){ ________;return(1);}8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。
Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{________________:________________=x;return(1);}}9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。
C语言-第03讲-数组-答案.docx
3.6强化练习3.6.1选择题[3-1] A)整型常呈[3-2] C)不能得到确定的初值[3-3] D) static char s[ ]= 1 Turbo\0 :简析:其它选项的'\0',多余,但不错。
[3-4] C)可以在赋值语句中通过赋值运算符对字符数组整体赋值[3-5] D) scanf( "%s%c", s, &c );简析:1 register修饰的变量是寄存器存储类型,不能进行&取地址运算。
[3-6] A) int a[10];[3-7] B) ab简析:参见第[3-41]题[3-8] B) 3[3-9] D)f简析:strcpyf a, b )字符串复制函数,将字符串b复制到字符串a中。
[3-10] D)程序出错简析:i 数组名是地址常量,不能将一个数组名赋了另一个数纽名。
[3-11] A) 4[3-12] B)x数组长度大于y数组长度[3-13] D)字符串"That”小于字符串”The”[3-14] B) strcpyf strl, str2 );[3-15] A) number=-12345简析:此程序为将字符数字转换为数字字符[3-16] A)数组首地址[3-17] B) 3简析:先将str2复制到strl中,然后计算strl的长度。
[3-18] A) char str[7]=,,FORTRAN ,;[3-19] C) 357[3-20] C) 6[3-21] D) if( strcmp( si, s2 )>0 )[3-22] D) #define SIZE 10int a[SIZE];[3-23] D) a[10-101[3-24] A)[常最表达式][3-25] C) int a[10]={ 10 };[3-26] C) double a[l][4][3-27] C) a[l + l][0][3-28] D) a[0][4][3-29] B) int a[][3]={{l, 2, 3},{4, 5, 6}};[3-30] C) int a⑵[3] ={{1,2}, {3, 4}, {5, 6}};[3-31] D)数组a中每个元素均可得到初值0[3-32] D)只有元素a[0][0]和a[0]⑴可得到初值0 其余元素均得不到初值0[3-33] B)町在程序的编译阶段得到初值0简析:静态变量在编译时,系统默认其变量初值为0.[3-34] C) float a[3][4];float a[ ]|4]={ {0}, {0}};auto float a[ ][4]={ {0}, {0}, {0}};[3-35] A)按行存放[3-36] B)将5个初值依次赋给a[0]~a[4][3-37] B) int y[5]={ 0,1,3,5,7,9 };[3-38] B) 3[3-39] D) double y[ ][3]={ 0 };[3-40] D) char s⑸="abcdef";[3-41] C) abc简析:参见第【3-7】题,,[3-42] D) a数组比b数组长度长简析:参见第[3-12]题。
第3章数组及矩阵运算
第3章数组及矩阵运算第三章数组与矩阵及其基本运算3.1 数组3.1.1数组与矩阵的输⼊1. 直接输⼊法对于规模较⼩的矩阵,可直接在MATLAB 命令窗输⼊,也可在程序编辑器中写⼊程序,矩阵元素值还可在变量浏览器修改。
矩阵所有元素包含在“[]”内,同⾏元素之间⽤“,”隔开,也可⽤空格,两⾏元素⽤“;”分开,矩阵元素可以是数值,也可以是表达式。
【例3-1】输⼊矩阵=987654321A 。
解:(1)在键盘上输⼊下列内容A = [1,2,3; 4,5,6; 7,8,9](2)按【Enter 】键,指令被执⾏,⼯作窗将显⽰以下结果:A =1 2 3 4 5 67 8 9也可输⼊:A = [1 2 3; 4 5 6; 7 8 9] %同⾏元素之间⽤空格或 A=[1 2 3;4 5 6; 7 8 9]【例3-2】已知B=2+3i ,输⼊矩阵??+=9872*6)5(4323/1B sqrt A 。
解:(1)在键盘上输⼊下列内容A = [1/3,2,3; 4,sqrt(5),6*B+2; 7,8,9](2)按【Enter 】键,指令被执⾏,⼯作窗将显⽰以下结果:A =0.3333 2.0000 3.00004.0000 2.2361 14.0000 +18.0000i 7.0000 8.0000 9.0000【例3-3】⽤下⾯三条指令创建⼆维数组C 。
解:(1)在键盘上输⼊下列内容a=sqrt(2); b=33^0.5;C=[1,1/a+i*b,b*sqrt(a);sin(pi/6),a+b,3+2i](2)按回车后得:C =1.0000 0.7071 + 5.7446i 6.8315 0.5000 7.1588 3.0000 +2.0000i复数矩阵的输⼊见例2-2、例2-3。
【例3-4】输⼊矩阵??++++++=i i ii i iCN 166155144133122111。
解:在键盘上输⼊下列内容后,按回车后得CN 矩阵。
数据结构(C语言版)第三四章习题答案解析
第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->data;top=top->link; B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;(5)设有一个递归算法如下int fact(int n) { //n大于等于0if(n<=0) return 1;else return n*fact(n-1); }则计算fact(n)需要调用该函数的次数为()。
A. n+1 B. n-1 C. n D. n+2 (6)栈在()中有所应用。
A.递归调用 B.函数调用 C.表达式求值 D.前三个选项都有(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。
主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是()。
A.队列 B.栈 C.线性表 D.有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。
第3章习题答案
习题31.名词解释:栈、队列、循环队列。
解:栈是只能在一端进行插入和删除操作的线性表,允许插入和删除的一端叫栈顶,另一端叫栈底。
最后插入的元素最先删除,故栈也称后进先出表。
队列是允许在一端插入而在另一端删除的线性表,允许插入的一端叫队尾,允许删除的一端叫队头。
最后插入的元素最先删除,故栈也称先进先出表。
最先入队的元素最先删除,故队列也称先进先出表。
用常规意义下顺序存储结构的一维数组表示队列,由于队列的性质(队尾插入,队头删除),容易造成“假溢出”现象,即队尾已达到一维数组的高下标,不能再插入,然而队中元素个数小于队列的长度。
循环队列是解决“假溢出”的一种方法。
通常把一维数组看成首尾相接。
在循环队列下,通常采用“牺牲一个存储空间”的方法解决“队满”和“队空”的判定问题。
2.如果输入序列为1,2,3,4,5,6,试问能否通过栈结构得到以下两个序列:4,3,5,6,1,2和1,3,5,4,2,6;请说明为什么不能或如何才能得到。
解:输入序列为1,2,3,4,5,6,不能得到4,3,5,6,1,2,其理由是:输出序列最后两个元素是1,2,前面四个元素(4,3,5,6)得到后,栈中元素剩下1,2,且2在栈顶,栈底元素1不可能在栈顶元素2出栈之前出栈。
得到序列1,3,5,4,2,6的过程是:1入栈并出栈;然后2和3依次入栈,3出栈,部分输出序列是1,3;紧接着4和5入栈,5,4和2依次出栈,此时输出序列为1,3,5,4,2;最后6入栈并出栈,得到最终结果序列是1,3,5,4,2,6。
3.试证明:若借助栈由输入序列1,2,…,n 得到序列1p ,2p ,…,n p (它是输入序列的一个全排列),则在输出序列中不可能出现下列情形:存在着i <j <k ,使得j p <k p <i p 。
解:如果i <j ,说明i p 在j p 入栈前先出栈。
而对于i p >j p 的情况,则说明要将j p 压到i p 之上,也就是在j p 出栈之后i p 才能出栈。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题3 参考答案一、选择题3.1 C 分析:本题考查程序和数组的基本概念。
3.2 A 分析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,B选项不正确;字符串比较大小除了使用库函数strcn3()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小。
因为字符串在表达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。
C选项不正确。
C语言中只有字符串常量而没有字符串变量,D选项描述不正确;空串的长度为0,而以空格打头的字符串的长度至少为1,因此A选项是正确。
3.3 A 分析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于:double a[1][3] = {6};其中a[0][0]=6,其他元素赋值0,选项A正确,答案为A。
3.4 D 分析:本题考察的知识点是:字符串常量。
在C语言中,字符串常量是以双引号括起来的字符序列。
因此B选项和C选项不正确。
字符序列中可包含一些转义字符,转义字符都是以"\"开头的。
A选项中包含了三个"\",前两个(\\)代表了一个"\"字符,后面一个和"""一起(\")被看作一个""",所以该字符串缺少一个结束的""",因此不正确。
D选项的两个"""之间没有任何字符,代表的是一个空串,是合法的字符串常量,因此D选项正确。
3.5 D 分析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数strcmp,如果这个函数的返回值等于0,说明两个字符串相等。
因此D选项正确。
3.6 A 分析:两个字符串进行比较时,按照字符串中相同位置的字符ASCII码顺序进行比较,选项B 错误;字符串需要包含串尾的结束标志,但是计算字符串长度时,不包含串尾的结束标志,选项C错误;要将字符串s2连接到s1后面,串s1所在存储空间必须可以存储字符串s1、字符串s2连接后构成新串的字符,选项D错误。
答案选A.3.7 C 分析:scanf ( )语句中用"空格"间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用格式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量ch。
在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入回车键时,读入才开始执行。
gets()函数的调用形式为:gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。
gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。
getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针,函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。
因此C选项正确。
3.8 D 分析:本题考查字符数组与字符串常量的区别。
3.9 D 分析:本题考查二维数组的定义及其数组元素下标范围。
下标1和下标2取值范围分别在0到行长度减1和0到列长度减1之间。
3.10 C 分析:本题考查二维数组定义及其初始化。
要赋值的个数行与列都只可以少,不能多。
3.11 A 分析:数组说明的一般形式为:类型说明符数组名[常量表达式]。
B)中N是变量,不能用变量定义数组长度。
C)选项中数组长度是非法的一串数字。
定义数组时必须为其指明长度,D)选项中数组长度为空,所以非法。
3.12 A 分析:考查strlen()函数,字符串的长度是指字符串中有效字符的个数,不包含字符串结束符'\0'。
当一个字符数组中包含多个'\0'时,strlen的值为第一个'\0'前的字符个数。
3.13 C 分析:scanf("%s",s);字符串不能整体输入,字符串数组一般采取循环输入,因此选择C错误。
getchar()每一次读入一个字符,gets()一次读入多个字符,因此A,B,D正确。
答案为C选项。
3.14 C 分析:考查sizeof与strlen的区别。
sizeof(s)是测试系统为数组s分配的字节数,当在定义数组时给出的数组长度就已经决定了系统为其分配的内存大小(20)。
而strlen的值为字符串的实际字符个数(10)。
3.15 C 分析:考查sizeof与strlen的区别。
3.16 B 分析:C语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故C选项和D选项不属于字符串,A选项定义的是一个字符变量str,却用来存放字符串,显然也不正确,因此B选项正确。
3.17 B 分析:一维数组的定义方式为:类型说明符数组名[常量表达式];注意定义数组时,元素个数不能是变量。
因此应该选B选项。
3.18 B 分析:分析程序可以发现,内层for循环每次只执行一次:即当j = i时。
所以可以使用i替换j,去掉for循环,对应外层for循环的i,执行t+=b[i][b[i][i]],所以当i取值0、1、2时,t的值累加b[0][b[0][0]]、b[1][b[1][1]]、b[2][b[2][2]],即b[0][0]、b[1][1]、b[2][2],对应的值为:0、1、2,t取值为4(t初始值为1)。
答案选B。
3.19 A 分析:本题程序需要输出二维数组a中第二行的各个元素值,即a[1]这个一维数组的元素值。
分析程序可知只有在两种情况下才会对a[1]中的元素赋值:1、外层for循环中i=0时,内层第二个for循环的k 取值为1,此时a[k][i]=a[1][0]=1,a[k][N-i-1]=a[1][3]=1;2、外层for循环中i=1时,内层第一个for循环的j取值为1、2,a[i][j]=a[1][j]=2,即a[1][1]=2,a[1][2]=2;除了这两种情况,其他情况不会修改a[1]中的值,所以最终a[1]各个元素的值为:1、2、2、1;答案选A。
3.20 A 分析:首先main函数初始化一个字符数组a,a的内容为字符串"How are you!"(包括结尾的'\0'),所以for循环开始于字符串的首个字符,结束于空字符'\0',换句话说,for循环遍历字符数组a,将字符数组a 的每个非空格字符重新赋值给自身,并在循环结束时加上空字符'\0',所以整个程序是将字符数组a中的空格字符去除,输出结果为:"Howareyou!",答案为A。
3.21 A 分析:程序首先初始化二维字符数组ss,包含三个字符串,如下表(1)所示:表(1)接着第一个do...while()循环分别对元素ss[0][1]、ss[1][2]、ss[2][3]赋值为0,由于'\0'的ASCII码为0,所以第一个循环结束后,ss如下表(2)所示:表(2)此时i的值为3,最后第二个do...while()循环将ss元素按下标i从2到0使用puts函数输出,输出为:ccc、bb、a,答案为A。
3.22 A 分析:for循环的作用就是每次遇到空格,将空格后面的移动到数组的最前面。
因此数组最后的状态时Beijing!\0g!\0ng!\neijing!\0;但是printf("%s")打印遇到\0自动结束。
因此,打印Beijing!。
故答案为A 选项3.23 A 分析:该题中t[][3]={9,8,7,6,5,4,3,2,1};实际上就是t[3][3]= {{9,8,7},{6,5,4},{3,2,1}};,通过for 循环语句,确定需要输出t[2][0],t[1][1]和t[0][2],即输出3、5、7。
因此A选项正确。
3.24 B 分析:在for(i=0;i<12;i++) c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。
因此B选项正确。
3.25 C 分析:strcpy:字符串拷贝函数;strlen:求字符串长度函数(注意:不包含字符串结束标记字符'\0');strcat:字符串连接函数。
执行完语句strcat(p,r);后,p数组中存储的元素为a,b,c,d,a,b,c,d,e ;执行语句strcpy(p+strlen(q), q); 得到的结果是将q所指向的字符串拷贝至p+strlen(q)开始的存储位置,因为strlen 的值为3,即p+3开始存储q中的元素。
所以执行完strcpy(p+strlen(q),q)语句后,字符数组p[20]的存储元素为a,b,c, a,b,c;所以strlen(p)的结果为6。
因此C选项正确。
3.26 D 分析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。
通过for语句和if语句,对二维数组各列元素进行由小到大的排序操作,程序最后通过for语句输出二维数组对角线上的元素。
因此D选项正确。
3.27 B 分析:程序首先给字符数组s[ ]赋值为"012xy",for循环语句的功能是遍历字符串,通过if条件语句对字符串中的小写字母计数,在符串中小写字母为2个,即n=2。
因此B选项正确。
3.28 C 分析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。
通过for嵌套循环语句和if条件语句,对二维数组对角线元素进行由大到小的排序操作,程序最后通过for语句输出二维数组第1行的4个元素。
因此C选项正确。
3.29 C 分析:字符数组a中包含两个'\0',遇到第一个'\0'时就表示字符串a结束。
字符串处理函数strcat(字符数组a,字符数组b),功能是连接两个字符数组中的字符串,把字符串b连接到a的后面,结果放在字符数组a中。