38.请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串123412132,输入字符1,则输出3。
注:本题用while()循环来控制字符的移动,每移动一个字符都要进行判断(if(*ss==c))是否为指定的字母,若是则个数加1。这里要注意如何让ss指针向下走动(ss++)。 #include
int fun(char *ss,char c) { int num=0;
while(*ss!='\\0') {if(*ss==c) num++; ss++;} return(num); }
main( )
{ char a[M],ch;
printf(\
printf(\
printf(\
39.请编写函数fun,该函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。 #include
void fun(int *w, int p, int n) { int i,k=0,b[N];
for(i=p+1; i main( ) { int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15; printf(\ for(i=0; i printf(\ for(i=0; i 40.请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。 -21- #include void fun (char *w,int m) { int i,j; char t; for(i=1;i<=m;i++) { t=w[0]; for(j=1;w[j]!='\\0';j++) w[j-1]= w[j] ; w[j-1] =t; } } main( ) { FILE *wf; char a[N]= \ int m; printf(\ puts(a); printf(\ m: \ scanf(\ fun(a,m); printf(\ puts(a); printf(\ wf=fopen(\ fun(a,3); fprintf(wf,\ fclose(wf);} 41.请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,若二维数组中的数据为:W W W W 则字符串中的内容应是WSHWSHWSH。 S S S S H H H H #include void fun(char (*s)[N],char *b ) { int i,j,k=0; for(i=0;i for(j=0;j main( ) { FILE *wf; char a[100],w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},{'H', 'H', 'H', 'H'}}; int i,j; printf(\ -22- for(i=0;i { for(j=0;j printf(\ printf(\ } fun(w,a); printf(\ puts(a); printf(\ wf=fopen(\ fprintf(wf,\ fclose(wf); } 42.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数组右上半三角元素中的值乘以m。 197a?2384562181424651612例如:若m的值为2,a数组中的值为,则返回主程序后a数组中的值应为。 /*该题的关键也是在如何表示右上半角,本题采用的是在一行内从最后一列的元素开始往前乘,只有j>=i时才改变。*/ #include int fun( int a[][N], int m) { int i,j; for(i=0; i main( ) { int a[N][N],m,i,j; printf(\for( i=0; i {a[i][j]=rand() ; printf(\printf(\} do m=rand(); while( m>=3); printf(\fun( a,m); printf(\for(i=0; i -23- {for(j=0; j 43.编写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。 函数strlen用于求出字符串的长度,这个题中主要是*max=p;不能换成max=&p;如果用maz=&p;则只改变了max的指向,它不能传回给实参。因此我们要改变max指向地址中的内容,这才能使得实参ps有正确的值。#include \#include \#include \ fun(char (*a)[81], int num,char **max) { char *p=a[0];int i; for(i=1;i if(strlen(a[i])>strlen(p)) p=a[i]; *max=p; } main( ) { char ss[10][81],*ps; int n,i=0; printf(\gets(ss[i]); puts(ss[i]); while(!strcmp(ss[i],\{ i++; gets(ss[i]); puts(ss[i]); } n=i; fun(ss,n,&ps); printf(\} 44.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asdmklo,子字符串为as,则应输出6。 注:由于小串中只有2个字符所以可用str[i]==sbustr[0]&&str[i+1]==substr[1]来判断小串是否与长串当前位置(str[i])相同(即出现一次)。因而只要让长串当前位置逐一向后移即可(用for()循环来完成)。 #include \#include \#include \ int fun(char *str,char *substr) { int i,n=0,s=strlen(str); for(i=0;i if((str[i]==substr[0])&&(str[i+1]==substr[1])) n++; return n; -24- } main( ) { char str[81],substr[3]; int n; printf(\gets(str); printf(\gets(substr); puts (str); puts(substr); n=fun(str,substr); printf(\ 45.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。 例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。 #include void fun (char *a,int n ,int h , int e) { int i,j=0; for(i=h;i< n-e ;i++) a[j++]=a[i]; a[j]= ‘\\0’ ; } main( ) { FILE *wf ; char s[81],*t,*f; char *p=\ int m=0,tn=0, fn=0; printf(\ gets(s); t=f=s; while(*t) { t++;m++;} t-- ; while(*t=='*') {t--;tn++;} while(*f=='*') {f++;fn++;} fun( s, m, fn, tn); printf(\ puts(s); wf=fopen(\ fun(p,21,4,7); fprintf(wf,\ fclose(wf);} -25-