指針實驗報告


指針實驗報告

一、題目分析

題目一

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是該數的地址,等等較易出錯的基本知識都已完全掌握。

 

我還有什么不會?

在指針這一章,並沒有許多知識點,但在我看來他的應用確是一個難點。我掌握了基本知識,比較基本的題型,卻不會用指針編寫較為復雜的程序。沒有辦法把指針運用的爐火純青,所以在這次的實驗報告中我選擇的都是比較基礎的題目,沒有什么特別大的難度。水平有待提高!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM