C语言程序设计实验报告专业:班级:日期:成绩:实验组别:第次实验:指导教师:学生姓名:学号:同组人姓名:实验名称:指针实验一、实验目的(1)熟练掌握指针的说明、赋值、使用。(2)掌握用指针引用数组的元素,熟悉指向数组的指针的使用。(3)熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。(4)掌握带有参数的main函数的用法。二、实验内容及要求1.源程序改错下面的源程序中是否存在错误?如果存在,原因是什么?如果存在错误要求在计算机上对这个源程序进行调试修改,是之能够正确执行。源程序:#includestdio.hintmain(void){float*p;scanf(%f,p);printf(%f\n,*p);return0;}2.源程序修改替换(1)下面源程序的功能是,通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数。请在程序中的下划线处填写合适的表达式、语句或代码片段来完善该程序。源程序:#includestdio.h#includestring.hintmain(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(choice1||choice5);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.源程序:#includestdio.hchar*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门课程的成绩,并且都存放到相应的数组中,试编写以下函数:①计算每个学生各门课程平均成绩②计算全班每门课程的平均成绩③分别统计低于全班各门课程平均成绩的人数④分别统计全班各门课程不及格的人数和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等函数名。三、实验步骤及结果1.源程序改错错误:悬挂指针,指针未初始化改后程序:#includestdio.hintmain(void){float*p,a;p=&a;scanf(%f,p);printf(%f\n,*p);return0;}2.源程序完善、修改、替换#includestdio.h#includestring.hintmain(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(choice1||choice5);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.跟踪调试程序#includestdio.hchar*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)#includestdio.h#includemath.h#defineMAX32intmain(){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;iMAX-1;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)#includestdio.h#includestdlib.h#includectype.h#defineN3voidoutput(char*s);intmain(void){inti;char*s[N];printf(pleaseinputyourmassage:\n);for(i=0;iN;i++){s[i]=malloc(80);gets(s[i]);}printf(yourmassagehasbeenchangedinto;\n);for(i=0;iN;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];}elses[j]=s[i];}s[j]=s[i];}(3)#includestdio.h#defineMAX5voidswap(intv[],inti,intj);voidqsort(intv[],intleft,intright);intmain(intargc,char*argv[]){inti=0,s[MAX];if(--argc0&&(*++argv)[0]=='-'){if((*argv)[1]=='d'){while(iMAX)scanf(%d,&s[i++]);qsort(s,0,MAX-1);for(i=MAX-1;i=0;i--)printf(%d\t,s[i]);}elseprintf(wrong:\n);}else{while(iMAX)scanf(%d,&s[i++]);qsort(s,0,MAX-1);for(i=0;iMAX;i++)printf(%d\t,s[i]);}return0;}voidqsort(intv[],intleft,intright){inti,last;voidswap(intv[],inti,intj);if(leftright)return;swap(v,left,(left+right)/2);last=left;for(i=left+1;i=right;i++)if(v[i]v[le