PAGE
练习与思考 8
8.1 选择题
(1)有以下定义及语句,则对数组a元素的不正确引用的表达式是( )。
int a[4][5];*p[2],j;
for (j = 0 ; j <4 ; j++)
p[j]=a[j];
A)p[0][0] B)*(a+3)[4]
C)*(p[1]+2) D)*(&a[0][0]+3)
(2) 有以下程序#include
struct tt
{int x;struct tt *y;} *p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
main()
{ int i;
p=a;
for(i=1;i<=2;i++) {printf("%d,",p->x); p=p->y;}
}
程序的运行结果是( )。A)20,30, B)30,17 C)15,30, D)20,15,
8.2 填空题
(1) 以下程序段的输出结果是( )。
#include
#define F(a,b) printf("%d,%d\n",a,b)
void main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
F(a,a[0]);
F(*a,*(a+0));
F(a[1],*(a+1));
F(*a[1],**(a+1));
F(*(a[1]+1),*(*(a+1)+1));
F(*a,**a);
}
(2) 以下程序的运行时,输入i=1,j=2(回车)结果是( )。
#include
void main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p)[4],i,j;
p=a;
scanf("i=%d,j=%d",&i,&j);
printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j));
}
(3) 以下程序运行后的输出结果是( )。
struct NODE
{ int k;
struct NODE *link;
};
main()
{ struct NODE m[5],*p=m,*q=m+4;
int i=0;
while(p!=q){
p->k=++i; p++;
q->k=i++; q--;
}
q->k=i;
for(i=0;i<5;i++) printf("%d",m[i].k);
printf("\n");
}
(4) 以下程序运行后的输出结果是( )。
struct NODE
{ int num; struct NODE *next;
} ;
main()
{ struct NODE s[3]={{1, '\0'},{2, '\0'},{3, '\0'}}, *p, *q, *r;
int sum=0;
s[0].next=s+1; s[1].next=s+2; s[2].next=s;
p=s; q=p->next; r=q->next;
sum+=q->next->num; sum+=r->next->next->num;
printf("%d\n", sum);
}
(5) 以下程序的输出结果是( )。#include
main()
{char *s1,*s2,m;
s1=s2=(char*)malloc(sizeof(char));
*s1=15;
*s2=20;
m=*s1+*s2;
printf("%d\n",m);
}
8.3 编程题
(1) 27人围成一个圈,从第1个人开始顺序报号,凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号(用链表方式实现)。
8.4 简答题
(1) 调试运行下列程序,并回答问题。这个简答题是不是就是想通过锻炼学生的调试能力出的题?调试好的程序我没有附上
这个简答题是不是就是想通过锻炼学生的调试能力出的题?
调试好的程序我没有附上
int max, n;
main ( )
{
int a[4][4], j, k;
for (j=0; j<4; j++)
for (k=0; k<4; k++)
scanf("%d" ,&a[j][k]);
printf ("\n");
for (j=0; j<4; j++)
printf ("%d %d %d %d\n" ,a[j][0], a[j][1] , a[j][2], a[j][3] );
maxgs(a,4);
printf ("max=