×

函数指针实验报告

函数指针实验报告(《数据结构 课程设计》表达式求值 实验报告)

admin admin 发表于2024-04-30 21:52:07 浏览23 评论0

抢沙发发表评论

其实函数指针实验报告的问题并不复杂,但是又很多的朋友都不太了解《数据结构 课程设计》表达式求值 实验报告,因此呢,今天小编就来为大家分享函数指针实验报告的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

《数据结构 课程设计》表达式求值 实验报告

  

  算术表达式求值演示

  一、概述

  数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

  在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。

  二、 系统分析

  

  1. 以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。

  2. 一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。

  3. 演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。 4. 程序执行时的命令:

  本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误) 5.  测试数据。

  

  2

  

  算术表达式求值演示

  一、概述

  数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

  在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。

  二、 系统分析

  

  1. 以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。

  2. 一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。

  3. 演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。 4. 程序执行时的命令:

  本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误) 5.  测试数据。

  操作集合:

  (1)void InitStack1(SqStack1 &S1);//声明栈建立函数 (2)void InitStack2(SqStack2 &S2);//声明栈建立函数

  (3)void evaluate(SqStack1 &S1,SqStack2 &S2);//确定如何入栈函数 (4)void Push1(SqStack1 &S1,char e);//声明入栈函数 (5)void Push3(SqStack2 &S2,float e);//声明入压栈函数 (6)char GetTop1(SqStack1 &S1);//声明取栈顶元素函数 (7)float GetTop2(SqStack2 &S2);//声明取栈顶元素函数 (8)char Pop1(SqStack1 &S1);//声明出栈函数 (9)float Pop2(SqStack2 &S2);//声明出栈函数 (10)char Compare(char m,char n);//声明比较函数

  (11)float Operate(float a,char rheta,float b);//声明运算函数 (12)void DispStack1(SqStack1 &S1);//从栈底到栈顶依次输出各元素 (13)void DispStack2(SqStack2 &S2);//从栈底到栈顶依次输出各元素         }ADT SqStack

  结构分析:

  栈中的数据节点是通过数组来存储的。因为在C语言中数组是用下标从零开始的,因此我

  们在调用他们的数据是要特别注意。指针变量的值要么为空(NULL),不指向任何结点;要么其值为非空,即它的值是一个结点的存储地址。注意,当P为空值时,则它不指向任何结点,此时不能通过P来访问结点,否则会引起程序错误。如果输入的数字不符合题目要求,则会产生错误结果。

  算法的时空分析:

  时间和空间性能分析:时间上,对于含n个字符的表达式,无论是对其进行合法性检测还是对其进行入栈出栈操作n次,因此其时间复杂度为O(n)。空间上,由于是用数组来存储输入的表达式,用栈来存储运算中的数据和运算符,而栈的本质也用到的数组,数组在定义时必须确定其大小。在不知表达式长度的情况下确定数组的长度确非易事,此时极易造成空间的浪费,因此空间性能不是很好。

C语言 学生成绩管理系统

我找的一个代码!试一下:c语言学生成绩管理系统#include "stdio.h" #include "stdlib.h" #include "string.h" int shoudsave=0; /* */ struct student { char num;/* 学号 */ char name; char sex; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime;/* 最近更新时间 */ }; typedef struct node { struct student data; struct node *next; }Node,*Link; void menu() { printf("********************************************************************************"); printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n"); printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n"); printf("\t5保存学生资料\t\t\t\t\t0退出系统\n"); printf("********************************************************************************\n"); } void printstart() { printf("-----------------------------------------------------------------------\n"); } void Wrong() { printf("\n=====》提示:输入错误!\n"); } void Nofind() { printf("\n=====》提示:没有找到该学生!\n"); } void printc() /* 本函数用于输出中文 */ { printf(" 学号\t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分\n"); } void printe(Node *p)/* 本函数用于输出英文 */ { printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p-》data.num,p-》data.name,p-》data.sex,p-》data.egrade,p-》data.mgrade,p-》data.cgrade,p-》data.totle,p-》data.ave); } Node* Locate(Link l,char findmess) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */ { Node *r; if(strcmp(nameornum,"num")==0) /* 按学号查询 */ { r=l-》next; while(r!=NULL) { if(strcmp(r-》data.num,findmess)==0) return r; r=r-》next; } } else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */ { r=l-》next; while(r!=NULL) { if(strcmp(r-》data.name,findmess)==0) return r; r=r-》next; } } return 0; } void Add(Link l) /* 增加学生 */ { Node *p,*r,*s; char num; r=l; s=l-》next; while(r-》next!=NULL) r=r-》next; /* 将指针置于最末尾 */ while(1) { printf("请你输入学号(以’0’返回上一级菜单:)"); scanf("%s",num); if(strcmp(num,"0")==0) break; while(s) { if(strcmp(s-》data.num,num)==0) { printf("=====》提示:学号为’%s’的学生已经存在,若要修改请你选择’4 修改’!\n",num); printstart(); printc(); printe(s); printstart(); printf("\n"); return; } s=s-》next; } p=(Node *)malloc(sizeof(Node)); strcpy(p-》data.num,num); printf("请你输入姓名:"); scanf("%s",p-》data.name); getchar(); printf("请你输入性别:"); scanf("%s",p-》data.sex); getchar(); printf("请你输入c语言成绩:"); scanf("%d",&p-》data.cgrade); getchar(); printf("请你输入数学成绩:"); scanf("%d",&p-》data.mgrade); getchar(); printf("请你输入英语成绩:"); scanf("%d",&p-》data.egrade); getchar(); p-》data.totle=p-》data.egrade+p-》data.cgrade+p-》data.mgrade; p-》data.ave=p-》data.totle / 3; /* 信息输入已经完成 */ p-》next=NULL; r-》next=p; r=p; shoudsave=1; } } void Qur(Link l) /* 查询学生 */ { int sel; char findmess; Node *p; if(!l-》next) { printf("\n=====》提示:没有资料可以查询!\n"); return; } printf("\n=====》1按学号查找\n=====》2按姓名查找\n"); scanf("%d",&sel); if(sel==1)/* 学号 */ { printf("请你输入要查找的学号:"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("\t\t\t\t查找结果\n"); printstart(); printc(); printe(p); printstart(); } else Nofind(); } else if(sel==2) /* 姓名 */ { printf("请你输入要查找的姓名:"); scanf("%s",findmess); p=Locate(l,findmess,"name"); if(p) { printf("\t\t\t\t查找结果\n"); printstart(); printc(); printe(p); printstart(); } else Nofind(); } else Wrong(); } void Del(Link l) /* 删除 */ { int sel; Node *p,*r; char findmess; if(!l-》next) { printf("\n=====》提示:没有资料可以删除!\n"); return; } printf("\n=====》1按学号删除\n=====》2按姓名删除\n"); scanf("%d",&sel); if(sel==1) { printf("请你输入要删除的学号:"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { r=l; while(r-》next!=p) r=r-》next; r-》next=p-》next; free(p); printf("\n=====》提示:该学生已经成功删除!\n"); shoudsave=1; } else Nofind(); } else if(sel==2) { printf("请你输入要删除的姓名:"); scanf("%s",findmess); p=Locate(l,findmess,"name"); if(p) { r=l; while(r-》next!=p) r=r-》next; r-》next=p-》next; free(p); printf("\n=====》提示:该学生已经成功删除!\n"); shoudsave=1; } else Nofind(); } else Wrong(); } void Modify(Link l) { Node *p; char findmess; if(!l-》next) { printf("\n=====》提示:没有资料可以修改!\n"); return; } printf("请你输入要修改的学生学号:"); scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) { printf("请你输入新学号(原来是%s):",p-》data.num); scanf("%s",p-》data.num); printf("请你输入新姓名(原来是%s):",p-》data.name); scanf("%s",p-》data.name); getchar(); printf("请你输入新性别(原来是%s):",p-》data.sex); scanf("%s",p-》data.sex); printf("请你输入新的c语言成绩(原来是%d分):",p-》data.cgrade); scanf("%d",&p-》data.cgrade); getchar(); printf("请你输入新的数学成绩(原来是%d分):",p-》data.mgrade); scanf("%d",&p-》data.mgrade); getchar(); printf("请你输入新的英语成绩(原来是%d分):",p-》data.egrade); scanf("%d",&p-》data.egrade); p-》data.totle=p-》data.egrade+p-》data.cgrade+p-》data.mgrade; p-》data.ave=p-》data.totle/3; printf("\n=====》提示:资料修改成功!\n"); shoudsave=1; } else Nofind(); } void Disp(Link l) { int count=0; Node *p; p=l-》next; if(!p) { printf("\n=====》提示:没有资料可以显示!\n"); return; } printf("\t\t\t\t显示结果\n"); printstart(); printc(); printf("\n"); while(p) { printe(p); p=p-》next; } printstart(); printf("\n"); } void Tongji(Link l) { Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */ Node *r=l-》next; if(!r) { printf("\n=====》提示:没有资料可以统计!\n"); return ; } pm=pe=pc=pt=pa=r; while(r!=NULL) { if(r-》data.cgrade》=pc-》data.cgrade) pc=r; if(r-》data.mgrade》=pm-》data.mgrade) pm=r; if(r-》data.egrade》=pe-》data.egrade) pe=r; if(r-》data.totle》=pt-》data.totle) pt=r; if(r-》data.ave》=pa-》data.ave) pa=r; r=r-》next; } printf("------------------------------统计结果--------------------------------\n"); printf("总分最高者:\t%s %d分\n",pt-》data.name,pt-》data.totle); printf("平均分最高者:\t%s %d分\n",pa-》data.name,pa-》data.ave); printf("英语最高者:\t%s %d分\n",pe-》data.name,pe-》data.egrade); printf("数学最高者:\t%s %d分\n",pm-》data.name,pm-》data.mgrade); printf("c语言最高者:\t%s %d分\n",pc-》data.name,pc-》data.cgrade); printstart(); } void Sort(Link l) { Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */ ll-》next=NULL; if(l-》next==NULL) { printf("\n=====》提示:没有资料可以排序!\n"); return ; } p=l-》next; while(p) { s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */ s-》data=p-》data; s-》next=NULL; rr=ll; while(rr-》next!=NULL && rr-》next-》data.totle》=p-》data.totle) rr=rr-》next; if(rr-》next==NULL) rr-》next=s; else { s-》next=rr-》next; rr-》next=s; } p=p-》next; } free(l); l-》next=ll-》next; printf("\n=====》提示:排序已经完成!\n"); } void Save(Link l) { FILE* fp; Node *p; int flag=1,count=0; fp=fopen("c:\\student","wb"); if(fp==NULL) { printf("\n=====》提示:重新打开文件时发生错误!\n"); exit(1); } p=l-》next; while(p) { if(fwrite(p,sizeof(Node),1,fp)==1) { p=p-》next; count++; } else { flag=0; break; } } if(flag) { printf("\n=====》提示:文件保存成功.(有%d条记录已经保存.)\n",count); shoudsave=0; } fclose(fp); } void main() { Link l;/* 连表 */ FILE *fp; /* 文件指针 */ int sel; char ch; char jian; int count=0; Node *p,*r; printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t-------福建农业职业学院计应0501 黄欢(32号)\n"); l=(Node*)malloc(sizeof(Node)); l-》next=NULL; r=l; fp=fopen("C:\\student","rb"); if(fp==NULL) { printf("\n=====》提示:文件还不存在,是否创建?(y/n)\n"); scanf("%c",&jian); if(jian==’y’||jian==’Y’) fp=fopen("C:\\student","wb"); else exit(0); } printf("\n=====》提示:文件已经打开,正在导入记录......\n"); while(!feof(fp)) { p=(Node*)malloc(sizeof(Node)); if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */ { p-》next=NULL; r-》next=p; r=p; /* 将该接点挂入连中 */ count++; } } fclose(fp); /* 关闭文件 */ printf("\n=====》提示:记录导入完毕,共导入%d条记录.\n",count); while(1) { menu(); printf("请你选择操作:"); scanf("%d",&sel); if(sel==0) { if(shoudsave==1) { getchar(); printf("\n=====》提示:资料已经改动,是否将改动保存到文件中(y/n)?\n"); scanf("%c",&ch); if(ch==’y’||ch==’Y’) Save(l); } printf("\n=====》提示:你已经退出系统,再见!\n"); break; } switch(sel) { case 1:Add(l);break; /* 增加学生 */ case 2:Del(l);break;/* 删除学生 */ case 3:Qur(l);break;/* 查询学生 */ case 4:Modify(l);break;/* 修改学生 */ case 5:Save(l);break;/* 保存学生 */ case 9:printf("\t\t\t==========帮助信息==========\n");break; default: Wrong();getchar();break; } } } /* *//* 学生成绩管理程序 编制一个统计学生考试分数的管理程序。 设学生成绩已以一个学生一个记录的形式存储在文件中, 每位学生记录包含的信息有:姓名,学号和各门功课的成绩。 程序具有以下几项功能:求出各门课程的总分,平均分,按姓名, 按学号寻找其记录并显示,浏览全部学生成绩和按总分由高到低显示学生信息等。 */ #include 《stdio.h》 #define SWN 3 /* 课程数 */ #define NAMELEN 20 /* 姓名最大字符数 */ #define CODELEN 10 /* 学号最大字符数 */ #define FNAMELEN 80 /* 文件名最大字符数 */ #define BUFLEN 80 /* 缓冲区最大字符数 */ /* 课程名称表 */ char schoolwork = {"Chinese","Mathematic","English"}; struct record { char name; /* 姓名 */ char code; /* 学号 */ int marks; /* 各课程成绩 */ int total; /* 总分 */ }stu; struct node { char name; /* 姓名 */ char code; /* 学号 */ int marks; /* 各课程成绩 */ int total; /* 总分 */ struct node *next; /* 后续表元指针 */ }*head; /* 链表首指针 */ int total; /* 各课程总分 */ FILE *stfpt; /* 文件指针 */ char stuf; /* 文件名 */ /* 从指定文件读入一个记录 */ int readrecord(FILE *fpt,struct record *rpt) { char buf; int i; if(fscanf(fpt,"%s",buf)!=1) return 0; /* 文件结束 */ strncpy(rpt-》name,buf,NAMELEN); fscanf(fpt,"%s",buf); strncpy(rpt-》code,buf,CODELEN); for(i=0;i《SWN;i++) fscanf(fpt,"%d",&rpt-》marks); for(rpt-》total=0,i=0;i《SWN;i++) rpt-》total+=rpt-》marks; return 1; } /* 对指定文件写入一个记录 */ writerecord(FILE *fpt,struct record *rpt) { int i; fprintf(fpt,"%s\n",rpt-》name); fprintf(fpt,"%s\n",rpt-》code); for(i=0;i《SWN;i++) fprintf(fpt,"%d\n",rpt-》marks); return ; } /* 显示学生记录 */ displaystu(struct record *rpt) { int i; printf("\nName : %s\n",rpt-》name); printf("Code : %s\n",rpt-》code); printf("Marks :\n"); for(i=0;i《SWN;i++) printf(" %-15s : %4d\n",schoolwork); printf("Total : %4d\n",rpt-》total); } /* 计算各单科总分 */ int totalmark(char *fname) { FILE *fp; struct record s; int count,i; if((fp=fopen(fname,"r"))==NULL) { printf("Can’t open file %s.\n",fname); return 0; } for(i=0;i《SWN;i++) total=0; count=0; while(readrecord(fp,&s)!=0) { for(i=0;i《SWN;i++) total; count++; } fclose(fp); return count; /* 返回记录数 */ } /* 列表显示学生信息 */ void liststu(char *fname) { FILE *fp; struct record s; if((fp=fopen(fname,"r"))==NULL) { printf("Can’t open file %s.\n",fname); return ; } while(readrecord(fp,&s)!=0) { displaystu(&s); printf("\n Press ENTER to continue...\n"); while(getchar()!=’\n’); } fclose(fp); return; } /* 构造链表 */ struct node *makelist(char *fname) { FILE *fp; struct record s; struct node *p,*u,*v,*h; int i; if((fp=fopen(fname,"r"))==NULL) { printf("Can’t open file %s.\n",fname); return NULL; } h=NULL; p=(struct node *)malloc(sizeof(struct node)); while(readrecord(fp,(struct record *)p)!=0) { v=h; while(v&&p-》total《=v-》total) { u=v; v=v-》next; } if(v==h) h=p; else u-》next=p; p-》next=v; p=(struct node *)malloc(sizeof(struct node)); } free(p); fclose(fp); return h; } /* 顺序显示链表各表元 */ void displaylist(struct node *h) { while(h!=NULL) { displaystu((struct record *)h); printf("\n Press ENTER to continue...\n"); while(getchar()!=’\n’); h=h-》next; } return; } /* 按学生姓名查找学生记录 */ int retrievebyn(char *fname, char *key) { FILE *fp; int c; struct record s; if((fp=fopen(fname,"r"))==NULL) { printf("Can’t open file %s.\n",fname); return 0; } c=0; while(readrecord(fp,&s)!=0) { if(strcmp(s.name,key)==0) { displaystu(&s); c++; } } fclose(fp); if(c==0) printf("The student %s is not in the file %s.\n",key,fname); return 1; } /* 按学生学号查找学生记录 */ int retrievebyc(char *fname, char *key) { FILE *fp; int c; struct record s; if((fp=fopen(fname,"r"))==NULL) { printf("Can’t open file %s.\n",fname); return 0; } c=0; while(readrecord(fp,&s)!=0) { if(strcmp(s.code,key)==0) { displaystu(&s); c++; break; } } fclose(fp); if(c==0) printf("The student %s is not in the file %s.\n",key,fname); return 1; } main() { int i,j,n; char c; char buf; FILE *fp; struct record s; clrscr(); printf("Please input the students marks record file’s name: "); scanf("%s",stuf); if((fp=fopen(stuf,"r"))==NULL) { printf("The file %s doesn’t exit, do you want to creat it? (Y/N) ",stuf); getchar(); c=getchar(); if(c==’Y’||c==’y’) { fp=fopen(stuf,"w"); printf("Please input the record number you want to write to the file: "); scanf("%d",&n); for(i=0;i《n;i++) { printf("Input the student’s name: "); scanf("%s",&s.name); printf("Input the student’s code: "); scanf("%s",&s.code); for(j=0;j《SWN;j++) { printf("Input the %s mark: ",schoolwork); scanf("%d",&s.marks); } writerecord(fp,&s); } fclose(fp); } } fclose(fp); getchar(); /*clrscr();*/ puts("Now you can input a command to manage the records."); puts("m : mean of the marks."); puts("t : total of the marks."); puts("n : search record by student’s name."); puts("c : search record by student’s code."); puts("l : list all the records."); puts("s : sort and list the records by the total."); puts("q : quit!"); while(1) { puts("Please input command:"); scanf(" %c",&c); /* 输入选择命令 */ if(c==’q’||c==’Q’) { puts("\n Thank you for your using."); break; /* q,结束程序运行 */ } switch(c) { case ’m’: /* 计算平均分 */ case ’M’: if((n=totalmark(stuf))==0) { puts("Error!"); break; } printf("\n"); for(i=0;i《SWN;i++) printf("%-15s’s average is: %.2f.\n",schoolwork/n); break; case ’t’: /* 计算总分 */ case ’T’: if((n=totalmark(stuf))==0) { puts("Error!"); break; } printf("\n"); for(i=0;i《SWN;i++) printf("%-15s’s total mark is: %d.\n",schoolwork); break; case ’n’: /* 按学生的姓名寻找记录 */ case ’N’: printf("Please input the student’s name you want to search: "); scanf("%s",buf); retrievebyn(stuf,buf); break; case ’c’: /* 按学生的学号寻找记录 */ case ’C’: printf("Please input the student’s code you want to search: "); scanf("%s",buf); retrievebyc(stuf,buf); break; case ’l’: /* 列出所有学生记录 */ case ’L’: liststu(stuf); break; case ’s’: /* 按总分从高到低排列显示 */ case ’S’: if((head=makelist(stuf))!=NULL) displaylist(head); break; default: break; } } }

C语言 求救 二.实验内容: ⑴ 编写自定义子函数实现:利用指针实现求一维数组中全部元素的平均值;并在

1.

#include "stdio.h"

double getAve(int *a,int n)

{

   int *p;

   int sum=0;

   for(p=a;p《a+n;p++)

       sum+=*p;

   return sum*1.0/n;

}

int main()

{

      int a={1,2,3,4,5,6,7,8,9,10};

      printf("数组元素的平均值为%lf\n",getAve(a,10));

 

}

2.

#include "stdio.h"

//del和delchar两个函数功能一样。

void del(char in,char ch)

{

      int i;

      int j=0;

      for(i=0;in!=’\0’;i++)

          if(in!=ch)

          {

               in;

               j++;

           }

      in=’\0’;

}

void delChar(char *in,char ch)

{

     char *p=in;

     int j=0;

     for(;*p!=’\0’;p++)

         if(*p!=ch)

           *(in+j++)=*p;

     *(in+j)=’\0’;

}

int main()

{

       char str={0};

       char ch;

       printf("请输入一个字符串:");

       gets(str);

       printf("请输入一个字符:");

       scanf("%c",&ch);

       delChar(str,ch);

       printf("字符串删除字符后输出:");

       puts(str);

}

C语言实验报告

我写了个,不知道行不,有什么不妥的请指出哈,如要格式请加我,将之发给你四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 学号: 姓名: 专业:计算机科学与技术 班级:5 第 13 周 课程名称 c/C++ 实验课时2实验项目字符串的复制与追加实验时间08.5. 16实验目的 1.掌握字符串的基本操作和理解数据结构实验环境 VC 6.0实验内容(算法、程序、步骤和方法) 先计算出S1和S2的字符个数,为S3分配好空间,利用已有库函数先将S1复制到S3中,再将S2追加到S3中,当显示完后要记住收回空间,做好善后处理。源代码如下:#include《iostream》#include《string.h》using namespace std;int main(){char *s1="abcdef";char *s2="123456f";int n=strlen(s1)+strlen(s2);//计算s1,和s2的总长度nchar *s3=new char; //定义S3并分配空间大小为nstrcpy(s3,s1); //将s1复制到s3中strcat(s3,s2); //将s2追加到s3后面cout《《"s3="《《s3《《endl;delete s3; //收回空间s3=NULL; //将指针指向空return 0;}(接上)实验内容(算法、程序、步骤和方法)结构是顺序存储结构,算法顺序链接法数据记录和计算 数据有:字符串S1 ,S2;和一未知字符串S3只需计算前两个字符串长度之和结 论(结 果) 利用字符数组可以顺序存储字符数据,并且能够顺序处理数据;算法复杂度O(n+m);处于中性小 结 字符数组能够带来很好的存储结构,便于操作,但是算法不是很好,只能顺序遍历数组,故复杂度不是很小指导老师评 议 成绩评定: 指导教师签名:

探究重力与质量的关系物理实验报告怎么写

实验目的:探究重力的大小与质量的关系。实验原理:将被测物体挂在弹簧测力计下方,物体静止时,弹簧测力计的示数即为被测物体的重力。实验器材:弹簧测力计,铁架台,相同的钩码若干(质量已知)。实验过程:1.提出问题:质量越大的物体,受到的重力越大。重力大小与质量的数量关系,会是怎么样的呢?2.猜想与假设:针对上述问题,提出你的猜想:。3.设计实验:测出多个物体的质量和重力大小,然后进行比较,发现普遍规律。4.进行实验:(1)检查所用的测力计指针是否指零?;若不指零,调零;观察并记录你所用弹簧测力计的量程为:,分度值为:。(2)将弹簧测力计悬挂在铁架台上,将一只钩码挂在弹簧测力计下方,如图1,注意使力沿弹簧测力计的轴线方向,指针不与刻度盘摩擦,待静止时读数,将测得数据填入下表。(3)继续将2只、3只……钩码分别挂在弹簧测力计下端,读出每一次静止时弹簧测力计的示数,填表。(4)实验结束,整理器材5.分析数据:在图2中,以质量m为横坐标、重力G为纵坐标描点,连接这些点。观察图像是不是过原点的一条直线?如果是,结合数学的正比例函数知识,可以说明:物体受到的重力与物体的质量成正比。6.得出结论:分析实验数据可以看到:质量增大,重力也增大,而重力与质量的比值不变;这个比值大约等于10N/kg,物理学中,我们用g来表示重力与质量的比值。由于我们所用的弹簧测力计不够精确,还有不同程度的误差,科学家们经过大量实验表明,这个比值大约为9.8N/kg,即物体受到的重力与物体的质量成正比;表达式为:G=mg。7.评估与交流:(1)根据重力和质量的关系,可以看出,物体所受重力与物体的质量有关,质量大的物体受到的重力大。(2)重力的大小也不是一成不变的,在不同情况下有些细微变化,例如:离地面的高度增加,地球对物体的吸引力会减小,物体受到的重力会减小;由于地球是赤道略鼓,两极稍扁的椭球体,所以同一物体在纬度越高的地方,重力会越大。(3)同一物体从月球到地球,所含物质的多少没有变,所以它的质量不变;但由于它在月球上受到的吸引力比在地球上的要小,所以重力变小。

实验报告怎样写啊

一, 程序功能本程序利用指针,链表,文件,以及字符串等各种操作,实现程序功能:字典管理。二, 题目分析与前两题不同,本题需大量利用指针和链表操作。这无形中增加了题目的难度。由于指针这部分知识掌握得不牢固,加上链表和文件都是新学的内容,编程过程遇到了一些困难,调试与查错一度成为课设的主要工作。为了更好的完成设计,我复习了指针这部分内容,巩固了链表和文件两部分知识。在完成课设过程中,我发现困扰我的地方不是编写插入,删除,查找这些函数,而是建立初始链表。我首先编了三个函数:creat,insert_a_word,list,和一个main函数。调试时发现调用list函数输出除了原来insert的字符串,还有一些乱码,这就说明以上三个函数的某个或几个有问题。后来我把目标放在creat函数上。我本来是想模仿书上的creat 函数,但是要从文件上读取字符串,就要用到fscanf,由于操作的不纯熟,空间的分配出现了问题,在初始链表的时候带进了一些乱码。后来我重新编了creat函数,解决了这个问题。解决了初始链表的问题以后,遇到的问题无非是指针上的操作错误,往往一编译就出现很多警告和错误,于是一个一个找,一个一个调。这些花费了我很长时间,以至于一看到蓝屏下的出错信息就想逃。这些错误后来都被我解决了。在完成课设过程中,我是一边出错一边改错,一边调试一边翻书,进展缓慢。不过也是因为出了错,翻了书,我发现了自己知识体系中的不足之处,巩固了薄弱的地方。大体编完了以后,我又对程序进行了完善。比如说增加了全局变量n,在输出插入单词成功时输出插入单词的个数。经过这个程序设计的编写,我觉得作为一个编程者,首先,必须有严谨的作风:因为一个程序中小小的一点不足在最后的运行时都会对整个程序产生不可忽视的影响,甚至使程序终止,不能运行下去;其次,还必须有足够的耐心去观察解决出现的一系列问题;当然,还必须有较强的逻辑思维能力,因为程序出现错误不是光有耐心就能解决的,必须利用逻辑思维能力,一步步地排除错误三、源程序或者;一. 程序功能设计一个单向链表类,完成一个通讯录的简单管理工作。通讯录是一个简单的数据库库表,每个结点包含一个人的所有通讯信息。程序的执行过程为:循环显示主菜单,用户在Choice处输入选项,即按照功能列表输入1-9的任意一个数字,按回车后,执行响应的功能。各菜单项功能如下:1、 Add Record (增加记录)提示输入各字段。一次输入一个人的数据。2、 Delete Record (删除记录)输入待删除记录的姓名,显示该姓名下的所有信息,让用户再次确认是否要删除3、 Display All Record(显示所有记录)按顺序显示库中所有记录,每屏显示10条记录。每显示10条,用户按《Enter》键继续显示下一屏。4、 Query(按姓名查找并显示一个记录)输入姓名,显示该姓名下的所有信息5、 Modify Record(按姓名查找,修改一个记录)输入姓名,显示该姓名下的所有信息。然后,在子菜单中提示修改哪个数据。6、 Add from a Text File(从正文文件中添加数据到库表中)用户可事前建立一个正文文件,存放待加入的数据,然后从该文件中一次性导入多个人员的数据。程序运行时,提示输入正文文件的文件名。7、 Write to a Text File将库表中的数据写入一个正文文件中。8、 Sort(排序库表)首先显示当前排序关键字,然后 提示是否需要改变,用户根据需要回答是否需要改变。系统中有两种排序方式,一种是按姓名排序,一种是按办公室电话排序。改变排序的方式的意义是在两种排序方式之间的切换。9、 Quit(退出系统)二. 添加的一些功能1.程序设计过程中我添加了报错系统,例如我定义了int isnumber(char a)2个函数,分别用于判断用户输入的字符串是否为数字或非数字字符串。2.我还添加了清屏功能,在适当的地方添加此功能可以方便用户使用。3.在void add(Addrlist &addrlist)函数中我还添加了提示“已经添加同名联系人,是否需要修改新联系人的各项记录?(y/n)并确认”的功能。4.在void del(Addrlist &addrlist)函数中我添加了确认2次输入的待删除姓名一致的功能,而且提示用户确认删除。5.在void modify(Addrlist &addrlist)函数中我还添加了可以一次修改多个信息,可以随时返回的功能,更方便用户使用。6.在void addfromtxtfile(Addrlist &addrlist)函数中,导入数据时系统显示重名信息并自动过滤重名信息。三.程序设计过程中的一些感想刚开始接到设计题目的时候感觉很是幸运,因为我知道强化班他们也学过C++,而且也做过课程设计。他们的题目是要做一个图书馆的管理系统,那可是很艰巨的任务呀!大家选择比较多的应该是我的这个通讯录了,一看好多函数书上都有,就算是我最头疼的链表书上也有详细的过程。好象事情从来就是想起来容易做起来难,当我开始要做这个课程设计的时候,我竟然不知道如何下手。也可能是人天生的惰性在起作用,一开始我确实想找强化班的兄弟帮我设计一下,毕竟他们有经验,可以帮我开个好头。后来还是决定自己来做,虽然做得可能会稍微差一点。既然学习了就应该自己去实现。在做的过程中遇到了很多麻烦,虽然我早有心理准备,但还是令我伤透了脑筋。只怪自己平时看书太少,其实有很多东西在书上都可以找到答案的。可是还是有一些问题我实在没有办法解决。我开始只是想自己做一套程序,这会让我有一种自豪感,没想到到了最后时期,仍然有些问题没有解决。只好求助同学。在同学的帮助之下,总算是解决了最后的问题。但由于水平有限,和其他同学比起来,我的程序显得那么笨拙。通过这次的课程设计使我更深刻地体会到事情从来都不像你想象的那么简单,只有去做,才会真正感到它的困难。同时也使我明白了,什么时候都不要忘记最基础的东西。因为平时没有注意看书,使我在设计的过程中吃尽了苦头,浪费了不少时间。虽然一开始雄心勃勃要自己独立完成程序,可是最后还是要求助于别人。这与最开始的想法有些违背。有的时候的确不应该自己钻牛角尖,每个同学都可以成为自己的老师,虚心请教是必不可少的。三、源程序

西南交大C++实验12

实验12实验报告样式1:

教学班级:_________ 学生学号:_________

学生姓名:_________ 实验日期:_________

实验地点:_________ ( 机房)

指导教师签名:_________实验成绩:_________

一、实验目的

1.掌握指针变量的使用,

2.掌握用指针方式访问一维数组。

二、实验任务

1.求_________、_________、_________,其中x和n均为整数,由键盘输入。编程输出公式中的每一项的值、以及sum的值。要求: x, n, sun构用指针。

2.统计一 维整型数组中能被3整除的元素个数,并输出。要求:数组元素由键盘输入;用指针方式访问数组。

3. 学生成绩统计:随机产生30名学生的成绩(0~100之间的整数),存放于-维数组中;输出学生成绩,每行10个数。然后统计并输出90-100、80-80、 70-79、 60-69、 小于60

这五个分数段的学生人数。

实验12实验报告样式2:

教学班级:_________ 、学生学号:_________ 

学生姓名:_________ 、实验日期:_________ 

实验地点:_________ 、指导教师签 名:_________ 

实验成绩:_________ 

一、实验目的

1.掌握常用系统函数的功能及使用方法;

2.掌握自定义有返回值函数的概念、定义及使用方法。

二、实验任务

1、实现功能:根据键盘输入的数x,计算分段函数f(x)的值。x的绝对值(x《0)

(1)主函数功能:从键盘输入数x,通过调用子函数得到计算结果并输出。

(2)子函数功能:定义有返回值函数,实现计算该分段函数值的功能。要求:求平方根和绝对值使用数学函数sqrt(x)、fabs(x)。

(3)输入输出格式请参考以下样张:

关于函数指针实验报告,《数据结构 课程设计》表达式求值 实验报告的介绍到此结束,希望对大家有所帮助。