C语言程序设计实验报告一Word格式文档下载.docx
- 文档编号:6391098
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:27
- 大小:153.96KB
C语言程序设计实验报告一Word格式文档下载.docx
《C语言程序设计实验报告一Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告一Word格式文档下载.docx(27页珍藏版)》请在冰点文库上搜索。
(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-3)please!
\n"
%d"
&
choice);
}
while(choice<
1||choice>
5);
switch(choice)
case1:
p=strcpy;
break;
case2:
p=strcat;
case3:
gotodown;
getchar();
inputthefirststringplease!
i=0;
_______________________
inputthesecondstringplease!
\n"
result=____(a,b);
theresultis%s\n"
result);
down:
;
(2)请上机运行第
(1)题程序使之能按下面要求输出结果(注:
(输入)表示该行数据是键盘数据):
1.copystring。
2.Connectstring。
3.Exit。
Inputanumber(1-3)please!
2(输入)
Inputthefirststringplease!
Themoreyoulearn,(输入)
Inputthesecondstringplease!
Themoreyouget.(输入)
Theresultisthemoreyoulearn,themoreyouget.
3.跟踪调试程序
请按下面的要求对所给源程序进行操作,并回答问题和排除错误。
(1)单步执行源程序。
进入strcpy时,watches窗口中s为何值?
返回main时,watches窗口中s为何值?
(2)排除源程序中的错误,使程序输出结果为:
thereisaboatonthelake.
char*strcpy(char*,char*);
chara[20],b[60]="
thereisaboatonthelack."
;
%s\n"
strcpy(a,b));
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])(constchar*,constchar*);
”的程序。
提示:
p中元素可为strcmp,strstr等函数名。
三、实验步骤及结果
错误:
悬挂指针,指针未初始化
改后程序:
#include<
float*p,a;
p=&
a;
2.源程序完善、修改、替换
char*(*p)(char*a,char*b);
switch(choice)
while((a[i]=getchar())!
='
\n'
)
i++;
a[i]='
\0'
printf("
while((b[i]=getchar())!
b[i]='
result=(*p)(a,b);
3.跟踪调试程序
char*m;
m=s;
return(m);
(1)
math.h>
#defineMAX32
intmain()
longintn;
inti;
chars[MAX];
pleaseinputanumber:
%ld"
n);
if(n>
=-2147483647&
&
n<
=2147483647)
else
wrong:
thenumberistoolarge"
return-1;
=0)
for(i=0;
n!
=0;
i++)
s[i]=n%2+'
0'
n/=2;
for(;
i<
=MAX-1;
s[i]='
n=-(n+1);
=MAX-2;
MAX-1;
if(s[i]=='
1'
elseif(s[i]=='
for(i=31;
i>
=28;
i--)
putchar(s[i]);
putchar('
\t'
for(i=27;
=24;
for(i=23;
=20;
for(i=19;
=16;
for(i=15;
=12;
for(i=11;
=8;
for(i=7;
=4;
for(i=3;
(2)
stdlib.h>
ctype.h>
#defineN3
voidoutput(char*s);
char*s[N];
pleaseinputyourmassage:
N;
s[i]=malloc(80);
gets(s[i]);
yourmassagehasbeenchangedinto;
output(s[i]);
s[i]);
voidoutput(char*s)
inti,j;
for(i=0,j=0;
s[i]!
i++,j++)
if(isspace(s[i]))
isspace(s[i]);
s[j++]='
'
s[j]=s[i];
(3)
#defineMAX5
voidswap(intv[],inti,intj);
voidqsort(intv[],intleft,intright);
intmain(intargc,char*argv[])
inti=0,s[MAX];
if(--argc>
0&
(*++argv)[0]=='
-'
if((*argv)[1]=='
d'
while(i<
MAX)
s[i++]);
qsort(s,0,MAX-1);
for(i=MAX-1;
%d\t"
MAX;
voidqsort(intv[],intleft,intright)
inti,last;
voidswap(intv[],inti,intj);
if(left>
right)
return;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;
=right;
if(v[i]<
v[left])
swap(v,++last,i);
swap(v,left,last);
qsort(v,left,last-1);
qsort(v,last+1,right);
voidswap(intv[],inti,intj)
inttemp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
(4)
#defineN5
#defineM3
structcourse
char*s;
intd[N];
}sm[M];
voidsaverage(structcourse*sm);
voidcaverage(structcourse*sm);
voidsummary_below(structcourse*sm);
voidsummary_both(structcourse*sm);
Pleaseinputthenamesofthe%dcourses.\n"
M);
M;
if(gets((sm+i)->
s=malloc(10))==NULL)
ERROR"
intk;
Pleaseinputthegradesof%dstudentsofthe%ssubject\n"
N,(sm+i)->
s);
for(k=0;
k<
k++)
(sm+i)->
d+k);
saverage(sm);
caverage(sm);
summary_below(sm);
summary_both(sm);
voidsaverage(structcourse*sm)
doublesum=0,av;
inti,k;
Thisisthe%dstudent'
saveragegrade\t"
i+1);
sum+=*((sm+k)->
d+i);
av=sum/M;
%lf\n"
av);
sum=0;
voidcaverage(structcourse*sm)
Thisistheaveragegradeof%s\t"
sum+=*((sm+i)->
av=sum/N;
voidsummary_below(structcourse*sm)
In%sthenumberofbelow-averagestudentis\t"
for(sum=0,k=0;
if(*((sm+i)->
d+k)<
av)
sum++;
%d\n"
(int)sum);
voidsummary_both(structcourse*sm)
intfsum=0,esum=0;
Thecourseis%s\t"
(*(sm+i)).s);
60)
fsum++;
d+k)>
90)
esum++;
thefailedis%d,whiletheabove90is%d\n"
fsum,esum);
fsum=0,esum=0;
inti,t=0;
chara[]="
12345678912345678912.1234567891"
charb[]="
98765432109876543210.0123456789"
ints[32];
s[0]=0;
32;
s[i]=0;
for(i=30;
if(a[i]=='
.'
i--;
intm,n,k;
m=a[i]-'
+t;
n=b[i]-'
k=m+n;
if(k>
=10)
t=k/10;
s[i+1]=k%10;
t=0;
k=0;
s[0]=t;
if(i==21)
."
intn;
char*(*p[2])(constchar*,constchar*);
char*a;
char*b;
char*c;
pleaseinputstringone:
a=malloc(20);
gets(a);
pleaseinputstringtwo:
b=malloc(20);
gets(b);
\n0tochoosethestrcpy\n1tochoosethestrcat\n"
p[0]=strcpy;
p[1]=strcat;
2||n<
0)
wrong"
c=(*p[n])(a,b);
nowthestringis:
\n%s\n"
c);
四、实验体会
知道了指向数组的指针的用法,明白了指向函数的指针的用途
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)