C语言程序的设计第四次(2.8)实验报告_第1页
C语言程序的设计第四次(2.8)实验报告_第2页
C语言程序的设计第四次(2.8)实验报告_第3页
C语言程序的设计第四次(2.8)实验报告_第4页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.C 语言程序设计实验报告专业班级日期11月26日成绩实验组别第3(2.7)次实验指导教师李开学生姓名学号同组人姓名实验名称实验 8 指针实验一、实验目的( 1)熟练掌握指针的说明 、赋值、使用 。( 2)掌握用指针引用数组的元素 ,熟悉指向数组的指针的使用 。( 3)熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。( 4)掌握指针函数与函数指针的用法。( 5)掌握带有参数的 main 函数的用法 。二、实验任务8.2实验内容及要求1 源程序改错2 源程序完善 、修改 、替换3 跟踪调试4 程序设计5选做题8.3 指定 main 函数的 参数三、实验步骤及结果(要求给出源程序

2、和程序运行结果。另外,根据实验内容,记录编辑 、编译 、链接 、调试程序的操作过程和实验现象).下载可编辑 .8.2实验内容及要求1 源程序改错下面程序是否存在错误 ?如果存在 ,原因是什么 ?如果存在错误 ,要求在计算机上对这个例子程序进行调试修改 ,使之能够正确执行 。#includevoid main(void)float *p;scanf(%f,p);printf(%fn,*p);存在 ,错误为指针一开始没有初始化,而 sacnf 传入的是float型指针指向的地址,我们并不知道系统能给我们分配什么地址,所以说我们输入的地址很有可能使程序崩溃。修改后代码 :#includeint ma

3、in(void)float *p;float a10;/这里可以换成其他数字p=&a0;scanf(%f,p);printf(%fn,*p);return 0;.下载可编辑 .2 源程序完善 、修改 、替换(1 )下面的程序通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数,请在下划线处填写合适的表达式、语句 、或代码片段来完善该程序。#include#include void main(void)char*(*p)(char a,char b);char a80,b80,c160,*result=c;int choice,i;doprintf(tt1 copy string.n);p

4、rintf(tt2 connect string.n);printf(tt3 exit.n);printf(ttinput a number (1-3) please!n);scanf(%d,&choice);while(choice5);switch(choice)case 1:.下载可编辑 .p=strcpy;break;case 2:p=strcat;break;case 3:goto down;getchar();printf(input the first string please!n);i=0;gets(a);printf(input the second string plea

5、se!n);i=0;gets(b);result= p(a,b);printf(the result is %sn,result);down:;( 2)请上机运行第 ( 1 )题程序 ,使之能按要求输出下面结果 :( 输入 )表示该数据是键盘输入数据 )1 copy string.2 connect string.3 exit.input a number (1-3) please!2 (输入)input the first string please!the more you learn,(输入 )input the second string please!the more you get

6、.(输入 )the result is the more you learn,the more you get.下载可编辑 .3 跟踪调试#includechar *strcpy(char *,char *);void main(void)char a20,b60=there is a boat on the lake.;printf(%sn,strcpy(a,b);char *strcpy(char *s,char *t)while(*s+=*t+);return (s);.下载可编辑 .(1 )单步执行 。 进入 strcpy 时 watch 窗口中 s 为何值 ?返回 main 时 ,

7、watch 窗口中 s 为何值?进入 strcpy 时:返 回main时:(2)排 除错误,使程序输出结果为: there is a boat on the lake.#includevoid *strcpy(char *,char *);int main(void)char a30,b60=there is a boat on the lake.;strcpy(a,b);printf(%sn,a);return 0;void *strcpy(char *s,char *t)while(*t!=0)*s+=*t+;*s=0;/将函数类型设置为void 型,然后不再返回直接打印a 字符串即可4

8、程序设计(1 )一个长整型变量占 4 个字节 ,其中每个字节又分成高 4 位和低 4 位 。 试从该长整型变量的高字节开始 ,依次取出每个字节的高 4 位和低 4 位并以数字字符的形式进行显示 。#includeint main(void)int n,i;scanf(%x,&n);.下载可编辑 .char *p=(char *)&n;int high_half,low_half;for(i=3; i=0; i-)low_half = pi & 0x0f;if (low_half 4;if (high_half 10)high_half += 0;elsehigh_half += A - 10;

9、printf(%c %cn,high_half,low_half);return 0;.下载可编辑 .(2 )利用大小为n 的指针数组指向用gets 函数输入的n 行,每行不超过80 个字符 。 编写一个函数 ,它将每一行中连续的多个空格字符压缩为一个空格字符。在调用函数中输出压缩空格后的各行,空行不予输出 。#include #define N 10void reducespace(char *p,int n);int main()int i;char *pN,arrN81;printf(Input %d-line strings:n,N);for (i = 0; i N; i+)*(p +

10、 i) = arri;printf(the %d line:, i + 1);gets(*(p + i);printf(nnafter compression:n);for (i = 0; i N; i+)reducespace(*(p + i),i);putchar(10);.下载可编辑 .return 0;void reducespace(char *p,int n)/削减空格的函数,将多行空格压缩成一个空格int flag = 1, i, j = 0, sum = 0;char temp81;for (i = 0; *(p + i) != 0; i+)if (*(p + i) != &f

11、lag)temp j+ = *(p + i);sum+;if (*(p + i) = &flag)flag = 0;if (*(p + i) != &!flag)temp j+ = ;temp j+ = *(p + i);flag = 1;sum+;.下载可编辑 .temp j = 0;if (sum)printf(The %d line:%sn, n+1,temp);elseprintf(Of the %d line there are all spacesn, n + 1);(3 )输入 n 个整数 ,排序后输出 。 排序的原则由命令行可选参数 -d 决定 ,有参数 -d 时按递减顺序排序

12、 ,否则按递增顺序排序 。要求将排序算法定义成函数 ,利用指向函数的指针使该函数实现递增或递减排序。( main 函数参数的处理见8.3 节)#include .下载可编辑 .#include #includeint main(int argc,char *argv)void downsort(char* *p,int m);void upsort(char * *q,int k);int n=0;while(nargc)printf(%s,argvn);n+;printf(n);if(!strcmp(argv1,-d)downsort(&argv2,n-2);else upsort(&arg

13、v1,n-1);return 0;void downsort(char * *p,int m)inti,j;char t;for(i=0;im-1;i+)for( j=0;jm-1;j+)if(*p j*pj+1)t=*pj,*pj=*pj+1,*p j+1=t;for(i=0;im;i+)*pi=*pi-0;printf(%d,*pi);void up_sort(char * *q,int k) char t; int i,j; for(i=0;ik-1;i+).下载可编辑 .for( j=0;j*qj+1)t=*qj,*qj=*qj+1,*qj+1=t;for(i=0;ik;i+)*qi=

14、*qi-0;printf(%d,*qi);注:我的电脑总是缺少一个插件,当我把这个插件安装到C 盘指定目录下仍然没有效果,所以只能无法得知写的程序是否正确。(4 )设某个班有N 个学生 ,每个学生修了M 门课程 (用 #define定义 N、 M )。 输入 M门课程的名称,然后依次输入N 个学生中每个学生所修的M 门课程的成绩并且都存放到相应的数组中。编写下列函数 :a.计算每个学生各门课程平均成绩;b.计算全班每门课程的平均成绩;c.分别统计低于全班各门课程平均成绩的人数;d.分别统计全班各门课程不及格的人数和90 分以上 (含 90 分)的人数 。在调用函数中输出上面各函数的计算结果。(

15、 要求都用指针操作,不得使用下标操作。)#include#define M 2/course#define N 2/studentsint main(void)char coursesM30,studentsN20;float tablesNM;int c,s;char *co=&courses00;/courses2co+2*30char *st=&students00;float *gr=&tables00;for(c=0;cM;c+)printf(Please Input The %d Coursen,c+1);scanf(%s,coursesc);/course names.下载可编辑

16、 .for(s=0;sN;s+)printf(Please Input The %d Studentn,s+1);scanf(%s,studentss);/students namesfor(s=0;sN;s+)printf(For students : %sn,studentss);printf(Input his/her grades:n);for(c=0;cM;c+)printf(Please Input The %s n,coursesc);scanf(%f,&tablessc);/tablesfloat sum=0;for(s=0;sN;s+)sum=0;printf(the ave

17、rage grades of %s:n,st+s*20);for(c=0;cM;c+)sum+=*(gr+s*M+c);printf(%fn,sum/M);/(1)float sum_=0;for(c=0;cM;c+)sum_=0;printf(the average grades of %s:n,co+c*30);for(s=0;sN;s+)sum_+=*(gr+s*M+c);.下载可编辑 .printf(%fn,sum_/N);/(2)for(c=0;cM;c+)sum_=0;printf(the number whose grades under average of %sn,co+c*

18、30); int cou=0;for(s=0;sN;s+)sum_+=*(gr+s*M+c);for(s=0;sN;s+)if(*(gr+s*M+c)sum_/N)cou+;printf(%dn,cou);cou=0;/(3)for(c=0;cM;c+)printf(the number whose grades under 60 of %sn,co+c*30); int cou=0;for(s=0;sN;s+)if(*(gr+s*M+c)60)cou+;printf(%dn,cou);cou=0;for(c=0;cM;c+).下载可编辑 .printf(the number whose gr

19、ades higher than 90 of %sn,co+c*30); int cou=0;for(s=0;s=90)cou+;printf(%dn,cou);cou=0;return 0;5选做题(1 )设有 N 位整数和 M 位小数 ( N=20 , M=10 )的数据 a,b。 编程计算 a+b 并输出结果。如:#include ctype.h#define N 100/* N表示参与运算数据最长的长度*/.下载可编辑 .void add_decimals(char *a,char *b,int *c,int n,char *d);void add_inte(char *a,char

20、*b,int c,int n,char *d);int main(void)char a1N,b1N,c1N+1,a2N,b2N,c2N+1;char c;int q,w,e,r;/to countq=0;while(c=getchar()!=.)if(isdigit(c)*(a1+q)=c;q+;*(a1+q)=0;w=0;while(c=getchar()!=n)if(isdigit(c)*(b1+w)=c;w+;*(b1+w)=0;e=0;char d;while(d=getchar()!=.)if(isdigit(d)*(a2+e)=d;e+;*(a2+e)=0;r=0;while(d=getchar()!=n)if(isdigit(d)*(b2+r)=d;r+;.下载可编辑 .*(b2+r)=0;/inputint max,max_;if(wr)max=w;int t;for(t=r;tw;t+)*(b2+t)=0;elsemax=r;int t;for(t=w;te)max_=q;int y;for(y=0;ye;y+)*(a2+y+q-e)=*(a2+y);for(y=0;yq-e;y+)*(a2+y)=0;*(a2+q)=0;elsemax_=e;int y;for(y=0;yq;y+).下载可编辑 .*(a1+y+e-q)=*(a1+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论