6.2阅读程序,指出程序的运行结果。
(1)
#include
main()
{
intn=10,p=&n;
p=5;
printf("%d\n",n);
}
(2)
#include
main()
{
inta=2,b=4,c=6;
intpa=&a,pb=&b,p;
(p=&c)=pa(pb);
printf("%d\n",c);
}
6.3从键盘输入3个整数,要求设3个指针变量p1、p2、p3,使p1指向3个数中最大者,p2指向次大者,p3指向最小者,然后按由大到小的顺序输出这3个数。
#include
intmain(void)
{
intp1,p2,p3;
inti,j,k,temp;
printf("inputdata,usespacebetweendata\n");
scanf("%d%d%d",&i,&j,&k);
p1=&i;p2=&j;p3=&k;
if(p1 {temp=p1;p1=p2;p2=temp;}
if(p1 {temp=p1;p1=p3;p3=temp;}
if(p2 {temp=p2;p2=p3;p3=temp;}
printf("%d%d%d",p1,p2,p3);
return0;
}
6.4想使指针变量pt1指向a和b中的较大者,pt2指向a和b中的较小者,请问以下程序能否达到此目的?
#includeintswap(intp1,intp2)
{
intp;
p=p1;p1=p2;p2=p;
}
intmain(void)
{
inta,b;
intpt1,pt2;
scanf("%d,%d",&a,&b);
pt1=&a;pt2=&b;
if(a printf("%d,%d\n",pt1,pt2);
return0;
}
#include
intswap(intp1,intp2)
{
inttemp;
temp=p1;p1=p2;p2=temp;
}
intmain(void)
{
inta,b;
intpt1,pt2;
scanf("%d%d",&a,&b);
pt1=&a;pt2=&b;
if(a printf("%d%d",pt1,pt2);
return0;
}
6.5阅读程序,指出程序的执行结果。
(1)
#includeintmain()
{
inta[10]=={0,1,2,3,4,5,6,7,8,9},p=a;
printf("%d,%d\n",p+2,(p+2));
return0;
}
(2)
#include
intmain()
{
inti;
inta[10],p=a;
for(i=0;i<10;i++)p++=2i;
for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");
return0;
}
(3)
#include
intmain()
{
inta[5]=={0,1,2,3,4},p;
p=&a[3];
printf("%d\n",--p);
return0;
}
(4)
#include
intmain()
{
inta[5]={1,3,5,7,9},p,k;
p=a;k=&p;
printf("%d,",(p++));
printf("%d,",k);
return0;
}
(5)
#include
intmain()
{
staticinta[]={1,3,5};
ints,i,p=NULL;
s=1;
p=a;
for(i=0;i<3;i++)s=(p+i);
printf("%d\n",s);
return0;
}
(6)
#include
intmain()
{
staticinta[]={1,2,3,4,5};
intp=NULL;
p=a;
printf("%d,",p);
printf("%d,",(++p));
printf("%d,",++p);
printf("%d,",(p--));
printf("%d,",++(p));
return0;
}
(7)
#include
inta[5]={1,2,3,4,5};
intp[5]={a,a+1,a+2,a+3,a+4};
intpp=p;
intmain()
{
pp++;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
pp++;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
++pp;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
++pp;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
pp=p;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
pp++;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
++pp;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
++pp;
printf("%d,%d,%d\n",pp-p,pp-a,pp);
return0;
}
(8)
#include
#include
intmain()
{
chara[]="abcdefgh";
charpc=&a[8];
while(--pc>a)putchar(pc);putchar(′\n′);
return0;
}
(9)
#include
#defineN2
#defineM5
intmain()
{
charc[N][M]{"1357","2468"},p[2];
inti,j,k=0;
for(i=0;i for(i=0;i for(j=0;p[i][j]>′\0′&&p[i][j]<=′9′;j+=2)
k=10k+p[i][j]-′\0′;
printf("%d\n",k);
return0;
}
(10)
#include
#defineN3
#defineM4
intmain()
{
inta[N][M]={1,3,5,7,9,11,13,15,17,19,21,23};
int(p){M==a,i,j,k=0;
for(i=0;i for(i=0;i for(j=0;j printf("%d",k+((p+1)+j));
return0;
}
(11)
#intlude
intmain()
{
inta[3]=[3]={{1,2,3},{4,5,6},{7,8,9}}
intpa[3];
intp=&a[0]=[0]=;
intpp;
pa[0]=a[0];
pa[0]=a[0]=+1;
pa[2]=a[0]+2;
pp=pa;
printf("%3d",a[2]);
printf("%3d",((a+1)+1));
printf("%3d",pa[1]);
printf("%3d",p[1]);
printf("%3d",pp[1][2]);
return0;
}
(12)
#include
intmain()
{
charc[]={"ENTER","NEW","POINT","FIRST"};
charpc[]={c+3,c+2,c+1,c};
charppc=pc;
printf("%s\n",++ppc);
printf("%s\n",--++ppc+3);
printf("%s\n",ppc[-2]+3);
printf("%s\n",ppc[-1][-1]+1);
return0;
}
6.6
(1)想输出数组a的10个元素,用以下程序是否可行?为什么?
#include
main()
{
inta[10]=={1,2,3,4,5,6,7,8,9,10},i;
for(i=0;i<10;i++,a++)
printf("%d",a);
}
#include
main()
{
inta{10=={1,2,3,4,5,6,7,8,9,10},i,p=a;
for(i=0;i<10;i++,p++)
printf("%d,",p);
}
(2)想输出数组a的10个元素,用以下程序是否可行?请与上题对比并进行分析,得到必
#include
print_arr(inta[],n)
{
inti;
for(i=0;i printf("%d",a);
}
main()
{
intarr[10]={1,2,3,4,5,6,7,8,9,10};
printarr(arr,10);
}
6.7有一个数列,含有20个整数,现要求编写一个函数,能够对从指定位置开始的几个数按相反顺序重新排列,并在main函数中输出新的数列。例如,原数列为
#include
voidresort(int[],int,int);
intmain(void)
{
voidresort(intarray[],intwhere,intamount);
intnumber[20],where,amount,i;
printf("input20numbers\n");
for(i=0;i<20;i++)
scanf("%d",&number[i]);
printf("\n");
printf("howmanynumbersdoyouwanttosort:");
scanf("%d",&amount);
printf("\nwheredoyouwanttostart:");
scanf("%d",&where);
printf("\n");
printf("oldarrayasfollow:\n");
for(i=0;i<20;i++)
printf("%d,",number[i]);
printf("\n");
resort(number,where,amount);
printf("\nresortedarrayasfollow:\n");
for(i=0;i<20;i++)
printf("%d,",number[i]);
printf("\n");
return0;
}
voidresort(intarray[],intwhere,intamount)
{
intp1,p2,temp;
p1=&array[where–1];
p2=&array[where-2+amount];
for(;p1<&array[where-1]+amount/2;p1++,p2--)
{
temp=p1;
p1=p2;
p2=temp;
}
}
6.8有n个人围成一圈,顺序排号,从第1个人开始报数,从1报到5,凡是报到5的人退出圈子,问最后留下的是原来第几序号的人?要求如下。
#include
intmain(void)
{
voidnumOffLeave(intp,intn);
intnum[100],n,i;
printf("howmanypeople?\n");
scanf("%d",&n);
for(i=0;i num[i]=i+1;
numOffLeave(num,n);
for(i=0;i if(num[i]!=0)
printf("No.whichleftlastis%d",num[i]);
return0;
}
voidnumOffLeave(intp,intn)
{
inti,out,count;
i=0;
out=0;
count=0;
while(out {
if((p+i)!=0)
count++;
if(count==5)
{
(p+i)=0;
count=0;
out++;
}
i++;
if(i==n)i=0;
}
}
6.9有一个二维数组a,大小为3×5。其元素为
#include
intmain(void)
{
voidmaxval(intarr[][4],intm,intn};/函数声明/intarray[3][4],i,j,l,c;
/输入数组大小/
printf("inputlinesofarray:");
scanf("%d",&l);
printf("\ninputcolumnofarray:");
scanf("%d",&c);/输入数据/
printf("\ninputdatausecommabetweendata\n");
for(i=0;i for(j=0;j scanf("%d,",&array[i][j]);
printf("\n");/显示数组的结构形式/
for(i=0;i {
for(j=0;j printf("%4d",array[i][j]);
printf("\n");
}
/调用函数计算最大元素/
maxval(array,l,c);
return0;
}
voidmaxval(intarr[]4],intm,intn)
{
inti,j,max,line=0,col=0;
int(p)[4];
max=arr[0][0];
p=arr;
/穷举最大元素/
for(i=0;i for(j=0;j if(max<((p+i)+j))
{
max=((p+i)+j);
line=i;
col=j;
}
/输出结果/
printf("\nthemaximumvalueis%d",max);
printf("\nthelineis:%d",line);
printf("nthecolumnis:%d\n",col);
}
6.11有n个学生,每个学生参加m门课程的考试,要求编写一函数,能检查n个学生有无不及格的课程。如果某一学生有一门或一门以上的课程不及格,就输出该学生的学号(学号从0算起,即0,1,2,…)及其全部课程成绩。
#include
intmain(void)
{
voidsearch(float(p)[4],intm};
floatscore[5][4]{{65,80,78,90},{98,59,100,83},{92,66,78,70},{78,58,80,77},{64,68,70,81}};
search(score,5);
return0;
}
voidsearch(float(p)[4],intm)
{
inti,j,flag;
for(i=0;i {
flag=0;
for(j=0;j<4;j++)
if(((p+i)+j)<60)flag=1;
if(flag==1)
{
printf("No.%disflunked,scoresare:\n",i);
for(j=0;j<4;j++)
printf("%5.1f",((p+i)+j));
printf("\n");
}
}
}
6.12输入3行字符(每行60个字符以内),要求统计出其中共有多少大写字母、小写字母、空格及标点符号。
#include
#include
intmain(void)
{
charstr[3][60](p)[60];
inti,j,up,low,space,comma;
up=0;low=0;space=0;comma=0;
printf("inputthreestrings\n");
for(i=0;i<3;i++)
gets(str[i]);
p=str;
for(i=0;i<3;i++)
for(j=0;j {
if(((p+i)+j)>=′a′&&((p+i)+j)<=′z′)low++;
elseif(((p+i)+j)>=′A′&&((p+i)+j)<=′Z′)up++;
elseif(((p+i)+j)==′,′)comma++;
elseif(((p+i)+j)==′′)space++;
}
printf("low=%dup=%dspace=%dcomma=%d",low,up,space,comma);
return0;
}
6.13指出下面程序中的错误,并分析出错的原因。
6.14建立一个动态二维数组,用来存储1~10的1~4次幂。
参考程序代码如下。
#include
#include
intpower(int,int);
intmain(void)
{
intp[4][10];
registerinti,j;
if(!p)
{
printf("Memoryrequestfailed!\n");
exit(1);
}
for(j=1;j<11;j++)
{
for(i=1;i<5;i++)
printf("%10d",p[i-1][j-1]=powr(j,i));
printf("\n");
}
free(p);
return0;
}
intpower(intx,intn)
{
registerintt=1;
for(;n;n--)t=x;
returnt;
}
6.15有一个C语言源程序文件,名为echo,其内容如下。
#include
main(intargc,charargv[])
{
while(argc-->1)
printf("%s\n",++argv);
}
|
|