}
}
4.写出下列程序的执行结果00
12
24
00
23
46
#include
intmain(void)
{
inta[10],b[10],*pa,*pb,i;
pa=a;
pb=b;
for(i=0;i<3;i++,pa++,pb++)
{
*pa=i;
*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);
}
pa=&a[0];
pb=&b[0];
for(i=0;i<3;i++)
{
*pa=*pa+i;
*pb=*pb+i;
printf(“%d\t%d\n”,*pa++,*pb++);
}
return0;
}
三、程序设计题
1.拆分实数的整数与小数部分:
要求定义一个函数voidsplitfloat(floatx,int*intpart,float*fracpart),其中x是被拆分的实数,*intpart和*fracpart分别是将实数x拆分出来的整数部分与小数部分。
编写主函数,并在其中调用函数splitfloat()。
试编写相应程序。
解答:
#include
voidsplitfloat(floatx,int*intpart,float*fracpart);
intmain(void)
{
floatx,fracpart;
intintpart;
printf("Inputanumber:
");
scanf("%f",&x);
splitfloat(x,&intpart,&fracpart);
printf("Theintpartis:
%d",intpart);
printf("Thefracpartis:
%f",fracpart);
return0;
}
voidsplitfloat(floatx,int*intpart,float*fracpart)
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
2.在数组中查找指定元素:
输入1个正整数n(1要求定义和调用函数search(intlist[],intn,intx),在数组list中查找元素x,若找到则返回相应下标,否则返回-1,参数n代表数组list中元素的数量。
试编写相应程序。
解答:
#include
intsearch(intlist[],intn,intx);
intmain(void)
{
inti,n,res,x;
inta[10];
printf("Inputn:
");
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
printf("Inputx:
");
scanf("%d",&x);
res=search(a,n,x);
if(res>=0)
printf("index=%d\n",res);
else
printf("Notfound\n");
return0;
}
intsearch(intlist[],intn,intx)
{
inti;
for(i=0;iif(list[i]==x)returni;
return-1;
}
3.循环后移:
有n个整数,使前面各数顺序向后移m个位置,移出的数再从开头移入。
编写一个函数实现以上功能,在主函数中输入n个整数并输出调整后的n个数。
试编写相应程序。
解答:
#include
voidmove(int*x,intn,intm);
intmain(void)
{
inti,m,n;
inta[80];
printf("Entern:
");
scanf("%d",&n);
printf("Enterm:
");
scanf("%d",&m);
for(i=0;iscanf("%d",&a[i]);
move(a,n,m);
printf("Aftermove:
");
for(i=0;iprintf("%d",a[i]);
return0;
}
voidmove(int*p,intn,intm)
{
inti,j,k=0,a[80];
for(i=0;iif(ia[i+m]=p[i];
else
a[k++]=p[i];
for(i=0;ip[i]=a[i];
}
4.报数:
有n个人围成一圈,按顺序从1到n编好号。
从第一个人开始报数,报到m(m如此下去,直到留下最后一个人。
编写程序,输入整数n和m,并按退出顺序输出退出圈子的人的编号。
试编写相应程序。
解答:
#include
intmain(void)
{
intcount,i,j,m,n;
intnum[80]={0};
printf("Inputn:
");
scanf("%d",&n);
printf("Inputm:
");
scanf("%d",&m);
i=j=count=0;
while(countif(num[i]==0)
j++;
if(j%m==0&&j){
count++;
num[i]=-1;
j=0;//报数报到m后,j重归0,开始下次报数
}
i++;//读取下一个元素
i%=n;//一次n个跟报完数,开始下一次(除余n是因为i是下标,从0开始,n是具体数//从1开始
}//i为n时下次a[0]报数)
for(i=0;iif(num[i]==0)
printf("LastNois:
%d\n",i+1);
return0;
}
5.使用函数实现字符串复制:
输入一个字符串t和一个正整数m,将字符串中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。
要求自定义并调用函数voidstrmcpy(char*s,char*t,intm)。
试编写相应程序。
解答:
#include
#include
voidstrmcpy(char*s,char*t,intm);
intmain(void)
{
chars[80],t[80];
intm;
printf("Inputthestring:
");
gets(t);
printf("Enterm:
");
scanf("%d",&m);
if(strlen(t)printf("ErrorInput");
return0;
}
else{
strmcpy(s,t,m);
puts(s);
}
return0;
}
voidstrmcpy(char*s,char*t,intm)
{
t=t+m-1;
while(*t!
='\0'){
*s=*t;
s++;
t++;
}
*s='\0';
}
6.删除字符:
输入一个字符串,再输入一个字符ch,将字符串中所有的ch字符删除后输出该字符串。
要求定义和调用函数delchar(s,c),该函数将字符串s中出现的所有c字符删除。
试编写相应程序。
解答:
#include
voiddelchar(char*s,charc);
intmain(void)
{
charc;
chars[80];
printf("Inputthestring:
");
gets(s);
printf("Inputach:
");
scanf("%c",&c);
delchar(s,c);
printf("result:
");
puts(s);
return0;
}
voiddelchar(char*s,charc)
{
inti,j;
i=j=0;
while(s[i]!
='\0'){
if(s[i]!
=c){
s[j]=s[i];
j++;
}
i++;
}
s[j]='\0';
}
7.字符串排序:
输入5个字符串,按由小到大的顺序输出。
试编写相应程序。
解答:
#include
#include
intmain(void)
{
intn,i,j,index;
charsx[80][80],stemp[80];
printf("Entern:
");
scanf("%d",&n);
printf("Input%dstrings:
",n);
for(i=0;iscanf("%s",sx[i]);//每行的基地址
for(i=0;iindex=i;
for(j=i+1;jif(strcmp(sx[j],sx[index])<0)
index=j;
strcpy(stemp,sx[i]);
strcpy(sx[i],sx[index]);
strcpy(sx[index],stemp);
}
printf("aftersorted:
\n");
for(i=0;i<5;i++)
printf("%s\t",sx[i]);