}
2.下面程序实现从键盘输入两个字符串a和b,再将a和b的对应位置字符中的较大者存放在数组c中,填空完成该程序。
while(*p&&*q) {
if(*p>*q 或 *p>=*q)c[k]=?p; else c[k]=?q; p++; q++; k++; }
3.完成下面的程序,以实现单词的输出功能。
q=&s[k]; 4.下列程序实现截取字符串s中从第m个位置开始的n个字符,返回所截字符串的首地址。
sub[k]= s1[m1-1+k]; return sub; 5.下列程序实现在N个元素的数组中查找最小的元素的功能。
return min; min=minunm(a,N); 6.下列程序的功能为求数组元素的平均值。
avg=avg/n ; avg=f( a ,10);
7.下列程序完成3个操作。
(1)输入10个字符串(每串不多于9个字符),依次放在a数组中,指针数组str中的每个元素依次指向每个字符串的开始。
(2)输入每个字符串。
(3)从这些字符串中选出最小的那个字符串并输出。
for(i=0;i<10;i++) { scanf(\%s\ str[i]= sp ; k=strlen(sp); sp+= k ; } k=0;
for(i=0;i<10;i++)
if(strcmp(str[i],str[k]) <0 )k=i; printf(“%s\\n”,str[k]) 或puts(str[k]) ;
8.以下程序利用指针法将两个数按从大到小的顺序显示。
int a,b, *p,*p1,*p2 ; p1=&a ;
printf(\%d,min=%d\\n\ ); 9.下列程序把十进制数n转换成八进制数输出。
if( n<0 ) j= n%8 ; printf(\%c\ *(s+i-1) );
10.下面程序把数组元素按相反的顺序进行存放。
for(i=x,j=x+n?1; i 11.用指针法求出数组中的最大元素与最小元素。 int max=array[0],min=array[0]; for( p=array ;p 12.把一个字符串按从小到大的顺序输出。 void sort(char *name[],int n) if( strcmp(name[k],name[j])>0 ) k=j; printf(\%s\\n\ name[i] ; 13. av= s/N ; y[ j++ ]=x[i]; x[i]=?1;} if( x[i]!= -1 ) y[j++]=x[i]; 四、编程题 1.(1)定义一个函数separate(int ?data,int n),该函数将n的各个位上的数分离保存在data所指向的数组中。 (2)定义一个函数judge(int ?data,int len),判断data所指向的数组是否为回文。 (3)在main函数中调用上述函数,完成程序的功能。 参考代码: #include \#include \#define N 10 int separate(int *data,int n) { int i,k=0,temp; while(n>0) { data[k]=n; n=n/10; k++; } for(i=0;i<=k/2;i++) { temp=data[i]; data[i]=data[k-1-i]; data[k-1-i]=temp; } return k; } int judge(int *data,int len) { int i,j; i=0;j=len-1; while(i return 1; } void main() { int data[N],n,len; printf(\请输入要转换的数n:\\n\ scanf(\ len=separate(data,n); if(judge(data,len)==1) printf(\是回文数\\n\ else printf(\不是回文数\\n\ } 2.从键盘输入两个字符串,输出第一个字符串在第二个字符串中第一次出现的位置(即第一个字符串的首字母在第二个字符串中的位置,如“abc”在“bbacccabcddaw3”中的位置为7)。 要求:使用指针的方法遍历数组。 参考代码: #include int find(char *s,char *t); main() { int n; char a[]=\ char b[]=\ n=find(a,b); if(n!=-1) printf(\ else printf(\未找到!\} int find(char *s,char *t) { char *p,*q,*r; int len,Loc=1; while(*s) { p=s;r=t; while(*r) if(*p==*r) { p++;r++; } else break; if(*r=='\\0') return Loc; s++;Loc=Loc+1; } return -1; } 3.有n个人围成一圈,顺序排号。从第一个人开始报数(从1~3报数),报到3的人退出圈子,问最后留下的是原来第几号的人。 参考代码: #include \ #define N 20 /*总人数*/ void main() { int i,a[N],num,dist; num=0; for(i=0;i if(a[i]==1) dist++; if(dist==3) { printf(\ a[i]=0; dist=0; num++; } i=(i+1)%N; } printf(\最后留下的人是:%d号\\n\} 4.编写一个程序,实现两个顺序字符串(ASC码值由小到大)的连接,连接后的字符串仍为顺序串。如字符串1为“aty”,字符串2为“eknx”,连接后的字符串为“aekntxy”。 参考代码: #include \ void fun(char *s,char *t,char str[]) /*串s和t按ascii码顺序连接存入str中*/ { int k=0; while(*s&&*t) { if(*s<*t) str[k++]=*s++; else str[k++]=*t++; } while(*s) str[k++]=*s++; /*把串s剩余字符存入str中*/ while(*t) str[k++]=*t++; /*把串t剩余字符存入str中*/ str[k]='\\0'; } void main() { char s[20],t[20],str[40]; printf(\请输入字符串s和t\\n\ scanf(\ fun(s,t,str); printf(\} 5.输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少? 参考代码: #include \void main() { char str[40],*p,n1=0,n2=0,n3=0,n4=0,n5=0; gets(str); p=str; while(*p) { if(*p>='A'&&*p<='Z') n1++; else if(*p>='a'&&*p<='z') n2++; else if(*p>='0'&&*p<='9') n3++; else if(*p==' ') n4++; else n5++; p++; } printf(\大写字母:%d 小写字母:%d 数字:%d 空格:%d 其它:%d\\n\ } 6.输入一个字符串,内有数字和非数字字符,如:a123x456=4567?45at587,将其中连续的数字作为一个整数,依次存放到数组a中。例如,123存放在a[0],456存放在a[1],?,统计共有多少个整数,并输出这些数。 参考代码: #include \#define N 10 void main() { char str[40],*p; int k,i,a[N]; gets(str); p=str; k=0; /*k保存字符串中数的个数*/ for(;*p!='\\0';p++) if(*p>='0'&&*p<='9') /*计算连续的数字,遇到非数字结束计算,并将该数 保存*/ { a[k]=*p-'0'; p++; while(*p>='0'&&*p<='9') {