第八章指针实验

第八章指针实验

一、实验项目:

1、指针基础及指针运算

2、数据交换

3、字符串反转及字符串连接

3、数组元素奇偶排列

姓名:李儿龙    实验地点:教学楼514教室     实验时间:6月12日

二、实验目的

1、熟悉指针的定义、通过指针间接访问变量

2、加强对指针类型作为函数参数的理解

3、加强对字符指针以及将指针作为函数的返回类型的理解,并通过指针对字符串进行操作

4、加强学生对使用指针对数组进行操作的理解

三、实验内容

实验8.3.1

1、问题分析

  • 定义一个整形指针变量p,使它指向一个整形变量a,定义一个浮点型指针q,使它指向一个浮点整形变量b,同时定义另外一个整形变量c并赋初值3;
  • 使用指针变量,调用scanf函数分别输入a和b的值;
  • 通过指针间接访问并输出a、b的值
  • 按十六进制方式输出p、q的值以及a、b的地址
  • 将p指向c,通过p的间接访问c的值并输出;
  • 输出p的值及c的地址,并与上面的结果进行比较;

2:实验代码:

#include<stdio.h>
int main()
{
    int *p,a,c=3;
    float *q,b;
    p=&a;
    q=&b;
    printf("please Input the Value of a,b:");
    scanf("%d,%f",p,q);/*使用指针p和q输入a,b的值*/
    printf("Result:
");
    printf("    %d,%f
",a,b);
    printf("    %d,%f
",*p,*q);/*通过指针p和q输入a,b的值*/
    printf("The Address of a,b: %p,%p
",&a,&b);
    printf("The Address of a,b:%p,%p
",p,q);
    p=&c;
    printf("c=%d
",*p);
    printf("The Address of c:%x,%x
",p);/*输出p的值以及c的地址*/
    return 0;
    
}

3、实验结果:

第八章指针实验

4、问题分析

当指针p指向a时,a的地址就赋予了p,a的值就等于*p,地址就是p

实验8.3.2

1、问题描述:数据交换

  • 定义两个函数,分别为viod swapl(inta,intb)和void swapl(int*a,int*b),用于交换a,b的值。
  • 从主函数中分别输入两个整形变量a,b.
  • 从主函数中分别调用上述两个交换函数,并打印输出交换后a,b的结果

2、实验代码:

#include<stdio.h>
void swap1(int x,int y);
void swap2(int *x,int *y);
 main()
{
    int a,b;
    printf("please Input a=:");
    scanf("%d",&a);
    printf("   b=:");
    scanf("%d",&b);
    swap1(a,b);
    printf("
After Call swapl:a=%d b=%d
",a,b);
    swap2(&a,&b);/*址传递*/
    printf("
After Call swap2:a=%d b=%d
",a, b);
    return 0;
}
void swap1(int x,int y)
{
    int temp;
    temp=x;
    x=y;
    y=temp;
}
void swap2(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;/*交换x,y地址上的值*/    
}

3、运行结果:

 第八章指针实验

4、问题分析:

swap1为值传递,swap2为指针间的地址传递, 

实验8.3.3

1、问题描述;

字符串反转及字符串的连接

  • 定义两个字符指针,通过gets()函数输入两个在字符串
  • 定义一个函数char*reverse(char *str),通过指针的移动方式将字符串反转
  • 定义一个函数char *link(char *str1,char*str2),通过指针移动方式将两个字符串连接起来
  • 从主函数中分别调用上述函数,输入字符串并打印输出结果

2、实验代码:

#include<stdio.h>
#include<conio.h>
char *reverse(char *str);
char *link(char *strl,char *str2);
int main()
{
    char str[30],strl[30],*str2;
    printf("Input Revesing Character String: ");
    gets(str);
    str2=reverse(str);
    printf("
Output Reversed Character String :");
    puts(str2);
    printf("Input String1: ");
    gets(str);
    printf("
Input String2: ");
    gets(strl);
    str2=link(str, strl);
    puts(str2);
    return 0;
}
char *reverse(char *str)
{
    char *p, *q,temp;
    p=str,q=str;
    while(*p!='