指针 实验.docx

上传人:b****5 文档编号:8047232 上传时间:2023-01-28 格式:DOCX 页数:13 大小:185.15KB
下载 相关 举报
指针 实验.docx_第1页
第1页 / 共13页
指针 实验.docx_第2页
第2页 / 共13页
指针 实验.docx_第3页
第3页 / 共13页
指针 实验.docx_第4页
第4页 / 共13页
指针 实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

指针 实验.docx

《指针 实验.docx》由会员分享,可在线阅读,更多相关《指针 实验.docx(13页珍藏版)》请在冰豆网上搜索。

指针 实验.docx

指针实验

C语言程序设计实验报告

实验名称指针实验

一、实验目的

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

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

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

4.掌握指针函数与函数指针的用法。

二、实验任务

1.源程序改错题

下面程序是否存在错误?

如果存在,原因是什么?

如果存在错误,要求在计算机上对这个例子程序进行调试修改,使之能够正确执行。

#include"stdio.h"

intmain(void)

{

float*p;

scanf("%f",p);

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

return0;

}

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

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

#include"stdio.h"

#include"string.h"

intmain(void)

{

chara[80],b[80],c[160],*result=c;

intchoice,i;

do{

printf("\t\t1copystring.\n");

printf("\t\t2connectstring.\n");

printf("\t\t3exit.\n");

printf("\t\tinputanumber(1-3)please!

\n");

scanf("%d",&choice);

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

switch(choice){

case1:

p=strcpy;

break;

case2:

p=strcat;

break;

case3:

gotodown;

}

getchar();

printf("inputthefirststringplease!

\n");

i=0;

printf("inputthesecondstringplease!

\n");

i=0;

result=(a,b);

printf("theresultis%s\n",result);

down:

;

return0;

}

(2)为了使程序不受scanf、getchar、gets等函数输入后回车符的影响,请修改第

(1)题程序,按要求输出下面结果:

((输入)表示该数据是键盘输入数据)

1copystring.

2connectstring.

3exit.

inputanumber(1-3)please!

2(输入)

inputthefirststringplease!

themoreyoulearn,(输入)

inputthesecondstringplease!

themoreyouget.(输入)

theresultisthemoreyoulearn,themoreyouget.

3.跟踪调试源程序

#include"stdio.h"

char*strcpy(char*,char*);

intmain(void)

{

chara[20],b[60]="thereisaboatonthelake.";

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

}

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

{

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

;

return(s);

}

(1)单步执行。

进入strcpy时watch窗口中s为何值?

返回main时,watch窗口中s为何值?

(2)排除错误,使程序输出结果为:

thereisaboatonthelake.

(3)选做:

由于watch窗口中只显示s所指串的值,不显示s中存储的地址值,怎样才能观察到s值的变化呢?

4.程序设计

(1)一个长整型变量占4个字节,其中每个字节又分成高4位和低4位。

试从该长整型变量的高字节开始,依次取出每个字节的高4位和低4位并以数字字符的形式进行显示。

(2)利用大小为n的指针数组指向用gets函数输入的n行,每行不超过80个字符。

编写一个函数,它将每一行中连续的多个空格字符压缩为一个空格字符。

在调用函数中输出压缩空格后的各行,空行不予输出。

(3)编写一个程序,输入n个整数,排序后输出。

排序的原则由命令行的的可选参数-d定并且有参数-d时按递减顺序排序,否则按递增顺序排序。

要求将排序算法定义成函数,利用指向函数的指针使该函数实现递增或递减排序。

(4)设某个班有N个学生,每个学生修了M门课程(用#define定义N、M)。

输入M门课程的名称,然后依次输入N个学生中每个学生所修的M门课程的成绩并且都存放到相应的数组中。

编写下列函数:

a.计算每个学生各门课程平均成绩;

b.计算全班每门课程的平均成绩;

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

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

在调用函数中输出上面各函数的计算结果。

(要求都用指针操作,不得使用下标操作。

二、实验步骤及结果

1,源程序改错

更改之后得到的程序:

#include

intmain(void)

{

float*p;

floata[10];

p=&a[0];

scanf("%f",p);

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

return0;

}

运行结果:

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

(1)完善后的代码:

#include

#include

intmain(void)

{

char*(*p)(chara[],charb[]);

chara[80],b[80],c[160],*result=c;

intchoice,i;

do{

printf("\t\t1copystring.\n");

printf("\t\t2connectstring.\n");

printf("\t\t3exit.\n");

printf("\t\tinputanumber(1-3)please!

\n");

scanf("%d",&choice);

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

switch(choice){

case1:

p=strcpy;

break;

case2:

p=strcat;

break;

case3:

gotodown;

}

getchar();

printf("inputthefirststringplease!

\n");

i=0;

gets(a);

printf("inputthesecondstringplease!

\n");

i=0;

gets(b);

result=p(a,b);

printf("theresultis:

%s\n",result);

down:

;

return0;

}

(2)运行结果:

3.跟踪调试源程序

(1)单步调试

进入strcpy窗口中:

返回main时:

(2)程序正确运行结果:

4.程序设计

(1)代码如下:

(2)代码如下:

#include

#include

#include

#defineN2

intmain()

{

char*p[N],buf[82];

inti,j,k;

for(i=0;i

{

gets(buf);

p[i]=(char*)malloc(sizeof(char)*(strlen(buf)+2));

strcpy(p[i],buf);

}

for(i=0;i

{

for(j=k=0;p[i][j];j++)

if(p[i][j]!

='')

{

p[i][k]=p[i][j];

k++;

}

elseif(p[i][j+1]=='')j++;

else

{

p[i][k]='';

k++;

}

p[i][k]='\0';

if(strlen(p[i])==0||strcmp(p[i],"")==0);

elseputs(p[i]);

}

return0;

}

运行结果:

(3)代码如下:

#include

#include

#include

intmain(intargc,char*argv[])

{

voiddown_sort(char**p,intm);

voidup_sort(char**q,intk);

intn=0;

while(n

{

printf("%s",argv[n]);

n++;

}

printf("\n");

if(!

strcmp(argv[1],"-d"))

down_sort(&argv[2],n-2);

elseup_sort(&argv[1],n-1);

return0;

}

voiddown_sort(char**p,intm)

{

inti,j;

chart;

for(i=0;i

for(j=0;j

if(*p[j]<*p[j+1])

t=*p[j],*p[j]=*p[j+1],*p[j+1]=t;

for(i=0;i

{

*p[i]=*p[i]-'0';

printf("%d",*p[i]);

}

}

voidup_sort(char**q,intk)

{chart;

inti,j;

for(i=0;i

for(j=0;j

if(*q[j]>*q[j+1])

t=*q[j],*q[j]=*q[j+1],*q[j+1]=t;

for(i=0;i

{

*q[i]=*q[i]-'0';

printf("%d",*q[i]);

}

}

运行结果:

(4)代码如下:

#include

#include

#include

#defineN2

#defineM3

charsname[M][50];

floata[N+1][M+1];

voidf1()

{

inti;

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

printf("%g\n",a[i][0]);

}

voidf2()

{

inti;

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

printf("%s%g\n",sname[i-1],a[0][i]);

}

voidf3()

{

inti,j,k;

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

{

k=0;

for(j=1;j<=N;j++)

if(a[j][i]

printf("%s%d\n",sname[i-1],k);

}

}

voidf4()

{

inti,j,k,h;

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

{

k=h=0;

for(j=1;j<=N;j++)

{

if(a[j][i]<60)k++;

if(a[j][i]>=90)h++;

}

printf("%s%d%d\n",sname[i-1],k,h);

}

}

intmain()

{

inti,j;

for(i=0;i

scanf("%s",sname[i]);

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

for(j=1;j<=M;j++)

{

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

a[i][0]+=a[i][j];

a[0][j]+=a[i][j];

}

for(i=1;i<=N;i++)a[i][0]/=N;

for(j=1;j<=M;j++)a[0][j]/=M;

f1();

f2();

f3();

f4();

return0;

}

运行结果:

四、实验体会

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1