C语言程序设计(第5章数组)
- 格式:doc
- 大小:28.00 KB
- 文档页数:6
第5章习题解答一、选择题1.以下叙述中错误的是。
A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数解析:对于double类型数组,不能直接用数组名对数组进行整体输入或输出。
所以选项A的说法是正确的。
数组名代表数组所占内存区的首地址,是一个固定指针,其值不可改变,因此选项B也是正确的。
在C语言一维数组定义时可以不指定数组长度,由赋初值的初值个数决定数组的长度。
因此选项D也是正确的。
C语言程序在执行时,不检查数组元素的下标是否越界,如果出现越界,可能会引起系统死机,因此选项C不正确。
答案:C2.有以下程序:/* 文件路径名:ex5_1_2\main.c */#include <stdio.h> /* 标准输入/出头文件*/int main(void) /* 主函数main() */{char s[] = "abcde"; /* 定义字符数组*/s += 2; /* s自加2 */printf("%d\n", s[0]); /* 输出s[0] */return 0; /* 返回值0, 返回操作系统*/}执行后的结果是。
A)输出字符a的ASCII码B)输出字符c的ASCII码C)输出字符c D)程序出错解析:数组s[]的首地址值s是不可改变的,故该程序编译时会出错。
答案:D3.有以下程序:/* 文件路径名:ex5_1_3\main.c */#include <stdio.h> /* 标准输入/出头文件*/int main(void) /* 主函数main() */{int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = &a[3], *q = p + 2; /* 定义数组及变量*/printf("%d\n", *p + *q); /* 输出*p + *q之值*/return 0; /* 返回值0, 返回操作系统*/}程序运行后的输出结果是。
单选题1、关于数组的定义与初始化,下列哪一项是错误的()A.int arr[5] = {1,2,3,4,5};B.int arr[] = {1,2,3,4,5};C.int arr[5] = {1,2,3};D.int arr[5] = {1,2,3,4,5,6};2、在定义数组int arr[10]后,下列选项中对arr的引用正确的是()A.arr[10]B.arr[6.3]C.arr(6)D.arr[0]3、在C语言中,引用数组元素时,其数组下标的数据类型允许是()4、若int arr[5] = {1,2,3}; 则arr[2]的值为()5、在执行int arr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为()6、关于二维数组,下列选项能正确定义并赋初值的是()A.int n = 5,b[n][n];B.int a[1][2] = {{1},{3}};C.int c[2][] = {{1,2},{3,4}};D.int a[3][2] = {{1,2},{3,4}};7、阅读下列程序段:char s[18] = "a book!";printf("%.4s\n", s);其输出结果为()A.a book!B.a bookC.a bo8、阅读下列程序:int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } };printf("%d%d%d%d\n", a[0][0], a[1][1], a[2][2], a[3][3]);正确的输出结果为()9、阅读下面程序:int i;int x[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };for (i = 0; i<4; i++)printf("%3d", x[i][3 - i]);下列选项中哪一项是正确的输出结果()A.1 5 9 13B.1 6 11 16C.4 7 10 13D.4 8 12 1610、下列描述中不正确的是()。
C语言程序设计(第5章数组)
数组是一个由若干同类型变量组成的集合,引用这些变量时可用同一名字。
数组均由连续的存储单元组成,最低地址对应于数组的第一个元素,地址对应于最后一个元素,数组可以是一维的,也可以是多维的。
5.1 一维数组
一维数组的一般说明形式如下:
type-specifier var_name [size];
在C语言中,数组必须显示地说明,以便编译程序为它们分配内存空间。
在上式中,类型说明符指明数组的类型,也就是数组中每一个元素个数,一维数组的总字节数可按下式计算:
sizeof( 类型) *数组长度=总字节数
[例5-1] 将数字0到9装入一个整型数组。
main( )
{
int x[10]; /* 定义包含1 0个整型数的数组,引用为x [ 0 ] ,x [ 1 ] . . . x [ 9 ] * /
int t ;
for (t=0; t
}
C语言并不检验数组边界,因此,数组的两端都有可能越界而使其它变量的数组甚至程序代码被破坏。
在需要的时候,数组的边界检验便是程序员的职责。
例如,当使用gets( )接收字符输入时,必须确认字符数组的长度足以存放最长的字符串。
一维数组在本质上是由同类数据构成的表,例如,对下列数组a :
char a[7]
图5 - 1说明了数组a在内存中的情形,假定起始地址为1000。
5.1.1 向函数传递一维数组
将一维数组传递给函数时,把数组名作为参数直接调用函数即可,无需任何下标。
这样,数组的第一个元素的地址将传递给该函数。
C语言并不是将整个数组作为实参来传递,而是用指针来代替它。
例如,下面的程序将数组i的第一个元素的地址传递给函数func1( )。
main( )
{
int i[10];
func1(i); /*函数调用,实参是数组名* /
. . .
}
函数若要接收一维数组的传递,则可以用下面的二种方法之一来说明形式参数; 1) 有界数组;2) 无界数组。
例如,函数func1 ( )要接收数组i可如下说明: func1(str)
char str[10]; /* 有界数组,数组的下标只能小于或等于传递数组的大小。
* /
{
.
. .
}
也可说明为:
func1(str)
char str[ ]; / * 无界数组* /
{
.
. .
}
这二种说明方法的效果是等价的,它们都通知编译程序建立一个字符指针。
第一种说明使用的是标准的数组说明;后一种说明使用了改进型的数组说明,它只是说明函数将要接收一个具有一定长度的整型数组。
细想就会发现,就函数而言,数组究竟有多长并无关紧要,因为C语言并不进行数组的边界检验。
事实上,就编译程序而言,下面的说明也是可行的。
func1 (str);
int str[32];
{
. . .
}
因为编译程序只是产生代码使函数func1( )接收一个指针,并非真正产生一个包含3 2个元素的数组。
1、快速锁屏
现代人的电脑充满了各种商业机密与隐私,上班时间喝个茶水都害怕电脑被“偷窥”。
电脑它自己也会保护自己哦,只要你离开之前按下快捷键:Windows+L,就能快速锁住电脑屏幕哦,妈妈再也不用担心我的机密泄露了
2、误删恢复
字打多了就容易手抖,尤其做文案的,有时候忙得眼花缭乱却一不小心把文字为误删了。
只要你未清空回收站,就能按快捷键:Ctrl+Z,进行撤回恢复。