PTA指针实验

6-1 计算两数的和与差(10 分)

本题要求实现一个计算输入的两数的和与差的简单函数。

函数接口定义:

void sum_diff( float op1, float op2, float *psum, float *pdiff );

其中op1op2是输入的两个实数,*psum*pdiff是计算得出的和与差。

裁判测试程序样例:

#include <stdio.h>

void sum_diff( float op1, float op2, float *psum, float *pdiff );

int main()
{
    float a, b, sum, diff;

    scanf("%f %f", &a, &b);
    sum_diff(a, b, &sum, &diff);
    printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
	
    return 0; 
}

/* 你的代码将被嵌在这里 */

输入样例:

4 6

输出样例:

The sum is 10.00
The diff is -2.00


1.本题PTA提交列表

2.设计思路(包括流程图),主要描述题目算法

本题很简单,只用写函数的代码,让两个数两加或者想减的结果等于指针就可以了

 

最终需要加入的代码是

void sum_diff( float op1, float op2, float *psum, float *pdiff )

{ *psum=op1+op2;*pdiff=op1-op2;}

运行的结果是

6-5 利用指针找最大值(10 分)

本题要求实现一个简单函数,找出两个数中的最大值。

函数接口定义:

void findmax( int *px, int *py, int *pmax );

其中pxpx是用户传入的两个整数的指针。函数findmax应找出两个指针所指向的整数中的最大值,存放在pmax指向的位置。

裁判测试程序样例:

#include <stdio.h>

void findmax( int *px, int *py, int *pmax );

int main()
{	
    int max, x, y; 

    scanf("%d %d", &x, &y);
    findmax( &x, &y, &max );
    printf("%d\n", max);

    return 0;
} 

/* 你的代码将被嵌在这里 */

输入样例:

3 5

输出样例:

5

1.本题PTA提交列表

2.设计思路(包括流程图),主要描述题目算法

在函数中用if语句比较两个数的大小给pamx指针

 

最后的子函数代码为

void findmax( int *px, int *py, int *pmax )
{
if(px>py)
{
pmax=px;}
else
{
pmax=py; }
}

执行的结果如下

发现少了指针的那个符号没有指向指针所指的值

修改后得到

void findmax( int *px, int *py, int *pmax )
{
if(*px>*py)
{
*pmax=*px;}
else
{
*pmax=*py; }
}

运行的结果如下

6-6 使用函数实现字符串部分复制(20 分)

本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。

函数接口定义:

void strmcpy( char *t, int m, char *s );

函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char t[MAXN], s[MAXN];
    int m;

    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

7
happy new year

输出样例:

new year


1.本题PTA提交列表

 

2.设计思路(包括流程图),主要描述题目算法

先把t的字符串全部复制到s中去,然后确定s的长度

然后通过循环一个一个将后面的字符往前移动,直到移动到m个字符处。

 

最终代码如下

void strmcpy( char *t, int m, char *s ){
int i,len;

strcpy(s, t);
len = strlen(s);
for(i=len-m-1;i>0;i--){
*(s+i-1)=*(s+i);
}
*(s+len-m+1)='\0';
}

发现想要通过一重循环不好实现

所以不正确

修改后的代码是

void strmcpy( char *t, int m, char *s ){
int i,j,len;

strcpy(s, t);
len = strlen(s);
for(i=m-1;i>0;i--){
for(j=i;j<len;j++){
*(s+j-1)=*(s+j);
}
}
*(s+len-m+1)='\0';
}

 

 

 

posted @ 2018-01-20 09:18  Kalim  阅读(2297)  评论(0编辑  收藏  举报