《C语言程序设计》作业2解答
一、选择题
1. 在下面的一维数组定义中,( C )语句有语法错误。
A. int a[ ]={1,2,3};
B. int a[10]={0};
C. int a[ ];
D. int a[5];
2. 在下面的二维数组定义中,( C )语句是正确的。
A. int a[5][ ];
B. int a[ ][5];
C. int a[ ][3]={{1,3,5},{2}};
D. int a[ ](10);
3. 假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为( C )。
A. 2
B. 4
C. 6
D. 8
4. 假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为( A )。
A. 0
B. 4
C. 8
D. 6
5. 将两个字符串连接起来组成一个字符串时,选用( C )函数。
A. strlen( )
B. strcap( )
C. strcat( )
D. strcmp( )
二、填空题
1. 假定一维数组的定义为“char * a[8];”,则该数组所含元素的个数为8 。
2. 假定一维数组的定义为“char * a[8];”,则该数组所占存储空间的字节数为32 。
3. 假定二维数组的定义为“int a[3][5];”,则该数组所占存储空间的字节数为60 。
4. 假定二维数组的定义为“double a[M][N];”,则该数组所含元素的个数为M*N 。
5. 假定二维数组的定义为“double a[M][N];”,则每个数组元素的行下标取值范围在0 ~M-1 之
间。
6. 假定二维数组的定义为“double a[M][N];”,则每个数组元素的列下标取值范围在0~N-1 之
间。
7. 使用“typedef char BB[10][50];”语句定义BB 为含有10行50列的二维字符数组类型。
8. 存储字符'a'需要占用存储器的 1 个字节空间。
9. 空字符串的长度为0 。
10. 存储一个空字符串需要占用 1 个字节。
11. 字符串"a:\\xxk\\数据"的长度为11 。
12. 用于存储一个长度为n的字符串的字符数组的长度至少为n+1 。
13. strcmp函数用于进行两个字符串之间的比较。
14. strcpy函数用于把一个字符串拷贝到另一个字符数组空间中。
15. 一个二维字符数组a[10][20]能够存储10 个字符串。
16. 一个二维字符数组a[10][20]能够存储的每个字符串的长度至多为19 。
三、写出下列每个程序运行后的输出结果
1. #include
void main( ) {
int a[10]={12, 39, 26, 41, 55, 63, 72, 40, 83, 95};
int i, i1=0, i2=0;
for(i=0; i<10; i++)
if(a[i]%2==1) i1++; else i2++;
printf("%d %d\n", i1, i2);
}
程序的运行结果是: 6 4
2. #include
#include
void main( )
{
int i;
char * a[5]={"student","worker","cadre","soldier","peasant"};
char * p1, * p2;
p1=p2=a[0];
for(i=0; i<5; i++) {
if(strcmp(a[i], p1)>0) p1=a[i];
if(strcmp(a[i],p2)<0) p2=a[i];
}
printf("%s %s\n",p1,p2);
}
程序运行的结果是: worker cadre
3. #include
int a[10]={4, 5, 6, 15, 20, 13, 12, 7, 8, 9};
void main( ) {
int i, s0, s1, s2;
s0=s1=s2=0;
for(i=1; i<10; i++)
switch(a[i]%3) {
case 0 : s0+=a[i]; break;
case 1 : s1+=a[i]; break;
case 2 : s2+=a[i]; break;
}
printf("%d %d %d\n", s0, s1, s2);
}
程序运行的结果是: 42 20 33
4. #include
void main( ) {
char a[ ]="abcdbfbgacd";
int i1=0, i2=0, i=0;
while(a[i]) {
if(a[i]=='a') i1++;
if(a[i]=='b') i2++;
i++;
}
printf("%d %d\n", i1, i2);
}
程序运行的结果是: 2 3
5. #include
void main( ) {
int a[3][4]={{1,2,7,8},{5,6,10,6},{9,12,3,4}};
int m=a[0][0];
int ii=0, jj=0;
int i, j;
for(i=0; i<3; i++)
for(j=0; j<4; j++)
if(a[i][j]>m) { m=a[i][j]; ii=i; jj=j; } printf("%d %d %d\n", ii, jj, a[ii][jj]);
}
程序运行的结果是: 2 1 12
6.#include
void main( ) {
int a, b;
for(a=1, b=2; b<50; ) {
printf("%d %d ", a,b);
a=a+b;
b=a+b;
}
printf("\n");
}
程序运行的结果是: 1 2 3 5 8 13 21 34
四、写出下列每个函数的功能
1. #include
int SA(int a, int b ) {
if(a>b) return 1;
else if(a==b) return 0;
else return -1;
}
函数的功能是: 比较两个整数a和b的大小,若a大于b,则函数返回1;若a等于b,则函数返回0;
若a小于b,则函数返回-1。
2. int SC(int a, int b, int c) {
if(a>=b && a>=c) return a;
if(b>=a && b>=c) return b;
return c;
}
函数的功能是: 比较并返回三个整数a,b和c中的最大值。
3. double SF(double x, int n) { //n为大于等于0的整数
double p=1, s=1;
int i;