实验5 数组和指针

part1

ABCDEFG

part2

// 练习:使用二分查找,在一组有序元素中查找数据项
//  形参是数组,实参是数组名
#include  <stdio.h>
#include <stdlib.h>
const int 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_s("%d", &key);

    // 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果给index
    index=binarySearch(a,N,key);

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

/*
N个字典序的整数已放在一维数组中,给定下列程序中,函数fun的功能是:
利用折半查找算法查找整数m在数组中的位置。
若找到,则返回其下标值;反之,则返回-1
*/ 

#include  <stdio.h>
#include <stdlib.h>
#define  N  10
int fun(int *a,int m)
{
    int low = 0, high = N-1, mid;
    /*************ERROR**************/
      while(low <= high)
      {
        mid = (low+high)/2;
        /*************ERROR**************/
        if(m < *(a+mid))
             high = mid-1;
        /*************ERROR**************/
        else if(m > *(a+mid))
            low = mid+1;
        else
            return(mid);
      }
      return(-1);
}

int main()
{
    int i,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
       printf("a数组中的数据如下:\n");
       for(i=0;i<N;i++)
       printf("%d ",a[i]);
       printf("\nEnter m: \n");
       scanf_s("%d",&m);
    /*************ERROR**************/
       k = fun(a,m);
       if (k>=0)
       printf("m=%d,index=%d\n",m,k);
       else
       printf("Not be found!\n");

    system("pause");
       return 0;
}

// 练习:使用选择法对字符串按字典序排序
#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", "Taylor", "George"};
    int i;

    printf("输出初始名单:\n");
    for(i=0; i<5; i++)
        printf("%s\n", name[i]);

    selectSort(name, 5);  // 调用选择法对name数组中的字符串排序

    printf("按字典序输出名单:\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)
{
    char temp[20];
    int i, j, k;
    for (i = 0; i <= n-1; i++)
    {
        k = i;
        for (j=i+1; j <= n-1;j++)
            if (strcmp(str[j], str[k]) < 0)k = j;
        if (n != k)
        {
            strcpy_s(temp, str[i]);
            strcpy_s(str[i], str[k]);
            strcpy_s(str[k], temp);
        }
    }
}

/*
假定输入的字符串中只包含字母和*号。
编写函数,实现:
除了字符串前导的*号之外,将串中其他*号全部删除。

在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******
删除后,字符串中的内容则应当是****ABCDEFG
*/

#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(s);
      /***ERROR******/
      fun(s);
      printf("The string after deleted:\n");
      puts(s);

      system("pause");
    return 0;
}

/*
假定输入的字符串中只包含字母和*号。
编写函数,实现:
除了字符串前导和尾部的*号之外,将串中其他*号全部删除。

在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******
删除后,字符串中的内容则应当是****ABCDEFG******
*/

#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(s);
    /**ERROR**/
    fun(s);
    printf("The sting after deleted:\n");
    puts(s);

    system("pause");
    return 0;
}

实验总结

指针变量使用前一定要初始化。

原文地址:https://www.cnblogs.com/faspk/p/12021559.html

时间: 2024-10-22 15:15:47

实验5 数组和指针的相关文章

读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

原文链接:C语言结构体里的成员数组和指针 复制如下: 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>

小猪猪逆袭成博士之C++基础篇(四)数组、指针、vector、迭代器

小猪猪逆袭成博士之C++基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始有10个连续的int大小的空间.我们还是从初始化说起. 我们以数据类型int为例,当然也可由有很多的数据类型,可以是像int,double这种,也可以是自定义的类,一般的初始化方法有: int a[10]; int a[10]={0}; int a[3]={0,1,2}; 在前面的文章中,有

基于arm的C++反汇编 数组和指针的寻址

数组在函数内 数组作为参数 数组作为返回值 下标寻址和指针寻址 下标值为整型常量的寻址 下标值为整型变量的寻址 下标值为整型表达式的寻址 数组越界 多维数组 存放指针类型数据的数组 指向数组的指针变量 函数指针 ??虽然数组和指针都是针对地址操作,但它们有许多不同之处.数组是相同数据类型的数 据集合,以线性方式连续存储在内存中:而指针只是一个保存地址值的4字节变量.在使用中,数组名是一个地址常量值,保存数组首元素地址不可修改,只能以此为基地址访问内 存数据:而指针却是一个变量,只要修改指针中所保

数组与指针的区别?

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.指针可以随时指向任意类型的内存块.    (1)修改内容上的差别 char a[] = "hello";  //它们有各自的内存空间:a[0] = 'X';char *p = "world"; // 注意p 指向常量字符串p[0] = 'X'; // 编译器不能发现该错误,运行时错误 (2) 用运算符sizeof 可以计算出数组的容量(字节数).sizeof(p),p 为指针得到的是一个 指针变量的字节数,

数组与指针

//使用递归来计算阶乘#include<stdio.h>long rfact(int n);int main(){ int num; printf("This program calculate factorials.\n"); printf("Enter a value in the range 0-12(q to quit): \n"); while(scanf("%d",&num)==1) { if(num <0

数组与指针操作

一,数组 1,const int array[5] = {0, 1, 2, 3, 4}; 2,c99新特性,可以对指定的数组的某一个元素初始化.例如:int array[10] = {1, 3, [4] = 2, 6, 7, [1] = 32};如果多次对一个元素进行初始化,取最后一次的值. 3,c不支持把数组作为一个整体来赋值,也不支持用花括号括起来的列表形式进行赋值. 4,sizeof表达式被认为是一个整数常量. 5 * 5 - 1 就是整数常量表达式. 5,变长数组int array[n]

(C/C++)区别:数组与指针,指针与引用

1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

编程练习之数组与指针

数组与指针 阅读如下代码,为何出错. 1 int main() { 2 char a[] = { "I am a bad boy" }; 3 char * pA = new char[ sizeof( a ) ]; 4 pA = a; 5 6 for ( size_t i = 0; i < sizeof( a ); ++i ) { 7 std::cout << *pA << std::endl; 8 ++pA; 9 } 10 delete [] pA; 1