实验六 指针实验Word文档格式.docx
《实验六 指针实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验六 指针实验Word文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
,p;
printf("
%f\n"
*p;
return0;
}
2.源程序完善、修改、替换题
(1)下面的程序通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数,请在下划线处填写合适的表达式、语句、或代码片段来完善该程序。
string.h"
chara[80],b[80],c[160],*result=c;
intchoice,i;
do{
\t\t1copystring.\n"
;
\t\t2connectstring.\n"
\t\t3exit.\n"
\t\tinputanumber(1-3please!
\n"
%d"
&
choice;
}while(choice<
1||choice>
5;
switch(choice{
case1:
p=strcpy;
break;
case2:
p=strcat;
case3:
gotodown;
getchar(;
inputthefirststringplease!
i=0;
inputthesecondstringplease!
result=(a,b;
theresultis%s\n"
result;
down:
(2)为了使程序不受scanf、getchar、gets等函数输入后回车符的影响,请修改第
(1)题程序,按要求输出下面结果:
((输入)表示该数据是键盘输入数据)
1copystring.
2connectstring.
3exit.
inputanumber(1-3please!
2(输入)
themoreyoulearn,(输入)
themoreyouget.(输入)
theresultisthemoreyoulearn,themoreyouget.
3.跟踪调试源程序
char*strcpy(char*,char*;
chara[20],b[60]="
thereisaboatonthelake."
%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
floata[10];
p=&
a[0];
return0;
运行结果:
2源程序完善、修改、替换
(1)完善后的代码:
char*(*p(chara[],charb[];
gets(a;
gets(b;
result=p(a,b;
theresultis:
(2)运行结果:
(1)单步调试
进入strcpy窗口中:
返回main时:
(2)程序正确运行结果:
(1)代码如下:
(2)代码如下:
#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(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]='
\0'
if(strlen(p[i]==0||strcmp(p[i],"
"
==0;
elseputs(p[i];
(3)代码如下:
intmain(intargc,char*argv[]
voiddown_sort(char**p,intm;
voidup_sort(char**q,intk;
intn=0;
while(n
%s"
argv[n];
n++;
if(!
strcmp(argv[1],"
-d"
down_sort(&
argv[2],n-2;
elseup_sort(&
argv[1],n-1;
voiddown_sort(char**p,intm
inti,j;
chart;
i
for(j=0;
j
if(*p[j]<
*p[j+1]
t=*p[j],*p[j]=*p[j+1],*p[j+1]=t;
*p[i]=*p[i]-'
0'
%d"
*p[i];
voidup_sort(char**q,intk
{chart;
if(*q[j]>
*q[j+1]
t=*q[j],*q[j]=*q[j+1],*q[j+1]=t;
*q[i]=*q[i]-'
*q[i];
(4)代码如下:
#defineM3
charsname[M][50];
floata[N+1][M+1];
voidf1(
inti;
for(i=1;
i<
=N;
i++
%g\n"
a[i][0];
voidf2(
=M;
%s%g\n"
sname[i-1],a[0][i];
voidf3(
k=0;
for(j=1;
j<
if(a[j][i]
%s%d\n"
sname[i-1],k;
voidf4(
inti,j,k,h;
k=h=0;
if(a[j][i]<
60k++;
if(a[j][i]>
=90h++;
%s%d%d\n"
sname[i-1],k,h;
%s"
sname[i];
a[i][j];
a[i][0]+=a[i][j];
a[0][j]+=a[i][j];
i++a[i][0]/=N;
j++a[0][j]/=M;
f1(;
f2(;
f3(;
f4(;
三、实验体会
指针的使用给编程效率带来了很大的提高,在本次实验中我体会到了很多指针带给程序设计不一样的体验,总的来说指针的运用比较灵活,对我而言有点难以掌握,但我相信经过一段时间的练习之后,一定会获得很大的收获。