C语言程序设计实验报告.docx

上传人:b****3 文档编号:4737107 上传时间:2023-05-07 格式:DOCX 页数:27 大小:153.97KB
下载 相关 举报
C语言程序设计实验报告.docx_第1页
第1页 / 共27页
C语言程序设计实验报告.docx_第2页
第2页 / 共27页
C语言程序设计实验报告.docx_第3页
第3页 / 共27页
C语言程序设计实验报告.docx_第4页
第4页 / 共27页
C语言程序设计实验报告.docx_第5页
第5页 / 共27页
C语言程序设计实验报告.docx_第6页
第6页 / 共27页
C语言程序设计实验报告.docx_第7页
第7页 / 共27页
C语言程序设计实验报告.docx_第8页
第8页 / 共27页
C语言程序设计实验报告.docx_第9页
第9页 / 共27页
C语言程序设计实验报告.docx_第10页
第10页 / 共27页
C语言程序设计实验报告.docx_第11页
第11页 / 共27页
C语言程序设计实验报告.docx_第12页
第12页 / 共27页
C语言程序设计实验报告.docx_第13页
第13页 / 共27页
C语言程序设计实验报告.docx_第14页
第14页 / 共27页
C语言程序设计实验报告.docx_第15页
第15页 / 共27页
C语言程序设计实验报告.docx_第16页
第16页 / 共27页
C语言程序设计实验报告.docx_第17页
第17页 / 共27页
C语言程序设计实验报告.docx_第18页
第18页 / 共27页
C语言程序设计实验报告.docx_第19页
第19页 / 共27页
C语言程序设计实验报告.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计实验报告.docx

《C语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告.docx(27页珍藏版)》请在冰点文库上搜索。

C语言程序设计实验报告.docx

C语言程序设计实验报告

C语言程序设计实验报告

专业:

班级:

日期:

成绩:

实验组别:

第次实验:

指导教师:

学生姓名:

学号:

同组人姓名:

实验名称:

指针实验

一、实验目的

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

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

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

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

二、实验内容及要求

1.源程序改错

下面的源程序中是否存在错误?

如果存在,原因是什么?

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

源程序:

#include

intmain(void)

{

float*p;

scanf("%f",p);

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

return0;

}

2.源程序修改替换

(1)下面源程序的功能是,通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数。

请在程序中的下划线处填写合适的表达式、语句或代码片段来完善该程序。

源程序:

#include

#include

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)请上机运行第

(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.

源程序:

#include

char*strcpy(char*,char*);

intmain(void)

{

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

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

return0;

}

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门课程的成绩,并且都存放到相应的数组中,试编写以下函数:

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

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

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

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

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

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等函数名。

三、实验步骤及结果

1.源程序改错

错误:

悬挂指针,指针未初始化

改后程序:

#include

intmain(void)

{

float*p,a;

p=&a;

scanf("%f",p);

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

return0;

}

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

#include

#include

intmain(void)

{

char*(*p)(char*a,char*b);

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;

while((a[i]=getchar())!

='\n')

i++;

a[i]='\0';

printf("inputthesecondstringplease!

\n");

i=0;

while((b[i]=getchar())!

='\n')

i++;

b[i]='\0';

result=(*p)(a,b);

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

down:

;

return0;

}

3.跟踪调试程序

#include

char*strcpy(char*,char*);

intmain(void)

{

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

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

return0;

}

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

{

char*m;

m=s;

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

;

return(m);

}

4.程序设计

(1)

#include

#include

#defineMAX32

intmain()

{

longintn;

inti;

chars[MAX];

printf("pleaseinputanumber:

\n");

scanf("%ld",&n);

if(n>=-2147483647&&n<=2147483647)

;

else

{

printf("wrong:

thenumberistoolarge");

return-1;

}

if(n>=0)

{

for(i=0;n!

=0;i++)

{

s[i]=n%2+'0';

n/=2;

}

for(;i<=MAX-1;i++)

s[i]='0';

}

else

{

n=-(n+1);

for(i=0;n!

=0;i++)

{

s[i]=n%2+'0';

n/=2;

}

for(;i<=MAX-2;i++)

s[i]='0';

for(i=0;i

if(s[i]=='1')

s[i]='0';

elseif(s[i]=='0')

s[i]='1';

s[i]='1';

}

for(i=31;i>=28;i--)

putchar(s[i]);

putchar('\t');

for(i=27;i>=24;i--)

putchar(s[i]);

putchar('\t');

for(i=23;i>=20;i--)

putchar(s[i]);

putchar('\t');

for(i=19;i>=16;i--)

putchar(s[i]);

putchar('\t');

for(i=15;i>=12;i--)

putchar(s[i]);

putchar('\t');

for(i=11;i>=8;i--)

putchar(s[i]);

putchar('\t');

for(i=7;i>=4;i--)

putchar(s[i]);

putchar('\t');

for(i=3;i>=0;i--)

putchar(s[i]);

putchar('\t');

return0;

}

(2)

#include

#include

#include

#defineN3

voidoutput(char*s);

intmain(void)

{

inti;

char*s[N];

printf("pleaseinputyourmassage:

\n");

for(i=0;i

{

s[i]=malloc(80);

gets(s[i]);

}

printf("yourmassagehasbeenchangedinto;\n");

for(i=0;i

{

output(s[i]);

printf("%s\n",s[i]);

}

return0;

}

voidoutput(char*s)

{

inti,j;

for(i=0,j=0;s[i]!

='\0';i++,j++)

{

if(isspace(s[i]))

{

for(;isspace(s[i]);i++)

;

s[j++]='';

s[j]=s[i];

}

else

s[j]=s[i];

}

s[j]=s[i];

}

(3)

#include

#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

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

qsort(s,0,MAX-1);

for(i=MAX-1;i>=0;i--)

printf("%d\t",s[i]);

}

else

printf("wrong:

\n");

}

else

{

while(i

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

qsort(s,0,MAX-1);

for(i=0;i

printf("%d\t",s[i]);

}

return0;

}

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;i<=right;i++)

if(v[i]

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)

#include

#defineN5

#defineM3

structcourse

{

char*s;

intd[N];

}sm[M];

voidsaverage(structcourse*sm);

voidcaverage(structcourse*sm);

voidsummary_below(structcourse*sm);

voidsummary_both(structcourse*sm);

intmain(void)

{

inti;

printf("Pleaseinputthenamesofthe%dcourses.\n",M);

for(i=0;i

if(gets((sm+i)->s=malloc(10))==NULL)

printf("ERROR");

for(i=0;i

{

intk;

printf("Pleaseinputthegradesof%dstudentsofthe%ssubject\n",N,(sm+i)->s);

for(k=0;k

scanf("%d",(sm+i)->d+k);

}

saverage(sm);

caverage(sm);

summary_below(sm);

summary_both(sm);

return0;

}

voidsaverage(structcourse*sm)

{

doublesum=0,av;

inti,k;

for(i=0;i

{

printf("Thisisthe%dstudent'saveragegrade\t",i+1);

for(k=0;k

{

sum+=*((sm+k)->d+i);

}

av=sum/M;

printf("%lf\n",av);

sum=0;

}

}

voidcaverage(structcourse*sm)

{

doublesum=0,av;

inti,k;

for(i=0;i

{

printf("Thisistheaveragegradeof%s\t",(sm+i)->s);

for(k=0;k

{

sum+=*((sm+i)->d+k);

}

av=sum/N;

printf("%lf\n",av);

sum=0;

}

}

voidsummary_below(structcourse*sm)

{

doublesum=0,av;

inti,k;

for(i=0;i

{

for(k=0;k

{

sum+=*((sm+i)->d+k);

}

av=sum/N;

printf("In%sthenumberofbelow-averagestudentis\t",(sm+i)->s);

for(sum=0,k=0;k

if(*((sm+i)->d+k)

sum++;

printf("%d\n",(int)sum);

sum=0;

}

}

voidsummary_both(structcourse*sm)

{

inti,k;

intfsum=0,esum=0;

for(i=0;i

{

printf("Thecourseis%s\t",(*(sm+i)).s);

for(k=0;k

{

if(*((sm+i)->d+k)<60)

fsum++;

if(*((sm+i)->d+k)>90)

esum++;

}

printf("thefailedis%d,whiletheabove90is%d\n",fsum,esum);

fsum=0,esum=0;

}

}

5.选做题

(1)

#include

intmain(void)

{

inti,t=0;

chara[]="12345678912345678912.1234567891";

charb[]="98765432109876543210.0123456789";

ints[32];

s[0]=0;

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

s[i]=0;

for(i=30;i>=0;i--)

{

if(a[i]=='.')

i--;

intm,n,k;

m=a[i]-'0'+t;

n=b[i]-'0';

k=m+n;

if(k>=10)

{

t=k/10;

s[i+1]=k%10;

}

else

{

s[i+1]=k%10;

t=0;

}

k=0;

}

s[0]=t;

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

{

if(i==21)

printf(".");

else

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

}

return0;

}

(2)

#include

#include

#include

intmain(void)

{

intn;

char*(*p[2])(constchar*,constchar*);

char*a;char*b;char*c;

printf("pleaseinputstringone:

\n");

a=malloc(20);

gets(a);

printf("pleaseinputstringtwo:

\n");

b=malloc(20);

gets(b);

printf("pleaseinputanumber:

\n0tochoosethestrcpy\n1tochoosethestrcat\n");

scanf("%d",&n);

p[0]=strcpy;

p[1]=strcat;

if(n>2||n<0)

{

printf("wrong");

return-1;

}

else

c=(*p[n])(a,b);

printf("nowthestringis:

\n%s\n",c);

return0;

}

四、实验体会

知道了指向数组的指针的用法,明白了指向函数的指针的用途

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2