首页 > 其他 > 详细

实验5

时间:2019-05-28 00:14:55      阅读:181      评论:0      收藏:0      [点我收藏+]

实验结论

Part1. 二分查找

1.补足程序ex1_1.cpp,附上补足后的程序源码,修改程序中数组元素值,给出运行结果截图

// 练习:使用二分查找,在一组有序元素中查找数据项
// 形参是数组,实参是数组名
#include <stdio.h>
#include<stdlib.h>
const int N = 5;
int binarySearch(int x[], int n, int item);
int main() {
    int a[N] = { 1,3,9,16,21 };
    int i, index, key;
    printf("the data in the array:\n");
    for (i = 0; i < N; i++)
        printf("%d ", a[i]);
    printf("\n");
    printf("print the data you want to search: ");
    scanf_s("%d", &key);
// 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果给index
// 补足代码①
    index = binarySearch(a, N, key);
if (index >= 0)
printf("%d is in the array,the index is %d\n", key, index);
else
printf("%d is not in the array\n", key);
system("pause");
return 0;
}
//函数功能描述:
//使用二分查找算法在数组x中查找特定值item,数组x大小为n
// 如果找到,返回其下标
// 如果没找到,返回-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;
}

技术分享图片

技术分享图片

 

2.补足程序ex1_2.cpp,附上补足后的程序源码,修改程序中数组元素值,给出运行结果截图

// 练习:使用二分查找,在一组有序元素中查找数据项
// 形参是指针变量,实参是数组名
#include <stdio.h>
#include<stdlib.h>
const int N = 5;
int binarySearch(int *x, int n, int item);
int main() {
    int a[N] = { 1,3,9,16,21 };
    int i, index, key;
    printf("the data in the array:\n");
    for (i = 0; i < N; i++)
        printf("%d ", a[i]);
    printf("\n");
    printf("print the data you want to search: ");
    scanf_s("%d", &key);
    // 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果
    // 补足代码①
    index = binarySearch(a, N, key);
    if (index >= 0)
        printf("%d is in the array,the index is %d\n", key, index);
    else
        printf("%d is not in the array\n", key);
    system("pause");
    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;
}

技术分享图片

技术分享图片

注意:修改数组元素值时,要确保数组元素值是有序的,这样才能使用二分查找算法

 

Part.2选择法排序

补足程序ex2_2.cpp,附上补足后的程序源码,修改程序中字符串数据数据,给出运行结果截图

// 练习:使用选择法对字符串按字典序排序
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
void selectSort(char str[][20], int n); // 函数声明,形参str是二维数组名
int main() {
    char name[][20] = { "John", "Alex", "Joseph", "Candy", "Geoge" };
    int i;
    printf("print the initial name list:\n");
    for (i = 0; i < 5; i++)
        printf("%s\n", name[i]);
    selectSort(name, 5); // 调用选择法对name数组中的字符串排序
    printf("print the name list in alphabetical order:\n");
    for (i = 0; i < 5; i++)
        printf("%s\n", name[i]);
    system("pause");
    return 0;
}
// 函数定义
// 函数功能描述:使用选择法对二维数组str中的n个字符串按字典序排序
void selectSort(char str[][20], int n) {
    // 补足代码
    int i, j, m;
    char temp[20];
    for (i = 0; i < n - 1; i++) {
        m = i;
        for (j = i + 1; j < n; j++)
            if (strcmp(str[j], str[m]) < 0)
                m = j;
        if (m != i) {
            strcpy_s(temp, str[i]);
            strcpy_s(str[i], str[m]);
            strcpy_s(str[m], temp);
        }
    }
}

技术分享图片g

 

Part3. 用指针处理字符串

1. s[i] = ‘\0‘; 这行用于截断,如果删掉,后面的*就不能去掉了

2. 为啥gets在vs里不能用,part3全程用devc

 

实验总结和体会

不要着急!一着急就狂写错

 写的时候一直在看课件 strcat() strcpy() strcmp() strlen() strupr()和strlwr() 都是啥全忘了

 各种知识要记住才能继续写,现在抛开课本就啥也写不出来orz

实验5

原文:https://www.cnblogs.com/chephie/p/10920946.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!