C语练习三
一、填空题
1.设有:int a[]={1,2,3,4,5,6},*p=a;则a[2]元素的地址可以表示为 、
、 。假设a数组的首地址为12A0(16进制),则a[1]的地址值为 ,a[4]的地址值为 。
2.设有:float b[5];假设b数组的首地址为A01F(16进制),则a[1]的地址值为 ,a[4]的地址值为 。
3.设有:int x[3][4],*p=x[0];则x[0][2]的地址可以表示为 , , 。x[2][3]的地址可以表示为 , , 。
4.设有int x[3][4],*p=x[1];则x[0][2]的地址可以表示为 , x[0]+2 , 。x[2][3]的地址可以表示为 , , 。
5.设有:int x[3][4],(*p)[4]=a;则x[0][2]的地址可以表示为 ,
(用p表示),x[2][3]的地址可以表示为 , (用p表示)。
6.设有:int x[3][4],(*p)[4]=a+1;则x[0][2]的地址可以表示为 ,
(用p表示),x[2][3]的地址可以表示为 , (用p表示)。
二、程序阅读题,写出程序的运行结果。
1.下面程序的运行结果是
#include "stdio. h"
void fun(int *a,int *b)
{ int *t;
t=a;a=b;b=t; }
void main()
{ int x=1,y=2;
fun(&x.,&y);
printf("%d %d"x,y);
}
2.下面程序的运行结果是
#include”stdio.h”
int fun(int a, int b)
{ if(a>b) return (a+b);
else return (a-b);
}
void main()
{ int x=3,y=4,z=5,r;
r=fun(fun(x,y),3+z);
printf(“%d”,r);
}
3.下面程序的运行结果是
#include "stdio.h"
int f(int x,int *y)
{ return (*y-x)*x; }
void main()
{
int a=1,b=2,c=3,d;
b=f(a,&b);
d=f(c,&b);
printf("%d",d);
}
4.下面程序的运行结果是
#include "stdio.h"
void func1(int i);
void func2(int i);
void func(char *p)
{ while(*p)
{ printf("%c",*p);
p+=2; }
}
void main()
{ char st[]="friend";
func(st);
}
5.下面程序的运行结果是
#include "stdio.h"
void fun(int (*a)[4])
{ printf("%d,%d\n",*(a[1]+2),*(*a+10));}
void main()
{int a[3][4];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
a[i][j]=i+j;
fun(a);
}
6.下面程序的运行结果是
#include "stdio.h"
void fmin(int (*a)[4],int *p)
{ int i,j;
*p=**a;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(*p>*(a[i]+j)) *p=*(a[i]+j);
}
void main()
{ int a[3][4]= {{12,23,15,25},{22,21,30,34},{30,31,28,27}};
int min;
fmin(a,&min);
printf("%d",min); }
7.下面程序的运行结果是 (递归调用)
#include
void fun(int a)
{ printf("%d",a%10);
if(a/10) fun(a/10);
}
void main()
{ int a=1234;
fun(a);
}
8.下面程序的运行结果是
#include
void main()
{ int a[10],a1[]={1,3,6,9,10},a2[]={2,4,7,8,15},i=0,j=0,k;
for(k=0; k<6;k++)
if(a1[i]
#include
void main()
{ char c='d',*p="you and me";
int n,k,j;
n=strlen(p);
for(k=0;k
fun(int *a,int *n)
{ int i;
*n=0;
for(i=1;i<10;i++)
if( ) *n=i;
}
void main()
{ int a[]={3,1,34,5,6,56,3,6,9,12},maxcol;
;
printf("maxcol=%d\n",maxcol);
}
2,以下程序的功能是:求100以内最大的一对孪生素数之和,孪生素数是指两个素数之差2。
#include "stdio.h"
#include "math.h"
int isPrime(int i)
{
int j,r =0,k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0) break;
if(j>k) ;
else return 0;
}
void main()
{int i,sum=0;
for(i=100;i>=5;i--)
{
if( )
{ sum=i+i-2;
break;
}
}
printf("%d",sum);
}
3.下面程序打印杨辉三角形的前10行。输出结果如下图。
#include "stdio.h"
void fum( )
{
int i=2,j;
p[0][0]=p[1][0]=p[1][1]=1;
for(;i<10;i++)
{ p[i][0]=p[i][i]=1;
for(j=1;ja[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
void main( )
{
int a[7],i,j,t;
for(i=1;i<7;i++)
scanf("%d",a+i);
sort(a);
for(i=1;i<7;i++)
printf("%d ",a[i]);
}
5.求所有不超过200且大于10的数N的平方是有对称性的回文数。如N=11,11*11=121。
#include
void main()
{ int m[16],n,i,t,count=0;
long a,k;
for(n=10;n<200;n++)
{ k=0;
t=1;
;
for(i=1;a!=0;i++)
{ m[i]=a%10;
a=a/10;
}
for(;i>1;i--)
{ k+=m[i-1]*t;
;
}
if( )
printf("(%d)%4d,%4d\n",++count,n,n*n);
}
printf("\n");
}
10