解:程序如下,
main()
{ int *p1,*p2,*p3,i,j,k,temp;
scanf(“%d %d %d”,&i,&j,&k);
p1=&i,p2=&j,p3=&k;
if (*P1<*p2)
{ temp=*p1,*p1=*p2,*P2=temp;}
if (*P1<*p3)
{ temp=*p1,*p1=*p3,*P3=temp;}
if (*P2<*p3)
{ temp=*p2,*p2=*p3,*P3=temp;}
printf(“%dd %d %d”,*p1,*p2,*p3);
}
? 6.3 从键盘输入三个整数,要求设三个指针变量 P1,
P2,P3,使 P1指向三个数的最大者,P2指向次大者,
P3指向最小者,然后按由大到小的顺序输出三个数 。
6.15 编写一个函数,能测出一个字符串的长度,函
数返回值是字符串的长度。
#include,stdio.h”
main( )
{ int len(char *ps),l; char striing[80],*p ;
gets(string); p=string; l=len(p);
puts(p);
printf(“%d”,l );
}
int len(char *ps)
{ int n=0;
while (*ps!=?\0?)
{ n++; ps++; }
return(n)
}
6.19 写一个函数 strcmp,以实现两个字符串的比较。
函数调用形式为,strcmp(str1,str2);
如果 str1>str2,则此函数值为一个正数;若 str1=str2,
则返回值 0;若 str1<str2,则输出一个负数
#include,stdio.h”
Main( )
{ int cmp_str(char str1[ ],char str2[ ] );
char str1[100],str2[100];
int cmpval; gets(str1); gers(str2);
cmpval=cmp_str(str1,str2);
printf(“cmpval=%d”,cmpval);
}
Int cmp_str(char str1[ ],char str2[ ] )
{ int i=0;
while( str1[ i ])==str2[ i ] )
if ( str1[ i++]==?\0?) return(0);
if(str1[ i ]>str2[ i ]) return(1);
else return( -1 );
}
6.6 编一个函数 sort,使 10个整数按由小到大的顺
序排列。在 main函数中输入这 10个数,并输出排好
序的数。
编程序方法,
1、主函数中定义一个一维数组,和一个指向该类型数
据的指针变量,并对定义的函数进行说明;
2、主函数中对该数组赋值(单循环结构);
3、主函数中调用该函数;
4、主函数中输出该数组(单循环结构);
5、定义 sort函数,形参应能接收数组首地址,和元素
个数;
6、排序采用顺序比较法对数组元素进行排序。
排序方法,
取数组中第一个元素,分别与其它所有元素进行比较,
从中选出最小值存放在第一个元素中,再取第二个元素,
分别与其它所有元素进行比较,选出次大的放于第二个元
素中,以此类推。
如,j j=i+1
a[0] a[1] a[3] a[4]
i 8 3 4 9
i=0 3 8 4 9
a[ i ]>a[ j ] j++ 直到 j=4
交换
i=1 4 8 9
a[ i ]>a[ j ] j++ 直到 j=4
交换
i=2 8 9
a[ i ]>a[ j ] j++ 直到 j=4
交换
从 j=i+1起
从 j=i+1起
从 j=i+1起
程序,
main()
{ void sort (int a[ ],int n)
int d[10],i;
for (i=0 ;i<10;i++)
scanf(“%d”,&d[ i ] );
sort( d,10)
for ( i=0 ; i < 10 ; i++)
{ if ( i %5==0) printf(”\n”);
printf(, %5d”,d[ i ] ); }
}
void sort ( int a[ ],int n )
{ int i,j,temp;
for ( i = 0 ; i < n-1 ) ; i++ )
for ( j = i+1 ; j < n ; j++ )
if (a[ i ]> a[ j ])
{ temp=a[ i ],a[ i ]=a[ j ],a[ j ]=temp;}
}
6.11 有 n个人围成一圈,顺序排号,从第一个人开始
报数,从 1到 5,凡报到 5的人退出圈子,问最后留下
的是原来的第几号的人。
1
1
1
1
1
1
1 1
1
a [0]
a[2]
a [1]
a [5]
a [6]
a [7]
a [8]
a[4]
a[3] 0
if (a[ i ]!=0) s++ ; if ( s==5) {a[ i ] =0 ;S =0
main()
{ void left (int *p,int n)
int num[100],n,i;
scanf(“%d”,&n);
for ( i =0; i<n; i++)
num[ i ]=1;
left(num,n);
for (i=0;i<n;i++)
if (num[ i ]!=0)
printf(“%d”,num[ i ] );
}
void left(int *p,int n)
{ int i=0,out=0,count=0 ;
while (out <n-1)
{ if (*(p+i)!=0) count++;
if (count==5) { *(p+i)=0,count=0,out++;}
i ++;
if ( i==n) i= 0; }
}