第八章指针实验报告

C程序实验报告

姓名:韦小闻     实验地点:第一教学楼514教室     实验时间:6月12日

实验项目

1、指针基础及指针运算

2、数据交换

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

4、数组元素奇偶排列

一、实验目的与要求

1、指针基础及指针运算

●本实验旨在加强学生对指针数据类型的理解,熟悉指针的定义、通过指针间接访问变量。

2、数据交换

●本实验旨在加强学生对指针类型作为函数参数传递的理解,通常将实参传递给形参时,有两种方式,即按值传递和按地址传递,其中指针类型参数即是按地址传递。

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

●本实验旨在加强学生对字符指针以及将指针作为函数的返回类型的理解,并通过指针对字符串进行操作,通常来说,一个字符串在内存中是连续存放的,其开始地址为指向该字符串的指针值,字符串均以‘\0’作为结束字符。

4、数组元素奇偶排列

●本实验旨在加强学生对使用指针对数组进行操作的理解。通常数组的名称即整个数组的起始存储地址,可以定义一个指针指向它,然后通过指针移动来访问各个数组成员。

二、实验内容

8.3.1 指针基础及指针运算

问题描述:

(1)定义一个整型指针变量p,使它指向一个整形变量a,定义一个浮点型指针q,使它指向一个浮点型变量b,同时定义另外一个整型变量c并赋初值3

(2)使用指针变量,调用scanf函数分别输入a和b的值。


(3)通过指针间接访问并输出a、b的值。


(4)按十六进制方式输出p、q的值以及a、b的地址。


(5)将p指向c,通过p间接访问c的值并输出。


(6)输出p的值及c的地址,并与上面的结果进行比较。

实验代码:

#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);
    printf("Result:\n");
    printf("    %d, %f\n",a,b);
    printf("    %d, %f\n",*p,*q);
    printf("The Address of a,b: %p,%p\n",&a,&b);
    printf("The Address of a,b: %p,%p\n",p,q);
    p=&c;
    printf("c=%d\n",*p);
    printf("The Address of c :%x,%x\n",p,&c);
    return 0;
}

实验结果:

问题分析:无。

8.3.2 数据交换

问题描述:

(1)定义两个函数,分别为void swap1(int a,int b)和swap2(inta.intb),用于交换a,b的值。
(2)从主函数中分别输入两个整型变量a、b。
(3)从主函数中分别调用上述两个交换函数,并打印输出交换后a、b的结果。

实验代码:

#include<stdio.h>
void swap1(int x,int y);
void swap2(int *x,int *y);
int main()
{
    int a,b;
    printf("Please Input a=:");
    scanf("%d",&a);
    printf("\n        b=:");
    scanf("%d",&b);
    swap1(a,b);
    printf("\nAfter Call swap1:a=%d b=%d\n",a,b);
    swap2(&a,&b);
    printf("\nAfter Call swap2:a=%d b=%d\n",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,a、b不会发生改变,交换x、y地址的值才会。

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

问题描述:

(1)定义两个字符指针,通过gets()函数输入两个字符串。
(2)定义一个函数charreverse(charstr),通过指针移动方式将字符串反转。
(3)定义一个函数charlink(charstr1,char*str2),通过指针移动方式将两个字符串连接起来。
(4)从主函数中分别调用上述函数,输入字符串并打印输出结果。

实验代码:

#include<stdio.h>
char *reverse(char *str);
char *link(char *str1,char *str2);
int main()
{
    char str[30],str1[30],*str2;
    printf("Input Reversing Character String:");
    gets(str);
    str2=reverse(str);
    printf("Output Reversed Character String:");
    puts(str2);
    printf("Input String1:");
    gets(str);
    printf("Input String2:");
    gets(str1);
    str2=link(str,str1);
    printf("Link String1 and String2:");
    puts(str2);
    return 0;
}
char *reverse(char *str)
{
    char *p,*q,temp;
    p=str,q=str;
    while(*p!=‘\0‘)
         p++;
    p--;
    while(q<p)
    {
        temp=*q;
        *q=*p;
        *p=temp;
        q++;
        p--;
    }
    return str;
}
char *link(char *str1,char *str2)
{
    char *p=str1,*q=str2;
    while(*p !=‘\0‘)
          p++;
    while(*q !=‘\0‘)
    {
        *p=*q;
        p++;
        q++;
    }
    *p=‘\0‘;
    return str1;
}

实验结果:

问题分析:p和*p代表的不一样,p指的是地址,*p指的是值,要注意区分。

8.3.4 数组元素奇偶排列

问题描述:

(1)定义一个整型一维数组,任意输入数组的元素,其中包含奇数和偶数。
(2)定义一个函数,实现将数组元素奇数在左,偶数在右的排列。
(3)在上述定义的函数中,不允许再增加新的数组。
(4)从主函数中分别调用上述函数,打印输出结果。

实验代码:

#include<stdio.h>
#define N 10
void arrsort(int a[],int n);
int main()
{
    int a[N],i;
    for(i=0;i<N;i++)
         scanf("%d",&a[i]);
    arrsort(a,N);
    for(i=0;i<N;i++)
    printf("%d ",a[i]);
 }
 void arrsort(int a[],int n)
 {
     int *p,*q,temp;
     p=a;
     q=a+n-1;
     while(p<q){
          while(*p%2==1)
          p++;
          while(*q%2==0)
          q--;
          if(p>q)
             break;
         temp=*p;
         *p=*q;
        *q=temp;
         p++;
         q--;
     }
 }

实验结果:

问题分析:p++是向后移动,p--是向前移动。

三、实验小结

1、这节课让我进一步熟悉的掌握了指针的定义以及运算。

2、还有就是要更熟悉的掌握各个字符代表的意义,是地址还是值。

原文地址:https://www.cnblogs.com/gama12138-/p/11008663.html

时间: 2024-08-30 00:16:39

第八章指针实验报告的相关文章

第八章 指针实验

C程序设计实验报告 实验项目:指针实验 姓名: 王雨晴 实验地点: 514物联网实验室 实验时间:2019年6月12日 实验项目 指针基础及指针运算 数据交换 字符串反转及字符串连接 数组元素奇偶排列 一.实验目的和要求 (1)掌握指针的概念和定义方法. (2)掌握指针的操作和运算 (3)掌握指针与数组的关系 (4)掌握指针与字符串的关系 (5)熟悉指针作为函数的参数以及返回指针函数 (6)了解函数指针 二.实验内容 实验练习一 8.3.1指针基础及指针运算 1.问题描述 定义一个整型指针变量p

第八章指针实验

第八次实验报告 实验项目:指针实验 姓名:廖云福 实验地点: 514物联网实验室 实验时间:2019年6月12日 实验项目 指针基础及指针运算 数据交换 字符串反转及字符串连接 数组元素奇偶排列 一.实验目的和要求 (1)掌握指针的概念和定义方法. (2)掌握指针的操作和运算 (3)掌握指针与数组的关系 (4)掌握指针与字符串的关系 (5)熟悉指针作为函数的参数以及返回指针函数 (6)了解函数指针 二.实验内容 实验一. 8.3.1指针基础及指针运算 1.问题描述 定义一个整型指针变量p,使'y

四、PTA指针实验报告

四.PTA实验作业(指针) 题目一:   1.本题PTA提交列表: 2.设计思路(包括流程图),主要描述题目算法 //设计思路,由题目可知 1.由于这道题不知道具体要输入数据,所以采用calloc来按要求进行分配内存 2用for()循环来输入数据,斌且进行数据的求和,在内层循环中再通过一一比较,就可以求出数据的最大最小值 3.最后释放不用的内存 4.输出平均值,最大值,最小值 最终的代码如下: 流程图如下: 3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试

2062326 齐力锋 实验四《Java面向对象程序设计Android开发》实验报告

北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构  班级: 1623  姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5月26日 实验密级:非密级 预习程度: 优良 实验时间: 2 Hours 仪器组次: 必修/选修: 必修 实验序号: 04 实验名称:Java面向对象程序设计Android开发 实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI

数据结构与算法 第四次实验报告 图

数据结构与算法 第四次实验报告 姓名:许恺 学号:2014011329 班级:计算机14-1     中国石油大学(北京)计算机科学与技术系 1.图的定义,文件为"Graph.h" #ifndef GRAPH_H//定义头文件 #define GRAPH_H #include<string>//引入标准库中的头文件 using namespace std; const int MaxSize=12; struct ArcNode//定义边表结点 { int adjvex;/

实验二 实验报告

实验二 作业调度模拟程序 13物联网  陈梓帆  201306104108 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统

实验四实验报告

北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础             班级:201352 姓名:池彬宁 贺邦 学号:20135212 20135208 成绩:             指导教师:娄嘉鹏       实验日期:2015.12.1 实验密级:         预习程度:           实验时间:15:30-17:30 仪器组次:         必修/选修:必修          实验序号:3 实验名称:基于 S3C2410 的 linux 开发环境的配

有理数四则运算的实验报告小结

一.实验报告内容: 设计抽象数据类型有理数的描述 (有理数是其分子.分母均为整数且分母不为零的分数). 有理数主要数据运算有: 1.       构造有理数T,元素e1,e2分别被赋以分子.分母值 2.       销毁有理数T 3.       用e返回有理数T的分子或分母,i=1返回分子, i=2返回分母. 4.       改变有理数T的分子或分母为e,i=1改变分子, i=2改变分母 5.       有理数T1,T2相加,结果存入有理数T3 6.       有理数T1,T2相减,结果

实验报告:统计字符串中子字符串出现的次数

实验报告 源程序: 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int cntstring(char *source,char *substr); 5 void main() 6 { 7 char str1[50],str2[20]; //str1 为主字符串,str2 为子字符串 8 cout<<"input source string:"; 9 cin.get