第一篇:c语言实践报告(范文模版)
实 验 报 告
二级学院:信息与工程学院 系别:计算机科学与技术系 专业:信息管理与信息系统 课程名称:高级语言程序设计
班级:姓名:
实验名称:
电话订餐信息处理
实验目的:
题目要求:
一个小饭馆的生意非常红火,要想用餐必须提前一天打电话预订,假设我们是饭馆负责接受电话预订的服务员,我们需要做些什么呢?首先,需要准备一张大小适当的白纸,等待顾客的电话。李红最先打进了电话,她预约第2天中午12点用餐,用餐人数5人,服务员在纸上做了如下记录:“李红 12点 5人”;接着,刘娜、汪涵、孙杰和赵君分别来了电话,服务员根据他们的要求做了记录,此时纸上记录的内容是: 李红 12点 5人 刘娜 11点 2人 汪涵 11点20分 3人 孙杰 10点30分 5人 赵君 13点20分 6人
孙杰随后又来电话,将用餐时间推后一个小时,那么记录的内容也应该做相应的修改。刘娜来用餐以后,可以将其信息从纸上划去 编写程序处理电话订餐的情况
实验步骤:
首先建立结构体类型,然后函数声明,编写主函数,定义函数,调用函数。完成后,对程序进行调试,确定所编写的程序是否能够运行。
实验内容:
#include
void insert(int *p);void inquire(int);void change(int);void dele(int *p);void show(int);
void main(){ inti;int count=0;do {0 printf(“1.......插入n”);printf(“2.......查询n”);printf(“3.......修改n”);printf(“4.......删除n”);printf(“5.......显示n”);printf(“6.......退出n”);scanf(“%d”,&i);switch(i){ case 1: insert(&count);break;case 2: inquire(count);break;case 3: change(count);break;case 4: dele(&count);break;case 5: show(count);break;case 6:break;default:printf(“输入错误!”);break;} }while(i!=6);} void insert(int *p){ inti,number;if(*p==max){ printf(“用餐已满n”);return;} printf(“请输入编号:”);scanf(“%d”,&number);for(i=0;i<*p;i++)
if(guestlink[i].num==number)
{ printf(“已有相同的编号”);return;}
guestlink[i].num=number;
printf(“请输入姓名:”);scanf(“%s”,guestlink[i].name);
printf(“请输入人数:”);scanf(“%d”,&guestlink[i].sum);printf(“请输入用餐时间:”);scanf(“%s”,guestlink[i].time);(*p)++;} void inquire(int p){ inti,number,flag=1;printf(“请输入要查询的编号”);scanf(“%d”,&number);for(i=0;i
if(guestlink[i].num==number){ printf(“姓名:%s”,guestlink[i].name);printf(“用餐时间:%s”,guestlink[i].time);printf(“人数:%dn”,guestlink[i].sum);flag=0;}
if(i>=p&&flag==1)printf(“所查询的编号不存在”);
}
void change(int p){ inti,number,flag=1;printf(“请输入要修改的编号”);scanf(“%d”,&number);for(i=0;i
scanf(“%s”,guestlink[i].name);
printf(“请输入用餐时间:”);scanf(“%s”,guestlink[i].time);printf(“请输入人数:”);
scanf(“%d”,&guestlink[i].sum);flag=0;} if(i>=p&&flag==1)printf(“所查询的编号不存在”);}
void dele(int *p){ inti,j,number,flag=1;printf(“请输入要删除的编号”);scanf(“%d”,&number);for(i=0;i<*p&&flag;i++)if(guestlink[i].num==number){for(j=i;j<*p-1;j++)
guestlink[j]=guestlink[j+1];flag=0;
(*p)--;
} if(i>=*p&&flag==1)printf(“输入的编号不存在”);}
void show(int p){ inti;printf(“编号 姓名 用餐时间 人数n ”);for(i=0;i
实验结果:
实验体会:
通过这次实践让我觉得用C语言在生活中的应用占有很大的比重,这次编程,让我体会到了学习C语言的乐趣,以及运用c语言给人们带来的方便。作为一名初学者,我了解到了计算机语言的神秘性和逻辑性,将算法与数据结构的充分结合,体现了程序的内涵,也同时展现了C语言的深度。也是因为这次实践的过程,加深了我对c语言的兴趣,也意识到学习c语言是需要耐心和细心的。只有透彻的学习,才能有熟练的运用。
第二篇:C语言实践报告(范文)
实
验
报
告
二级学院:信息与工程学院
系别:计算机科学与技术系
专业:信息管理与信息系统
课程名称:高级语言程序设计
班级:姓名:
实验名称:
电话订餐信息处理 实验目的:
题目要求:
一个小饭馆的生意非常红火,要想用餐必须提前一天打电话预订,假设我们是饭馆负责接受
电话预订的服务员,我们需要做些什么呢?首先,需要准备一张大小适当的白纸,等待顾客的电话。李红最先打进了电话,她预约第2天中午12点用餐,用餐人数5人,服务员在纸上做了如下记录:“李红 12点 5人”;接着,刘娜、汪涵、孙杰和赵君分别来了电话,服务员根据他们的要求做了记录,此时纸上记录的内容是: 李红 12点 5人
刘娜 11点 2人
汪涵 11点20分 3人
孙杰 10点30分 5人
赵君 13点20分 6人
孙杰随后又来电话,将用餐时间推后一个小时,那么记录的内容也应该做相应的修改。刘娜来用餐以后,可以将其信息从纸上划去
编写程序处理电话订餐的情况
实验步骤:
首先建立结构体类型,然后函数声明,编写主函数,定义函数,调用函数。完成后,对程序进行调试,确定所编写的程序是否能够运行。
实验内容:
#include =p&&flag==1)printf(所查询的编号不存在);} void change(int p){ inti,number,flag=1;printf(请输入要修改的编号);scanf(%d,&number);for(i=0;i =p&&flag==1)printf(所查询的编号不存在);} void dele(int *p){ inti,j,number,flag=1;printf(请输入要删除的编号);scanf(%d,&number);for(i=0;i<*p&&flag;i++)if(guestlink[i].num==number){for(j=i;j<*p-1;j++)guestlink[j]=guestlink[j+1];flag=0;(*p)--;} if(i>=*p&&flag==1)printf(输入的编号不存在);} void show(int p){ inti;printf(编号 姓名 用餐时间 人数n);for(i=0;i 中南大学 本科生课程设计(实践)报告 (c语言)题 目 指导教师 学 院 专业班级 学生学号 学生姓名 全国各省会城市天气情况统计 计算机基础教学实验中心 2007年 9 月 10 日 目 录 1.1 课程设计内容概述:„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„.1 1.1.1实践背景知识:„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„.1 1.1.2实践内容:„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1.3实践目的及意义:„„„„„„„„„„„„„„„„„„„„„„„„„„„„.„2 1.2设计方案及实现过程:„„„„„„„„„„„„„„„„„„„„„„„„„„„„„..2 1.2.1总体设计思路:„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„.2 1.2.2程序设计流程图(主函数):„„„„„„„„„„„„„„„„„„„„„„„3 1.2.3操作步骤及设计成果:„„„„„„„„„„„„„„„„„„„„„„„„„„3 2.1方法技巧及所遇到的问题:„„„„„„„„„„„„„„„„„„„„„„„„„„...5(转载于:c语言实践报告)2.1.1实践方法的归纳总结:„„„„„„„„„„„„„„„„„„„„„„„„„„5 2.1.2问题及解决办法:„„„„„„„„„„„„„„„„„„„„„„„„„„„„„6 2.2实践的心得与体会:„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„6 1.1课程设计内容概述: 1.1.1 实践背景知识: 计算机技术的发展和广泛应用,正深刻地改变着现有的社会生产方式和生活方式,成为信息社会的重要支柱。信息化社会对人才的培养提出了更高的要求和标准。掌握和了解计算机技术并具有应用计算机的能力是适应信息化社会的基础。c语言是近年来在国内外得到迅速推广应用的一种计算机语言。其功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。因此,c语言特别适合于编写系统软件。 现在,c语言已不仅为计算机专业工作者所使用,而且为广大计算机爱好者所青睐,许多人已经用它编写应用软件。如今,学习c语言已成为众多计算机应用人员和青年学生的迫切要求。 1.1.2实践内容: 上网查询各省会城市某日最高、最低气温和湿度,将数据(城市名称、最高气温、最低气温、湿度)以统一格式保存在一个纯文本文件a.txt中。编程实现: a.从文件a.txt中读取数据,计算全国省会当日的最高气温、湿度的平均值,统计最高气温高于平均值的城市数; b.按湿度升序排序,将排序后的数据存入文件b.txt中; c.计算各城市温差,计算自己所在省的省会城市温差在各省会城市中的排名; d.统计最高气温在10℃以下、10℃∽20℃、20℃∽30℃、30℃以上的城市数,并绘制分布饼图和折线图。1.要求: a.利用子程序,分模块实现; b.所有数据采用文件形式保存; c.数据的组织可采用数组,也可用结构体数组。1.1.3实践目的及意义: 通过对书本知识的自学和理解,掌握用c语言编写实用程序和设计自定义用户界面的基本方法,培养利用程序设计技术进行计算机与专业知识的交叉应用,增强综合解决实际问题的能力,掌握多模块结构的程序设计与调试方法以及程序模块间的数据传递方法,建立提出问题、分析问题、解决问题的思维方式,提高自身计算机水平,促进灵活运用所学知识解决问题能力的提高。 1.2设计方案及实现过程: 1.2.1总体设计思路: 1.将上网查询的数据保存在纯文本文档里,所编写的程序包括一个主函数和四个子函数,主函数主要是定义由文件中各类数据组成的结构体和供运行者选择的分支结构。2.第一个自定义函数功能为:调用特定的库函数从文件中读取数据,此处应注意已保存文本的格式和函数中定义的数据类型,再采用循环结构将最高温度和湿度值累加求平均值,最高气温高于平均值的城市数目也可通过循环结构计算出来。3.第二个自定义函数功能为:将文件中各个城市的湿度值读出来,采用选择排序或者冒泡排序法将所有数值从小到大排列,再调用fprintf函数,把排列好的数据存入指定名称的文本文档中。4.第三个自定义函数功能为:利用循环结构把各城市最高温与最低温相减,将所得差值定义为一个数组,并显示在屏幕上,然后从第一个城市开始,和长沙市的温差比较,将大于长沙市的城市数目累加,即得出本市的具体排名。5.第四个自定义函数功能为:先将各城市的最高气温除十以方便计算,再采用switch语句,通过循环结构读出各温度段的城市数目并累加,把所得结果用饼状图和折线图显示在屏幕上。1.2.2程序设计流程图(主函数): 1.2.3操作步骤及设计成果: 1、定义文件名、文件指针、结构体数组和需要用到的自定义函数,为方便编程过程中的修改,将城市数目定义为宏。#include 2、编写主函数,利用输出函数输出一些中文提示语句以方便运行时选择。为使运行时界面清晰,还可以用几行*******和--------符号隔开。main()篇三:c语言实习报告 设计报告 一,实验目的: 通过上机实习,熟练掌握循环语句、选择语句、指针以及结构体的运用技巧。在实习中通过实际操作,编写程序,发现问题,最后解决问题,提升对c语言实用性的理解,在实践中巩固各知识点。c语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点,上机实习可以帮助我们更好地理解这种结构式的中级语言以及其各式各样的数据类型和高效率的运算程序,为我们进一步学习c++打下坚实基础。 同时,在实习过程中,通过互相发现问题,共同解决问题,不仅锻炼了我们的合作能力,而 且也让我们发现了一些自己的个人误区以及其他人容易犯的错误,从而在今后的学习中更加谨慎,达到事半功倍的效果;通过询问老师,也让我们养成了不耻下问的好习惯,这将很有利于以后的学习。 闲乐-一个人闲。不如大家一块儿乐/retype/zoom/9861aabdfd0a79563c1e72ad?pn=2&x=0&y=0&raww=312&rawh=443&o=jpg_6_0_______&type=pic&aimh=443&md5sum=5742db4fcffa47783d15ae929b606fc2&sign=8d2e99c900&zoom=&png=276-8578&jpg=0-25354“ target=”_blank">点此查看 <通过冒泡法对数组进行排序> <测试时由于循环语句循环次数的错误导致部分数据没有排序,修改for语言中的条件即可调试成功> 2,程序: #include for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(a[j] a[10]=b;else {for(i=0;i<10;i++) {if(a[i] {temp1=a[i];a[i]=b;for(j=i+1;j<11;j++){temp2=a[j];a[j]=temp1;temp1=temp2;}break;} } } printf(11个学生成绩数组:n); for(i=0;i<11;i++)printf(%5d,a[i]);printf(n);for(i=0;i<5;i++) { temp3=a[i];a[i]=a[10-i];a[10-i]=temp3;} printf(排好序的成绩单进行反序存放为:n);for(i=0;i<11;i++) printf(%5d,a[i]);printf(n);return 0;} 3,运行结果: //输入11个学生成绩 //排好序的成绩单进行反序存放 //输出反序存放后的学生成绩数组 2,根据条件进行学生成绩排名 1 sort1 篇四:c语言实践报告 c语言大型作业实践报告 目录 一.题目„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„..3 二.设计思路流程图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„.3 三.程序运行实时截图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„6 四.程序源代码„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„.13 五.程序说明„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„...36 六.程序编写时遇到的问题及解决办法„„„„„„„„„„„„„„„„„„„„„„„37 七.体会„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„38 一.题目:选修课程管理系统 要求:假定有n门选修课,每门课有课程编号、名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期等信息。学生可按要求(如总学分不能少于20学分)选课。? 课程信息维护,如录入、修改、删除等,课程信息用文件保存。? 课程信息浏览—输出。? 学生选课功能。? 查询功能包括:按学分、课程性质、学生等查询。? 统计功能。统计各门课程的选修人数。 ? 本系统要有通用性、界面美观、操作方便。要考虑系统安全。 具体算法流程设计思路(流程图): 篇五:c语言实训报告 《c语言程序设计》实训报告 课题名称: 通讯录管理系统 专 业: 计算机信息管理 班 级: 09信管(1)班 学 号: 姓 名: 指导教师: 2010 年 7 月 1 日 目 录 课程设计目的??? 1 2 课程设计题目??? 1 3 课程设计报告内容? 1 4 结论??? 10 5 结束语?? 10 6 参考书目? 10 7 程序运行? 10 8 附录:(源程序清单)12 一、课程设计题目 《通讯录管理系统》 二、实训目的(1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。(2)掌握c的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的c语言源程序并具备基本c语言程序设计的能力。(4)熟练掌握各种常用类的定义,继承,文件的应用,为更好的理解面向对象打下更好的基础。 (5)通过实训,培养自己编写、调试、分析大型应用程序的能力。 (6)掌握面向对象的基本原理,提高学生综合程序设计的能力。 (7)培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。 (8)培养自己良好的学习兴趣,独立的编程风格。 (9)通过实训检查自己学习上的不足,达到熟练掌握c语言的基本知识和技能。 三、课程设计报告内容 3.1功能要求 该系统运行在dos环境下,人机界面为命令行文本界面。完成的任务是对若干人的通信录信息进行管理,且数据保存到文件中。 实现的主要功能是: ? 添加:增加一个或几个人的通信录信息。? 删除:删除已输入的通信录信息。? 查询:根据输入的姓名查找通信录信息。? 修改:根据输入的姓名修改通信录信息。? 显示:输出所有通信录信息。3.2 设计环境 所使用的语言采用标准c,开发工具选用在windows环境下的c-free、win-tc或者visual c++ 6.0。 3.3 数据结构 本系统是对通信录的信息进行管理,通信录记录的信息采用c的结构体数据类型描述,定义如下: struct ren /*定义个人资料结构体类型*/ { char name[10];/*姓名*/ int age;/*年龄*/ char tel[12];/*电话号码*/ char city[20];/*城市 */ char units[30];/*所在单位*/ char note[20];/*备注*/ };3.4实现方法及主要算法分析(1)主界面的设计:主界面采用文本菜单的形式,各功能调用通过菜单进行选择。采用循环处理,以便执行完某项处理后,仍可选择其他项处理。在循环内先显示提示信息,然后读取用户输入,使用switch语句对用户的输入进行判断,分别调用相应的模块,当某模块结束后再次回到文本菜单,直到用户选择结束程序菜单,才退出循环,从而退出系统。(2)外部文件的类型:文件采用的二进制的文件,对文件的读写采用顺序文件的方式,并使用fread和fwrite等函数对文件进行操作。 (3)清屏函数:一般由上一级菜单屏幕进入下一级菜单屏幕或由下一级菜单屏幕返回上一级菜单屏幕都需要清除屏幕原来显示的内容。同时在调用程序的过程中,记录需要清屏的位置,然后修改代码,加入clrscr()函数清屏。 (4)提示信息:一般的输入与输出需有相应的提示信息,以增加用户的交互性,增加输出的可读性,以帮助用户使用程序。 (5)设置颜色:textbackground()、textcolor()函数设置背景和前景颜色(6)光标定位:gotoxy(列,行);光标定位 3.5模块设计 根据功能要求,本系统为五大主要模块,具体模块如表所示。 北京理工大学珠海学院 C语言程序设计实践报告 2014—2015学年第1学期 学 院: 计算机学院 专业班级: 软件工程5班 学 号: ***6 学生姓名: 陈洪阳 指导教师: 戴俊雅 成 绩: 时 间: 2015年 1月5日 实践1.猜数游戏 题目概述: 编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。 程序设计概要与分析: 在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。 程序代码: #include int main(){ int n=1;while(n!=0){ srand((unsigned)time(NULL));int num,input;int times=0;num=(rand()%100)+1;printf(“在1~100间猜一个数n”);scanf(“%d”,&input);do{ if(input==num){ } else if(input>num){ } else if(input } } } printf(“你猜的数太小了,请再猜一个n”);scanf(“%d”,&input);times++;}while(times<9);if(times>=9)printf(“你已经猜了10次都猜不中,你输了n”);printf(“继续下一轮新的猜数请按1,退出请按0n”);scanf(“%d”,&n);return 0;运行结果示例: 选择继续下一轮新的猜数,猜了10次都没猜中 心得体会: 要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。 实践2.成绩排名次 题目概述: 某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求:(1)计算每个学生的总分和平均分; (2)按总分成绩由高到低排出成绩的名次; (3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。 程序设计与概要: 定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名 打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。 程序代码: #include void input(student s[]);void title(); void list(student s[]);int main(){ input(s);int i=0;for(i=0;i //要求1 计算总分平均分 s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2]; s[i].ave=(float)s[i].sum/3;} //要求2 按总成绩排序 int rank=1;student t;for(i=0;i for(int j=i+1;j { if(s[i].sum { {t=s[i]; s[i]=s[j]; s[j]=t; } } } s[i].rank=rank; rank++;} //要求3 打印名次表 title();list(s);//要求4 查询 int number;printf(“请输入你要查询学生的学号:n”);scanf(“%d”,&number);for(int i=0;i if(number==s[i].num) { printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”); printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank); } } system(“pause”);return 0;} void input(student s[]){ printf(“输入班上参加期末考试的人数(不大于30人)”);scanf(“%d”,&amount);printf(“请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩n”);for(int i=0;i printf(“第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩n”,i+1); scanf(“%u%s%d%d%d”,&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]);} } void title(){ printf(“ 学生成绩表n”); printf(“-----------------------------n”); printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”); printf(“-----------------------------n”);} void list(student s[]){ //n表示人数 int i;//rank=1;for(i=0;i printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank); printf(“-----------------------------n”);} } 运行结果示例: 确定录入人数之后,依次输入每个学生的信息 打印出名次表: 输入学生的学号,查询学生信息: 心得体会: 懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。 实践3.单科成绩统计 题目概述: 学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实 现下列功能:(1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;(3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8(…)******** 70‐79 7(…)******* 80‐89 8(…)******** >=90 4(…)**** 程序设计与概要: 定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n1、n2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。 程序代码: #include void getavg(stu s[]);void percent(stu s[]);int main(){ /*stu s[M];int i=0,num=0;int n1=0,n2=0,n3=0,n4=0,n5=0;float sum=0,ave=0;*/ input(s);getnotpass(s);getavg(s);percent(s);return 0;} void input(stu s[]){ for(i=0;i printf(“请输入第%d个学生的姓名和成绩n”,i+1); scanf(“%s%d”,&s[i].name,&s[i].score); if(s[i].score<0) break; if(s[i].score>=0&&s[i].score<60) n1++; if(s[i].score>=60&&s[i].score<70) n2++; if(s[i].score>=70&&s[i].score<80) n3++; if(s[i].score>=80&&s[i].score<90) n4++; if(s[i].score>90) n5++; num++; sum+=s[i].score;} printf(“学生信息录入完毕nnn”);} void getnotpass(stu s[]){ printf(“不及格人数为:%dn”,n1);printf(“不及格人员名单如下:n”);for(i=0;i if(s[i].score>=0&&s[i].score<60) printf(“%st”,s[i].name);} printf(“n”);ave=sum/num;} void getavg(stu s[]){ for(i=0;i if(s[i].score>=ave)count++;} printf(“成绩在全班平均分及平均分之上的学生人数为:%dn”,count);printf(“成绩在全班平均分及平均分之上的学生名单如下:n”);for(i=0;i if(s[i].score>=ave) printf(“%st”,s[i].name);} printf(“nnn”);} void percent(stu s[]){ printf(“各分数段的学生人数及所占的百分比如下:n”);printf(“分段t 人数t 图形n”);printf(“<60t%d(%.0f%%)t ”,n1,(float)n1/(float)num*100);for(i=0;i 运行结果示例: 依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入: 统计不及格人数还有打印不及格学生名单: 统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单: 以直方图方式统计各分数段的学生人数及所占的百分比: 心得体会: 懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。 实践4.函数与文件训练 题目概述: 将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中 包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。 程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen(“f: st udent.txt”,“w”),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。 程序代码: #include void input(student s[]);void title();void list(student s[]);int save();//输出到文件中 int main(){ input(s);int i=0;for(i=0;i //要求1 计算总分平均分 s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2]; s[i].ave=(float)s[i].sum/3;} //要求2 按总成绩排序 int rank=1;student t;for(i=0;i for(int j=i+1;j { if(s[i].sum { {t=s[i]; s[i]=s[j]; s[j]=t; } } } s[i].rank=rank; rank++;} save();//要求3 打印名次表 title();list(s);//要求4 查询 int number;printf(“请输入你要查询学生的学号:n”);scanf(“%d”,&number);for(int i=0;i if(number==s[i].num) { printf(“学号t姓名t数学t英语tC语言t总分t平均分t排名n”); printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank); } } system(“pause”);return 0;} void input(student s[]){ printf(“输入班上参加期末考试的人数(不大于30人)”);scanf(“%d”,&amount);printf(“请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩n”); for(int i=0;i printf(“第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩n”,i+1); scanf(“%u%s%d%d%d”,&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]);} } int save(){ FILE *fp;fp=fopen(“f:student.txt”,“w”);if(!fp){ printf(“can not open file!n”); exit(1);} char c[]=“学号t 数学t 物理t 英语t 排名n”;fputs(c,fp);for(int i=0;i fprintf(fp,“%ut %dt %dt %dt %dn”,s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank);} fclose(fp);} void title(){ printf(“ 学生成绩表n”); printf(“-----------------------------n”); printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”); printf(“-----------------------------n”);} void list(student s[]){ int i;for(i=0;i printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank); printf(“-----------------------------n”);} } 运行结果示例: 首先输入准备录入的学生人数,然后依次输入每个学生的信息: 打印出按总成绩排序后的学生信息表,以及根据学号查询: 在f盘中找到文件并打开: 心得体会: 懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen(“f: st udent.txt”,“w”),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。 实践5.实践4(1)(2)题目概述: 每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求: 1.定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。2.函数实现从文件中输入信息到定义的数据中。 程序设计与概要: 定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。 程序代码: #include };struct sxy { int id;char sex[4];};struct scode { int id;char dept[20];};int main(){ struct student stu[100];struct sxy s1[2];struct scode s2[10];int n,m,k;n=readData(“f:StudentInfo.txt”,stu);m=readDataxy(“f:SexInfo.txt”,s1);k=readDataco(“f:CodeInfo.txt”,s2);if(n==-1||n==0) return 0;if(m==-1||m==0) return 0;if(k==-1||k==0) return 0;printStudent(stu,s1,s2,n,m,k); system(“pause”);return 0;} int readData(char *filename,struct student *stu){ FILE *fp;int i=0,j;fp=fopen(filename,“r”);if(!fp){ printf(“error1”); return-1;} fscanf(fp,“%d”,&stu[i].id);while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束 { fscanf(fp,“%s%d%d”,stu[i].name,&stu[i].sexno,&stu[i].deptno); for(j=0;j<10;++j) fscanf(fp,“%d”,&stu[i].scores[j]); ++i; fscanf(fp,“%d”,&stu[i].id);} return i;} int readDataxy(char *filename,struct sxy *s1){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){ printf(“error2”); return-1;} fscanf(fp,“%d”,&s1[i].id);while(!feof(fp)){ fscanf(fp,“%s”,s1[i].sex); ++i; fscanf(fp,“%d”,&s1[i].id);} return i;} int readDataco(char *filename,struct scode *s2){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){ printf(“error3”); return-1;} fscanf(fp,“%d”,&s2[i].id);while(!feof(fp)){ fscanf(fp,“%s”,s2[i].dept); ++i; fscanf(fp,“%d”,&s2[i].id);} return i;} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k){ int i,j;printf(“ 学生信息统计n”);for(i=0;i for(j=0;j { if(stu[i].sexno==s1[j].id) { strcpy(stu[i].sex,s1[j].sex); } } } for(i=0;i for(j=0;j { if(stu[i].deptno==s2[j].id) { strcpy(stu[i].dept,s2[j].dept); } } } for(i=0;i printf(“%d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept); for(j=0;j<10;++j) printf(“%4d”,stu[i].scores[j]); printf(“n”);} } 运行结果示例: 心得体会: 懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体 数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。 实践6.实践4(3)(4)(5)题目概述: 每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求: 3.函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。4.函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。 5.函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。 程序设计与概要: 同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。 程序代码: #include { int id;char name[10];int sexno;char sex[4];int deptno;char dept[20];int scores[10];double ave;};struct sxy { int id;char sex[4];};struct scode { int id;char dept[20];};int main(){ struct student stu[100];struct sxy s1[2];struct scode s2[10];int n,m,k,b;while(1){ system(“cls”); printf(“1.显示学生信息n”); printf(“2.姓名升序排序n”); printf(“3.平均成绩降序n”); printf(“4.学号查询学生信息n”); printf(“0.退出n”); printf(“n输入需要查询的序号:”); scanf_s(“%d”,&b); switch(b) { case 1: n=readData(“f:StudentInfo.txt”,stu); m=readDataxy(“f:SexInfo.txt”,s1); k=readDataco(“f:CodeInfo.txt”,s2); if(n==-1||n==0) return 0; if(m==-1||m==0) return 0; if(k==-1||k==0) return 0; printStudent(stu,s1,s2,n,m,k); break; case 2: sortbyname(stu,n); break; case 3: printf(“按平均成绩降序排序如下:”); sortbyave(stu,n); printStudent(stu,s1,s2,n,m,k); break; case 4: search(stu,n); break; case 0: return 0; } system(“pause”);} system(“pause”);return 0;} int readData(char *filename,struct student *stu){ FILE *fp;int i=0,j;double sum;fp=fopen(filename,“r”);if(!fp){ printf(“error”); return-1;} fscanf(fp,“%d”,&stu[i].id);while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束 { fscanf(fp,“%s%d%d”,stu[i].name,&stu[i].sexno,&stu[i].deptno); for(j=0;j<10;++j) { fscanf(fp,“%d”,&stu[i].scores[j]); sum=stu[i].scores[j]; } stu[i].ave=sum/10; ++i; fscanf(fp,“%d”,&stu[i].id);} return i;} int readDataxy(char *filename,struct sxy *s1){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){ printf(“error2”); return-1;} fscanf(fp,“%d”,&s1[i].id);while(!feof(fp)){ fscanf(fp,“%s”,s1[i].sex); ++i; fscanf(fp,“%d”,&s1[i].id);} return i;} int readDataco(char *filename,struct scode *s2){ FILE *fp;int i=0;fp=fopen(filename,“r”);if(!fp){ printf(“error3”); return-1;} fscanf(fp,“%d”,&s2[i].id);while(!feof(fp)){ fscanf(fp,“%s”,s2[i].dept); ++i; fscanf(fp,“%d”,&s2[i].id);} return i; } void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k){ int i,j;printf(“ 学生信息统计n”);for(i=0;i for(j=0;j { if(stu[i].sexno==s1[j].id) { strcpy(stu[i].sex,s1[j].sex); } } } for(i=0;i for(j=0;j { if(stu[i].deptno==s2[j].id) { strcpy(stu[i].dept,s2[j].dept); } } } for(i=0;i printf(“%d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept); for(j=0;j<10;++j) printf(“%4d”,stu[i].scores[j]); printf(“n”);} } void search(struct student *stu,int n){ int m,col=0;printf(“请输入你要查询学生的学号:n”);scanf(“%d”,&m);for(int i=0;i if(stu[i].id==m) { col=1; printf(“%d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept); for(int j=0;j<10;++j) { printf(“%4d”,stu[i].scores[j]); } } } if(col==0)printf(“不存在该名学生信息n”);} void sortbyname(struct student *stu,int n){ student temp;for(int i=0;i for(int j=0;j { if(strcmp(stu[i].name,stu[j].name)>0) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } } printf(“按姓名的升序排序如下!n”);for(int i=0;i printf(“%8d%8s%4s%12s”,stu[i].id,stu[i].name,stu[i].sex,stu[i].dept); for(int j=0;j<10;++j) { printf(“%4d”,stu[i].scores[j]); } printf(“n”);} } void sortbyave(struct student *stu,int n){ int i,j,flag;student s;for(j=0;j flag=0; for(i=0;i { if(stu[i].ave { s=stu[i]; stu[i]=stu[i+1]; stu[i+1]=s; flag=1; } } if(flag==0)break;} } 运行结果示例: 开始的菜单界面: 输入1便会显示文件中所有学生的信息: 输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出: 输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出: 输入4便会实现根据学号查询学生信息: 心得体会: 懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。 参考文献: [1] 张克军:《程序设计基础》,科学出版社。 c语言实践报告总结2篇 一、实习时间:20xx年x月x日—20xx年x月x日 二、实习地点:第一微机室 三、实习目的: 1、熟悉我们自己所用的计算机的C语言开发环境,并且能够熟练掌握,达到错误能找到原因并且加以改正。 2、加深对课本理论知识的理解,进一步掌握书中重点、难点实例,锻炼自己的编写程序能力和实际应用能力。 3、上机调试程序的过程中,发现错误,解决错误,保证程序的正确运行,运行结果与给定结果完全相同。 4、学会用书中基本知识解决实际中的一些问题,将书本所学的内容与实际操作相结合,掌握把实际问题转变为C语言描述的算法的方法,明确思路。将自身的不足与缺陷改掉,养成良好编辑风格 5、培养我们的主观能动性、沟通、表达能力和团队合作意识,为我们以后的发展打下基础。 四、实习内容及方法: 在本次实习中,我们采用了由浅及深、由易到难的实习方法,而且也是按照书本的教学进程内容进行的,同时采取了实际应用与理论相结合的方法,在机房里面实习,一边理解,思考做题的思路与解法,另一边就可以马上进行上机实际操作。这对于我们加深对C语言的理解、操作以及动手能力都有了很大的帮助与提高。 实训的内容主要分为了七个版块: 第一版块: 1、Turbo C运行环境。 了解TC的基本环境,熟悉常用菜单项和快捷键:在这一小节中,需要熟练的掌握并应用Turbo C的运行环境,和基本配置。Turbo C是在计算机上广泛使用的一个C语言开发环境,它具有方便、直观、易用的界面和丰富的函数库。它把程序的编辑、编译、连接和运行等操作去不都集中在一个界面上进行,使用非常方便。并且Turbo C不需要特别安装,只需要将其拷贝到硬盘上就可以使用了。为了方便管理用户的程序文件和维Turbo 的运行环境,客户应在机子 上建立自己的工作目录,一边用来存放自己所需要开发的源程序文件。下面就是建立怎样自己文件夹,在空白区域内输入自己所建立的文件夹路径即可。 2、C程序的编辑、编译、连接和运行过程。 掌握C程序的运行步骤,初步了解C程序的特点。在Turbo C的运行中,快捷键使用非常方便,只需Ctrl+菜单栏中菜单名的首字母即可。 上面是一个程序编译与链接的截屏。第一个Compile to OBJ将源程序编译为OBJ文件,Make EXE file 编译连接一次进行,Link EXE file将OBJ文件连接为EXE文件。 3、环境的熟悉,自己按照软件并在软件中能够调试简单的C语言程序。 第二版块: 1、C语言数据类型:整型、实型、字符型。 C语言的函数类型非常丰富,除了这几类以外,还有实型、数组、指针、结构体等,在这一小节中,主要了解关于数据类型的定义、用法以及他们的存储类型,一边与以后灵活运用。 C语言中还有常量与变量之分,常量是在程序执行过程中其值不变的量。二且在C语言中常量不需要类型说明就可以直接使用,常量的类型是由常量的本身隐含决定的。 2、运算符及表达式。 在C语言中,预算符非常丰富运算灵活,常用的有以下几个: (1)算术运算符:+、-、*、/、%(取余)及++(自增)、--(自减)。 (在这里需要注意的是:“/”运算符,在C语言中两边都是整数的话,运算结果只取整数部分;“%”他的两边都必须是整数才可以运行;“**、--”运用这个运算符时要注意“先用后加(减)、先加(减)后用”的问题) (2)赋值运算符:=及复合赋值运算符(+=、-=、*=、/=、%=等)。 (在这里需要注意的是“=、==”的区别,要明确用法及所用的地方,“=”它的作用是赋值,“==”它的作用是判断相等) (3)逗号运算符:,(对于逗号表达式索要注意的是要明确它所用的地方以及在使用时所要注意的细节)。 了解三种运算符的优先级,掌握三种运算符及相应表达式的应用(详见附录)。 第三版块:在这一节里,我们实习了C语言的三大结构: 1、顺序结构: 2、选择结构:if„„else,switch语句。 在这里许啊哟我们学习的很多,因为只要是程序,就脱离不了这个三大结构的范畴。在这个学习里我编写了 (1)、输入某年某月某日,判断这一天是这一年的第几天?。 (2)、给一个不多于5位的正整数,要求: 一、求它是几位数,二、逆序打印出各位数字。 (3)、某市不同车牌的出租车3公里的起步价和计费分别为:夏利7元,3公里以外,元/公里;富康8元,3公里以外,元/公里;桑塔纳9元,3公里以外,元/公里。编程:从键盘输入乘车的车型及行车公里数,输出应付工资。 源程序减附录; 经过这几个程序的练习,让我聊股的掌握了选择语句的用法以及精髓,同是这个用法和技巧已经深深的可在了我的脑海里,还有同过这些个程序的编写,让我对以前有的丝丝而非的地放完全通透理解,获益匪浅。 循环结构:while、do-while、for 在循环这一节里,我们主要做了以下程序: (1)、求200-300之间所有素数,每5个换行。 (2)、猜数字游戏。规则为:输入一个0-10之间的数字,有5次猜测机会。如果输入0-4之间的数字,提示“太小了”;如果输入5-7之间的数字,提示“接近了”;如果输入9-15之间的数字,提示“太大了”;如果输入8,提示“correct!”;如果次数超过5次,提示“没有机会了,退出!”。 (3)、打印输出如下图形:(“◇”菱形) (4)、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 提示:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 (5)、打印输出九九乘法表。 我以前就对循环这一节里的内容就理解的比较好,现在做这些题很顺利的就做下去了,但在做的同是也会出现以写小的问题,但这个让我也更深一步的理解了循环语句的用法、思路以及其中的精华。 总的对这一节来说,使自己更神一步的理解了选择、过程中需要注意的一些细节问题。 第四版块: 1、一、二维数组的定义、引用及初始化。初始化: 一维数组:初始化赋值的一般形式为: static 式]={值,值„„值};其中static表示是静态存储类型,态存储数组和外部存储数组才可作初始化赋值二维数组: a.可以只对部分元素赋初值,未赋初值的元素自动取b.如对全部元素赋初值,则第一维的长度可以不给出。 2、一、二维数组的应用。 在一维数组的应用中,要与循环嵌套使用,用,但是在这里,嵌套还要是循环的嵌套,因为只有这样使用才可以使程序更加简洁、简便。就像第五题:有一个班4个学生,(1)求每一门课程的平均分;(2)求每一个学生的平均分; 思路:定义一个二维数组,用二重循环输入这个数组,然后进行相加,在求平均直,最后在用二重循环进行输出。 循环的用法以及在使用类型说明符 数组名={“C Language”}char st;st={“C Language”};而只能对字符数组的各元素逐个赋值。 3、指针数组及指向指针的指针 指针数组的说明与使用一个数组的元素值为指针则是指针数组。是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。 指针数组说明的一般形式为: 类型说明符在指针这一小节,主要是用指针实现:输入数对换,把最大的数与最后一个数对换。写3个函数:输入个数。 在这里进行函数的调用,一个输入函数,一个操作函数,一个输出函数。 i赋予它。 而字符’作为串的 而对字符可以写为: char *ps;不能写为: 指针数组*数组名 10个整数,将其中最小的数与第一个 10个数;进行处理;输出10 用于存放字符串的首地址。在这里用数组实现了输入。 在这里用指针实现了将最小的数与第一个数对换,把最大的数与最后一个数对换。 在最后进行输出。第七版块: 实训七属于一个综合类型的题目,他要求的比较高,必须在自己王权理解通透了课本知识以后才有可能理解这道题,并且进行修改完善。主要这道题本身是在VC环境下运行的,将其移植到Turbo C环境下运行,这其中牵扯到一些语法不同,在Turbo C中不可以运行,要进行慢慢调试。经过不懈的努力、修改,终于将其成功的在Turbo C环境下可以正常运行了。(详见附录) 五、结论 收获 我的收获:在本次实习中,我学到了很多实际有用的东西,而且基本上都是在课本上学不到的,并且也在实习中梳理了自己对C语言这门课程所学的所有内容,让自己对C这门课程有了更进一步的认识,有了一个良好的基础,为自己的以后打下了坚实基础。从开头到现在,所有的内容实习完了,上机实验是学习程序设计语言必不可少的实践环节,在 C语言灵活、简洁中,更需要通过编程的实践来真正掌握它。 历时4天的《C语言程序设计》已经结束了,在这几天编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。 首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这几天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点,以及每个可能出错的地方,更会特别仔细,生怕自己一不小心搞错了,而导致整个程序都无法运行。 其次,在编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺,为自己以后的人生道路打下了良好基础,同时也让我对每一件事都有了一个好的心态去对待它,更让自己在编写程序的过程中每时每刻都处于充足的状态。 再次,通过几天综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便,更加灵活,以前有好多题目要写十行八行的,还有些地方弄得不是太懂,现在只需要五六行就可以搞定,而且还对于思路特别清晰、明确。 第四,在实习结束后,我对做完的习题检查比再是一切的走马观花,而是仔细核对、认真检查,和以前相比明显改善了好多,以前自己对于检查程序总是没有耐心,不好好检查,有问题总是找老师,相对于实习之后来说,有了很大的改善,自己不但可以坐下来耐心检查,还能够自己将程序调试成功,这对于现在的我来说是一个明显的进步。 第五,通过实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。 第六,通过实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。 第七,在学习过程中,由于天气炎热,心里烦躁,同时也是每天都盯着频幕看,脑袋都看大了,但是我却一直坚持了下来,这对于我来说,也是一个非常好的习惯。这同时也是我的一个收获。 第八,实训过程中,充分发挥团队协作精神,共同进步,帮助同学顺利完成实训课程,有困难一起解决,同时也使我在他们身上学到了很多东西。 总之,通过实习使我自身的知识体系得到巩固、提高以及使团队工作的能力得到锻炼。 不足 我的不足: 首先,我的第一个,同时也是一个最大的缺点,自己对于理论知识掌握的还不是很通透,理解的不够彻底,对于一些问题似似而非,给自己编写程序的过程中带来了很大的麻烦。 其次,我不能够精心的去完成每一个程序,对于每个程序而言,都是马马虎虎,只要运行结果是对的,那就可以了。虽然我自己也知道这样是不好的,但是自己就是不愿意去改,在经过实习之后虽然有所改善,但在我看来,改进的不是很大。 第三,自己做题时还有些马虎,一些小的细节在编写程序过程中不注意,只有在编译连接是才可以发现、对其进行修改,对于一些小程序还不能实现一次就可以完成编译连接。 第四,做题时自己不能心平气和的去做。 第五,自己的子宅里不够强,不能持之以恒的坐在自己的座位上编写程序,歇一会就要起来转转。 六、致谢 在此,我仅代表我自己,对老师您致以崇高的敬意和深深的感谢,没有您,就没有我那么多的收获,您不辞辛苦,在这炎热天气里,放弃您的休息时间来为我们辅导,在辅导过程中,您更是尽心尽力,从来没有少过一节课,更没有过迟到早退,对我们是全程陪同,在我们实习中随时出现问题,随时解决。只要发现问题,您从来没有说是不管过,从来没有烦躁过,对我们提出的问题,也是耐心解决,一边不懂,接着再讲一边,脸庞流下的汗水,您却从来没有在意过。对我们泥更是不计报酬的为我们服务,让我们有一个好的学习环境,不用为自己遇到问题而烦恼,在这里我想对您说一声:老师,您辛苦了!请接受您的学子的深深谢意与感激。 在这里,也对学校表示由衷的谢意,感谢学校为我们提供了良好的实习环境,让我们在这炎热的天气里,能够舒爽的坐在教室里实习,而不用操心任何问题,在这里,对我们学校表示谢意。 1、只有频繁用到或对运算速度要求很高的变量才放到data区内,如for循环中的计数值。 2、其他不频繁调用到和对运算速度要求不高的变量都放到xdata区。 3、常量放到code区,如字库、修正系数。 4、逻辑标志变量可以定义到bdata中。 在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。这样可以大大降低内存占用空间。定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。 5、data区内最好放局部变量。 因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同; 6、确保程序中没有未调用的函数。 在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil做得很愚蠢,但也没办法。 7、如果想节省data空间就必须用large模式。 将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。 8、使用指针时,要指定指针指向的内存类型。 在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为: char data *p。还可指定指针本身的存放内存类型,如:char data * xdata p。其含义是指针p指向data区变量,而其本身存放在xdata区。 以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不甚明了,没办法只好找了下,发现如下描述: 从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。 9、在51系列中data,idata,xdata,pdata的区别 data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。 idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好) xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。 C语言实践心得体会 在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。 由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。 上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。 学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面: 1.加深对课堂讲授内容的理解 课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。 学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。 通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。 2.熟悉程序开发环境、学习计算机系统的操作方法 一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓“环境”就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 3.学习上机调试程序 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。 通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难。第三篇:C语言课程设计实践报告
第四篇:c语言实践报告总结2篇
第五篇:C语言实践心得体会