程序设计与问题求解 实验五 指针程序设计
目录
引言
我想把大学期间写的材料挑选一些发上来保存一下,这是本人大学期间做的一次实验作业。
一.实验目的:
- 掌握指针使用方法;
- 掌握通过指针传递数组的方法;
- 掌握指针与数组和函数编程的应用方法;
- 掌握递归程序设计方法。
二、实验内容和步骤: |
编写程序实现以下功能
(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
编程要求:
- 较好的用户输入输出提示
- 先用普通数组编程方式编写,测试好后改用指针方式逐个访问数组元素
编译环境中正确代码、运行结果截图如下:
//请按提示补充完成主函数中调用的自定义函数的代码
//特别要求: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).字符串操作的实现
要求自行编写程序实现字符串的一些基本操作,并测试。
具体要求如下:
- 名为myStrcmp的函数实现类似strcmp的操作
- 名为myStrlen的函数实现类似strlen的操作
- 名为myStrcat的函数实现类似strcat的操作
- 名为myStrcpy的函数实现类似strcpy的操作
编写主函数调用自己编写的字符串操作函数进行测试
编译环境中正确代码、运行结果截图如下:
myStrcmp:
Mystrlen:
MyStract:
MyStrcpy:
三、实验小结
本次实验难度适中,本人花了较长时间完成,不过自己经过努力完成了作业,还是挺开心的。
原文地址:https://blog.csdn.net/shh2000424/article/details/140331926
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!