导航

实验6 指针

Posted on 2021-12-16 15:14  pipipapi  阅读(30)  评论(0编辑  收藏  举报
实验6 指针
 
实验一
二分查找法指针版实现:

 

#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);
    index = binarySearch(a,N,key);
    if (index >= 0) printf("%d在数组中,下标为%d\n", key, index);
    else printf("%d不在数组中\n", key);
    return 0;
}

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;
}

原理没变,只不过实现形式变成了指针

 
实验二
 

 

 

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void fun(char *a) { 
    /*****ERROR1********/
    int i = 0;
    char *p = a; 
    /****ERROR2***/ 
    while (*p && *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);  
    fun(s);
    printf("The string after deleted:\n");
    puts(s);
    return 0;
}
 
 
实验三
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *a) {
    /**ERROR******/ 
    int i;
    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 n = strlen(s);
    int l=0,r=n-1;
    while(l<r){
        if(s[l++]!=s[r--]) return 0;
    }
    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); ++i){
        for(j = i, k=0; substr[k] == str[j]; k++, j++)
            if(substr[k+1] == '\0') {
                num++;
                break;
            }
    
    }
    return(num);
}