华中科技大学电信学院C语言上机报告

合集下载

C 语言上机总结报告

C 语言上机总结报告

C语言上机实验报告经过了九周的上机练习,我们算是完成了阶段性的胜利,从书本上枯燥的知识,通过上机练习把他们学以致用,融会贯通;不得不说,上机对于大一不允许带电脑,算得上是对c语言巩固和提高的重要途径了,很多我们不懂得问题,通过敲一下代码就知道可不可以这样了。

还有很多格式,看不懂的代码,也都能解决。

另外,重要的是通过上机我也拾得了编程的乐趣,链接好的程序就像是我的Baby,一节课生好几个。

这是一种莫大的成就感。

原来我还可以这样。

如果仅是书本上的知识,我很难保证能坚持看下去,因为要把抽象的东西阐述出来,很多时候都是很枯燥的。

所以上机便是这样一个辅助的途径。

下面是我这九周所积累的一些问题和经验。

1.首先就是书写的问题。

到现在我还时不时忘了加分号。

这么一个细微的问题有时候会报很多错。

其中易犯的便是scanf中&的使用,以及&&逻辑运算符和位运算符不分,==错写=,自定义函数,声明时不加分号,do,while语句while后忘加分号,以及数组不从a[0]开始写,for循环中控制条件用<还是<=,于是就会溢出。

2.printf里格式的问题,想要在数前补0整数可以靠.num而浮点数需要前加0,对于输出无符号16进制数%x,八进制数%o和十进制%u,总是记不住,还有一个比较特别的是可以用*占位,然后在后面的参数中说明精度和宽度,用#让浮点数始终有小数,字符串的5.4s只显示4位。

另一个我发现无关紧要的是printf中lf和f没什么区别,scanf却不一样。

3.scanf的另一个问题是当出现空格是,读取的字符串就不完整了,在百度后,我找到了更好的gets函数,便可以读取空格,还有scanf的一一对应特性,不过空格不算。

4.++i和i++的使用问题。

很多时候并不在意这些,便会导致数据的溢出,和结果总是偏差1,所以在使用时先得想好用哪个,如int k ; while(k--) ;printf(“%d”,k)结果是-1,因为在while判断过程中还要减1。

华中科技大学-C语言程序设计_上机2019

华中科技大学-C语言程序设计_上机2019
• 课后习题 • 上机指导书
华中科技大学信息学院平台课—C语言程序设计
8
第五次上机
• 程序编写 ➢ 输入 n 个整数( n<10),排序后输出。排序的原则由函数 的一个参数决定,参数值为 1,按递减顺序排序,否则按递 增顺序排序。 ➢ 课后习题15
➢ 插入排序
• 课后习题 • 上机指导书
华中科技大学信息学院平台课—C语言程序设计
7
第四次上机
• 1. 已知五位数a2b3c能被23整除,编程求此五位数。 • 2. 编写函数GetMaxMin,求3个整形数据的最大值和最小值,
main函数完成输入3个整数值,调用所编函数计算最大值和最小 值,在main函数中输出最大和最小值。 • 3. 掌握程序调试方法,包括断点、单步、观察变量。(验证第四 章一(1-3))
➢ 输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9
。取2位小数。
• 课后习题
➢ 五、程序3
➢ 表达式的值
• 上机指导书
华中科技大学信息学院平台课—C语言程序设计
6
第三次上机
• 程序编写 ➢ 第3章 二 4、6、8、12、14
• 课后习题ቤተ መጻሕፍቲ ባይዱ
• 上机指导书
华中科技大学信息学院平台课—C语言程序设计
华中科技大学信息学院平台课—C语言程序设计
3
上机要求
• 教学方式上机需要实验报告(上机前准备好
),给出测试内容(包括定义程序目标、设
计程序),写出代码
• 上机调试,记录出现问题,给出解释
• 用不同颜色笔修改上机报告中的程序
• 交上机报告
华中科技大学信息学院平台课—C语言程序设计
4
第一次上机

华中科技大学c++第4次上机作业

华中科技大学c++第4次上机作业

华中科技大学c++第4次上机作业华中科技大学c++第4次上机作业科技大学《计算机基础与程序设计(C++)》实验报告实验名称:第四次上机实验实验学时:4姓名:学号:班级:电气实验日期:xx、4、13 教师批阅签字:一、实验目的l 掌握一维数组的定义、输入、输出和基本操作。

l 掌握二维数组的定义、输入、输出和基本操作。

l 掌握字符串的存储和访问。

l 使用数组处理解决实际问题的能力。

l 动态数组的访问二、实验内容1、阅读程序1)#include #includeusing namespace std;int main(){ int n=5; int i,a[n];for(i=0;i<n;i++)< p="">{ cin>>a[i]; cout<<="" p="" }return="">改正其中的错误,并解释错误原因。

错误:1、i后面的逗号为中文。

2、数组长度不能用变量表示。

修改后的程序:#include#includeusing namespace std;intmain(){ int n=5; int i,a[5]; for(i=0;i<n;i++)< p="">{ cin>>a[i]; cout<<="" p="" }return="">#includeusing namespace std;intmain(){ int i,a[5]={0,1,2,3,4}; for(i=0;i<=5;i++) cout<<="">确,如不确请修改正确,并解释原因。

错误:1、定义变量时的逗号为中文。

2、i最大值为4。

正确的程序:#include#includeusing namespace std;intmain(){ int i,a[5]={0,1,2,3,4}; for(i=0;i<=4;i++) cout<using namespace std;int main( ){charrstr[10 ]="abcdefgh",dstr[10];int i; for(i=0;rstr[i]!='\0'; i++)//循环条件可以写成 rstr[i]!=0; 或 rstrdstr[i]=rstr[i]; cout<<"输出字符串dstr:"<<dstr<<="" p="">否正确,如不正确请修改正确,并解释原因。

华中科技大学C语言课程设计实验报告

华中科技大学C语言课程设计实验报告

华中科技大学计算机科学与技术学院《C语言程序设计》课程设计基础部分实验报告题目:科技成果信息管理系统专业:计算机科学与技术班级:1204学号:姓名:成绩:指导教师:目录一、系统功能结构设计 (1)二、数据结构设计 (1)三、程序结构 (4)四、函数原型及功能 (9)五、试验结果 (13)六、实验体会 (29)七、附录1:参考文献 (31)八、附录2:程序清单 (31)一、系统功能结构设计航科技成果信息管理系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。

如下图所示:二、数据结构设计1.单位信息链结点结构(DEPT_NODE)及用法typedef struct dept_node{char number[8];/*单位编号*/char name[30];/*单位名称*/char PIC[20];/*负责人*/struct dept_node *next;/*指向下一结点*/struct archs_node *achs;/*指向科技成果信息链结点的指针*/GtkTreeIter iter;/*treeview 中对应treeiter*/}DEPT_NODE;2.科技成果信息链结点结构(ACHS_NODE)及用法typedef struct achs_node {char number[12];/*成果编号*/char name[50];/*成果名称*/char field[20];/*所属技术领域*/char first_dept_name[30];/*第一完成单位*/char first_dept_number[8];/*第一完成单位编号*/char first_member_name[20];/*第一完成人*/char award_name[30];/*获奖名称*/char award_level[10];/*获奖档次*/char award_grade[10];/*获奖等级*/struct arhs_node *next;/*指向下一节点*/struct member_node *members;/*指向完成人员信息结点的指*/GtkTreeIter iter;/*treeview 中对应treeiter*/}ACHS_NODE;中文字段名类型及长度变量名举例成果编号char[12]numbe 200703150001成果名称char[40]name The_method_of_study 所属技术领域char[20]fieldcomputer第一完成单位char[30]first_dept_name Huazhong_university_of _sci&tech 第一完成单位编号first_dept_numberfirst_dept_number 43007401第一完成人char[20]first_member_name Lu_zhengding获奖名称char[30]award_name Natural_science_of_hub ie_province 获奖档次char[10]award_levelprovince/*省级*/中文字段名类型及长度变量名举例单位编号char[8]number 43007401单位名称char[30]name Huazhong_university_of_sci&tech 负责人char[20]PICLi_peigeng获奖等级int award_grade1/*一等奖*/3.完成人员信息链结点结构(MEMBER_NODE)及用法typedef struct member_node{char number[18];/*身份证号*/char name[20];/*姓名*/char dept_name[30];/*工作单位*/char sex[4];/*性别*/int age;/*年龄*/char title[15];/*职称*/int rank;/*成果排名*/char achs_name[40];/*所属成果名称*/struct member_node*next;/*指向下一个结点*/GtkTreeIter iter;/*treeview中对应treeiter*/}MEMBER_NODE;中文字段名类型及长度举例姓名char[20]number Lu_zhengding身份证号char[18]name420111************工作单位char[30]dept_name Huazhong_university_of_sci&tech 性别char sex m年龄int age60职称char[15]title professor成果排名int rank1所属成果名称char[40]achs_name The_method_of_study4.三方向的十字交叉链表结构……5.登陆窗体控件结构体(wgt)及用法struct login_widget{GtkWidget*window;//主窗体GtkWidget*label_tips;//用于信息提示的标签GtkWidget*button_login;//两个按钮,一个点击后登录,一个点击后退出GtkWidget*button_exit;GtkWidget*entry_username;//两个文本框,用于输入用户名和密码GtkWidget*entry_pwd;GtkWidget*label_username;//两个标签用于显示username文本框和password文本框提示GtkWidget*label_pwd;GtkWidget*vbox;//垂直布局盒子,包含以下三个水平布局盒子GtkWidget*hbox_username;//包含用户名提示标签和用户名文本框,下面的HBOX作用类似GtkWidget*hbox_pwd;GtkWidget*hbox_button;}wgt;说明:将登陆窗体相关控件独立成一个结构体6.指向3种节点的指针联合及用法typedef union nodep{struct dept_node*dept;struct achs_node*achs;struct member_node*member;}nodep;说明:用于3种结构都会用到但不会同时用到的情形7.两个传递参数的结构及其用法struct nodecreate{GtkWidget*window;GtkWidget*entry[9];nodep unp;int type;};struct query_judge{GtkWidget*entry;int flag;};说明:GTK信号连接g_signal_connected将函数与信号链接后之内传递一个参数给函数,所以定义这两个结构分别将几个参数结合在一起传递三、程序结构1.主程序运行流程开始登陆框出现输入用户名与密码主界面初始化加载数据或重新添加系统功能模块的选择及运行退出系统前提示保存链表数据清理内存中的缓存信息,关闭系统结束2.数据保存流程YNYNYN开始打开航班,经停机场,经停航班信息文件P1==NULL在文件1写入一条单位信息P2==NULLP1=P1->next在文件2写入一条科技成果信息P2=p2->nextP3==NULL关闭文件退出系统在文件3写入一条完成人员信息P3=p3->next结束3.添加流程4.单位查询流程5.统计50岁以下第一完成人流程Y NY NNNY开始调用统计函数statis_func3创建一个GtkListStore ,P1=gp_headP1==NULLP1=p1->next 获取第二级链表的链头指针p2=p1->achsP2==NULLP2=p2->next P3=MEMBER_search(p2->first_member_name,p2->members)P3->age<50插入liststore结束将ListStore 传递给Statis_info 展示出来四、函数原型及功能(所有GtkWidget*button参数均为与消息链接用)1.登陆模块//功能:登录框初始化函数//输入参数://返回值:无void init_login_widget()//功能:登录验证函数,点击login按钮时调用//输入参数://返回值:无void login(GtkWidget*widget,gpointer data)2.图形界面模块/**初始化部分变量,再依次调用各函数初始化界面各部分*/int main(int argc,char*argv[])/**初始化菜单栏*/void init_menubar(GtkWidget*menubar)/**初始化目录*/void create_view_and_model(void)/**初始化显示栏*/void init_show(GtkWidget*list)/**改变状态栏及显示栏*/void on_changed(GtkWidget*widget,gpointer statusbar)//功能:将选中的节点信息在显示栏中显示出来//输入参数:iter//返回值:无int Show_Node(GtkTreeIter iter)//值传递不影响selectediter/**对应3个节点显示的3个函数,返回对应GtkListStore*/ GtkListStore*Show_Dept(char*name);GtkListStore*Show_Achs(char*name,char*P_name);GtkListStore*Show_Member(char*name,char*P_name,char*PP_name);3.文件模块//功能:读取数据文件//输入参数://返回值:re的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadData(GtkWidget*button)//功能:读取数据文件中数据到链表中//输入参数:phead单位节点头指针的地址//返回值:re的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadList(DEPT_NODE**phead)//功能:将链表中节点添加到左侧树状列表中//输入参数://返回值:void rebuildtree()//功能:存储数据文件//输入参数://返回值:flag的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveData(GtkWidget*button)//功能:将链表中数据存储在数据文件中//输入参数:phead单位节点头指针//返回值:flag的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveList(DEPT_NODE*phead)//功能:推出前提示保存//输入参数://返回值:void quit_save(GtkWidget*button)4.查询模块//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget*button,int type)//功能:查询学院//输入参数:in包含iter和名称的结构//返回值:无void Query_Dept(GtkWidget*button,struct query_judge*in)//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget*button,int type)//功能:查询完成人员//输入参数:in包含iter和名称的结构//返回值:无void Query_Member(GtkWidget*button,struct query_judge*in)//功能:展开并跳转至指定iter//输入参数:iter treeview中的一个目标iter//返回值:无void expand_select(GtkTreeIter iter)//功能:按名称搜索单位//输入参数:D_name单位名称//返回值:单位节点指针DEPT_NODE*DEPT_search(char*D_name)//功能:按名称搜索科技成果节点//输入参数:A_name科技成果节点名称,ACHS所在学院头科技成果节点指针//返回值:科技成果节点节点指针ACHS_NODE*ACHS_search(char*A_name,ACHS_NODE*ACHS)//功能:按名称搜索完成人员节点//输入参数:M_name完成人员节点名称,ACHS所属科技成果头完成人员节点指针//返回值:完成人员节点节点指针MEMBER_NODE*MEMBER_search(char*M_name,MEMBER_NODE*MEMBER)5.添加模块//功能:弹出一个输入框//输入参数:type对应枚举的几种类型//返回值:无void entry_info(GtkWidget*button,int type)//功能:添加3种节点统一函数,由entry_info确定按钮调用//输入参数://返回值:无void Add_node(GtkWidget*button,struct nodecreate*nodec)//功能:插入科技成果节点函数,由Add_Node中情况3调用//输入参数:pNew指向新节点的指针//返回值:对应单位节点指针DEPT_NODE*insert_ACHS(ACHS_NODE*pNew)//功能:插入完成人员节点函数,由Add_Node中情况4调用//输入参数:pNew指向新节点的指针//返回值:对应科技成果节点指针ACHS_NODE*insert_MEMBER(MEMBER_NODE*pNew)6.删除模块//功能:删除3种节点统一函数,由“删除”按钮调用//输入参数://返回值:无void Del_Node(GtkWidget*button)//功能:删除单位节点,由Del_Node函数case2调用//输入参数:name单位名称//返回值:int1为有错,0为正常int Del_Dept(char*name)//功能:删除科技成果节点,由Del_Node函数case2调用//输入参数:name科技成果名称,P_name对应单位名称//返回值:int1为有错,0为正常int Del_Achs(char*name,char*P_name)//功能:删除完成人员节点,由Del_Node函数case4调用//输入参数:name完成人员名称,P_name对应科技成果名称,PP_name对应单位名称//返回值:int1为有错,0为正常int Del_Member(char*name,char*P_name,char*PP_name)7.编辑模块//功能:弹出一个编辑框//输入参数://返回值:无int Edit_info(GtkWidget*button)//功能:编辑节点//输入参数://返回值:无void Edit_Node(GtkWidget*button,struct nodecreate*nodec)8.统计模块//功能:弹出一个统计框,由传入参数设置具体内容//输入参数:title统计框标题,col1第一列标题,col2第二列标题,in传入的model//返回值:无void Statis_info(char*title,char*col1,char*col2,GtkListStore*in)//功能:统计各单位科技成果数量,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func1(GtkWidget*button)//功能:统计各单位完成人员成果排名,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func2(GtkWidget*button)//功能:统计所有50岁以下第一完成人,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func3(GtkWidget*button)9.帮助模块//功能:弹出软件信息及作者信息//输入参数://返回值:无void help_about(GtkWidget*button)五、试验结果编译环境:Ubuntu linux64位Mingw Gcc(源代码配置好后可跨平台编译)GTK版本:GTK+2.41开发IDE:Codeblocks12.111.系统登陆输对自动进入输错显示错误2.登陆成功进入主界面3.全屏模式4.读取数据5.读取成功6.添加单位(添加成功提示)7.添加科技成果8.添加完成人员9.添加错误返回信息(选中节点后点击左下角编辑按钮)弹出确认框12.查询单位查询成功,左侧已跳转至并展开机械学院查询成功,左侧已跳转至并展开网络磁盘阵列未查询到时弹出提示14.查询完成人员从头查询,跳转至并展开第一个张江点击查询,跳转至并展开第二个张江15.统计各单位科技成果总数及各类成果数16.统计各单位成果排名17.统计50岁以下第一完成人18.软件信息及作者信息19.退出前提示保存六、实验体会首先我看了一下实验书上的编程规范和几个基本模块的实现思想,但当我开始做的时候我发现光用face.c自己看不懂文本菜单操作肯定会有很多问题的,于是我想同样是学,不如直接学图形界面的开发。

华中科技大学标准C语言程序设计上机试题、答案及报告格式

华中科技大学标准C语言程序设计上机试题、答案及报告格式

《标准C语言程序设计》上机报告实验七指针及函数结构体初步程序设计专业:班级:学号:姓名:完成日期:1一、实验目的1.进一步理解指针的概念,掌握指针变量间接地址访问的本质;2.掌握利用指向数组的指针变量表示一维数组元素及元素地址的方法;3.掌握利用指向二维数组的行指针变量表示二维数组元素及其地址的方法;4.掌握字符串的指针和指向字符串的指针变量;5.掌握指针数组和二级指针;6.熟悉通过动态内存分配实现动态数组,并体会指针在其中的作用。

7.理解函数定义、原型和调用,掌握函数参数的传递(传值、传指针和传引用)二、实验内容及要求(鼓励一题多解)1.深入理解《上机实践训练教程》2.6实验六案例示范和有关概念文字描述中的知识点,给出你的理解。

定义指针时一定要给指针分配好应有的类型和内存空间,防止出现野指针,造成程序不能运行甚至系统崩溃。

数组名不能作为左值,它实际上是一个常量指针,不能通过str=“comrade”给字符数组str赋值。

2.输入每个学生的姓名和线性代数、通信原理和C语言课程成绩,统计每人的平均值,并按平均值降序排列,输出排列后的名次、姓名、课程名(成绩)和平均值。

(注:平均值相同者按姓名的字母表顺序排列)(要求用结构体数据类型实现)#include <stdio.h>#include <math.h>#include <stdlib.h>#define N 3struct student{int rank;char name[20];double score[3];double aver;};void input(struct student *p,int n);void sort(struct student *p,int n);double average (struct student *p,int n);void output(struct student *p,int n,double aver);void main(){struct student stu[N];double aver;input(stu,N);sort(stu,N);aver=average(stu,N);output(stu,N,aver);}void input(struct student *p,int n){int i,j;double a;char str[20];for(i=0;i<n;i++,p++){printf("请输入考生姓名:\n");gets(p->name);printf("请依次输入学生线性代数、通信原理、c语言分数:\n");for(a=0,j=0;j<3;j++){gets(str);p->score[j]=atof(str);a+=p->score[j];}p->aver=a/3;}return;}void sort(struct student *p,int n){struct student temp;int i,j;for(i=0;i<n-1;i++){for(j=0;j<n-1-i;j++){if(p[j].aver<p[j+1].aver){temp=p[j];p[j]=p[j+1];p[j+1]=temp;}}}}double average(struct student *p,int n){int i;double temp;for(i=0,temp=0;i<n;i++)temp=temp+p[i].aver;return temp/n;}void output(struct student *p,int n,double aver){int i;printf("姓名线性代数通信原理c语言平均分\n");printf("-----------------------------------------\n");for(i=0;i<n;i++){printf("%-10s%8.2lf%8.2lf%8.2lf%8.2lf\n",p[i].name,p[i].score[0],p[i].score[1],p[i].score[2],p[i].aver);}}运行结果:3.利用指向指针的指针方法对N个整数排序并输出。

C语言上机实验

C语言上机实验

实验一(第1章实验)实验目的:1.掌握运行C语言程序的全过程。

2.熟悉编译环境。

3.初步熟悉C语言程序的语法规定。

4.了解简单函数的使用方法。

实验内容:1.编程且上机运行:求3个整数的和。

2.编程且上机运行:求2个数的和、差、积和商。

3.编程且上机运行:输入3个数,求最大值。

4.编程且上机运行:输入圆的半径,求圆的面积和周长。

5.在屏幕上输出:“hello world!”实验结果:实验二(第3章实验)1.实验目的:理解C语言的类型系统。

实验内容:写程序测试数据-2在类型char,int,unsigned int,long int,unsigned long int 中存储情况。

实验过程:实验结果:参见各种类型的存储实现描述。

2.实验目的:了解混合类型计算中类型的转换规则。

实验内容:写程序测试多种类型数据一起运算时类型的转换及表达式结果的类型。

注意unsigned int和int数据运算时类型转换的方向。

实验过程:/** 类型转换问题* 试问下面两个表达式等价吗?*/#include <stdio.h>#include <stdlib.h>int main() {unsigned int ui,uj;ui = 1;uj = 2;if (ui < uj)printf("\n%u < %u is true !\n", ui, uj);elseprintf("\n%u < %u is false !\n", ui, uj);if (ui - uj < 0)printf("\n%u - %u <0 is true !\n", ui, uj);elseprintf("\n%u - %u <0 is false !\n", ui, uj);system("pause");return 0;}实验结果:参见类型转换规则。

华中科技大学C语言课程设计实验报告及源代码

华中科技大学C语言课程设计实验报告及源代码

课程设计报告题目:航班时刻表信息查询系统课程名称: C语言程序设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院毕业设计[论文]任务书姓名:班号:专业:计算机科学与技术同组姓名:指导教师:一、课题名称航班时刻表查询系统二、主要内容建立航班时刻表查询系统,提供创建、编辑和查询等基本功能和服务。

三、任务要求收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。

四、系统功能系统主要提供航班信息的快速查询、检索和统计。

应该具有①按航班、按机场等查询信息的功能;②模糊条件检索航班信息;③统计航班座次情况等。

五、系统数据系统主要涉及“航班”、“经停机场”和“经停航班” 3类信息。

六、基本要求1)、只能使用C语言,源程序要有适当的注释,使程序容易阅读;2)、要有用户界面,要求至少采用教材p215-p216类似的简易菜单,鼓励采用文本菜单界面甚至采用图形菜单界面;3)、必须使用结构和十字交叉链表等数据结构;4)、使用文件保存数据;5)、至少输出一份报表(屏幕输出即可),鼓励自行增加新功能;6)、设计测试的模拟数据,完成系统测试;7)、写实验报告(要求正规打印,A4幅面)。

前言本C语言程序课程设计报告是由wt编写的。

本课程设计主要内容包括,内容中文摘要、Abstract(英文摘要)、正文、致谢、参考文献以及附录,其中: 正文主要内容有:一、系统功能模块,主要介绍该课程设计的航班时刻表查询系统的组成功能模块有哪些;二、数据结构设计及用法说明,主要是介绍说明本航班时刻表查询系统设计时用到的一些数据信息结构的设计思路和用法;三、程序结构流程图,用流程图的方式解释本课程设计中一些功能函数的设计思路和实现方法;四、各模块的功能,主要展示了本系统最终功能的解释说明;五、试验结果,主要展示了本航班时刻表查询系统最终功能的实现效果;六、体会,讲述作者在制作过程中的一些心得体会。

C语言程序设计上机实验报告(精选5篇)

C语言程序设计上机实验报告(精选5篇)

C语言程序设计上机实验报告(精选5篇)第一篇:C语言程序设计上机实验报告黔南民族师范学院 C语言程序设计上机实验报告系部:计算机科学系年级:2013 级班级:姓名:学号:实验时间:实验成绩:2013年月日实验三顺序结构程序的设计一实验名称:顺序结构程序的设计二.实验环境:windows XP系统,VC++6.0软件三.实验目的:四.实验内容:五.算法描述流程图六.源程序七.测试数据及运行结果八.实验心得实验成绩评分要求1、原创性发现抄袭或雷同成绩为0分2、正确性程序正确60分3、可读性格式清楚,有注释,变量命名规范20分4、健壮性对特殊测试数据有考虑有测试10分5、效率程序运行效率高10分第二篇:《c语言程序设计》上机实验报告要求《c语言程序设计》上机实验报告要求1.实验环境:软件系统:使用的软件环境硬件系统:机型说明2.实验目的:掌握如何编辑、编译、链接调试运行c程序3.实验内容:(1)掌握顺序结构程序设计.P26 ,p49,p62 3.2~3.7(2)掌握选择结构程序设计(if 和switch语句的用法)p4.2~(3)循环结构程序设计(while, dowhile,for语句的用法)。

(4)掌握数组的定义、输入和输出的方法,字符数组、字符串函数的使用。

(5)了解函数的定义,熟悉函数实参与形参的“值传递”方式,掌握函数的嵌套调用和递归调用方法。

(6)熟悉指针含义及其使用。

(7)熟悉结构体和共用体的使用。

(8)熟悉文件的使用。

4.实验要求:(1)输入编写的源程序,检查程序有无错误(语法和逻辑错误),有则改之。

(2)编译和连接,仔细分析编译信息,如有错误应找出原因并改正。

(3)运行程序,输入数据,分析结果。

5.实验结果:输出程序清单和运行结果。

(要求把原题内容,调试好的程序和其结果一并打印),6.实验体会分析运行结果,本次调试程序取得的经验(遇到的问题,解决的方法等)。

第三篇:C程序设计上机实验报告10C程序设计实验报告实验名称:指针与数组学时安排:2课时实验类别:上机操作型实验要求:1人1组 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1.理解指针、地址和数组间的关系;2.掌握通过指针操作数组元素的方法;3.掌握数组名作为参数的编程方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《标准C语言程序设计》上机报告实验指针、函数程序设计专业:电信工程班级:xxxxxxxx学号:xxxxxxxxxxx姓名:xxxxx完成日期:2013年5月11日一、实验目的1.进一步掌握调试方法;2.掌握一维数组、二维数组的定义、初始化和引用;3.掌握字符串和数组的结合(存储和处理);4.掌握并熟练使用字符串处理库函数;5.熟悉数组的操作(矩阵等数学运算、顺序及二分法查找、设标签选择法及交换法排序等);6.了解数组下标越界的形式和后果。

二、实验内容1.深入理解《上机实践训练教程》2.5实验五案例示范和有关概念文字描述中的知识点,给出你的理解。

理解:数组的初始化和赋值:数组的初始化是在声明后面紧跟一个用花括号括起来的初始化列表,各初始化表达式用逗号分隔,字符数组还可以用一个字符串初始化。

而赋值时数组不能作为一个整体操作,只能对数组的元素进行操作。

数组越界:使用数组时,编译器不会检查下标是否越界,这使程序灵活,快速的同时也产生了安全隐患。

使用越界的数组可能修改内存中其他程序甚至操作系统的代码,可能使程序出错甚至系统崩溃,所以在使用数组的时候要留意是否越界,比如循环调用的时候判断条件是否正确。

另外,一些处理字符数组的函数例如puts(),strcmp,strcat()都是非常危险的,他们以’\0’为结束的标志,如果用户输入超过了数组定义的大小,这可能发生数组越界。

有人曾经利用这一特点发明了在UNIX操作系统传播的蠕虫病毒,它通过很长的输入覆盖操作系统的代码。

为了解决这一问题,可以使用fputs(),strncmp,strncat()等函数,添加限制条件保证不会越界。

在今后的编程中应该注意这一点。

2.运行实战训练11,理解程序功能并指出其中排序是交换法还是设标签选择法,以及说明is_modified变量的作用?要求:在后续实战训练中使用相应技巧!交换排序法is_modified用来判断内层循环是否进行了交换(没有交换意味着相邻两位的值总是升序或者降序,即整个数组已经满足升序或者降序排列),如果交换则is_modified被赋值为TRUE(即1),否则其值为FALSE(即0)。

当其值为FALSE时数组已经完成排序,直接退出外层循环,这样可以减少循环次数,提高程序的效率。

3.用交换法对10个整数进行升序和降序排列后输出,要求外层循环变量分别从0和1编号实现#include<stdio.h> //升序#define N 10int main(){int a[N];int i,j,m,temp;printf("输入%d个数:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++){for(j=0;j<N-i-1;j++){if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}printf("排序后的数组:\n");for(i=0;i<N;i++){printf("%d ",a[i]);}printf("\n");return 0;}------------------------------------------------------------------------------- #include<stdio.h> //降序#define N 10int main(){int a[N];int i,j,m,temp;printf("输%d个数:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=1;i<N;i++){for(j=0;j<N-i;j++){if(a[j]<a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}printf("排序的数组:\n");for(i=0;i<N;i++){printf("%d ",a[i]);}printf("\n");return 0;}4.有15个数存放在一个数组中,输入一数,要求用折半查找法(二分法)找出该数是数组中第几个元素。

若该数不在数组中,则输出“查无次数”。

拓展变化:15个人名存放在二维数组中,输入一个人名,二分法查找,确定是否存在(排序均采用设标签选择法)#include <stdio.h> //用二分法查找数组中的数字#define N 15int main(){int num[N];int local[N]; //储存数字的位置int x,right,left,mid;int i,j,t,m;printf("输入%d个整数:\n",N); //输入数据for(i=0;i<N;i++){scanf("%d",&num[i]);local[i]=i+1;}printf("输入的数组是:\n"); //输出数组for(int i=0;i<N;i++)printf("%4d",num[i]);for(i=0;i<N-1;i++) //用选择排序法升序排列{for(m=i,j=i+1;j<N;j++){if(num[m]>num[j])m=j;}if(m!=i){t=num[i];num[i]=num[m];num[m]=t;t=local[i];local[i]=local[m];local[m]=t;}}printf("\n输入一个数:"); //输入要查找的数scanf("%d",&x);left=0; //二分法查找right=N-1;while(left<=right){mid=(left+right)/2;if(x>num[mid])left=mid+1;else if(x<num[mid])right=mid-1;else{printf("%d是第%d个元素\n",x,local[mid]);return 1;}}printf("查无次数\n",x);return 0;}------------------------------------------------------------------------------- #include <stdio.h> //用二分法查找名字#include <string.h>#define N 15#define M 20int main(){char name[N][M];char x[M];int right,left,mid;int i,j,m;char t[M];printf("输入%d个名字(每次输入按回车):\n",N); //输入数据for(i=0;i<N;i++)gets(name[i]);for(i=0;i<N-1;i++) //用选择排序法升序排列{for(m=i,j=i+1;j<N;j++){if(strcmp(name[m],name[j])>0)m=j;}if(m!=i){strcpy(t,name[i]);strcpy(name[i],name[m]);strcpy(name[m],t);}}printf("输入的数组是:\n"); //输出排序后的数组for(int i=0;i<N;i++)printf("%s ",name[i]);printf("\n输入一个名字:"); //输入要查找的名字gets(x);left=0; //二分法查找right=N-1;while(left<=right){mid=(left+right)/2;if(strcmp(x,name[mid])>0)left=mid+1;else if(strcmp(x,name[mid])<0)right=mid-1;else{printf("%s 存在\n",x);return 1;}}printf("%s 不存在\n",x);return 0;}5.输入一组实数,按录入顺序保存进数组arr中,采用设标签的选择法对其排序。

任意输入一数,直接在arr中将其按序插入相应位置。

#include <stdio.h>#define N 100int main(){int arr[N];int i,j,t,m,x,n;printf("输入的个数(小于%d):",N-1); //确定元素个数scanf("%d",&n);printf("输入%d个数",n); //输入数据for(i=0;i<n;i++)scanf("%d",&arr[i]);for(i=0;i<n-1;i++) //用选择排序法使元素升序排列{for(m=i+1,j=i;j<n;j++){if(arr[m]>arr[j])m=j;}if(m!=i){t=arr[i];arr[i]=arr[m];arr[m]=t;}}for(i=0;i<n;i++) //输出排序后的数组printf("%5d",arr[i]);printf("\n输入要插入的数:"); //输入要插入的数xscanf("%d",&x) ;for(i=0;i<n;i++) //用遍历法找出数组中比x大的最小的那个数的下标i if(x<=arr[i]){break;}for(j=n;j>i;j--) //下标i及其之后的数全部向后移一位{arr[j]=arr[j-1];}arr[i]=x; //在i处插入xn++;for(i=0;i<n;i++) //输出插入之后的数组printf("%5d",arr[i]);printf("\n");return 0;}------------------------------------------------------------------------------- #include <stdio.h> //使用函数使程序模块化,用循环可以不断插入数字#define N 100int getarr(int []); //输入数据void paixu(int [],int n); //排序int chazhao(const int [], int n, int x); //二分法查找x的位置mvoid charu(int [], int n, int m, int x); //在m处插入xvoid showarr(const int [], int); //输出数组int main(){int arr[N];int m,x,n;n=getarr(arr); //得到元素个数paixu(arr,n);showarr(arr,n);printf("\n输入要插入的数");while(scanf("%d",&x)==1) //用循环不断插入数字,输入非数字时退出{m=chazhao(arr,n,x);charu(arr,n,m,x);n++;showarr(arr,n);printf("\n输入要插入的数:");}return 0;}int getarr(int arr[]){int n;printf("输入长度:");scanf("%d",&n);printf("输入%d个数字:\n",n);for(int i=0;i<n;i++)scanf("%d",&arr[i]);return n;}void paixu(int arr[], int n) //选择排序法使元素升序排列{int i,j,m,t;for(i=0;i<n-1;i++){for(m=i+1,j=i;j<n;j++){if(arr[m]>arr[j])m=j;}if(m!=i){t=arr[i];arr[i]=arr[m];arr[m]=t;}}}void showarr(const int arr[],int n){int i;for(i=0;i<n;i++)printf("%5d",arr[i]);}int chazhao(const int arr[],int n, int x) //二分法查找数组中比x大的最小的元素的位置m {int i=0, j=n-1,m;m=(i+j+1)/2;while(i<=j){if(x>arr[m])i=m+1;else if(x<arr[m])j=m-1;elsebreak;m=(i+j+1)/2;}return m;}void charu(int arr[],int n ,int m ,int x) //在位置m插入x{for(int i=n;i>m;i--){arr[i]=arr[i-1];}arr[m]=x;}6.输入一串字符(长度小于100),以’?’结束。

相关文档
最新文档