博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针实验报告
阅读量:5242 次
发布时间:2019-06-14

本文共 3419 字,大约阅读时间需要 11 分钟。

指针实验报告

一、题目分析

题目一

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;

}

 

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

  1. 本题PTA提交列表

 

  1. 程序设计思路(流程图)

子函数即进行两个数的相加减……思路简单,所以流程图略……

 

 

最终程序如下:

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

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

 

总程序如下:

#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;

}

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

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

 

3.本题调试结果

 

4.题目分析

十分简单的运算,只是用直接用指针来解决。也是十分简单的加减法。

 

 

题目二

6-4 字符串的连接(15 分)

本题要求实现一个函数,将两个字符串连接起来。

函数接口定义:

char *str_cat( char *s, char *t );

函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。

裁判测试程序样例:

#include <stdio.h>

#include <string.h>

 

#define MAXS 10

 

char *str_cat( char *s, char *t );

 

int main()

{

    char *p;

    char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};

 

    scanf("%s%s", str1, str2);

    p = str_cat(str1, str2);

    printf("%s\n%s\n", p, str1);

 

    return 0;

}

 

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

  1. 本题PTA提交列表

 

  1. 程序设计思路(流程图)

strcat函数将字符串s,t连接起来

流程图略

最终程序如下:

char *str_cat( char *s, char *t )

{

  char*p; p=strcat(s,t);return(p);

}

总程序如下:

#include <stdio.h>

#include <string.h>

 

#define MAXS 10

 

char *str_cat( char *s, char *t );

 

int main()

{

    char *p;

    char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};

 

    scanf("%s%s", str1, str2);

    p = str_cat(str1, str2);

    printf("%s\n%s\n", p, str1);

 

    return 0;

}

 

 

char *str_cat( char *s, char *t )

{

  char*p; p=strcat(s,t);return(p);

}

3.本题调试结果

 

4.题目讨论

这题表面上并没有使用指针,实则采用了下标法来引用数组元素。这题与上一题比较,比较有难度。用数组能更快的解决问题。将前三个元素放到另外一个数组中,然后对数组元素进行移动,最后利用刚才的数组把前三个元素放到数组的最后,比较有跳跃性。

 

 

题目三

6-3 拆分实数的整数与小数部分(15 分)

本题要求实现一个拆分实数的整数与小数部分的简单函数。

函数接口定义:

void splitfloat( float x, int *intpart, float *fracpart );

其中x是被拆分的实数(0≤x<10000),*intpart*fracpart分别是将实数x拆分出来的整数部分与小数部分。

裁判测试程序样例:

#include <stdio.h>

 

void splitfloat( float x, int *intpart, float *fracpart );

 

int main()

{

    float x, fracpart;

    int intpart;

 

    scanf("%f", &x);

    splitfloat(x, &intpart, &fracpart);

    printf("The integer part is %d\n", intpart);

    printf("The fractional part is %g\n", fracpart);

 

    return 0;

}

 

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

  1. 本题PTA提交列表

 

  1. 程序设计思路(流程图)

就是把小数部分跟整数部分分开

整数部分就是把float 型强制转换成int 型、因为定义的整数类型的指针是int 型的,所以直接    *intpart=x;就可以了

小数部分 用原来的数减掉整数部分

 

流程图略

 

最终程序如下:

void splitfloat( float x, int *intpart, float *fracpart )

{

  *intpart=x;

  *fracpart=x-*intpart;

}

总程序如下:

#include <stdio.h>

 

void splitfloat( float x, int *intpart, float *fracpart );

 

int main()

{

    float x, fracpart;

    int intpart;

 

    scanf("%f", &x);

    splitfloat(x, &intpart, &fracpart);

    printf("The integer part is %d\n", intpart);

    printf("The fractional part is %g\n", fracpart);

 

    return 0;

}

void splitfloat( float x, int *intpart, float *fracpart )

{

  *intpart=x;

  *fracpart=x-*intpart;

}

  1. 本题调试结果

 

  1. 题目讨论

本题就是数字类型转换的基本运算,考察的是指针、函数转换的基本类型。

 

 

二、同学代码互评

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、总结

我学到了什么?

指针这章 我学会了指针的基本算法,基本内容。*P指向一个数,p是该数的地址,等等较易出错的基本知识都已完全掌握。

 

我还有什么不会?

在指针这一章,并没有许多知识点,但在我看来他的应用确是一个难点。我掌握了基本知识,比较基本的题型,却不会用指针编写较为复杂的程序。没有办法把指针运用的炉火纯青,所以在这次的实验报告中我选择的都是比较基础的题目,没有什么特别大的难度。水平有待提高!

转载于:https://www.cnblogs.com/yfyf/p/8276856.html

你可能感兴趣的文章
IOS Google语音识别更新啦!!!
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
BootScrap
查看>>
Java实现二分查找
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
django ORM创建数据库方法
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
03 线程池
查看>>
手机验证码执行流程
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
桥接模式-Bridge(Java实现)
查看>>
303. Range Sum Query - Immutable
查看>>
【★】浅谈计算机与随机数
查看>>
Leetcode 226: Invert Binary Tree
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>