您好,欢迎访问三七文档
C语言程序设计实验报告班级日期2012/5/19学生姓名学号第4次上机实验1数组编程实验程序设计编写并上机调试运行能实现以下功能的程序。(1)编写一个程序,其功能要求是:输入一个整数,将它在内存中二进制表示的每一位转换成为对应的数字字符,存放到一个字符数组中,然后输出该整数的二进制表示。(2)编写一个程序,其功能要求是:输入n个学生的姓名和C语言课程的成绩,将成绩按从高到低的次序排序,姓名同时作相应调整,输出排序后学生的姓名和C语言课程的成绩。然后,输入一个C语言课程成绩值,用二分查找进行搜索。如果查找到有该成绩,输出该成绩同学的姓名和C语言课程的成绩;否则输出提示“notfound!”。(3)编写函数strnins(s,t,n),其功能是:可将字符数组t中的字符串插入到字符数组s中字符串的第n个字符的后面。(1)#includestdio.hvoidmain(void){charcArr[33]={'\0'},ch;inttemp,des=0,k=32;while((ch=getchar())!='\n')if(ch='0'&&ch='9')des=des*10+ch-48;temp=des;while(k0){cArr[--k]=temp%2+48;temp/=2;}printf(%dentered,corresponding2baseNumberis%s\n,des,cArr);return;}(2)#includestdio.h#defineNUM100voidscoreSort(intsm[],charsn[][NUM],intn);intfind(intsm[],intn,intscore);intmain(intargc,char*argv[]){intifind,score,i,n,sm[NUM];//存分数的数组charsn[NUM][NUM];//存名字的数组printf(inputthenumberofstudents:\n);scanf(%d,&n);printf(intputthenameandscore\n);for(i=0;in;i++){scanf(%s,sn[i]);//输入名字scanf(%d,&sm[i]);//输入分数}scoreSort(sm,sn,n);i=0;while(in){printf(name:%sscore:%d\n,sn[i],sm[i]);i++;}printf(inputthesocreyouwanttofind\n);scanf(%d,&score);ifind=find(sm,n,score);if(ifind=0)printf(name:%sscore:%d\n,sn[ifind],sm[ifind]);elseprintf(NotFind);return0;}voidscoreSort(intsm[],charsn[][NUM],intn)//n为学生数,此为排序函数,把分数最高的放前面{inta,i,j,k;charb;For(i=o;in;i++){for(j=i;jn;j++){if(sm[i]sm[j]){a=sm[i];sm[i]=sm[j];sm[j]=a;k=0;while(kNUM){b=sn[i][k];sn[i][k]=sn[j][k];sn[j][k]=b;k++;}}}}intfind(intsm[],intn,intscore)//二分法查找函数{inti=0,j=n-1,mid;while(i=j){mid=(i+j)/2;if(scoresm[mid]){i=mid+1;}elseif(scoresm[mid]){j=mid-1;}elsereturnmid;}return-1;}(3)char*strnins(chars[],chart[],intn){inti=0,j=0,p,q,r,u;while(s[i]!='\0')i++;while(t[j]!='\0')j++;if(in)printf(nistoobig!!!);else{for(p=i+j-1,q=i-1;pn+j-1;p--,q--)s[p]=s[q];for(r=n,u=0;rn+j;r++)s[r]=t[u++];s[i+j]='\0';}returns;}实验2指针实验(一)实验目的(1)熟练掌握指针的说明、赋值、使用。(2)掌握用指针引用数组的元素,熟悉指向数组的指针的使用。(3)熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。(4)掌握指针函数与函数指针的用法。(5)掌握带有参数的main函数的用法。(二)实验内容及要求1.源程序改错下面的源程序中是否存在错误?如果存在,原因是什么?如果存在错误,要求在计算机上对这个源程序进行调试修改,使之能够正确执行。源程序:#includestdio.hvoidmain(void){float*p;scanf(%f,p);printf(%f\n,*p);}错误,没有对指针进行初始化#includestdio.hvoidmain(void){floata,*p=&a;scanf(%f,p);printf(%f\n,*p);}2.源程序完善、修改、替换(1)下面源程序的功能是,通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数。请在程序中的下划线处填写合适的表达式、语句或代码片段来完善该程序。源程序:#includestdio.h#includestring.hvoidmain(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;gets(a);printf(inputthesecondstringplease!\n);i=0;gets(b);result=p(a,b);printf(theresultis%s\n,result);down:;}(2)请上机运行第(1)题程序,使之能按要求输出下面结果(注:(输入)表示该数据是键盘输入数据):1copystring.2connectstring.3exit.inputanumber(1-3)please!2(输入)inputthefirststringplease!themoreyoulearn,(输入)inputthesecondstringplease!themoreyouget.(输入)theresultisthemoreyoulearn,themoreyouget.3.跟踪调试源程序请按下面的要求对所给源程序进行操作,并回答问题和排除错误。(1)单步执行源程序。进入strcpy时,watch窗口中s为何值?返回main时,watch窗口中s为何值?(2)排除源程序中的错误,使程序输出结果为:thereisaboatonthelake.源程序:#includestdio.hchar*strcpy(char*,char*);voidmain(void){chara[20],b[60]=thereisaboatonthelake.;printf(%s\n,strcpy(a,b));}char*strcpy(char*s,char*t){while(*s++=*t++);return(s);}(1)0x0012ff6c0x0012ff89(2)#includestdio.hchar*mystrcpy(char*,char*);voidmain(void){chara[90],b[60]=thereisaboatonthelake.;printf(%s\n,mystrcpy(a,b));}char*mystrcpy(char*s,char*t){char*p;p=s;while(*s!='\0')*s++=*t++;returnp;}4.程序设计编写并上机调试运行能实现以下功能的程序或函数:(1)已知一个长整型变量占4个字节,其中每个字节又分成高4位和低4位。试编写一个程序,从该长整型变量的高字节开始,依次取出每个字节的高4位和低4位并以数字字符的形式进行显示。(2)利用大小为n的指针数组指向用gets函数输入的n行,每行不超过80个字符。试编写一个函数,它将每一行中连续的多个空格字符压缩为一个空格字符。在调用函数中输出压缩空格后的各行,空行不予输出。(1)#includestdio.hvoidhalf(intx);voidmain(){intx;printf(pleaseinputaninterer:\n);scanf(%d,&x);half(x);}voidhalf(intx){intk;char*p;charup_half,low_half;p=(char*)&x;p=p+1;for(k=1;k=0;k--){low_half=(*p)&0x0f;if(low_half10)low_half|='0';elselow_half=(low_half-10)+'A';up_half=(*p4)&0x0f;if(up_half10)up_half|='0';elseup_half=(up_half-10)+'A';p--;printf(%c%c\n,up_half,low_half);}}(2)#includestdio.h#defineN100charcompress(chara[]);voidmain(){inti,n;chara[N][80],*p[N];printf(nis);scanf(%d\n,&n);for(i=0;in;i++){gets(a[i]);p[i]=a[i];}for(i=0;in;++i)compress(p[i]);}charcompress(chara[]){intk=0,i=0;charb[80];while(a[k]!='\0'){if(k==0)b[i++]=a[k];elseif(k=1){if(a[k-1]==''&&a[k]=='')b[i-1]='';elseb[i++]=a[k];}++k;}b[i]='\0';if(i==0)return0;else{printf(%s\n,b);return0;}}实验心得与体会通过编译,调试,从错误中学习各种细节,补充自己平时没注意的知识。并了解到一个好的设计思路不仅能处理一些实用的问题,还能节约设计程序所用的时间和运行程序所花的时间。并且掌握了指针的声明,使用;明确了指针数组与数组指针的区别,指针函数与函数指针的区别,以及指针作参数的用法。选做题对输入的n个数作全排列,计算1-3,4-6,7-9位置上形成的三个数abc,def和ghi,然后你计算比值abc:def:ghi,如果满足abc:def:ghi=1:2:3就输出这三个数。输入样例:3123456789输出样例:192384576219438657273546819327654981#includestdio.hintn=0;voidswap(int*a,int*b){intm;m=*a;*a=*b;*b=m;}voidperm(intlist[],intk,intm){inti;if(km){intabc=list[0]*1
本文标题:c语言4次上机
链接地址:https://www.777doc.com/doc-5086746 .html