1、第7章数组
【练习7 1】将例7-3程序中的break语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉break语句后,一旦找到数据将不跳出循环,而是继续往下找值为x的元素,因此程序输出会有变化。当输入数据仍为2 981 9时,输出将是index is 1 index佃4
【练习7-2】将数组中的数逆序存放。输入一个正整数n (Kn<=10),再输入n个整数,存 入数组a中,输出最大值及其对应的最小下标,下标从0开始。试编写相应程序。
解答:
#in clude
2、printf("lnputi )n:
scant(期 d: &n); printf(”lnput %d in\ger:fOr(i=0;i 3、放,在按顺序输出数组e中的n各元素。试编写相应程序。解答:
#include 4、 (l 5、rs:",n);
for(j=0;j 6、l;
if(!flagX
equal =0;
for(二 0;j 7、输入数据不变,输出什么?与例7-7中的输 结果一样吗?为什么?
for(j=0;j<2;j + +)
for( i=0;i<3;i + +)
解答:
当把列下标作为外循环的循环变量,行下标作为内循环的循环变量时,输入的数据将以列优先的方式存放。当用上述for循环方式时,输出结果为:max=a [2] [0]=10与原例7-7不一样,因为当用上述方式输入是,二维数组中存放值如下:
3- 9
2 6
10- 1
【练习7-6]在例7-9的程序中,如果将遍历上三角矩阵改为遍历下三角矩阵,需要怎 样修改程序?运行结果有变化吗?如果改为遍历整个矩阵,需要怎样修改程序?输出是什么?为什么? 8、解答:
只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。
for(i = 0; i < n; i + +)
for(二 0;j 9、三角进行交换
}
【练习7-7]矩阵运算:读入1个正整数n(lWnW6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连 线。试编写相应程序。
解答:
#inelude 10、0;
for(i=0;i 11、id)(
int m,nJj.count;
int ⑹)[6],b[6]);
printf("Enter Mr):;
scanff'%d: &n);
printf("EnterM n;:
scant(期 d: &n);
printf lnput array:,*h;
for(i=0;i 12、
}
for(i=0;i 13、jar;
printf lnput year,month,day:);
scanff'%d%d%d : &yeai; &m onth.&day);
day_year=day_ofAear(year,month,day);
printf("Days of year: %\day_year);
return 0;
}
int day_of_year(int year.int monthjnt day)
(
int kleap;
int tab [2][13] = (
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,3 14、0,31,30,31,31,30,31,30,31}
};
leap 二 (yearW4 二二 0&&year%1!=0||yearW4 二二 0);
for(k=l;k 15、ag;
char a[80],op;
printf Enter a x:);
op=getchar();
fflush(stdin感/Setbuf(stdin,NULL);
printf("Enter a string:i二 0;
whi le((a[i]=g etchar=}\n'!)
i ++;
a[i二、0:
max 二 0;
flag=0;
for(i=0;a[i,\Q=i + +)
if(a[i] = =op)(max 二 i;flag=l;
}
if(flag==l)
printfC 'M ax=%d : m ax);
else
printA'No 16、t Found!)驾
return 0;
}
【练习7-11]字符串逆序:输入一个以回车符结束的字符串(少于80个字符),将该字符串逆序存放,输出逆序后的字符串。试编写相应程序。
解答:
#in clude 17、int类型变量占用两个字节,其有定义:int x[1二{0,2,4测数组x在内存中所占字节数是
D o
A 3 B 6 C 10
D 20
2. 以下能正确定义数组并正确赋初值的语句
是D。
A int N=5,b[N][N];
B. inta[l][2] = {{l},{3}};
C. intc[2]0={{1.2},{3;4}}
D. intd(3) [ 2] = {{1,2},{34}};
3若有定义:int⑵)[3 ]以下选项中对数组元素正确引用的是D 。
A a[2][0]
B a[2][3]
C . a [0][3]
4 .设有数 18、组定义:char array [,]ChinaM ;则数组array所占的空间为C。
A 4个字节B 5个字节C 6个字节D 7个字节
5 .下述对C语言字符数组的描述中错误的是Do
A. 字符数组可以存放字符串
B. 宇符数组中的字符串可以整体输入、输出
C .可以在赋值语句中通过赋值运算符”二"对宇符数组整体 值
D.不可以用关系运算符对字符数组中的字符串进行比较
6有以下定义:char x[ ]="abcdefg“; char y[则正确的叙述为
C o
A数组x和数组y等价B.数组x和数组y的长度相同
C数组X的长度大于数组y的长度D数组x的长度小于数组y的长度
19、7. 以下程序的输出结果是C。
int main(void)
( int』⑶={1,47,2,5,8,3,6.9};
int ij二<2;
for (i=0;i<3;i++)
printffHd\・[k][i]);
}
A.456 B 2 58 C 369 D 789
8. 以下程序的输出结果是B。
int main(void)
{ int aa[4][4] = {{l,2,3,4},{5,6,7,8},{3,9,10,2}.{4,2.9,6}};
int i, s=0:
for(i=0;i<4;i++)
s+二 aa[i] ;l]
printfWd\n 冲);
20、}
A B 19 C 13 D 20
二.填空题
1设有定义语句:int a[][3] = {{0},{l则数}组元素a[l][2^值是0
2 .下列程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。
int main(void)
(intx[10],a[9].i;
for(i=0; i<10; i + +) 「c%df &x[i]);
for」=1_; i<10; i + + ) a[i-l]=x0+_x[l-l]_;
3写出下列程序的运行结果是-12 o
3写出下列程序的运行结果是-12 o
for(二 0; i<9; i+ +) pr 21、intffa 3]) printf(M);
4写出下面程序的运行结果
4写出下面程序的运行结果
int main(void)
( int a[10] = {10,1,-20,-203,-21,2,-2,-2,11,-21}; int j,s=O;for(j=0;j<10;j + +)
if(a [j]%2==0) 二+ a[j]; prinst=Wd\n ,,s);
如果输入4,则输
如果输入5,则输
如果输入4,则输
如果输入5,则输
(1)
⑵
#inelude 22、5, 7, 9};
float x;
int i;
scanf(%:&x);
for (i=4 ; i>=0;唯-B>x) s[i+*s[j];
else break printfC八d \n",i+l);
return 0;
5下、列程序的功能是输如下形式的方阵,请填空。
13141516
9101112
5678
1234
int main(void)
{ intij.x;
for(j=4;j>=l_;j--)
{ for(i = l;i<=4;i + +)
{ x=G-l)*4+J_;
printjM4d m q);
}
pnntfC,\rM);
23、}
6 .以下程序的功能是用来检查二维数组是否对称(即对所有的i,都有aD] G]=aD] B)o请 填空。int main(void)
( int a[4]二411,2,34,225,637,867,4};
int i,j,found=0;
for(j=0;j<4;j + +)
( for(i=0;i<4;i + +)
CafflD]'=aD]DU{
_found=l;
break;
}
if(_fou n二二 reak;
}
计(found 二 O)printf该二维数组不对称\rf);
else printff 二维数组对称\1E)
return 0;
}






