实验六

试验任务一

#include <stdio.h>
#define N 5
int binarySearch(int *x, int n, int item); // 函数声明
int main()
 {
   int a[N] = {2, 7, 19, 45, 66};
   int i, index, key;
   printf("数组a中的数据:\n");
   for (i = 0; i < N; i++)
     printf("%d ", a[i]);
   printf("\n");
   printf("输入待查找的数据项: ");
   scanf("%d", &key);
// 调用函数binarySearch()在数组a中查找指定数据项key,并返回查找结果给index
   index=binarySearch(a,N,key);
// ×××
   if (index >= 0)
     printf("%d在数组中,下标为%d\n", key, index);
   else
     printf("%d不在数组中\n", key);
   return 0;
 }
// 函数功能描述:
// 使用二分查找算法在从地址x开始的连续n个数据项中,查找特定数据项item
// 如果找到,返回其下标; 如果没找到,返回-1
int binarySearch(int *x, int n, int item)
{
 int low, high, mid;
 low = 0;
 high = n - 1;
 while (low <= high)
 {
   mid = (low + high) / 2;

    if (item == *(x + mid))
      return mid;
    else if (item < *(x + mid))
      high=mid-1;
    else
      low=mid+1;
}
 return -1;
}

 

 

 

 

 

 

实验任务二

/*
设输入的字符串中只包含字母和*号。
编写函数,实现:除了字符串前导的*号之外,将串中其他*号全部删除。
例如,若字符串中的内容为****A*BC*DEF*G*******
删除后,字符串中的内容则应当是****ABCDEFG
在编写函数时,不得使用C语言提供的字符串函数。
*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void fun(char *a)
{
/*****ERROR1********/
int i=0;
char *p = a;
/****ERROR2***/
while (*p =='*')
{
a[i] = *p;
i++;
p++;
}
while (*p)
{
/******ERROR3*******/
if (*p != '*')
{
a[i] = *p;
i++;
}
p++;
}
/******ERROR4*******/
a[i] = '\0';
}
int main()
{
char s[81];

printf("Enter a string :\n");
gets(s);
/***ERROR5******/
fun(s);
printf("The string after deleted:\n");
puts(s);
return 0;
}

 

 试验任务三

/*
设输入的字符串中只包含字母和*号。
编写函数,实现:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。
例如,若字符串中的内容为****A*BC*DEF*G*******
删除后,字符串中的内容则应当是****ABCDEFG******
在编写函数时,不得使用C语言提供的字符串函数。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *a)
{
/**ERROR******/
int i=0;
char *t = a, *f = a;
char *q = a;
while (*t)
t++;
t--;
while (*t == '*')
t--;
while (*f == '*')
f++;
/***ERROR***/
while (q <f)
{
a[i] = *q;
q++;
i++;
}
while (q < t)
{
/***ERROR**/
if (*q != '*')
{
a[i] = *q;
i++;
}
q++;
}
while (*q)
{
a[i] = *q;
i++;
q++;
}
/**ERROR**/
a[i] = '\0';
}
int main()
{
char s[81];
printf("Entre a string:\n");
gets(s);
/**ERROR**/
fun(s);
printf("The sting after deleted:\n");
puts(s);
return 0;
}

 

 实验任务四

#include <stdio.h>
#include <string.h>
#define N 80
int isPalindrome(char *s); // 函数声明
int main()
{
    char str[N];
    int flag;
    printf("Enter a string:\n");
    gets(str);
    flag = isPalindrome(str); // 函数调用
    if (flag)
    printf("YES\n");
    else
    printf("No\n");
    
return 0;
}
// 函数定义
// 功能:判断指针s指向的字符串是否是回文串,如果是,返回1;否则,返回0。
int isPalindrome(char *s)
{
  int b=1;
  int len;
  len=strlen(s);
  char *start=s;
  char *end;
  end=start+len-1;
  while(start<end)
{
    if(*start!=*end)
    return 0;
    if(*start==*end)
    {
     start=start+1;
     end=end-1;    
    }
}
return 1;
}

 

 试验任务五

#include <stdio.h>
#define N 80
int count(char *str, char *substr); // 函数声明
int main()
{
    char str[N], substr[N];
    int n;
    
    gets(str); // 输入母串
    gets(substr); // 输入子串
    
    n = count(str, substr); // 函数调用
    printf("%d\n", n);
    
    return 0;
}
int count(char *str, char *substr)
{
    int i, j, k;
    int num = 0;
    
    for(i=0; str[i]!='\0'; ++i)
        for(j=i, k=0; substr[k] == str[j]; k++, j++)
           if(substr[k+1] == '\0')
{
    num++;
    break;
}
    return(num);
}

 

 

 

 实验总结

1.运用指针可以便捷的指向数组

2.要有灵活的想象能力

 

posted @ 2021-12-20 17:24  zwygyyds  阅读(52)  评论(0编辑  收藏  举报