标签:puts 实验目的 inf mamicode 运用 指针运算 实现 维数 return
(1)8.3.1 指针基础及指针运算
①加强对指针数据类型的理解;
②熟悉指针的定义、通过指针间接访问变量的方法;
(2)8.3.2 数据交换
①加强对指针类型作为函数参数传递的理解;
②通常将实参传递给形参时,有两种方式,即按值传递和按地址传递,其中指针类型参数即按地址传递;
(3)8.3.3 字符串反转及字符串连接
①加强对字符指针及将指针作为函数的返回类型的理解;
②通过指针对字符串进行操作;
(4)8.3.4 数组元素奇偶排列
①加强对使用指针对数组进行操作的理解;
②通常数组的名称即整个数组的起始存储地址;
1.实验代码
#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的值//
getchar();
printf("Result:\n");
printf("%d,%f\n",a,b);
printf("%d,%f\n",*p,*q);//通过指针p和q间接输出a,b的值//
printf("The Adress of a, b:%p,%p\n",&a,&b);
printf("The Adress of a, b:%p,%p\n",p,q);//输出p和q的值并与上行输出结果进行比较//
p=&c;
printf("c=%d\n",*p);
printf("The Adress of c:%x,%x\n",p,&c);//输出p的值及c的地址//
return 0;
}
2.问题的简单描述
①使用指针变量,调用scanf()函数分别输入a和b的值;
②按十六进制方式输出p、q的值及a、b的地址;
③将p指向c,通过p间接访问c的值并输出;
3.问题分析
①在scanf()函数中,自第二个参数开始,必须使用地址或地址变量;
②使用printf()来输出指针,可以使用%p、%x格式符来输出十六进制的地址;
③p、&c是等价的,都是指向变量c的地址;
4.实验结果
1.实验代码
#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("\nb=:");
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地址上的值//
}
2.问题的简单描述
①定义指针类型函数用于a,b值的交换;
②第二个函数实参的传递;
3.问题分析
①定义swap2(int *x, int *y),形参x、y是整型指针变量;
②在swap2函数内将通过引用地址取值方式,实现对a、b的值的交换;
③当使用指针作为形参时,实参必须是地址,也应是数组名;
4.实验结果
1.实验代码
#include<stdio.h>
#include<conio.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("\nOutput Reversed Character String: ");
puts(str2);
printf("Input String1: ");
gets(str);
printf("\nInput String2: ");
gets(str1);
str2=link(str,str1);
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;//q指向的元素赋值给p所指向的元素//
p++;q++ ;//指针做相应的移动处理//
}
*p=‘\0‘;//令结束字符为空字符//
return str1;
}
2.问题的简单描述
①定义一个函数将字符串反转;
②定义一个函数将两个字符串连接起来;
3.问题分析
①字符串反转,需要使用两个指针,一个指向起始字符,另一个指向结束字符,相向移动指针q++;p--;
,并交换相应位置的字符;
②第二个函数,需要一个指针移动到第一个字符串的结束字符‘\0‘上,然后将该指针指向第二个字符串,并依次做赋值处理;
③使用返回指针的函数时,在函数最后需要使用return语句返回一个指针值;
4.实验结果
1.实验代码
#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--;
}
}
2.问题的简单描述
①定义一个函数,实现数组元素奇数在左,偶数在右的排列;
②奇偶数的条件判断;
③指针的相向移动;
3.问题分析
①定义arrsort()函数,实现奇左偶右;
②需要用到p、q两个指针,p向后移动直到遇到偶数,q向前移动,直到遇到奇数,然后将p、q所指位置的元素进行交换,继续循环;
③一个指向一维数组的指针加1或减1运算将指向数组的下一个元素或前一个元素;
4.实验结果
知识点小结:
(1)运算符
①&运算符成为“取地址运算符”;
②运算符称为"指针运算符",也称为"间接运算符";
(2)运用指针,p、*q间接输出
a,b的值;
(3)指针类型作为函数参数传递时,当使用指针作为形参,实参必须是地址,也应是数组名;
(4)输入字符串的最后一个字符为\0;
个人心得:
本章实验内容比较少,需要完成的内容做起来也还行。这次的实验也加深了上理论课时的知识点,发现短处也及时弥补了。个人而言,指针这一章相较于前面几章,理解上有点难度,但多看书多体会就还好吧。
标签:puts 实验目的 inf mamicode 运用 指针运算 实现 维数 return
原文地址:https://www.cnblogs.com/zqpyn1003-0525/p/13030233.html