材料科学基础实验报告九

                   

              

实验报告

  

(九)

学院:_________________专业:_________________

班级:_________________学号:_________________

姓名:_________________日期:_________________

实验九  塑性变形与回复再结晶

 

 

第二篇:实验报告九

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

分析:与自己预想结果相同。

相关推荐