程序设计与问题求解 实验五 指针程序设计

目录

引言

 一.实验目的:

二、实验内容和步骤:

三、实验小结


引言

我想把大学期间写的材料挑选一些发上来保存一下,这是本人大学期间做的一次实验作业。

 一.实验目的:

  1. 掌握指针使用方法;
  2. 掌握通过指针传递数组的方法;
  3. 掌握指针与数组和函数编程的应用方法;
  4. 掌握递归程序设计方法。

二、实验内容和步骤:

编写程序实现以下功能

(1).main函数带命令行参数的使用

假设程序编译后生成的可执行文件为mycal.exe.。在命令行提示符下,通过在windows开始菜单执行cmd命令,出现:c:\>,键入mycal  100+200 运行的结果为 300;键入mycal  100*200 运行的结果为20000 等。

编译环境中正确代码、运行结果截图及错误原因分析如下:

#include<string.h>

#include <stdlib.h>

#include<stdio.h>

//s:一个形如a[运算符]b的字符串,例如:4.5+9,6-9,4/5,8*7...

//该函数经过处理,输出数的运算结果,例如若s为"20.3+1",则该函数在屏幕上输出21.30(保留小数点后面2位有效数字

//此函数内部操作的基本算法为:

//第1步:找到运算符对应的位置索引

//第2步:根据运算符位置,将其前面的字符串复制到strA,后面的字符串复制到strB

//第3步:将strA,strB转换为数值(使用函数atof,具体用法请百度)a,b

//第4步:根据运算符,对a,b进行相应的运算

//第5步:输出运算结果result

void  processUserInputStr(char* s)

{

int len=strlen(s); //s中有效字符的个数

    //strA,strB分别用于存放两个操作数对应的字符串

    char strA[100],strB[100];

    //a,b分别用于存放将字符串转换后的数,result用于保存运算结果

    double a,b,result;

    char op;//用于存储s中的运算符对应的字符串

    int j,k,posOp;//posOp:符号的位置索引

    /**********begin**********/

    for(k=0;k<len;k++)

    {

        if(s[k]=='+'||s[k]=='-'||s[k]=='*'||s[k]=='/')

        {

            op=s[k];

            posOp=k;

            break;

        }

    }

    for(k=0;k<posOp;k++)

    {

        strA[k]=s[k];

    }

    for(k=posOp+1,j=0;k<len;k++,j++)

    {

        strB[j]=s[k];

    }

    a=atof(strA);

    b=atof(strB);

    if(op=='+')

    {

        result=a+b;

    }

    else if(op=='-')

    {

        result=a-b;

    }

    else if(op=='*')

    {

        result=a*b;

    }

    else if(op=='/')

    {

        result=a/b;

    }

    printf("%.2f",result);



    

    /**********end**********/

}

int main()

{

char s[100] ;

gets(s);

    processUserInputStr(s);

    return 0;

}

(2).使用指针对数组进行排序

输入10个整数,存放到数组a中,编写程序,对数组a中的数据进行升序排序。要求:必须用指针对数组中的元素进行操作。

如:输入5  6  3  1  2  7  8  3  4  9  10

        输出:1  2  3  4  5  6  7  8  9  10

编程要求:

  1. 较好的用户输入输出提示
  2. 先用普通数组编程方式编写,测试好后改用指针方式逐个访问数组元素

编译环境中正确代码、运行结果截图如下:

//请按提示补充完成主函数中调用的自定义函数的代码

//特别要求:sortData(排序函数)中肯定会涉及到交换两个元素的值的交换,这是一个通用功能,因此,这里首先定义swap函数用于实现这一功能,sortData中必须调用

//这个函数,若不按照这个要求,有权扣分

#include <stdio.h>

#include <stdlib.h>

#define MAXNUM 100

/**********swap函数的定义开始**********/

void swap(double *a,double *b)

{

    double temp;

    temp=*a;

    *a=*b;

    *b=temp;

}

/********swap函数定义结束**************/

/****************其他所有函数定义开始**********/

void inputData(double *data,int N)

{

    int i;

    double *p=data;

    for(p=data;p<(data+N);p++)

    {

        scanf("%lf",p);

    }

}

void sortData(double *data,int N,int mode)

{

    int i,j;

    double *p=data;

    for(i=0;i<N;i++)

    {

        for(j=0;j<i;j++)

        {

            if(mode==0)

            {

                if(*(p+j)>*(p+i))

                {

                    swap(p+j,p+i);

                }

            }

            else{

                if(*(p+j)<*(p+i))

                {

                    swap(p+j,p+i);

                }

            }

        }

    }

}

void outputData(double *data,int N)

{

    int i;

    double *p=data;

    for(p=data;p<data+N;p++)

    {

        printf("%.2f ",*p);

    }

}

















/**************其他所有函数定义结束**************/

//输入数组元素

void inputData(double*,int);

//对数组进行排序(升序或降序)

void sortData(double*, int,int);

//显示排序结果

void outputData(double*,int);

int main()

{

//mode:排序方式,为0表示升序,非0表示降序

    int N,mode;

    int k;

    double data[MAXNUM];

    //输入

    scanf("%d%d",&N,&mode);

    inputData(data,N);

    //排序

    sortData(data,N,mode);

    //显示排序结果

    outputData(data,N);

    return 0;

}

(3).字符串操作的实现

要求自行编写程序实现字符串的一些基本操作,并测试。

具体要求如下:

  1. 名为myStrcmp的函数实现类似strcmp的操作
  2. 名为myStrlen的函数实现类似strlen的操作
  3. 名为myStrcat的函数实现类似strcat的操作
  4. 名为myStrcpy的函数实现类似strcpy的操作

编写主函数调用自己编写的字符串操作函数进行测试

编译环境中正确代码、运行结果截图如下:

myStrcmp:

Mystrlen:

MyStract:

MyStrcpy:

三、实验小结

本次实验难度适中,本人花了较长时间完成,不过自己经过努力完成了作业,还是挺开心的。

相关推荐

  1. C++:程序设计实例

    2024-07-14 09:34:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 09:34:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 09:34:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 09:34:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 09:34:03       69 阅读

热门阅读

  1. C++多态

    C++多态

    2024-07-14 09:34:03      22 阅读
  2. B树:深入解析与实战应用

    2024-07-14 09:34:03       24 阅读
  3. C语言调用python

    2024-07-14 09:34:03       25 阅读
  4. pytorch GPU cuda 使用 报错 整理

    2024-07-14 09:34:03       25 阅读
  5. 大语言模型LLM

    2024-07-14 09:34:03       21 阅读
  6. 大模型时代,还需要跨端framework吗?

    2024-07-14 09:34:03       27 阅读