函数原型为 int compare_array( int len1, int array1[], int len2, int array2[] );
其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。
以下是上题的函数完整实现:
int compare_array(int len1 ,int array1[] , int len2 ,int array2[])
{
int len ,i,j ,k,m;
len = ((len1 <len2)?len1:len2);
k = len; //k是最短的数组的长度,从这两个数组中找出相同的来,减去即可。
i = len1-1;
j = len2-1;
for(m = len-1 ; m>=0 ;m--)
{
if( array1[i] ==array2[j] )
{
k--;
}
i--;
j--;
}
return k;
}
void main()
{
int a[]={12,13,1,2,3};
int b[]={1,2,3};
int len1 = sizeof(a)/sizeof(int) ;
int len2 = sizeof(b)/sizeof(int);
int m = compare_array(len1 ,a ,len2 ,b);
cout<<m<<endl;
}
2.
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
我们采用循环链表的方法;找到第一个要删除的节点 然后删除这个节点,在这个节点的下一个节点重新查找下一个要删除的节点,了一次类推,可把所有的节点删除。最后就会剩余一个节点,这个节点仍然是循环节点。
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}node;
void JOSEPHUS(int n, int m,int k)
{
node *p ,*r ,*list,*tmp;
list = NULL;
r = (node*)malloc(sizeof(node));
int i ,j ,x;
for(i = 0 ;i < n ;i++)
{
p = (node*)malloc(sizeof(node));
printf("输入节点数据");
scanf("%d",&x);
p->data = x;
if(list == NULL)
{
list = p;
}
else
{
r->next = p;
}
r = p;
}
p->next = list;
p = list;
for(i = 0 ;i<k-1;i++) //找到第一个数
{
tmp=p;
p = p->next;
}
while(p->next != p)
{
for(i = 0 ; i<m-1 ;i++)
{
tmp= p;
p = p->next;
}
tmp->next = p->next;
printf("要删除的数据:%d\n",p->data);
free(p);
p = tmp->next;
}
if(p->next == p)
{
printf("要删除的数据:%d\n",p->data);
}
}
void main()
{
int n = 9 ;
int m = 5;
int k =1;
JOSEPHUS(9 ,m,k);
}
4 输入一个字符串,用指针求出字符串的长度。
int str_len(char *str)
{
int k , i;
char *p;
p = str;
k = 0;
i =0;
while( *p!= '\0')
{
k++;
p++;
}
return k;
}
void main()
{
char str[]="abcde";
int len =str_len(str);
cout<<len<<endl;
}
5 问题:使用C语言实现字符串中子字符串的替换
描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。
举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:
ABCDEFGHIJKLMNOPQgggUVWXYZ
void strReplace(char *strsrc ,char *strreplace ,char *strfind)
{
int i ,j ,m,n,k,t;
for(i = 0 ;strsrc[i] !='\0' ;i++)
{
j = 0;
if(strsrc[i] == strfind[j])
{
m = i;
n = j;
while(strsrc[m]==strfind[n]&&(strsrc[m] !='\0')&&(strfind[n]!='\0'))
{
m++;
n++;
}
if(strfind[n]=='\0')
{
t= 0;
for(k = i ;k<m;k++)
{
strsrc[k] = strreplace[t];
t++;
}
cout<<strsrc<<endl;
break;
}
}
}
}
void main()
{
char strsrc[]="abcdefg";
char strfind[]="cde";
char strreplace[]="www";
strReplace(strsrc ,strreplace ,strfind);
}
6 问题:
编写一个程序实现功能:将字符串”Computer Secience”赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完成。
//编写一个程序实现功能:将字符串"Computer Secience"赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完成。
void main()
{
char str[]="Computer Secience";
int len = sizeof(str)/sizeof(char);
char *p=str;
while(*p)
{
//cout<<*p;
printf("%c",*p);
p++;
p++;
//len--;
//len--;
}
printf("\n");
}
7问题:
编写一个程序实现功能:将两个字符串合并为一个字符串并且输出,用指针实现。
char str1[20]={“Hello ”}, str2[20]={“World ”};
// 合并字符串
void hebing(char *str1 ,char *str2)
{
char * p ,*q;
p =str1;
q = str2;
while(*p)
{
p++;
}
while(*q)
{
*p = *q;
p++;
q++;
}
*p ='\0';
cout<<str1<<endl;
}
void main()
{
char str1[20]="hello";
char str2[20]="word";
hebing(str1 ,str2);
}
问题:
以下函数的功能是用递归的方法计算x的n阶勒让德多项式的值。已有调用语句p(n,x);编写函数实现功能。递归公式如下:
//问题:
//以下函数的功能是用递归的方法计算x的n阶勒让德多项式的值。已有调用语句p(n,x);编写函数实现功能。递归公式如下:
int f(int n ,int x)
{
if(n==0)
{
return 1;
}
if(n==1)
{
return x;
}
if(n>1)
{
return ( ((2*n-1)*x*f(n-1,x) - (n-1)*f(n-2 ,x))/n);
}
}
void main()
{
int m;
m = f(2,2);
cout<<m<<endl;
}