文档详情

实验九、指针(2)

沈***
实名认证
店铺
DOC
108KB
约12页
文档ID:158888798
实验九、指针(2)_第1页
1/12

实验八、指针(二)1.教学教学进程: 序号章节名称1§9.4指针与字符串2§9.5指针与函数3§9.6指针数组和多级指针2.考查知识点:指针与字符串,指针作为函数的参数,函数指针,指针函数,指针数组3.实验目的:(1) 掌握指针与字符串的关系2) 能正确使用指向函数的指针变量和返回指针的函数3) 了解指向指针的指针的概念及使用方法4.实验内容:u 课外实验题目(90分):如下图所示,本程序由若干个文件组成其中主函数在文件“main.c”中其它文件中包含了相应的子程序、变量定义和宏定义请阅读程序完成题目要求1)由于采用了指向函数的指针作为fenzhi()函数的参数,所以在主函数中每个分支只有一条函数调用语句请在fenzhi()函数中填写case E:段的相对应程序10分) (2)文件“fun4.c”中由条件编译指令分为两个不同的代码段,请分别填写两段代码中的子程序copy_string()的内容,使程序分别完成字符串的复制每段10分,共20分)(3)在文件“fun5.c”中,采用返回指针值的函数返回查询数据的地址请填写子程序search()的内容10分)(4)填写程序中的空白,实现内存的管理。

具体操作见提示每空5分,共50分)序号内容12345678910提示:所谓的自由分配和释放内存,指的是在指定的范围内进行本题的管理范围是以allocbuf为起始地址,以ALLOCSIZE为长度的空间内进行内存管理如下图所示,pointers[]为指针数组,其中每一个元素指向开辟的空间首地址p_size[]存放每一个指针对应的空间的长度指针allocp永远指向待分配的空间,初始情况下,allocp指向整个空间的首址添加时在p_size中按照下标顺序查询值为0的元素,说明在pointers中对应的元素还没有指向任何空间,就将该指针指向新开辟的空间,对应的空间长度存在p_size中删除空间时,对应指针后面的指针都要向前移动,保证再次开辟空间的连续性被释放的指针对应的长度也要被清除u 程序代码(题目部分):/*************************main.c*****************************/#include#include"publicFun.h"#include"globalVaria.h"main(){ int enter_flag=0; while(1) { if(enter_flag==0) enter_flag=display(0,"",title[0],mulu,""); else if(enter_flag==2) break; switch(getchar()) { case 'D': enter_flag=fenzhi(subject[0],title[1],mulu,mulu1,fun4); break; case 'E': enter_flag=fenzhi(subject[1],title[2],mulu,mulu1,fun5); break; case 'F': enter_flag=fenzhi(subject[2],title[3],mulu,mulu1,fun6); break; case 'G': getchar(); enter_flag=display(4,"","","",""); break; default:break; } }}/*************************fenzhi()*****************************/int fenzhi(char subject[],char title[],char mulu[],char mulu1[],void (*fun)()){ int enter_flag=0; getchar(); while(1) { if(enter_flag==0) enter_flag=display(1,"",title,"",mulu1); switch(getchar()) { case 'R': getchar(); enter_flag=display(2,subject,title,"",""); break; case 'E': case 'C': getchar(); return 0; default: break; } } }/*************************fun4.c*****************************/#include#define SELECTION 1#if(SELECTION)void copy_string(char from[],char to[]){ }void fun4(){ char a[]="I am a teacher."; char b[]="You are a student."; printf("string_a=%s\nstring_b=%s\n",a,b); copy_string(a,b); printf("\nstring_a=%s\nstring_b=%s\n",a,b);}#elsevoid copy_string(char *from,char *to){ }void fun4(){ char a[]="I am a teacher."; char b[]="You are a student."; printf("字符串_a=%s\n字符串_b=%s\n",a,b); copy_string(a,b); printf("\n字符串_a=%s\n字符串_b=%s\n",a,b);}#endif/*************************fun5.c*****************************/#includevoid fun5(){ float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}}; float *search(float (*pointer)[4],int n), *p; int i,m; printf("Enter the number of student:"); scanf("%d",&m); getchar(); printf("The scores of No.%d are:\n",m); p=search(score,m); for(i=0;i<4;i++) printf("%5.2f\t",*(p+i));}float *search(float (*pointer)[4], int n){ }/*************************fun6.c*****************************/#include#define NULL 0#define ALLOCSIZE 1000#define POINTERSIZE 10char allocbuf[ALLOCSIZE];char *allocp=allocbuf;char *pointers[POINTERSIZE]={NULL};int p_size[POINTERSIZE]={0};int cp_pointer=0;void fun6(){ int n,i; char * alloc(int n); void free_oc(char *p); void view(); printf("A:分配内存;\nF:释放内存;\nV:查看内存;\nC:返回\n"); while(1) { switch(getchar()) { case 'A': getchar(); printf("请输入分配空间的字节数:"); scanf("%d",&n); getchar(); for(i=0;i< POINTERSIZE;i++) if(p_size[i]==0) { ; ; } if(i== POINTERSIZE) printf(" !!!指针数组已经分配完毕!!!"); else if( ) printf(" !!!内存不够!!!"); else { printf(" 成功为%d号指针分配了长度为%d的内存空间\n",cp_pointer,n); ; } break; case 'F': getchar(); printf("请输入释放空间的指针编号:"); scanf("%d",&n); getchar(); if(n< POINTERSIZE) ; else printf(" !!!输入的指针编号不存在!!!"); break; case 'V': view(); break; case 'C': return; default:break; } }}char * alloc(int n){ if(allocp+n<=allocbuf+ALLOCSIZE && n>0) { allocp+=n; ; } else return(NULL);}void free_oc(char **p){ int i; i= ; pointers[i+1]=pointers[i]; pointers[i]=NULL; p_size[i]=0; for(i++;i#include"publicFun.h"#include"globalVaria.h"main(){ int enter_flag=0; while(1) { if(enter_flag==0) enter_flag=display(0,"",title[0],mulu,""); else if(enter_flag==2) break; switch(getchar()) { case 'A': while(enter_flag=fenzhi(subject[0],title[1],mulu,mulu1)) { fun1(); printf("\n%s",hint); } break; case 'B': while(enter_flag=fenzhi(subject[1],title[2],mulu,mulu1)) { fun2(num); printf("\n%s",hint); } break; case 'C': while(enter_flag=fenzhi(subject[2],title[3],mulu,mulu1)) { fun3(); printf("\n%s",hint); } break; case 'D': while(enter_flag=fenzhi(subject[3],title[4],mulu,mulu1)) { fun3(); printf("\n%s",hint); } break; case 'E': while(enter_flag=fenzhi(subject[4],title[5],mulu,mulu1)) { fun3(); printf("\n%s",hint); } break; case 'F': while(enter_flag=fenzhi(subject[5],title[6],mulu,mulu1)) { fun3(); printf("\n%s",hint); } break; case 'G': getchar(); enter_flag=display(4,"","","",""); break; default:break; } }}/*************************globalVaria.c*****************************/int num[50];char title[][50]={" 欢迎学习指针 ", " 指针与指针变量 ", " 指针与一维数组 ", " 指针与二维数组 ", " 指针与字符串 ", " 指针与函数 ", " 指针数组 "};char subject[][100]={"【题目1】采用指针变量实现地址传递,从而使用函数将两个整数进行交换。

", "【题目2】n(n<50)个人玩报数游戏,逢3出局,求最后留下人的编号", "【题目3】3个学生各学4门课,程序完成以下功能:计算总平均分,输出第n个学生成绩,查找不及格学生", "【题目4】待续......", "【题目5】待续......", "【题目6】待续......"};char mulu[][50]={"A:指针与指针变量\n", "B:指针与一维数组\n", "C:指针与二维数组\n", "D:指针与字符串\n", "E:指针与函数\n", "F:指针数组", "G:退出程序\n"};char mulu1[][30]={"R:阅读题目要求\n", "E:执行程序\n", "C:返回主界面\n"};char hint[100]="-----------------------------\n直接点击'ENTER'键返回上一级\n";char hint1[11]="\26\26\26\26\26\26\26\26\26\26";/*************************publicFun.c*****************************/#include#include#include"globalVaria.h"int display(int type,char subject[],char title[],char mulu[][50],char mulu1[][30]){ int i; char c1; system("cls"); switch(type) { case 0: printf("%s%s%s%s\n",hint1,hint1,hint1,hint1); printf("I I\n"); printf("I%sI\n",title); printf("I I\n"); printf("%s%s%s%s\n",hint1,hint1,hint1,hint1); for(i=0;i<=TITLE_LENGTH;i++) printf("%s",mulu[i]); return 1; break; case 1: printf("%s%s%s\n",hint1,hint1,hint1); printf("\20%s\21\n",title); printf("%s%s%s\n",hint1,hint1,hint1); for(i=0;i<3;i++) printf("%s",mulu1[i]); return 1; break; case 2: printf("%s%s%s\n",hint1,hint1,hint1); printf("\20%s\21\n",title); printf("%s%s%s\n",hint1,hint1,hint1); printf("%s\n",subject); printf("%s",hint); getchar(); return 0; break; case 3: printf("%s%s%s\n",hint1,hint1,hint1); printf("\20%s\21\n",title); printf("%s%s%s\n",hint1,hint1,hint1); break; case 4: printf("点击'E'退出程序\n点击'C'返回程序\n"); c1=getchar(); if(c1!='\n') getchar(); while((c1!='E' && c1!='C') || c1=='\n') { c1=getchar(); if(c1!='\n') getchar(); } if(c1=='E') return 2; else return 0; break; default:break; }}int fenzhi(char subject[],char title[],char mulu[],char mulu1[]){ int enter_flag=0; getchar(); while(1) { if(enter_flag==0) enter_flag=display(1,"",title,"",mulu1); switch(getchar()) { case 'R': getchar(); enter_flag=display(2,subject,title,"",""); break; case 'E': getchar(); display(3,"",title,"",""); return 1; break; case 'C': getchar(); return 0; default: break; } } }/*************************globalVaria.h*****************************/#define TITLE_LENGTH 6extern int num[50];extern char title[][50],subject[][100],mulu[][50],mulu1[][30],hint[100],hint1[11];/*************************publicFun.h*****************************/#include"globalVaria.h"extern int fenzhi(char subject[],char title[],char mulu[],char mulu1[]);extern int display(int type,char subject[],char title[],char mulu[][50],char mulu1[][30]);extern void fun1();extern void fun2();extern void fun3();。

下载提示
相关文档
正为您匹配相似的精品文档