课后习题 第六章 数组与字符串
- 格式:pdf
- 大小:54.09 KB
- 文档页数:6
C语言习题(6)第六章数组一.填空题1.C语言数组的下标总是从开始,不可以为负数;构成数组各个元素具有相同的。
2.在C语言中,二维数组的元素在内存中的存放顺序是。
3.若有定义:double x[3][5],则x数组中行下标的下限为,列下标的上限为。
4.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]的值为,a[2][1]得到的值为。
5.若有定义int a[][4]={1,2,3,4,5,6,7,8,9},则数组a第一维的大小为。
6.设char str[100]=”Hangzhou”;则数组str所在内存空间应为字节。
7.下列程序的输出结果是。
char str[ ][10]={”abcd”,”1234”,”efgh”,”5678”};int k=1;printf(“%s”,str[k++]);8.欲将字符串S1复制到字符串S2中,其语句是。
9.如果在程序中调用了strcat函数,则需要预处理命令;如果调用了gets函数,则需要预处理命令。
10.字符串是以为结束标志的一维字符数组。
有定义:char a[]=”China”;则a数组的长度是。
11.数组在内存中占用一段连续的存储空间,该存储空间的首地址用表示。
12.调用strlen(“abcd\0ef\0g”)的返回值为。
二.选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是。
A)整型常量B)整型表达式C)整型常量或整型表达式C)任何类型的表达式2.以下对一维整型数组a的正确说明是。
A)int a(10) ; B)int n=10,a[n];C)int n; D)#define SIZE 10scanf(“%d”,&n);int a[SIZE];int a[n];3.若有定义:int a[10],则对数组a元素的正确引用是。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]4.若有定义:int a[3][4],则对数组a元素的正确引用是。
1.以下对一维整型数组a的定义,正确的是_。
(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。
(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。
(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。
(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。
(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。
(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。
(2分)#include<stdio.h>int main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。
《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
实验06 数组、指针与字符串(4学时)(第6章数组、指针与字符串)一、实验目的二、实验任务6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。
6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。
6_3 编程实现两字符串的连接。
要求使用字符数组保存字符串,不要使用系统函数。
6_4 使用string类声明字符串对象,重新实现上一小题。
6_5(习题6-27)声明一个Employee类。
其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。
display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。
6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。
6_7 修改实验4中的people(人员)类。
具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。
其中“出生日期”声明为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。
在测试程序中声明people类的对象数组,录入数据并显示。
三、实验步骤1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。
使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。
程序名:lab6_1.cpp。
参考运行结果:★程序及运行结果://lab6_1.cpp#include<iostream>using namespace std;void move(int matrix[][3]){int temp;for(int i=0;i<3;i++)for(int j=0;j<i;j++){temp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}void main(){int i,j,mat[3][3];cout<<"输入3×3矩阵"<<endl;for(i=0;i<3;i++){cout<<"第"<<i+1<<"行:";for(j=0;j<3;j++) cin>>mat[i][j];}cout<<"\n输入的3×3矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<mat[i][j]<<" ";cout<<endl;}move(mat);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<*(*(mat+i)+j)<<" ";//指针形式cout<<endl;}}2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。
c语言程序设计教程第三版习题答案C语言程序设计教程第三版习题答案第一章:C语言概述1. 简述C语言的特点。
C语言是一种结构化编程语言,具有高级语言的特点,同时支持底层硬件操作。
其特点包括:简洁、高效、可移植、丰富的运算符、数据结构支持、广泛的库函数等。
2. 什么是编译型语言?编译型语言是指源代码在执行前需要通过编译器转换成机器语言的程序设计语言。
C语言就是一种编译型语言。
第二章:数据类型、运算符和表达式1. 列出C语言的基本数据类型。
C语言的基本数据类型包括:整型(int)、字符型(char)、浮点型(float和double)。
2. 说明赋值运算符的用法。
赋值运算符(=)用于将右侧表达式的值赋给左侧的变量。
例如:`int a = 10;` 将整数值10赋给变量a。
第三章:控制结构1. 什么是条件语句?条件语句用于根据条件的真假来执行不同的代码块。
C语言中的条件语句主要有if语句和switch语句。
2. 循环语句有哪些?C语言中的循环语句主要有for循环、while循环和do-while循环。
第四章:数组和字符串1. 数组的声明和初始化方式。
数组声明的一般形式为:`type arrayName[arraySize];`。
初始化可以使用花括号一次性赋值,如:`int arr[5] = {1, 2, 3, 4, 5};`。
2. 字符串在C语言中的表示方法。
在C语言中,字符串以字符数组的形式存在,以空字符('\0')作为结束标志。
第五章:函数1. 函数的定义和调用。
函数定义的一般形式为:`returnTypefunctionName(parameterList) { /* function body */ }`。
调用函数时,使用其名称和必要的参数。
2. 函数的参数传递方式有哪些?C语言中函数的参数传递方式主要有值传递(pass by value)和引用传递(pass by reference)。
C语言程序设计– 第六章课后习题电子13-02班王双喜一、选择题1. C语言中一维数组的定义方式为:类型说明符数组名(C)A. [整型常量]B. [整型表达式]C. [整型常量]或[整型常量表达式]D. [常量表达式]2. C语言中引用数组元素时,下标表达式的类型为(C)A. 单精度型B. 双精度型C. 整型D. 指针型3. 若有定义:int a[3][4];,则对a数组元素的非法引用是(D)A. a[0][3*1]B. a[2][3]C. a[1+1][0]D. a[0][4](解释:A、B、C均正确,D看起来引用不太妥当,但其亦有其意义(a[0][4]等价于a[1][0]))4. 若有定义:int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};,则a数组的第一维大小是(C)A. 1B. 2C. 3D. 4(解释:共9个元素,除以3即可得第一维大小是3;若有余数,则应加1)5. 若有定义:int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};,则值为5的表达式是(C)A. a[5]B. a[a[4]]C. a[a[3]]D. a[a[5]]6. 要求定义包含8个int类型元素的一维数组,以下错误的定义语句是(A)A. int N = 8;int a[N]; B. #define N 3while (a[2*N+2];C. int a[] = {0, 1, 2, 3, 4, 5, 6, 7};D. int a[1+7] = {0};(解释:数组的大小必须是整型常量或整型常量表达式)7. 若二维数组a有m列,则在a[i][j]前的元素个数为(A)A. i * m + jB. j * m + iC. i * m + i - 1D. i * m + j - 18. 下面是对数组s的初始化,其中不正确的是(D)A. char s[5] = {"abc"};B. char s[5] = {'a', 'b', 'c'};C. char s[5] = "";D. char s[5] = "abcdef";(解释:D中元素个数太多,算上'\0'共六个,非法)9. 下面程序段的运行结果是(B)char c[] = "\t\v\\\0will\n";printf("%d", strlen(c));A. 14B. 3C. 9D. 字符串中有非法字符,输出值不确定(解释:字符串中第四个是'\0'即结束标志,因此字符串长度是3)10. 判断字符串s1是否等于s2,应当使用(D)A. if (s1 == s2)B. if (s1 = s2)C. if (strcpy(s1, s2))D. if (strcmp(s1, s2) == 0)(解释:对于字符串来讲,其名字的内容是该字符串的起始地址,不能通过比较名字来比较相等,而应该用专用的函数进行逐字符匹配)二、写出程序的执行结果1. 程序一:# include <stdio.h>main(){int a[3][3] = {1, 3, 5, 7, 9, 11, 13, 15, 17};int sum = 0, i, j;for (i = 0; i < 3; i++)for (j = 0; j < 3; j++){a[i][j] = i + j;if (i == j) sum = sum + a[i][j];}printf("sum = %d", sum);}执行结果:打印sum = 6.(解释:a中各个元素的值是其行和列数字之和,sum内保存a中对角线元素之和,即sum = 0 + 2 + 4)2. 程序二:# include <stdio.h>main(){int i, j, row, col, max;int a[3][4] = {{1, 2, 3, 4}, {9, 8, 7, 6}, {-1, -2, 0, 5}};max = a[0][0]; row = 0; col = 0;for (i = 0; i < 3; i++)for (j = 0; j < 4; j++)if (a[i][j] > max){max = a[i][j];row = i;col = j;}printf("max = %d, row = %d, col = %d\n", max, row, col);}执行结果:打印max = 9, row = 1, col = 0.(解释:此程序的功能是逐行逐列扫描元素,总是将最大的元素赋给max,并保存该元素的行数和列数;因此执行完毕后,max是最大的元素(9),row是其行数(1),col是其列数(0))3. 程序三:# include <stdio.h>main(){int a[4][4], i, j, k;for (i = 0; i < 4; i++)for (j = 0; j < 4; j++)a[i][j] = i - j;for (i = 0; i < 4; i++){for (j = 0; j <= i; j++)printf("%4d", a[i][j]);printf("\n");}}执行结果:第一行打印0;第二行打印1 0;第三行打印2 1 0;第四行打印3 2 1 0。
第6章练习与思考1.指针变量有哪几种运算类型?除了一般变量能做的它都能做以外,还有取地址和取内容运算。
2.有一个4x4的矩阵,试用指针变量按照4行4列格式,输岀矩阵中各元素的值。
#include "stdio.h"void main(){int 询4][4]={{1,1丄1},{1丄1,1},{1丄1,1},{1,1,1,1}};int *p=a;for(i=0;i<4*4;i++){ printf(n%3d",*(p+i));if((i+l)%4=0)printf(H\n H);}}3•输出一个字符串,将这个字符串屮大写字母改为小写字母,第一个字母变大写。
#include "stdio.h"void main(){char a[100],*p 二NULL;int i;printf(n Please input a string:\n H);gets(a);P=a;if(*p>=,a,&&*p<=,z,)*p=*p・32;for(i=l;a[i]!='\O f;i++){if(*(p+i)>='A '&&*(p+i)v=Z) *(p+i)=*(p+i)+32;}puts(a);}4.指向函数的指针有哪些特点?(1)可以通过调用指向函数的指针来调用函数。
(2)对于已定义的函数指针可以指向返回值类型相同的不同函数。
(3)函数指针可做函数的参数。
5.编写程序,在己知字符串str中截取一子串。
要求该子串是从血的第m个字符开始, 由n个字符组成。
#include "stdio.h"void main()char str[100],s[100];char *pl=str,*p2=s;int i,m,n;printf(n please input string:\n");scanf(n%s n,str);printf(”please input m,n:\n n);scanf("%d,%d",&m,&n);for(i=0;i<n;i++)*(p2+i)=*(pl+m+i);for(i=0;*(p2+i)U\0:i++) prin(f(”%c”,*(p2+i));}6.编写程序,利用指针将二维数组屮各元素输出。
第六章习题1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。
2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。
3.已知一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,……,nk个度为k的结点,则该树中有多少个叶子结点并证明之。
4.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。
5.已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个?6.给出满足下列条件的所有二叉树:①前序和后序相同②中序和后序相同③前序和后序相同7. n个结点的K叉树,若用具有k个child域的等长链结点存储树的一个结点,则空的Child 域有多少个?8.画出与下列已知序列对应的树T:树的先根次序访问序列为GFKDAIEBCHJ;树的后根次序访问序列为DIAEKFCJHBG。
9.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10请为这8个字母设计哈夫曼编码。
10.已知二叉树采用二叉链表存放,要求返回二叉树T的后序序列中的第一个结点指针,是否可不用递归且不用栈来完成?请简述原因.11. 画出和下列树对应的二叉树:12.已知二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。
13.编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。
14.分别写函数完成:在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。
在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。
15.分别写出算法,实现在中序线索二叉树中查找给定结点*p在中序序列中的前驱与后继。
16.编写算法,对一棵以孩子-兄弟链表表示的树统计其叶子的个数。
17.对以孩子-兄弟链表表示的树编写计算树的深度的算法。
18.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出后序遍历非递归的算法。
《C语言程序设计》课后习题答案高等教育出版社《C语言程序设计》课后习题答案高等教育出版社第一章:C语言概述1. C语言的特点C语言是一种以处理底层任务和系统编程为目标的高级编程语言。
其特点包括语法简洁、执行效率高、可移植性强等。
第二章:C语言基本数据类型1. C语言中的基本数据类型C语言中的基本数据类型包括整型、字符型、浮点型等。
整型可以进一步细分为有符号整型和无符号整型。
第三章:C语言运算符1. C语言中的运算符C语言中常见的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符等。
这些运算符用于执行各种数学和逻辑操作。
第四章:C语言控制语句1. C语言中的条件语句C语言提供了if语句和switch语句来实现条件判断。
if语句用于执行基于布尔表达式的条件分支,而switch语句用于根据不同的值执行不同的代码块。
第五章:C语言函数1. C语言中的函数定义和调用函数是C语言中的基本模块,用于封装可重用的代码。
函数定义包括函数返回类型、函数名、参数列表和函数体等部分。
第六章:C语言数组1. C语言中的数组定义和使用数组是一组相同类型的数据元素的集合。
C语言中可以使用数组来存储和操作大量数据。
第七章:C语言指针1. C语言中的指针概念指针是一种变量,它存储了内存地址。
通过指针,可以直接访问和修改对应内存地址中的数据。
第八章:C语言字符串1. C语言中的字符串操作字符串是由一系列字符组成的数据类型。
C语言通过字符数组来表示和操作字符串。
第九章:C语言结构体1. C语言中的结构体定义和使用结构体是一种自定义的复合数据类型,它可以包含多个不同类型的成员变量。
第十章:C语言文件操作1. C语言中的文件读写操作文件操作是一种重要的数据输入和输出方式。
C语言提供了一系列函数来实现文件的读写操作。
总结:通过解答以上习题,我们可以更好地掌握C语言的各个方面,提升我们的编程能力和解决问题的能力。
希望本文对读者有所帮助。