欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计实践实验题目.doc

    • 资源ID:78777458       资源大小:336KB        全文页数:45页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计实践实验题目.doc

    实验题目:循环结构程序设计实验目的:1.熟悉VC+6.0的运行环境,掌握C程序的执行方法;2.掌握三种基本数据类型、部分运算符号和常用函数;3.掌握三种循环控制语句及break和continue语句的使用方法;4.掌握循环结构的嵌套及正确控制计数型循环结构次数的方法。实验内容:程序1:搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次搬完,问男、女和小孩各若干?#include “stdio.h”main() int men,women,children; men=0; while(men<=8) women=0; while(women<=11) children=36-men-women; if(men*4+women*3+children/2= =36)&&children%2= =0) printf(“men=%d,women=%d,children=%dn”,men,women,children); women+; men+; 程序2 打印形状为直角三角形的乘法口诀。#include "stdio.h" main() int i,j,result; for (i=1;i<10;i+) for(j=1;j<i;j+) result=i*j; printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/ printf("n");/*每一行后换行*/ 程序3 求1000以内的所有素数。#include “stdio.h”main( ) int m,i;for(m=2;m<=100;m+) for(i=2;i<=m-1;i+) if(m%i=0) break; if(i>m-1) printf("%5d",m); 程序4:计算和统计旅客运费程序 。由键盘输入旅客行李重量(w),按公式 :若( w<=50kg )f=1.5*w ,若(w>50kg)f=1.5*50 + 2.8*(w-50) ( w>50kg ) 计算运费,要求: (1)打印每位旅客的顺序号,行李重量,应付运费 ; (2)假定每天最多办理100人的行李托运手续或当w0时循环结束, 下班时打印出全天的运费总收入和办理的总人数。方法一(while结构) #include “stdio.h”main( ) int num=0; float w,f,total=0; scanf("%f ",&w); while (w>0&&num<100 ) if (w<=50) f=1.5*w; else f=1.5*50+2.8*(w-50); num+; printf ( "%d,%6.0f,%8.2fn",num,w,f); total+=f; scanf ("%f",&w); printf ("Customers=%d TotalIncome=%10.2fn",num,total);方法二(do-while结构)#include “stdio.h”main( ) int num=0; float w,f,total=0; do scanf("%f ",&w); if (w<=0) break; if (w<=50) f=1.5*w; else f=1.5*50+2.8*(w-50); num+; printf ( "%d %6.0f %8.2fn",num,w,f); total+=f; while (num<100); printf ("Customers=%d TotalIncome=%10.2fn",num,total); 方法三(for结构)#include “stdio.h”main( ) int num; float w,f,total=0; scanf("%f",&w); for (num=1;w>0&&num<=100;num+) if (w<=50) f=1.5*w; else f=1.5*50+2.8*(w-50); printf ( "%d %6.0f %8.2fn",num,w,f); total+=f; scanf("%f",&w); printf ("Customers=%d TotalIncome=%10.2fn",num,total); 实 验 二:数组实验目的:1.更加灵活的使用一维数组和二维数组 2.把数组和指针结合使用实验内容:1.约瑟夫环问题由n个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到3的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。求出所有人的出圈顺序。 #include<stdio.h>main()int a10; int n=8,i,k=0,j=1,len; len=n; i=0; /给数组赋值 for(i=0;i<n;i+) ai=i+1; /i为元素下标,j代表当前要报的数 ,len表示圈中当前人数 while(len>0) if(ak%n>0) if(j%3=0) printf("%dn",ak%n);/找到要出圈的人,并把圈中人数减一 ,最后一个人才输出 ak%n=-1; j=1; k+; len-; else/报数不是3 k+; j+; else/遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数 k+; 2.学生成绩统计与分析输入10名学生的英语、C语言、计算机文化基础成绩,统计每名学生三科成绩的平均分,分析三门课程的优秀率,85分以上为优秀。#include <stdio.h>void main()int grade104;int i,j,average,egood,cgood,jgood;for(i=0;i<10;i+)printf("请输入第%d个学生的英语、c语言、计算机n",i+1);for(j=0;j<3;j+)scanf("%d", &gradeij );egood=cgood=jgood=0;for(i=0;i<10;i+) /10个人average=0;for(j=0;j<3;j+) /三门课程average+=gradeij;if(gradeij>=85) if(j=0) egood+; if(j=1) cgood+; if(j=2) jgood+;gradei3=average/3;for(i=0;i<10;i+)printf("第%d个学生的三科平均分为:%dn",i+1,gradei3);printf("英语成绩优秀的学生为%dn",egood);printf("C语言成绩优秀的学生为%dn",cgood);printf("计算机成绩优秀的学生为%dn",jgood);3.利用指针实现数组合并数组a:“1,7,9,11,13,15,17,19”; 数组b:“2,4,6,8,10”, 两个数组合并为数组c,按升序排列。#include<stdio.h>void main() int paixu (int c);int a8=1,7,9,11,13,15,17,19;int b5=2,3,6,8,10;int c13;int *p,*q,*s;for(p=a,s=c;p<8+a;p+,s+)*s=*p;for(q=b;q<b+5;q+,s+)*s=*q;paixu(c);paixu(int c)int i,j,k;for(j=0;j<12;j+)for(i=0;i<12-j;i+)if(ci>ci+1) k=ci;ci=ci+1;ci+1=k;for(i=0;i<13;i+)printf("%dn",ci);实 验 三:函数实验目的:1.更加灵活的使用数组和指针作为函数参数;2.更加灵活使用指针处理字符串。实验内容:1.字符串复制输入一个长度不大于30的字符串,将此字符串中从第m个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针方法处理字符串。2.插入字符串从键盘上先后读入两个字符串,假定存储在字符数组s1和s2中。注意,这两个字符串最长均可达到26个字符、最短均可为0个字符。将字符串s2插入字符串s1中,生成一个新的字符串s。插入方法为s2的第i个字符插入到原s1的第i个字符后,如果s2比s1(假定s1的长度为L1)长,则s2的第L1个字符开始到s2结尾的所有字符按在s2中的顺序放在新生成的字符串s之后。用指针完成程序。3.学生成绩管理系统某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。(1)计算每个学生的总分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,包括名次、学生编号、各科分数、总分;要求程序运行后先打印出一个菜单,提示用户选择:成绩录入、成绩排序、成绩查找,在选择某项功能后执行相应的操作。 实 验 四:结构体实验目的:1.更加灵活的使用数组作为函数参数;2.初步掌握开发一个小型实用系统的基本方法;3.初步掌握书写程序设计开发文档的能力。实验内容:程序一:学生信息管理系统编写程序,实现学生信息的管理(包括学生信息的建立、增加、删除、修改、查找),要求:小组分工情况小组分工情况统计表班级信息工程学院 计算机科学与技术专业 2012级 软件工程(方向) 班 组名称学生信息管理系统项目组长 (本次项目小组组长)组员组员学号工作简介一 需求分析 I设计一个学生成绩管理系统至少具有以下功能:(1)菜单功能:采用文本菜单界面。(2)学生信息的建立。(3)学生信息的增加。(4)学生信息的删除。(5)学生信息的修改。(6)学生信息的查找。II数据库结构struct student char num10; char name10; char xibie10; char sex; int age; st30;二 总体设计框架结构图(系统的功能结构图)学生成绩管理系统输入增加.退出程序流程图: (visio)退出结束开始输出菜单根据菜单输入n的值选择程序输入增加删除修改查找三、详细设计(流程图!)四、程序源代码(参考答案)1.用结构体数组完成2.用结构体指针完成1. #include "stdio.h"#include "string.h"typedef struct node char num10; char name10; char xibie10; char sex; int age; st;int n;st *creslink() int i; st s10; printf("请输入要录入的人数:"); scanf("%d",&n); for (i=0;i<=n-1;i+) printf("请输入第%d名学生的学号,姓名,系别,年龄,性别:",i+1); scanf("%s%s%s%d%c",si.num,si.name,si.xibie,&si.age,&si.sex); return s;int getlen(st s) return n;insert(st s,char num,char name,char xibie,int age,char sex) strcpy(sn.num,num); strcpy(sn.name,name); strcpy(sn.xibie,xibie); sn.age=age; sn.sex=sex; n+; delete(st s,char num)int i,j; for(i=0;i<n;i+) if(strcmp(si.num,num)=0)break; for(j=i+1;j<n;j+)sj-1=sj; n-;void list(st s) int i; printf("学号t姓名t系别t年龄t性别n"); for(i=0;i<n;i+) printf("%st%st%st%dt%cn",si.num,si.name,si.xibie,si.age,si.sex); void main() int k,f,age; char num10,name10,xibie10,sex; st *s; while(1) printf("nnttt学生信息管理系统n"); printf("tt*n"); printf("ttt1.录入学生信息n"); printf("ttt2.插入新学生信息n"); printf("ttt3.删除学生信息n"); printf("ttt4.输出学生信息n"); printf("ttt5.输出学生总数n"); printf("ttt6.退出n"); printf("tt*n"); printf("请选择:"); scanf("%d",&k); switch(k) case 1:s=creslink();break; case 2: printf("请输入新学生的学号,姓名,系别,年龄,性别:"); scanf("%s%s%s%d%c",num,name,xibie,&age,&sex); insert(s,num,name,xibie,age,sex); break; case 3:printf("请输入要删除的学生的学号:"); scanf("%s",num); delete(s,num); break; case 4:list(s);break; case 5:f=getlen(s);printf("学生总数为:%d",f);break; case 6:return; 2.#include "stdio.h"#include "string.h"#define null 0typedef struct node char num10; char name10; char xibie10; char sex; int age; struct node *next;slink;slink *creslink()slink *head,*p,*s;int i,n;printf("请输入要录入的人数:");scanf("%d",&n);if(n<1) return null;p=head=(slink *)malloc(sizeof(slink);head->next=null;for (i=1;i<=n;i+) s=(slink *)malloc(sizeof(slink); printf("请输入第%d名学生的学号,姓名,系别,年龄,性别:",i); scanf("%s%s%s%d%c",s->num,s->name,s->xibie,&s->age,&s->sex); p->next=s; p=s; p->next=null; return head;int getlen(slink *head) slink *p; int n; p=head->next;n=0; while (p!=null) n+; p=p->next; return n;insert(slink *head,char num,char name,char xibie,int age,char sex) slink *p,*q; p=head; while(p->next!=null) p=p->next; q=(struct node *)malloc (sizeof(slink); strcpy(q->num,num); strcpy(q->name,name); strcpy(q->xibie,xibie); q->sex=sex; q->age=age; q->next=p->next; p->next=q;delete(slink *head,char num) slink *p,*q; p=head; while(p->next!=null&&strcmp(p->next->num,num)!=0) p=p->next; q=p->next; p->next=q->next; free(q); void list(slink *head) slink *p; printf("学号t姓名t系别t年龄t性别n"); p=head->next; while(p!=null) printf("%st%st%st%dt%cn",p->num,p->name,p->xibie,p->age,p->sex); p=p->next; printf("n");void main() int k,f,age; char num10,name10,xibie10,sex; slink *head; while(1) printf("nnttt学生信息管理系统n"); printf("tt*n"); printf("ttt1.录入学生信息n"); printf("ttt2.插入新学生信息n"); printf("ttt3.删除学生信息n"); printf("ttt4.输出学生信息n"); printf("ttt5.输出学生总数n"); printf("ttt6.退出n"); printf("tt*n"); printf("请选择:"); scanf("%d",&k); switch(k) case 1:head=creslink();break; case 2: printf("请输入新学生的学号,姓名,系别,年龄,性别:"); scanf("%s%s%s%d%c",num,name,xibie,&age,&sex); insert(head,num,name,xibie,age,sex); break; case 3:printf("请输入要删除的学生的学号:"); scanf("%s",num); delete(head,num); break; case 4:list(head);break; case 5:f=getlen(head);printf("学生总数为:%d",f);break; case 6:return; 实验五 文件操作实验目的:1初步了解C语言中文件操作的类型;2掌握文件的打开、关闭及读写的操作3能熟练进行字符及数据块的读写操作,为后续的课程设计打好基础。实验内容:程序1:从键盘上输入若干个学生的学号及考试成绩, 将这些数据写入磁盘文件y.dat中。(由学号等于0作终止标记)#include "stdio.h"main() struct student int num; float score; ;struct student stu;FILE *fp;fp=fopen("y.dat","w");scanf("%d%f",&stu.num,&stu.score);while(stu.num!=0) fprintf(fp, "%d %fn",stu.num,stu.score); scanf("%d%f",&stu.num,&stu.score);fclose(fp);程序2:设有一文件cj.dat存放了50个人的成绩(英语、计算机、数学),存放格式为:每人一行,成绩间由逗号分隔。计算三门课平均成绩,统计个人平均成绩大于或等于90分的学生人数。 #include <stdio.h> main() FILE *fp; int i=0,num=0; float x , y , z , s1=0, s2=0, s3=0 ; fp=fopen ("cj.txt","r"); while(i<=50)fscanf (fp,"%f,%f,%f",&x,&y,&z); s1=s1+x; s2=s2+y; s3=s3+z; if(x+y+z)/3>=90) num=num+1; i+; printf("分数高于90的人数为:%d",num); fclose(fp);程序3:统计上题cj.dat文件中每个学生的总成绩,并将原有数据和计算出的总分数存放在磁盘文件“stud”中。#include "stdio.h" main() FILE *fp1,*fp2; float x,y,z; fp1=fopen("cj.txt","r"); fp2=fopen("stud.txt","w"); while(!feof(fp1) fscanf (fp1,"%f,%f,%f",&x,&y,&z); printf("%f,%f,%f,%fn",x,y,z,x+y+z); fprintf(fp2,"%f,%f,%f,%fn",x,y,z,x+y+z); fclose(fp1); fclose(fp2); 实 验 六:万年历实验目的:1、复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;2、将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力3、提高学生适应实际,实践编程的能力。实验内容:程序一:编写万年历小组分工情况小组分工情况统计表班级信息工程学院 计算机科学与技术专业 2012级 软件工程(方向) 班 组名称学生成绩管理系统项目组长 (本次项目小组组长)组员组员学号工作简介一 需求分析万年历能实现一些功能,主要包括以下几点:(1)日历显示功能。能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。 判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查询的年份nday:从该年的一月一日起到该天的天数w:得出的星期数,w=0表示星期天。 在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。对于初始输入当前月历,可以通过<time.h>中的time 和localtime函数取出系统时间进行初始化。time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一个时间结构体,可以从中取出年月日.(2)日历查询、闰年判断功能。输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年 能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历(3)参数检查功能。如果输入日期不合法,查询将被拒绝,并显示提示信息。判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。(4)通过键盘操作(如:光标上、下、左、右移动键,pageup、pagedown键)调整年份、月份和日期,并显示调整后的日期及月历。捕获键盘的输入,通过两个getch();将后一个getch()的返回值付给整型或字符型k,k为相应键的ascii值,判断ascii值,就可以知道时哪个键的输入。若捕获到某键的输入,则设置相应的年或月或日的值,再进行刷性输出,就可以实现日期的调整。二 总体设计(visio) 本系统包括4个模块,分别是功能控制模块打印输出模块日历显示模块和键值获取模块。 1、功能控制模块。该模块用于实现日期有效性检查判断是否是闰年和返回指定日期对应的日期。 2、打印输出模块。该模块主要是进行输出显示,包括打印指定个数的空格打印分隔线打印用户使用手册打印当前日期对应的星期以及打印指定的星期。 3、日历显示模块。该模块是系统的核心模块,是用来显示指定日期所在月份的月历。 4、键值获取模块。该模块接受键盘操作,获取键值,来进行日期调整,并调用日历显示模块中的函数来显示调整后的日历。万年历日历显示模块键值获取模块打印输出模块功能控制模块 帮助退出修改日期日历查询日历显示 图2-1功能模块图总函数流程图 图3-1总函数流程图三、详细设计(1)由于万年历具有以下特点:平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。(2)根据万年历以上特点进行编写 1)首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义一个数组存放天数,用while循环控制。2)再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)由于其公式为:某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7闰4百年3月1日星期算法(百年%4=0)其公式为:某年3月1日星期几=(年+年/4+月星期表+日+2天)%7例: 2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三平4百年3月1日星期算法(百年%4<>0)其公式为:某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7 例:2100年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)其中万年某日星期算法 其公式为:某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7(1)int isleapYear(int year);该函数判断某年是否是闰年,参数year表示要判断的年份,返回值1表示该年为闰年,0表示该年为平年。int IsLeapYear( int year )if (year %4 = 0) && (year % 100 != 0) |(year % 400 = 0) )return 1; else return 0;开始流程图:Year%400 Return 1 Y NYear%100Return 0Year%4 Y N N YReturn 1Return 0 闰年判断(2)struct tm* getDay();该函数用以取得系统的时间。该函数没有参数,返回值类型为struct tm*,是一个包含时间的结构体struct tm* getDay()/从系统取得当前时间time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;(3)int getwDay(int year,int month,int day);该函数用以根据一个日期推断星期,参数为要判断的年月日。返回值为整型,分别表示星期一到星期六,0表示星期天。int getwDay(int year,int month,int day)/取得星期int nday=0,nDay,i,w;for(i=0;i<month-1;i+)nday+=daysOfMonthrunYear(year)i;nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;return w;(流程图!)四、程序源代码#include<stdio.h>#include<time.h>#include<math.h>#include<windows.h>#include<conio.h> #define KEYNUMUp 0x48#define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51 int year,month,day;/全局变量记录时间int daysOfMonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31;int runYear(int year)/判断是否是闰年int flag=0;i

    注意事项

    本文(C语言程序设计实践实验题目.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开