河 南 理 工 大 学
实验报告
(九)
学院:_________________专业:_________________
班级:_________________学号:_________________
姓名:_________________日期:_________________
实验九 塑性变形与回复再结晶
1.实验名称:指针
2.实验目的、要求——(1)掌握指针的概念,会定义和使用指针变量。
(2)能正确使用字符串的指针和指向字符串的指针变量。
(3)正确使用数组的指针和指向数组的指针变量。
(4)正确使用字符串的指针和指向字符串的指针变量。
(5)正确使用指向函数的指针变量;了解指向指针的指针的概念及其使用方法。
3.实验内容
(1)输入程序并运行,观察运行结果并分析。
sub(int x,int y,int *z)
{*z=y-x;}
#include "stdio.h"
int main()
{int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
return(0);}
编辑完以后结合功能键F2保存源程序,然后再按F9键完成一次编译和连接,显示无错误,按任意键返回显示源程序,接着按ctrl+F9运行,然后按alt+F5显示结果。
运行结果:-5,-12,-7
分析:与自己预想结果相同。首先因为被调用的函数sub的定义出现在主调函数之前,所以不必加以声明,因为编译系统已经知道了已定义函数的有关情况。sub为函数名,括号中有三个形式参数,其中x和y都是整型的,而z为指针类型。sub函数的作用是将y-x的值赋给z所指向的变量。第一次调用sub函数,&a相当于z,则*&a与a等价,即将5-10的值-5赋给a,同理第二次调用sub函数,将a-7的值即-5-7的值-12赋给b,第三次调用sub函数将b-a的值即-12-(-5)的值-7赋给c。最后用printf函数将a,b,c以%4d格式输出。主要考查对指针以及“&,*”运算符的理解。
(2)补全程序并运行。
按字符顺序比较两个字符串s、t的大小,如果s大于t,则返回正值,等于返回0,小于返回负值。
#include "stdio.h"
sub(char *s,char *t)
{for( ;*s==*t;s++,t++)
if(*s=='\0')return 0;
return(*s-*t);
}
#include "stdio.h"
int main()
{char a[20],b[20],*p,*q;
int i;
p=a; q=b;
scanf("%s%s",a,b);
i=sub(p,q);
printf("%d",i);
return(0);}
编辑完以后结合功能键F2保存源程序,然后再按F9键完成一次编译和连接,显示无错误,按任意键返回显示源程序,接着按ctrl+F9运行,出现黑屏后输入a a然后按Enter减返回源程序,然后按alt+F5显示结果。按照上述步骤依次输入aba cde,ab abc,23 25。 运行结果:0 -2 -99 -2
分析:与自己预想结果相同。与上一个程序中相同,此程序中的被调用的函数sub的定义出现在主调函数之前,所以不必加以声明,因为编译系统已经知道了已定义函数的有关情况。sub为自定义寒暑,它的两个形参s、t是指针变量,其中for语句的循环条件是*s==*t即s指向的字符常量与p指向的字符常量一样,执行循环体后s和t都自加1,但应注意指针变量加(减)一个整数并不是简单的将指针变量的原值加(减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加(减),这样的话便可实现s、t分别指向两个字符数组的下一个元素。如果*s与*t不一样的话,则返回*s-*t。在主函数中,定义两个字符数组a【20】和b【10】,两个指针变量p,q,并且将a字符数组的首元素的地址赋给指针变量p,将b字符数组的首元素的地址赋给指针变量q,则在调用函数时写成i=sub(p,q);即将返回值赋给整形变量i。最后用printf函数将i以%d格式输出,即输出的是两个字符常量的ASCII码值的差值。
(3)编写程序
输入a、b、c、d四个数,按从小到大的顺序输出这四个数。应用指针变量做函数参数实现。
#include "stdio.h"
void main()
{void swap(int *p,int *q);
int a,b,c,d;
int *p1,*p2,*p3,*p4;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
p1=&a;p2=&b;p3=&c;p4=&d;
if(a<b)swap(p1,p2);
if(a<c)swap(p1,p3);
if(a<d)swap(p1,p4);
if(b<c)swap(p2,p3);
if(b<d)swap(p2,p4);
if(c<d)swap(p3,p4);
printf("%d,%d,%d,%d\n",a,b,c,d);
}
void swap(int *p,int *q)
{int temp;
temp=*p;
*p=*q;
*q=temp;
}
编辑完以后结合功能键F2保存源程序,然后再按F9键完成一次编译和连接,显示无错误,按任意键返回显示源程序,接着按ctrl+F9运行,出现黑屏后输入5,8,6,3然后按Enter键返
回源程序,然后按alt+F5显示结果。
运行结果:8,6,5,3
分析:与自己预想结果相同。用指针变量作为函数的参数。swap函数的两个形参p,q是指针变量,并且在主函数定义四个指针变量p1、p2、p3、p4,四个整型变量a、b、c、d。然后将a、b、c、d的地址分别赋给指针变量p1、p2、p3、p4,使p1、p2、p3、p4分别指向a、b、c、d。然后执行if语句,如果a<b,则执行swap函数,将p1的值即&a,p2的值&b分别传给p、q。执行完swap函数后是*p1和&p2的值互换,也就是使a和b的值互换。其它的几个函数调用于此道理相同。则最后输出的a、b、c、d便是按由大到小的顺序输出的。之所以用指针变量作为函数参数,是因为这样的话在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,在主调函数中可以使用这些改变了的值。
(4)编写程序
将一个3*3矩阵转置。在主函数中用scanf输入矩阵元素,将数组名作函数参数,在子函数中实现矩阵转置,在主函数中输出转置后的矩阵。
#include "stdio.h"
void main()
{void trp(int *p);
int a[3][3];
int *p,i,j;
printf("shuruyige%d*%ddejuzhen\n",3,3);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
p=a;
trp(p);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
}
void trp(int *p)
{
int i,j,temp;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{
temp=*(p+i*3+j);
*(p+i*3+j)=*(p+j*3+i);
*(p+j*3+i)=temp;}
}
编辑完以后结合功能键F2保存源程序,然后再按F9键完成一次编译和连接,显示无错误,按任意键返回显示源程序,接着按ctrl+F9运行,出现黑屏后输入1 2 3 4 5 6 7 8 9然后按Enter键返回源程序,然后按alt+F5显示结果。
运行结果:123
456
789
分析:与自己预想结果相同。
某某某某大学实验报告学院专业班级学号姓名日期实验一金相显微镜的使用及金相试样的制备实验二铁碳合金平衡组织的显微观察与分析实验三钢的…
专业基础实验实验报告专业课程材料科学基础指导老师学生姓名学号专业班级专业方向成绩评定百分制年月日实验一浇注和凝固条件对纯铝铸锭组织…
材料科学基础实验报告书学院材料科学与工程学院专业金属材料工程姓名学号实验一三元相图截面图的绘制实验二结晶过程观察与纯金属铸锭组织分…
实验报告实验课程材料科学基础学生姓名学号专业班级年月日实验一浇注和凝固条件对铸锭组织的影响一实验目的1研究金属注定的正常组织2讨论…
b实验报告课程名称材料科学基础实验指导老师成绩实验名称光谱分析实验类型同组学生姓名一实验目的和要求必填三主要仪器设备必填五实验数据…
专业基础实验实验报告专业课程材料科学基础指导老师学生姓名学号专业班级专业方向成绩评定百分制年月日实验一浇注和凝固条件对纯铝铸锭组织…
相图绘制方法及应用整理探究目录相图绘制1相图概念2相图测定原理2相图绘制方法2一动态法31步冷曲线法32差热分析曲线法43热膨胀曲…
某某某某大学实验报告学院专业班级学号姓名日期实验一金相显微镜的使用及金相试样的制备实验二铁碳合金平衡组织的显微观察与分析实验三钢的…