C语言习题.docx
《C语言习题.docx》由会员分享,可在线阅读,更多相关《C语言习题.docx(8页珍藏版)》请在冰豆网上搜索。
![C语言习题.docx](https://file1.bdocx.com/fileroot1/2023-2/4/c7ebbdf7-188d-4bfd-95e9-007d06ae46a5/c7ebbdf7-188d-4bfd-95e9-007d06ae46a51.gif)
C语言习题
C语言程序设计试卷(A)
一、单项选择题(每小题1分,共5分)
1. 设有如下定义,则对data中的a成员的正确引用是()
structsk{inta;floatb;}data,*p=&data;
A.(*p).data.aB.(*p).aC.p->data.aD.p.data.a
2.设有inti;则表达式i=1,++i,++i||++i,i的值为()
A.1B.2C.3D.4
3.设有inti;则表达式(i=1,i=10)?
i++||++i:
++i的值为()
A.1B.2C.3D.10
4.设有inta[]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是()
A.10,11,12B.11,12,12C.10,12,12D.11,11,12
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]elselow=mid+1;
}
if(flag)printf(“%d\n”,mid);elseprintf(“-1”);
}
2.下列程序是输入n(0#defineN100
intsum(int*b,m)
{ints=0;
for(;m--;)
s+=*b++;
returns;
main()
{inti,n,a[N];
do{printf(“Entern(0scanf(“%4d”,&n);
}while(n>0&&n<=100);
printf(“Entera[0]---a[%d]\n”,n-1);
for(i=0;iscanf(“%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;
scanf(“%d”,&n);
p=(int*)malloc(n*sizeof(int));
for(q=p+n-1;q>=p;q--)
scanf(“%d”,q);
for(q=p+n-1;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;i<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(6分)
intf(intn)
{staticints=1;
while(n)s*=n--;
returns;
}
main()
{inti,j;
i=f(3);j=f(5);
printf("\nTheoutputis:
\n\n");
printf("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);}
}
main()
{inti;
printf("\nTheoutputis:
\n\n");
rev(a+2,6);
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
rev(a,5);
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
程序的运行结果为:
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分)
main()
{intx[n]={6,2,7,3,9,1},i,j,flag,temp;
for(i=0;i{flag=0;
for(j=n-1;j>i;j--)
if(x[j]if(!
flag)break;
}
for(j=0;j}
程序的运行结果为:
五、在下面程序中横线处填上适当语句或表达式(每个空格3分,共30分)。
1. 本函数是判断整数m是不是素数。
#include
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;}
main()
{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;
};
main()
{structstudent*head,*p,*q;
intj;
for(j=1;j<=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,&p->name,&p->score);
}
(3)=NULL;
p=head;
while((4))
{printf(“\n%d,%s,%4.1f”,p->no,p->name,p->score);
p=p->next;}
}