用指针编写程序实验心得

| 工作总结 |

【www.guakaob.com--工作总结】

用指针编写程序实验心得篇一
《C语言实验程序、总结 实验七 指针》

一 实验目的 实验七 指针

1 了解指针的概念,学会定义和使用指针变量。

2 掌握指针、变量和数组的关系及使用方法。

3 学会使用指向函数的指针变量。

二 实验内容

1 编写函数fun(float *sn,int n),其功能是:根据以下公式计算s,计算结果通过形参sn传回;n通过实参传入,n的值大于等于0。上机运行并记录输入输出(主函数已给出)。

s11111 3572n1

fun(float *sn,int n)

{ 定义变量:和s,通项w,符号f,循环控制变量i; /* 其中s、f要初始化 */ 循环求累加和s

{ 改变符号; /* 由负变正或由正变负 */

求通项w;

累加:s+=w;

}

形参指针变量sn赋值; /* 通过形参sn传回累加和s */

}

main()

{ float s; int n;

printf("n="); scanf("%d",&n);

fun(&s,n);

printf("s=%f\n",s);

}

完整程序如下:

#include<stdio.h>

void fun(float *sn,int n)

{ float s=0.0,w,f=-1.0;

int i=0;

for (i=0;i<=n;i++);

{ f=(-1)*f;

w=f/(2*i+1);

s+=w;

}

*sn =s;

}

main()

{ float s; int n;

printf("n="); scanf("%d",&n);

fun(&s,n);

printf("s=%f\n",s);

}

输出结果如下图:

2 想使指针变量pt1指向a和b中的大者,pt2指向小者,以下程序能否实现此目的? swap(int *p1,int *p2)

{ int *p;

p=p1;p1=p2;p2=p

}

main()

{ int a,b; int *pt1,*pt2 ;

scanf("%d,%d",&a,&b);

pt1=&a; pt2=&b ;

if(a<b) swap(pt1,pt2);

printf("%d,%d \n",*pt1,*pt2) ;

}

上机调试此程序。如果不能实现题目要求,指出原因并修改之。

子函数swap改成下面程序方可实现目的,主函数不变:

swap(int *p1,int *p2)

{ int p;

p=*p1;*p1=*p2;*p2=p;

}

3 下面的程序用来实现将一个3×3的矩阵转置。

#include <stdio.h>

void tranf(int (*p)[3])

{ int t,i,j;

for(i=0;i<3;i++)

for(j=0;j<i;j++)

{ t=p[i][j]; p[i][j]=p[j][i]; p[j][i]=t; }

}

main()

{ int i,j,a[3][3];

for(i=0;i<3;i++)

for(j=0;j<3;j++) scanf("%d",&a[i][j]);

tranf(a);

for(i=0;i<3;i++)

{ for(j=0;j<3;j++) printf("%3d",a[i][j]);

printf("\n");

}

}

⑴ 将上面程序修改成将一个N×N的矩阵转置,其中N是符号常量。

⑵ 将tranf函数体中二维数组元素的方括号表示形式改成*号的表示形式。

⑶ 调试并运行程序:N=3,并程序输入:1 2 3 4 5 6 7 8 9,记录程序的输出。 程序修改如下:

#include <stdio.h>

void tranf(int (*p)[N])

{ int t,i,j;

for(i=0;i<3;i++)

for(j=0;j<i;j++)

{ t=p[i][j]; p[i][j]=p[j][i]; p[j][i]=t; }

}

main()

{ int i,j;

Char a[N][N];

for(i=0;i<3;i++)

for(j=0;j<3;j++) scanf("%d",&a[i][j]);

tranf(a);

for(i=0;i<3;i++)

{ for(j=0;j<3;j++) printf("%3d",a[i][j]);

printf("\n");

}

}

4 记录并分析以下程序运行结果。

#include <stdio.h>

char *strc(char *s1,char *s2)

{ char *p=s1;

while(*s2!='\0') *p++=*s2++;

return s1;

}

main()

{ char s1[30]="computer ok!",s2[]="language",*pt;

pt=strc(s1,s2);

printf("%s\n",pt); /* 第10行 */

}

将程序第10行中的%s改成%c,应该怎样修改?(只允许修改第10行)

应改为: printf("%c\n",*pt++);

实验总结:本次实验主要掌握指针的概念,学会定义和使用指针变量, 掌握指针、变量和数组的关系及使用方法,学会使用指向函数的指针变量,通过本次实验,很好的了解了指针的使用,加深了对指针的认识。

用指针编写程序实验心得篇二
《指针实验报告

嘉应学院 计算机学院 实 验 报 告课程名称 指导老师 班 级程序设计基础实验名称 实验时间 姓 名实验地点 提交时间 座 号一、实验目的和要求1、掌握指针和间接访问的概念,会定义和使用指针变量。 2、能正确使用数组的指针和指向数组的指针变量。 3、能正确使用字符串的执针和指向字符串的指针变量。二、实验环境和方法实验方法:(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。 (二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步 改善功能。 (三)根据实验内容,编译程序。 实验环境:Windows xp Visual C++6.0三、实验内容及过程描述实验内容:编译以下题目的程序并调试运行。 1、输入 3 个整数,按由大到小的顺序输出,然后将程序改为:输入 3 个字符串,按由小到大顺序 输出。 ①先编写一个程序,以处理输入 3 个整数,按由小到大顺序输出。运行程序,分析结果。 ②把程序改为能处理输入 3 个字符串,按由小到大的顺序输出。运行此程序,分析结果。 ③比较以上两个程序,分析处理整数与处理字符串有什么不同?例如: (a)怎样得到指向整数(或字符串)的指针。 (b)怎样比较两个整数(或字符串)的指针。 (c)怎样交换两个整数(或字符串) 。 2、将一个 3×3 的整数型二维数组转置,用一个函数实现之。 在主函数中用 scanf 函数输入以下数组元素: 1 3 5 7 9 11 13 15 19 将数组 0 行 0 列元素的地址作为函数实参,在执行函数的过程中实现行列互换,函数调用结束后在 主函数中输出已转置的二维数组。 请思考:

① 二维数组的指针,某一行的指针、某一元素的指针个代表什么含义?应该怎么表示? ② 怎样表示 i 行 j 列元素及其地址。 3、将 n 个数按输入时顺序的逆序排列,用函数实现。 ①在调用函数时用数组名作函数实参。 ②函数实参改为用指向数组首元素的指针,形参不变。 ③分析以上二者的不同。 4、写一个函数,求一个字符串的长度。在 main 函数中输入字符串,并输出其长度。 分别在程序中按以下两种情况处理: ①函数形参用指针变量。 ②函数形参用数组名。 实验步骤: ① 进入 Visual C++ 6.0 集成环境。 ② 输入自己编好的程序。 ③ 检查一遍已输入的程序是否有错 (包括输入时输错的和编程中的错误) 如发现有错, , 及时改正。 ④ 进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息” ,根据提示找 到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤ 运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正确, 应运行多次,分别检查在不同情况下结果是否正确。 以下是各题源代码: 1、 输入 3 个整数,按由大到小的顺序输出,然后将程序改为:输入 3 个字符串,按由小到大顺序 输出。 程序① #include<stdio.h> int main() { void swap(int *p1,int *p2); int n1,n2,n3; int *p1,*p2,*p3; printf("请输入 3 个数 n1,n2,n3:"); scanf("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1>n2) swap(p1,p2); if(n1>n3) swap(p1,p3); if(n2>n3) swap(p2,p3); printf("排序结果为:%d,%d,%d\n",n1,n2,n3); return 0; } void swap(int *p1,int *p2) {int p; p=*p1;*p1=*p2;*p2=p; } 程序② #include<stdio.h> #include<string.h> int main() { void swap(char *,char *); char str1[20],str2[31],str3[20]; printf("请输入 3 行字符:\n"); gets(str1); gets(str2); gets(str3); if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3);

printf("请输入 3 行字符:\n"); gets(str1); gets(str2); gets(str3); if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); printf("排序结果为:\n"); printf("%s\n%s\n%s\n",str1,str2,str3); return 0; } void swap(char *p1,char *p2) {char p[20]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); } 2、将一个 3×3 的整数型二维数组转置,用一个函数实现之。 #include<stdio.h> int main() {void move(int * pointer); int a[3][3],*p,i,j; printf("请输入一个 3×3 数组:\n"); for(i=0;i<3;i++) scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]); p=&a[0][0]; move(p); printf("转置数组为:\n"); for(i=0;i<3;i++) printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]); return 0; } void move(int * pointer) {int i,j,t; for(i=0;i<3;i++) for(j=i;j<3;j++) {t=*(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; } } 3、将 n 个数按输入时顺序的逆序排列,用函数实现。 #include<stdio.h> int main() {void sort(char * p,int m); int i,n; char * p,num[20]; printf("请输入 n 为:"); scanf("%d",&n); printf("请输入%d 个数:\n",n); for(i=0;i<n;i++) scanf("%d",&num[i]); p=&num[0]; sort(p,n);

printf("逆序排列为:\n"); for(i=0;i<n;i++) printf("%d ",num[i]); printf("\n"); return 0; } void sort(char * p,int m) {int i; char temp,* p1,* p2; for(i=0;i<m/2;i++) {p1=p+i; p2=p+(m-1-i); temp=* p1; * p1=*p2; * p2=temp; } } 4、写一个函数,求一个字符串的长度。在 main 函数中输入字符串,并输出其长度。 分别在程序中按以下两种情况处理: ① 函数形参用指针变量。 #include<stdio.h> int main() {int length(char * p); int len; char str[20]; printf("请输入一个字符串:\n"); scanf("%s",str); len=length(str); printf("该字符串长度为%d.\n",len); return 0; } int length(char * p) {int n; n=0; while (* p!='\0') {n++; p++; } return(n); } ②函数形参用数组名。 #include<stdio.h> int main() {int length(char str[]); int len; char str[20]; printf("请输入一个字符串:\n"); scanf("%s",str); len=length(str); printf("该字符串长度为%d.\n",len); return 0; } int length(char str[20]) {int n; char * p; p=str; n=0; while (* p!='\0') {n++; p++;

int length(char str[20]) {int n; char * p; p=str; n=0; while (* p!='\0') {n++; p++; } return(n); }四、实验结果:1、输入 3 个整数,按由大到小的顺序输出,然后将程序改为:输入 3 个字符串,按由小到大顺序输出。 程序①结果:结果分析: 本程序应用指针,在 swap 函数中交换指针 p 所指向的单元数值,使较小的数放前面从而达到排序的效果。 程序②结果:结果分析: 利用指针指向字符串数组,在 strcmp 函数中,将两个字符串自左向右逐个字符比较(按 ASCCII 码值大小比 较) ,直到出现不同字符或遇到’\0’为止。 ③处理整数只需将指针指向整数的存储地址然后进行比较;处理字符串时,字符串是用数组存储的,在进行 大小比较时用指针指向数组首地址或数组名从而得到字符串指针。比较整数用 swap 函数,比较字符串用 strcmp 函数。 2、将一个 3×3 的整数型二维数组转置,用一个函数实现之。① 二维数组中,某一行的指针是指指向该数组一行中的所有元素可表示为:*(a+i) 表示第 i 行;某一元 ,i 素指针代表任意元素的指针*a[i][j],i 表示第 i 行,j 表示第 j 列。 ② 第 i 行 j 列表示为 a[i][j],地址表示为&a[i][j]。

用指针编写程序实验心得篇三
《完成Java面向对象程序设计实验课的心得体会》

Java面向对象程序设计实验课的心得体会 经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。

在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。

Java思想:Java是一门面向对向语言,他定义一切都是对象 面向对象,就是面对现实;

现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等

原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。

面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。

我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对!

我的理解:

1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),

直到无法再细;

2、对每个对象(小问题)进行分析,抽象,提取处共同的内容(数据成员和操作方法),

3、有相似的对象的,构造基类;再有基类派生出各个确定的对象(小问题);

4、解决问题的过程就是操作这些对象的过程。

我的理解:

与实际生活联系起来。

将要处理的„问题‟抽象成一个或多个„事件‟

找一个地方使用我的智慧

1。了解系统的功能。列举出它的对外接口,即对于使用者来说它有什么功能。把这整个系统作为一个对象。

2。环境。系统不是运行在真空中的,操作系统等外部环境都可能会影响它。所以把环境也作为一个大的对象。

3。内部。在系统的内部,一般都比较复杂,一般的做法是规定一个粒度,枚举出该粒度上所有的物体。比如说人体,如果在器官的粒度上,就有心,肝,肺。而小于该粒度的物体(或称对象),比如血细胞,就忽略,作为其它物体(或称子系统的内部对象)。

4。子系统。不断缩小粒度,沿用步骤1~3,直到不能再抽象为止。

5。无形的物体。一个完整的互连的系统需要许多无形的物体,比如消息等了,一般这样的对象比较难发现。当你发现各个子系统无法正确合作或理顺关系时,试着加入一些辅助对象。

一切都是为了让人明白,有能让机器理解的思想

我想分析和抽象能力的高低是个关键,首先要从问题域分析和抽象出准确的对象模型,再根据这些模型进行处理,当然在过程种少不了楼上前辈们说的一些思想和细节,但是别忘了,我们的目的是解决问题,不要为了面向对象而面向对象!

我想分析和抽象的能力对这个问题是个关键。首先要在问题域仔细分析、抽象得到相关的对象模型,然后才是相应的设计。可是面向对象只是我们解决问题一种思想,切不可忘了问题本身,弄成为了面向对象而面向对象了!当然过程种少不了楼上一些前辈说的思想和细节了。

耕具我多年的实践:面向对象包括两个思想:

从大往小想,从小往大做

从难往易想,从易往难做

同意一下观点-----能深入浅出,真高手也!

真正的面向对象编程思想就是忘掉一切关于计算机的东西,从问题领域考虑问题, :-)

把问题从大到小都抽象成对象(指针只是对象的使用形式),在设计和编写程序的时候把你设计的对象合理的编排组合就是面向对象编程了。

面向对象,就是面对现实;

现实中的一切都是对象,他们有分类,就产生了“类”;

他们有不同,类和类之间的不同,使用类来区分;

同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 对象:

对象是人们要进行研究的任何事物,从简单的一个小分子到复杂的汽车飞机都可以看做对象,只是有时对象要根据人们研究问题的需要来确定,对象不一定是具体的,有时也可以表示抽象的规则或计划。

类:

类在java中是具有相同或相似性质的对象的抽象体现形式。也就是说,类的实例化就是创建对象的过程类的实例就是对象。

用指针编写程序实验心得篇四
《指针实验实验报告

C语言程序设计实验报告

专业:计算机科学与技术 班级:计算机科学与技术创新实验班 日期:2011-12-29 成绩: 实验组别: 第 次实验: 指导教师:

学生姓名: 学号: 同组人姓名: 实验名称:指针实验

一、实验目的

(1)熟练掌握指针的说明、赋值、使用。

(2)掌握用指针引用数组的元素,熟悉指向数组的指针的使用。

(3)熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。

(4)掌握带有参数的main函数的用法。

二、实验内容及要求

1.源程序改错

下面的源程序中是否存在错误?如果存在,原因是什么?如果存在错误要求在计算机上对这个源程序进行调试修改,是之能够正确执行。

源程序:

#include <stdio.h>

int main(void)

{

float * p;

scanf("%f",p);

printf("%f\n",*p);

return 0;

}

2.源程序修改替换

(1)下面源程序的功能是,通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数。请在程序中的下划线处填写合适的表达式、语句或代码片段来完善该程序。 源程序:

#include <stdio.h>

#include <string.h>

int main(void)

{

____________________________

char a[80],b[80],c[160],*result=c;

int choice,i;

do

{

}

while(choice<1||choice>5);

switch (choice)

{

case 1:

p=strcpy;

break;

case 2:

p=strcat;

break;

case 3:

goto down;

}

getchar();

printf("input the first string please! \n");

i=0; _______________________ printf("input the second string please!\n"); i=0; printf("\t\t1 copy string.\n"); printf("\t\t2 connect string.\n"); printf("\t\t3 exit.\n"); printf("\t\tinput a number(1-3)please! \n"); scanf("%d",&choice);

_______________________

result=____(a,b);

printf("the result is %s\n",result);

down:

;

return 0;

}

(2)请上机运行第(1)题程序使之能按下面要求输出结果(注:(输入)表示该行数据是键盘数据):

1.copy string。

2.Connect string。

3.Exit。

Input a number(1-3)please!

2(输入)

Input the first string please!

The more you learn,(输入)

Input the second string please!

The more you get.(输入)

The result is the more you learn,the more you get.

3. 跟踪调试程序

请按下面的要求对所给源程序进行操作,并回答问题和排除错误。

(1)单步执行源程序。进入strcpy时,watches窗口中s为何值?返回main时,watches窗口中s为何值?

(2)排除源程序中的错误,使程序输出结果为:there is a boat on the lake.

源程序:

#include <stdio.h>

char * strcpy(char*,char*);

int main(void)

{

char a[20],b[60]="there is a boat on the lack.";

printf("%s\n",strcpy(a,b));

return 0;

}

char *strcpy(char*s,char*t)

{

while(*s++=*t++)

;

return (s);

}

4.程序设计

编写并上机调试运行能实现以下功能的程序或函数:

(1)已知一个长整形变量占四个字符,其中每个字节又分高四位和低四位。试编写一个程序,从该长整形变量的高字节开始,依次取出每个字节的高四位和低四位并以数字字符的形式进行显示。

(2)利用大小为n的指针数组指向用gets函数输入的n行,每行不超过80个字符。试编写一个函数,它将每一行中连续的多个空格字符压缩为一个空格字符。在调用函数中输出压缩空格后的各行,空行不予输出。

(3)编写一个程序,输入n个整数,排序后输出。排序的原则由命令行可选参数-d决定,并且有参数-d时按递减顺序,否则按递增顺序排序。要求将排序算法定义成函数,利用指向函数的指针是该函数实现递增或递减排序。

(4)设每个班有n个学生,每个学生所修的M门课程的成绩,并且都存放到相应的数组中,试编写以下函数:

①计算每个学生各门课程平均成绩

②计算全班每门课程的平均成绩

③分别统计低于全班各门课程平均成绩的人数

④分别统计全班各门课程不及格的人数和90分以上(包含90)的人数。

在调用函数中输出结果(要求都用指针操作,不得用下标)

5.选做题

(1)编写并上机调试运行能实现以下功能的程序:

设有N位整数和M位小数(N=20,M=10)的两个数据a,b。编程计算a+b并输出结果。如:

12345678912345678912.1234567891+98765432109876543210.0123456789

(2)编写一个使用复杂声明的“char *(*p[2])(const char*,const char *);”的程序。

提示:p中元素可为strcmp,strstr等函数名。

三、实验步骤及结果

1.源程序改错

错误:悬挂指针,指针未初始化

改后程序:

#include<stdio.h>

int main(void)

{

float *p,a;

p=&a;

scanf("%f",p);

printf("%f\n",*p);

return 0;

}

2.源程序完善、修改、替换

#include<stdio.h>

#include<string.h>

int main(void)

{

char a[80],b[80],c[160],*result=c;

int choice,i;

do

{

printf("\t\t1 copy string.\n");

printf("\t\t2 connect string.\n"); printf("\t\t3 exit.\n");

printf("\t\tinput a number(1-3)please!\n"); scanf("%d",&choice);

}

while(choice<1||choice>5);

switch(choice)

{

case 1:

p=strcpy;

break;

case 2:

p=strcat;

break;

case 3:

goto down;

}

getchar();

printf("input the first string please!\n"); i=0;

i++;

printf("input the second string please!\n"); i=0;

i++;

printf("the result is %s\n",result); down:

;

return 0;

}

用指针编写程序实验心得篇五
《指针实验报告》

学期: 至___ 第 学期 年 月 日

课程名称:___C程序设计_ __ 专业: 级 班

实验编号: 实验项目 指导教师__ _

姓名: 学号: 实验成绩:

一.实验目的:

(1) 掌握C语言环境下指针的声明、定义和使用方法;

(2) 掌握指针和变量以及指针和数组的关系;

(3) 掌握指针、数组之间的关系;

(4) 掌握指针、函数之间的关系。

二.实验内容:

1.熟悉指针的基本使用方法。

2. 想使指针变量pt1指向变量a和b中的大者,pt2指向其小者,以下程序能否实现此目的?为什么?如果不行,请给出实现的方法。

swap(int *pt1,int *pt2)

{

int *p;

p=p1;p1=p2;p2=p;

}

main()

{

int a,b;

int *pt1,*pt2;

scanf(“%d,%d”,&a,&b);

pt1=&a;pt2=&b;

if (a<b) swap(pt1,pt2);

printf(“%d,%d\n”,*pt1,*pt2);

}

三.实验前准备:

(1) 编写所选实验题目的程序代码和流程图;

(2) 检查源程序并给出其可能的运行结果说明。

四.实验过程:

(1) 上机验证所选题目,并做相应测试和分析;

(2) 进行实验分析;

(3) 总结指针及其程序设计、实现方法和经验;

(4) 编写实验报告。

五.实验结果以及分析:

1.分析下列程序,并且上机测试运行结果:

运行结果为:

2.

3.程序三:

运行结果为:

4.比较两个数的大小,并且把较大者输出在前面:

运行结果为:

5.

6.

7.

运行结果为:

8. 运行结果为:

9.

运行结果为:

10.

运行结果为:

11.

运行结果为:

用指针编写程序实验心得篇六
《C语言程序设计实验报告 实验7 指针.doc》

实 验 报 告

实验目的:

(1)掌握指针的定义和指针的运算

(2)掌握用指针处理变量和数组

二【实验内容】

【实验7-1】编写函数用指针实现两个数的交换。在主函数中实现调用

(1)程序代码

#include<stdio.h>

void e(int*m,int*n);

void main()

{

int m,n; printf("please inputm,n\n");

scanf("%d,%d",&m,&n);

e(&m,&n);

printf("%d,%d",m,n);

}

void e(int*a,int*b)

{

int p;

p=*a;

*a=*b;

*b=p;

}

(2)运行结果

【实验7-2】用指针以及函数实现字符串的倒序输出。

(1)程序代码

#include<stdio.h>

#include<string.h>

void main()

{

char ch[100];

char *p;

int x;

gets(ch);

x=strlen(ch);

p=&ch[x-1];

while(p>=ch)

{

printf("%c",*p);

p--;

}

}

(2)运行结果

【实验7-3】编写一个函数,实现数组的冒泡排序。在主函数中输入10个数组元素,调用该函数进行排序,最后输出排序结果。

注意:需要排序的数组应作为实参传给函数的形参,但数组在传递时传的是数组首地址

(1)程序代码

#include<stdio.h>

void e(int a[])

{

int i,j,temp;

for(i=1;i<10;i++)

{

}

}

void main()

{

int a[10]; int i; printf("请输入数组元素"); for(i=0;i<10;i++) for(j=0;j<10-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } }

{

scanf("%d",&a[i]);

}

e(a);

for(i=0;i<10;i++)

{

printf("%d ",a[i]);

}

}

(2)运行结果

实验小结:

通过本节实验掌握了指针的用法,还不明白的地方就是为啥实验1的红字部分不能去掉呢?

用指针编写程序实验心得篇七
《C程序设计实验报告》

实验一 C语言的运行环境、运行过程和表达式的使用

一、目的与要求

1、了解Dos、Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。

2、了解在该系统上如何编辑、编译、连接和运行一个C程序。

3、通过运行简单的C程序,初步了解C源程序的特点。

4、掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。

5、学会使用C的有关算术运算符,以及包含这些运算符的表达式

二、实验例题

【例1】编程实现在屏幕上显示如下三行文字

Hello, world !

Wolcome to the C language world!

Everyone has been waiting for.

在Turbo C的集成环境下,键入如下源文件。敲Alt+F组合键打开File菜单,File菜单中Write to或save as选项可将默认noname.c文件名改为任意文件名。程序example.c如下: main()

{

printf("Hello,World!\n");

printf("Wolcome to the C language world!\n");

printf("Everyone has been waiting for.\n");

}

然后用Ctrl+F9执行example.c,用Alt+F5查看结果,即在屏幕上显示题目要求的三行文字。按回车键重新返回Turbo C的编辑环境。注意,在运行程序之前最好先存盘。

【例2】输入并运行程序,写出运行结果。

main()

{

int a,b,sum;

a=123;b=456;

sum=a+b;

printf(“sum is %d\n”,sum);

}

运行方法同上,最后结果为:sum is 579。

【例3】

输入并运行程序,写出运行结果。

main()

{

int a,b,c;

int max(int,int);

scanf(“%d,%d”,&a,&b);

c=max(a,b);

printf(“max=%d”,c);

}

int max(int x,int y)

{

int z;

if (x>y) z=x;

else z=y;

return(z);

}

这个程序的功能是对于任意输入的两个整数,输出较大的那个数。所以程序运行之后,光标将停留在用户屏幕上,等待用户输入两个整数,比如输入“3,5”,回车,在用户屏幕上就会输出“max=5”。

【例4】输入并运行下程序,写出运行结果。

mian()

{

char c1 , c2;

c1=97;

c2=98;

printf(“%c %c”, c1, c2);

}

在此基础上

1)加一个printf语句,并运行之。

printf(“%d,%d”, c1, c2 );

2)再将第二行改为:

int c1, c2;

再使之运行。

3)再将第三行改为:

c1=300; c2=400;

再使之运行,分析其运行结果。

在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。

【例5】分析下面程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。

main()

{

char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;

printf(“a%c b%c\tc%c\tabc\n”,c1,c2,c3);

printf(“\t%c %c”,c4,c5);

}

在该程序中,主要考查对转义字符的掌握情况。

【例6】

分析下面程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。

main()

{

int i , j , m , n ;

i=8; j=10;

m=++i; n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n);

}

分别作以下改动之后,先分析再运行:

1)将第四行改为:

m=i++; n= ++j;

2)程序改为:

main()

{

int i , j ;

i=8; j=10;

printf(“%d,%d”, i++, j++);

}

3)在2)的基础上,将printf语句改为:

printf(“%d,%d”, ++ i, ++ j );

4)再将printf语句改为:

printf(“%d,%d,%d,%d”,i,j,i++,j++);

5)程序改为:

main()

{

int i , j , m=0 , n=0 ;

i=8; j=10;

m+= i ++; n -= --j;

printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);

}

此程序主要考查自加、自减运算符以及复合运算符的用法。

三、上机内容

1.用turbo c输入并运行前面6道例题中程序,记下运行结果,熟悉调试C程序的的方法与步骤。

2.参照例题,编写一个C程序,输出以下信息:

****************************

Hello,World!

****************************

四、实验结果分析

对实验结果进行检验,如结果出现错误,分析产生错误的原因并修改程序、改正错误。

实验二 顺序结构与选择结构程序设计

一、实验目的及要求

1. 理解C语言程序的顺序结构;

2. 掌握常用的C语言语句,熟练应用赋值、输入、输出语句;

3. 了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);

4. 学会正确使用逻辑运算符和逻辑表达式;

5. 熟练掌握if语句和switch语句。

二、实验内容

1、已知圆半径r=1.5,圆柱高h=3, 求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。

2、输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。

3、有3个整数a、b、c,由键盘输入,编程序按从小到大的顺序将它们排序并输出。

4、编程序计算下面的函数: x-1 0<x<1

≤x≤4

) 当x取其他值时

5、输入一个整数m,判断它能否被7、11、17整除,如果能被以上三个数之一整除,则输出它能被整除的信息,否则输出m不能被7、11、17整除的信息。

3重复)

7、电文加密的算法是:将字母A变成字母G,a变成g,B变成H,b变成h,依此类推,并且U变成A,V变成B,等等。从键盘输入一个电文字符,输出其相应的密码。

8、企业发放的奖金根据利润提成。若利润I≤10万元,奖金可提10%;若10万<I≤20万时,则低于等于10万元的部分按10%提成,高于10万元部分,可提成7.5%;若20万<I≤40万时,低于等于20万元的部分仍按上述办法提成,高于20万元部分按5%提成;按类似的办法,若40万<I≤60万元时,高于40万元部分按3%提成;若60万<I≤100万元时,高于60万元的部分按1.5%提成;若I>100万时,超过100万元部分按1%提成。从键盘输入当月利润I,求应发奖金总数。 2

三、实验结果分析

对实验结果进行检验,如结果出现错误,分析产生错误的原因并修改程序、改正错误。

实验三 循环结构程序设计

一、实验目的及要求

1while、do—while和for三种循环语句的应用。

2.掌握基本的编程算法。

二、实验内容

1、利用公式

sinx=x-x/3!+x/5!-x/7!+x/9!-„+(-1)(n-1)·x

编程计算sinx的值。设x=0.5,n=9。

2、编写程序求:

103579(2n-1) /(2n-1)!

sn!

n1

3、计算方程ax2+bx+c=0的解

4、输入20个有符号整数,统计正整数、零、负整数的个数。

5、输入m个数,求其最大数、最小数和平均值。

6、在100和1000之间,有多少个其数字之和等于9而且该数可被5整除的整数?

7、一位同学问老师和老师夫人的年龄是多少,老师说:“我年龄的平方加上我夫人的年龄恰好等于1053,而我夫人年龄的平方加上我的年龄等于873。”试计算老师和其夫人的年龄。

8、打印下列图案

*

***

*****

***

*

三、实验结果分析

对实验结果进行检验,如结果出现错误,分析产生错误的原因并修改程序、改正错误。

用指针编写程序实验心得篇八
《第四版C语言实验报告9指针(1)》

仲恺农业工程学院实验报告纸

计算机科学与工程(院)计算机科学与技术 专业 计111班 1 组 C语言程序设计 课 学号 201110214113 姓名 廖兆伟 实验日期 2012-3-29 教师评定 实验9指针(一)

1.实验目的

(1)掌握指针的间接访问的概念,会定义和使用指针变量。

(2)能正确使用数组的指针和指向数组的指针变量。

(3)能正确使用字符串的指针和指向字符串的指针变量。

2.实验内容

编程序并上机调试运行以下程序(都要求用指针处理)。

(1)输入3个整数,按由小到大的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出(本题是教材第8章习题8.1和习题8.2)。

①先编写一个程序,以处理3个整数,按由小到大的顺序输出。运行此程序,分析结果。

②把程序改为能处理输入3个字符串,按由小到大的顺序输出。运行此程序,分析结果。

③比较以上两个程序,分析处理整数与处理字符串有什么不同?例如:

怎样得到指向整数(或字符串)的指针

怎样比较两个整数(或字符串)的大小

怎样交换两个整数(或字符串)

程序设计:

#include<stdio.h>

int main()

{ void swap(int *p1,int *p2);

int n1,n2,n3;

int *p1,*p2,*p3;

printf("请输入3个数n1,n2,n3:");

scanf("%d,%d,%d",&n1,&n2,&n3);

p1=&n1;

p2=&n2;

p3=&n3;

if(n1>n2) swap(p1,p2);

if(n1>n3) swap(p1,p3);

if(n2>n3) swap(p2,p3);

printf("排序结果为:%d,%d,%d\n",n1,n2,n3);

return 0;

}

void swap(int *p1,int *p2)

{int p;

p=*p1;*p1=*p2;*p2=p;

}

(2)将一个3×3的整型二维数组转置,用一函数实现之(本题是教材第8章习题8.9)。 在主函数中用scanf函数输入以下数组元素:

1 3 5

7 9 11

13 15 19

将数组第1行第1列元素的地址作为函数实参,在执行函数的过程中实现行列互换,函数调用结束后在主函数中输出已转置的二维数组。

请思考:

① 指向二维数组的指针,指向某一行的指针、指向某一元素的指针各应该怎样表示。

②怎样表示i行j列元素及其地址。

程序设计

#include<stdio.h>

int main()

{void move(int * pointer);

int a[3][3],*p,i,j;

printf("请输入一个3×3数组:\n");

for(i=0;i<3;i++)

scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);

p=&a[0][0];

move(p);

printf("转置数组为:\n");

for(i=0;i<3;i++)

printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);

return 0;

}

void move(int * pointer)

{int i,j,t;

for(i=0;i<3;i++)

for(j=i;j<3;j++)

{t=*(pointer+3*i+j);

*(pointer+3*i+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;

}

}

(3)将n个数按输入时顺序的逆序排列,用函数实现(本题是教材第8章习题8.13)。 ①在调用函数时用数组名作为函数实参。

②函数实参改为用指向数组首元素的指针,形参不变。

③分析以上两者的异同。

(4)写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度(本题是教材第8章习题8.6)。

分别在程序中按以下两种情况处理。

①函数形参用指针变量。

②函数形参用数组名。

作分析比较,掌握其规律。

程序设计:#include<stdio.h>

int main()

{int length(char * p);

int len;

char str[20];

printf("请输入一个字符串:\n");

scanf("%s",str);

len=length(str);

printf("该字符串长度为%d.\n",len);

return 0;

}

int length(char * p)

{int n;

n=0;

while (* p!='\0')

{n++;

p++;

}

return(n);

}

3.预习内容

预习教材第10章。

用指针编写程序实验心得篇九
《C语言实验六实验报告——指针》

一、 实验项目名称

指针

二、 实验目的

1.掌握指针的基本概念和基本用法。包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;

2.掌握数组与指针的关系并能够利用指针解决数组的相关问题;

3.掌握字符串与指针的关系并能够利用指针处理字符串的问题;

4.掌握指针与函数的关系并能够利用指针处理函数问题;

5.了解指向指针的指针的概念及其使用方法;

6.能够使用指针进行程序设计。

三、 实验内容

有关指针的程序设计

1.编程实现:任意输入的10个数,求其平均值。

要求:

(1)10个数采用scanf语句读入。

(2)利用指针实现对这10个数的访问。

(3)要求平均值的精度为小数后面2位。

2.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。

要求:

(1)整数数组由初始化方式输入。任意整数由scanf函数输入;

(2)实现过程采用指针处理;

(3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。

3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。

要求:

(1)在主函数中以初始化方式输入一个字符串;

(2)调用newcopy()函数;

(3)在主函数中输出处理后的结果。

4.编程实现:输入三个整数,按由大到小的顺序输出。

要求:

(1)通过scanf函数输入三个数据并存入三个变量中;

(2)利用指针实现从大到小输出;

(3)修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出;

(4)修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出;

(5)体会指针对不同数据处理的特点。

四、 实验步骤及结果

一、

#include <stdio.h>

void main()

{

int a[10],n,sum=0;

float aver;/* 定义平均数为浮点型*/

int *p=a;/*初始化*/

printf("Please input 10 numbers:\n");

for (n=0;n<10;++n)

scanf("%d",&a[n]);/*输入十个数*/

for (n=0;n<10;++n)

sum=sum+*(p+n);/*使用指针访问数据*/

aver=(float)sum/n;

printf("Average is %.2f",aver);/*精确到小数点后两位*/

}

二、

#include <stdio.h>

void arr(int *a,int n);/*定义排序函数*/

void insert(int *a,int num);/*插入并排序函数*/

int n=10;/*定义数据个数,可修改*/

void main()

{

int *a,num,j,k,b[10];

printf("请输入个数据:\n");

for (j=0;j<n;++j)

scanf("%d",&b[j]);/*输入原始数据*/

a=&b[0];/*初始化*/

arr(a,n);/*调用排序函数*/

printf("排序好的数据为:\n");

for (j=0;j<n;++j)

printf("%d ",*(a+j));/*输出排序好的原始数据*/

printf("\n请输入要插入的数:");

scanf("%d",&num);

printf("插入%d后的数据为:\n",num);

insert(a,num);/*调用插入并排序函数*/

}

void arr(int *a,int n)/*排序函数*/

{

int k,j,h;

for (k=0;k<10;++k)

for (j=0;j<n-k-1;++j)

if (*(a+1+j)<*(a+j)){

h=*(a+1+j);

*(a+1+j)=*(a+j);

*(a+j)=h;

}

}

void insert(int *a,int num)

{

void arr(int *a,int n);

int j,k;

*(a+n)=num;/*将插入的数排在数组最后一位*/

arr(a,n+1);/*将新数组重新排序*/

for (j=0;j<(n+1);++j)

if (*(a+j)==num){

k=j;

break;}/*找到插入的数在数组中的位置*/

for (j=0;j<(n+1);++j)

printf("%d ",*(a+j));

printf("\n插入的数据排在数组的第%d位",k+1);

}

三、

#include <stdio.h>

void newcopy(char *new1,char *old);

void main()

{

char *new1,*old,a[10];/*new是不能当做变量,所以用new1*/

old=a;

new1=a;/*字符串的初始化*/

printf("请输入字符串:\n");

scanf("%s",a);

newcopy(new1,old);/*调用函数*/

printf("新的字符串为:\n");

printf("%s",new1);

}

void newcopy(char *new1,char *old)

{

int n,j=0;

for (;* old!='\0';++old)

if ((* old)>'z' || (* old)<'a'){

* (new1+j)=* old;

++j;}/*排除原字符串中的小写字母,将其他字符存入新字符串*/ *(new1+j)='\0';/*结束新字符串,否则新字符串的输出会故障*/ }

四、

#include <stdio.h>

void main()

{

void exchange(int *q1,int *q2,int*q3);

int a,b,c,*q1,*q2,*q3;

printf("请输入个数:\n");

scanf("%d,%d,%d",&a,&b,&c);

q1=&a;q2=&b;q3=&c;/*将三个数的地址存入q1q2q3中*/ exchange(q1,q2,q3);/*调用排序函数*/

printf("3个数从大到小排列为:\n%d,%d,%d",a,b,c); }

void exchange(int *q1,int *q2,int *q3)

{

void swap(int *q1,int *q2);/*调用交换函数*/

if (*q1<*q2)

swap(q1,q2);/*若*q1小于*q2,交换地址位置*/ if (*q1<*q3)

swap(q1,q3);

if (*q2<*q3)

swap(q2,q3);

}

void swap(int *q1,int *q2)/*交换函数*/

{

int n;

n=*q1;

*q1=*q2;

*q2=n;

}

用指针编写程序实验心得篇十
《c语言实验报告》

C语言程序设计实验报告

1实验目的

⑴掌握指针的概念,会定义和使用指针变量;

⑵能正确使用变量的指针和指向变量的指针变量;

⑶能正确使用数组的指针和指向数组的指针变量;

⑷能正确使用字符串的指针和指向字符串的指针变量。

2实验内容

编写函数upCopy(char *new,char *old),将old指针所指向字符串中的大写字母复制到new指针指向的字符串中,并在主函数中调用该函数。

要求:

①画出算法的流程图。

②在主函数中以直接初始化的方式输入一个字符串。

③在主函数中调用upCopy()函数,输出old指针和new指针指向的字符串。 3算法描述流程图

4源程序

#include<stdio.h>

void upCopy(char *new,char *old);

void main()

{

char a[20]=("foiwheEIfjiEfj");

char b[20];

upCopy(b,a);

printf("复制之前的字符串为:");

puts(a);

printf("复制之后的字符串为:");

puts(b);

}

void upCopy(char *new,char *old)

{

int i,j;

j=0;

for(i=0;i<20;i++)

{

if(*(old+i)>=65&&*(old+i)<=90)

{

*(new+j)=*(old+i);

j++;

}

}

*(new+j)='\0';

}

5测试数据

无测试数据。

6运行结果

7出现问题及解决方法

出现的问题是:

① 在运用scanf()函数时,由于跟printf()混淆,变量地址的位置忘记输取地

址符“&”,解决办法就是加上取地址符“&”。

② 在找到该插入的位置后,进行后面的数据向后一个数据为调换的时候,没有

注意到“++”运算和“--”运算全部都作用在q上面,都在改变存储的q的值。解决方法就是用加1的运算来代替自增运算,这样就只有自减运算在改变q的值,程序即可正常运行。

8实验心得

通过这个实验,掌握了如何定义数组的指针和指向数组的指针变量。同时在程序编写过程中学习到了如何用for循环来寻找数组中某个元素对应的下标。另外,在自己的错误中我还学到了要牢记C语言中各种函数的语法格式,这样才能避免一些不该犯的错误。同时在逻辑上要慎重的同时使用自增和自减运算符,这种逆运算会直接影响变量的存储值。

C语言程序设计实验报告

1实验目的

⑴掌握指针的概念,会定义和使用指针变量;

⑵能正确使用变量的指针和指向变量的指针变量;

⑶能正确使用数组的指针和指向数组的指针变量;

⑷能正确使用字符串的指针和指向字符串的指针变量。

2实验内容

输入三个整数,按由大到小顺序输出。

要求:

①画出算法的流程图。

②通过scanf()函数输入三个数据并存入三个变量中。

③利用指针实现从大到小的输出。

3算法描述流程图

4源程序

#include<stdio.h>

void main()

{

int *a,*b,*c;

int d,e,f,g;

a=&e;

b=&f;

c=&g;

printf("请输入三个整数:\n");

scanf("%d",a);

scanf("%d",b);

scanf("%d",c);

if(*a<*b)

{

d=*a;

*a=*b;

*b=d;

}

if(*a<*c)

{

d=*a;

*a=*b;

*b=d;

}

if(*b<*c)

{

d=*b;

*b=*c;

*c=d;

}

printf("%4d%4d%4d\n",*a,*b,*c);

}

5测试数据

测试数据为1,9,6。

6运行结果

当输入1,9,6时

7出现问题及解决方法

出现的问题有:

在定义过程中直接定义指针变量,没有定义数据变量,然后直接把输入的值给了指针变量,结果程序无法正常运行。解决办法就是定义几个整型数据变量,将指针变量指向数据变量,之后再进行输入。

8实验心得

通过这个实验,掌握了如何定义数组指针和指向数组的指针变量。通过这次实验与上次实验的对比还能过学到通过指针实现一个问题和不用指针相比在很多地

方更具有优越性。在自己的错误中学会了如何在定义指针变量并将指针变量指向数据变量,另外还更加深刻的理解了指针存储的只是地址。

本文来源:http://www.guakaob.com/shiyongwendang/162527.html