C语言习题Word格式.docx
《C语言习题Word格式.docx》由会员分享,可在线阅读,更多相关《C语言习题Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
5.设有说明ints[2]={0,1},*p=s;
则下列错误的C语句是()
A.s+=1;
B.p+=1;
C.*p++;
D.(*p)++;
二、填空题(每小题2分,共12分)
1.char(*pa)[10];
说明pa是______________。
2.inta=1,b=2,c=3;
表达式!
(x=a)&
&
(y=b)&
1+a==b的值为____________。
3.表达式98&
8&
31&
1的值为______________。
4.printf("
%5.3f\n"
123456.12345);
输出为_____________。
5.表达式~3&
(2&
(3^4))的值为_______________。
6.floatx=3.5,y=4.3;
inta=8,表达式y+a%3*(int)((x+y)/4+0.05)/3的值为_____________。
三、改错题(每小题6分,共12分)
1.下列程序是用二分法在递增的数组中查找某个数,若存在,输出该数的下标位置;
否则输出-1。
main()
{intlow,hig,mid,flag=0,key;
staticinta[7]={10,13,15,17,19,21,25,28};
scanf(“%d”,&
key);
for(low=0,hig=7;
low<
=hig&
flag==0;
)
{mid=(low+hig)/2;
if(a[mid]==key)flag=1;
elseif(a[mid]<
hig=mid-1
elselow=mid+1;
}
if(flag)printf(“%d\n”,mid);
elseprintf(“-1”);
2.下列程序是输入n(0<
n<
=100)个整数,计算n个整数之和并输出。
#defineN100
intsum(int*b,m)
{ints=0;
for(;
m--;
)
s+=*b++;
returns;
{inti,n,a[N];
do{printf(“Entern(0<
=100)\n”);
scanf(“%4d”,&
n);
}while(n>
0&
=100);
printf(“Entera[0]---a[%d]\n”,n-1);
for(i=0;
i<
n;
i++)
scanf(“%d”,a++);
printf(“sum=%d\n”,sum(a,n));
}
四、程序分析,给出下列各程序的执行结果(输出)
1.main()(2分)
{inta=6;
a+=a%=a*=a+a;
printf(“%d\n”,a);
}
程序的运行结果为:
2.main()(6分)
{int*p,*q,n;
p=(int*)malloc(n*sizeof(int));
for(q=p+n-1;
q>
=p;
q--)
scanf(“%d”,q);
p<
=q;
p++)
printf(“%3d”,*p);
当输入数据序列为842651387↙时
程序的输出结果为:
3.
main()(5分)
{inta[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;
for(i=0;
4;
i++)p[i]=&
a[i*3];
printf(“%d\n”,p[3][2]);
4.
main()(5分)
{inta[][4]={1,3,5,7,9,11,13,17,19,21,23};
int(*p)[4],i=1,j=2;
p=a;
printf(“%d\n”,*(*(p+i)+j));
}
5.#include<
stdio.h>
(6分)
intf(intn)
{staticints=1;
while(n)s*=n--;
returns;
main()
{inti,j;
i=f(3);
j=f(5);
printf("
\nTheoutputis:
\n\n"
);
i=%dj=%d\n"
i,j);
程序的运行结果为:
6.#include<
(8分)
inta[10]={1,2,3,4,5,6,7,8,9,10};
voidrev(int*m,intn)
{intt;
if(n>
1)
{t=*m;
*m=*(m+n-1);
*(m+n-1)=t;
rev(m+1,n-2);
{inti;
rev(a+2,6);
10;
i++)
%d"
a[i]);
\n"
rev(a,5);
7.typedefstructnode(3分)
{intx;
char*s;
}node;
func(nodet)
{t.x=10;
t.s=”computer”;
return(0);
main()
{nodet;
t.x=1;
t.s=”minicomputer”;
func(t);
printf(“%d,%s”,t.x,t.s);
8.#definen
6(6分)
{intx[n]={6,2,7,3,9,1},i,j,flag,temp;
n-1;
{flag=0;
for(j=n-1;
j>
i;
j--)
if(x[j]<
x[j-1]){temp=x[j];
x[j]=x[j-1];
x[j-1]=temp;
flag=1;
if(!
flag)break;
for(j=0;
j<
j++)printf(“%3d”,x[j]);
五、在下面程序中横线处填上适当语句或表达式(每个空格3分,共30分)。
本函数是判断整数m是不是素数。
#include<
math.h>
voidprime(intm)
{intj,k;
k=sqrt(m);
for(j=2;
(1);
j++)
if(
(2))break;
if((3))printf(“%disaprimenumber\n”);
elseprintf(“%disnotaprimenumber\n”);
2.本程序是将十进制数n转化为d进制数(2≤d≤16)。
intchange(intn,intd,char*a)
{intr,i=0;
while(
(1))
{r=n%d;
if(r<
10)r=r+
(2);
elser=r+(3);
*ai++=r;
i++;
n=n/d;
returni-1;
{intn,d,i,j;
charx[100];
printf(“inputn,d:
”);
scanf(“%d%d”,&
n,&
d);
j=change((4));
printf(“\noutput:
for(i=j;
i>
=0;
i--)printf(“%c”,x[i]);
3.本程序是将10个学生的信息放在一个链表中。
structstudent
{intno;
charname[12];
floatscore;
structstudent*next;
};
{structstudent*head,*p,*q;
intj;
for(j=1;
=10;
j++)
{if(
(1)){head=(structstudent*)malloc(sizeof(structstudent));
p=head;
else{q=(structstudent*)malloc(sizeof(structstudent));
(2);
p=q;
scanf(“%d,%s,%f”,&
p->
no,&
name,&
score);
(3)=NULL;
while((4))
{printf(“\n%d,%s,%4.1f”,p->
no,p->
name,p->
p=p->
next;
}