1. 程式人生 > 其它 >實驗六 指標

實驗六 指標

實驗任務1

二分查詢演算法查詢特定元素

#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)) low--; else low++; } return -1; }

實驗任務2

/*
設輸入的字串中只包含字母和*號。
編寫函式,實現:除了字串前導的*號之外,將串中其他*號全部刪除。
 
例如,若字串中的內容為****A*BC*DEF*G*******
刪除後,字串中的內容則應當是****ABCDEFG

在編寫函式時,不得使用C語言提供的字串函式。
*/ #include <string.h> #include <stdio.h> #include <stdlib.h> void fun(char *a) { /*****ERROR********/ int i=0; char *p = a; /****ERROR***/ while (*p && *p == '*') { a[i] = *p; i++; p++; } while (*p) { /******ERROR*******/ if (*p != '*') { a[i] = *p; i++; } p++; } /******ERROR*******/ a[i] = '\0'; } int main() { char s[81]; printf("Enter a string :\n"); gets(s); /***ERROR******/ fun(s); printf("The string after deleted:\n"); puts(s); return 0; }

實驗任務3

/*
設輸入的字串中只包含字母和*號。
編寫函式,實現:除了字串前導和尾部的*號之外,將串中其他*號全部刪除。
 
例如,若字串中的內容為****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)
{
    // 補足函式實現
    // ×××
    char *high=s,*low=s;
    while(*low)
    {
        low++;
        high++;
    }
        
    while(s<high)
    {
        if(*s==*high)
            {
                s++;
                high--;
            }
        else
            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]!='\0';++i)
        for(j=i, k=0; substr[k] == str[j]; k++, j++)
            if(substr[k+1] == '\0')
            {
                num++;
                break;
            }
    
    return(num);
}