• 第八次实验报告


    第八次实验报告

    实验项目:

    1.指针基础及指针运算
    2.数据交换
    3.字符串反转及字符串连接
    4.数组元素奇偶排列

    姓名:袁诚   实验地点:教学楼514教室   实验时间:6月12日

    一、实验目的与要求

    1.指针基础及指针运算

    ·加强学生对指针数据类型的理解,熟悉指针的定义,通过指针间接访问变量。

    2.数据交换

    ·加强学生对指针类型作为参数传递的理解。

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

    ·加强学生对字符指针以及将指针作为函数的返回类型的理解。

    4.数组元素奇偶排列

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

    二丶实验内容

    8.3.1实验练习

    1.问题描述
    (1):定义一个整形指针变量p,使它指向一个整形变量,定义一个浮点型指针q,使它指向一个浮点型变量b,同时定义另外一个整形变量c并赋初值3。 (2):使用指针变量,调动scanf函数分别输入a和b的值。 (3):通过指针间接访问并输出a和b的值。 (4):按十六进制方式输出p、q的值以及a、b的地址。 (5):将p指向c,通过p间接访问c的值并输出。 (6):输出p的值及c的地址,并与上面的结果进行比较。
    2.实验代码
    #include <stdio.h>
    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:
    ");
    	printf("       %d,%f
    ",a,b);
    	printf("       %d,%f
    ",*p,*q);
    	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 v:%x , %x
    ",p,&c);
    	return 0;
    }
    

    实验结果如下:

    3.问题分析
    问题:输出的地址与值总是会反掉。 解决方法:将地址与值的表示方法换一下。

    8.3.2实验练习

    1.问题描述
    (1):定义两个函数,分别为void swap1(int a,int b)和void swap2(int*a,int *b),用于交换a,b的值。 (2):从主函数中分别输入两个整形变量a、b。 (3):从主函数中分别调用上述两个交换函数,并打印输出交换后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 swap1: a=%d b=%d
    ",a,b);
    	swap2(&a,&b);
    	printf("
    After Call swap2: a=%d b=%d
    ",a,b);
    }
    
    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;
    }
    

    实验结果如下:

    3.问题分析
    问题:实参的传递一直不成功。 解决方法:在实参传递时使用&a与&b变量即可。

    8.3.3实验练习

    1.问题描述
    (1):定义两个字符指针,通过gets()函数输入两个字符。 (2):定义一个函数char*reverse(char*str),通过指针移动方式将字符串反转。 (3):定义一个函数char*link(char*str1,char*str2),通过指针移动方式将两个字符串连接起来。 (4):从主函数中分别调用上述函数,输入字符串并打印输出结果。
    2.实验代码
    #include "stdio.h"
    char *reverse(char*str);
    char *link(char*str1,char*str2);
    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);
    }
    
    char *reverse(char *str)
    {
    	char *p,*q,temp;
    	p=str,q=str;
    	while(*p!='')
    	{
    		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!='')
    	{
    		p++;
    	}
    	while(*q!='')
    	{
    		*p=*q;
    		p++;
    		q++;
    	}
    	str2=NULL;
    	return str1;
    }
    

    实验结果图:

    3.问题分析
    问题:不知道怎么让指针做相向移动,对于指针的运算不熟悉。 解决方法:通过翻书理解指针的移动方式,知道了可以直接让指针进行加减来使指针移动。

    8.3.4实验练习

    1.问题描述
    (1):定义一个整型一维数组,任意输入数组的元素,其中包含奇数和偶数。 (2):定义一个函数,实现将数组元素奇数在左,偶数在右的排列。 (3):在上述定义的函数中,不允许再增加新的数组。 (4):从主函数中分别调用上述函数,打印输出结果。
    2.实验代码
    #include <stdio.h>
    #define N 10
    void arrsort(int a[],int n);
    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--;
    	}
    }
    

    实验结果图:

    3.问题分析
    问题:对于外部函数的整体流程不清晰,导致实验结果无法实现。 解决方法:通过将流程在草稿纸上写出,然后配合提升一起理解,最终将外部函数完成。

    三、实验小结

    收获:本次实验,我对于指针的理解增强了不少,尤其是对于指针的意义,指针的运算和指针的各种需要注意的事项都有了更深层次的了解,同时也知道了一些指针的特殊用法,例如使用指针将字符串进行反转叠加之类的,还有使用指针来进行排序。 不足:本次实验时,我发现我对于指针的理解还处于初期状态,还只是停留在书上的哪一些使用方法,还有很多不理解的地方,通过了实验才使总体对于指针的理解提高了,对于指针了解还有待加强。
  • 相关阅读:
    IOS开发之控件(Ⅰ)
    Windows 8 Metro App开发[7]视图模型与数据绑定
    WP7/8退出程序
    Windows 8 Metro App开发[8]处理Fullscreen, Snapped和Filled状态
    【原创】WP7.8 ROM更新图文并茂
    Windows 8 Metro App开发[5]导航栏(AppBar)的使用
    Iphone开发准备工作
    20191302第十二章学习笔记
    实验四Web服务器2
    2.5 OpenEuler 中C与汇编的混合编程
  • 原文地址:https://www.cnblogs.com/ylpforever/p/11031213.html
Copyright © 2020-2023  润新知