C语言程序设计实践实验题目.docx
- 文档编号:12831521
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:68
- 大小:185.63KB
C语言程序设计实践实验题目.docx
《C语言程序设计实践实验题目.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实践实验题目.docx(68页珍藏版)》请在冰豆网上搜索。
C语言程序设计实践实验题目
实验题目:
循环结构程序设计
实验目的:
1.熟悉VC++6.0的运行环境,掌握C程序的执行方法;
2.掌握三种基本数据类型、部分运算符号和常用函数;
3.掌握三种循环控制语句及break和continue语句的使用方法;
4.掌握循环结构的嵌套及正确控制计数型循环结构次数的方法。
实验内容:
程序1:
搬砖问题:
36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次搬完,问男、女和小孩各若干?
#include“stdio.h”
main()
{
intmen,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=%d\n”,men,women,children);
women++;}
men++;}
}
程序2打印形状为直角三角形的乘法口诀。
#include"stdio.h"
main()
{inti,j,result;
for(i=1;i<10;i++)
{for(j=1;j
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
程序3求1000以内的所有素数。
#include“stdio.h”
main()
{
intm,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人的行李托运手续或当w≤0时循环结束,下班时打印出全天的运费总收入和办理的总人数。
方法一(while结构)
#include“stdio.h”
main()
{
intnum=0;
floatw,f,total=0;
scanf("%f",&w);
while(w>0&&num<100)
{if(w<=50)f=1.5*w;
elsef=1.5*50+2.8*(w-50);
num++;
printf("%d,%6.0f,%8.2f\n",num,w,f);
total+=f;scanf("%f",&w);}
printf("Customers=%dTotalIncome=%10.2f\n",num,total);
}
方法二(do-while结构)
#include“stdio.h”
main()
{
intnum=0;
floatw,f,total=0;
do
{scanf("%f",&w);
if(w<=0)break;
if(w<=50)f=1.5*w;
elsef=1.5*50+2.8*(w-50);
num++;
printf("%d%6.0f%8.2f\n",num,w,f);
total+=f;
}while(num<100);
printf("Customers=%dTotalIncome=%10.2f\n",num,total);
}
方法三(for结构)
#include“stdio.h”
main()
{
intnum;
floatw,f,total=0;
scanf("%f",&w);
for(num=1;w>0&&num<=100;num++)
{if(w<=50)f=1.5*w;
elsef=1.5*50+2.8*(w-50);
printf("%d%6.0f%8.2f\n",num,w,f);
total+=f;scanf("%f",&w);
}
printf("Customers=%dTotalIncome=%10.2f\n",num,total);
}
实验二:
数组
实验目的:
1.更加灵活的使用一维数组和二维数组
2.把数组和指针结合使用
实验内容:
1.约瑟夫环问题
由n个人围成一个首尾相连的圈报数。
从第一个人开始,从1开始报数,报到3的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。
求出所有人的出圈顺序。
#include
main()
{inta[10];
intn=8,i,k=0,j=1,len;
len=n;
i=0;
//给数组赋值
for(i=0;i a[i]=i+1; //i为元素下标,j代表当前要报的数,len表示圈中当前人数 while(len>0){ if(a[k%n]>0){ if(j%3==0){ printf("%d\n",a[k%n]);//找到要出圈的人,并把圈中人数减一,最后一个人才输出 a[k%n]=-1; j=1; k++; len--; } else{//报数不是3 k++; j++; } } else//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数 k++; } } 2.学生成绩统计与分析 输入10名学生的英语、C语言、计算机文化基础成绩,统计每名学生三科成绩的平均分,分析三门课程的优秀率,85分以上为优秀。 #include voidmain() { intgrade[10][4]; inti,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",&grade[i][j]); } egood=cgood=jgood=0; for(i=0;i<10;i++)//10个人 { average=0; for(j=0;j<3;j++)//三门课程 { average+=grade[i][j]; if(grade[i][j]>=85) { if(j==0)egood++;if(j==1)cgood++;if(j==2)jgood++; } } grade[i][3]=average/3; } for(i=0;i<10;i++) printf("第%d个学生的三科平均分为: %d\n",i+1,grade[i][3]); printf("英语成绩优秀的学生为%d\n",egood); printf("C语言成绩优秀的学生为%d\n",cgood); printf("计算机成绩优秀的学生为%d\n",jgood); } 3.利用指针实现数组合并 数组a: “1,7,9,11,13,15,17,19”;数组b: “2,4,6,8,10”, 两个数组合并为数组c,按升序排列。 #include voidmain() {intpaixu(intc[]); inta[8]={1,7,9,11,13,15,17,19}; intb[5]={2,3,6,8,10}; intc[13]; int*p,*q,*s; for(p=a,s=c;p<8+a;p++,s++) *s=*p; for(q=b;q *s=*q; paixu(c); } paixu(intc[]) {inti,j,k; for(j=0;j<12;j++) for(i=0;i<12-j;i++) if(c[i]>c[i+1]) {k=c[i]; c[i]=c[i+1]; c[i+1]=k; } for(i=0;i<13;i++) printf("%d\n",c[i]); } 实验三: 函数 实验目的: 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数据库结构 structstudent {charnum[10]; charname[10]; charxibie[10]; charsex; intage; }st[30]; 二总体设计 框架结构图(系统的功能结构图) 程序流程图: (visio) 三、详细设计 (流程图! ! ! ) 四、程序源代码(参考答案) 1.用结构体数组完成 2.用结构体指针完成 1.#include"stdio.h" #include"string.h" typedefstructnode {charnum[10]; charname[10]; charxibie[10]; charsex; intage; }st; intn; st*creslink() { inti; sts[10]; printf("请输入要录入的人数: "); scanf("%d",&n); for(i=0;i<=n-1;i++) {printf("请输入第%d名学生的学号,姓名,系别,年龄,性别: ",i+1); scanf("%s%s%s%d%c",s[i].num,s[i].name,s[i].xibie,&s[i].age,&s[i].sex); } returns; } intgetlen(sts[]) { returnn; } insert(sts[],charnum[],charname[],charxibie[],intage,charsex) {strcpy(s[n].num,num); strcpy(s[n].name,name); strcpy(s[n].xibie,xibie); s[n].age=age; s[n].sex=sex; n++; } delete(sts[],charnum[]) {inti,j; for(i=0;i if(strcmp(s[i].num,num)==0)break; for(j=i+1;j s[j-1]=s[j]; n--; } voidlist(sts[]) {inti; printf("学号\t姓名\t系别\t年龄\t性别\n"); for(i=0;i printf("%s\t%s\t%s\t%d\t%c\n",s[i].num,s[i].name,s[i].xibie,s[i].age,s[i].sex); } voidmain() { intk,f,age; charnum[10],name[10],xibie[10],sex; st*s; while (1) { printf("\n\n\t\t\t学生信息管理系统\n"); printf("\t\t*************************************\n"); printf("\t\t\t1.录入学生信息\n"); printf("\t\t\t2.插入新学生信息\n"); printf("\t\t\t3.删除学生信息\n"); printf("\t\t\t4.输出学生信息\n"); printf("\t\t\t5.输出学生总数\n"); printf("\t\t\t6.退出\n"); printf("\t\t*************************************\n"); printf("请选择: "); scanf("%d",&k); switch(k) {case1: s=creslink();break; case2: printf("请输入新学生的学号,姓名,系别,年龄,性别: "); scanf("%s%s%s%d%c",num,name,xibie,&age,&sex); insert(s,num,name,xibie,age,sex); break; case3: printf("请输入要删除的学生的学号: "); scanf("%s",num); delete(s,num); break; case4: list(s);break; case5: f=getlen(s);printf("学生总数为: %d",f);break; case6: return; } } } 2.#include"stdio.h" #include"string.h" #definenull0 typedefstructnode {charnum[10]; charname[10]; charxibie[10]; charsex; intage; structnode*next; }slink; slink*creslink() { slink*head,*p,*s; inti,n; printf("请输入要录入的人数: "); scanf("%d",&n); if(n<1) returnnull; 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; returnhead; } intgetlen(slink*head) { slink*p; intn; p=head->next; n=0; while(p! =null) { n++; p=p->next; } returnn; } insert(slink*head,charnum[],charname[],charxibie[],intage,charsex) { slink*p,*q; p=head; while(p->next! =null)p=p->next; q=(structnode*)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,charnum[]) { 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); } voidlist(slink*head) { slink*p; printf("学号\t姓名\t系别\t年龄\t性别\n"); p=head->next; while(p! =null) { printf("%s\t%s\t%s\t%d\t%c\n",p->num,p->name,p->xibie,p->age,p->sex); p=p->next; } printf("\n"); } voidmain() { intk,f,age; charnum[10],name[10],xibie[10],sex; slink*head; while (1) { printf("\n\n\t\t\t学生信息管理系统\n"); printf("\t\t*************************************\n"); printf("\t\t\t1.录入学生信息\n"); printf("\t\t\t2.插入新学生信息\n"); printf("\t\t\t3.删除学生信息\n"); printf("\t\t\t4.输出学生信息\n"); printf("\t\t\t5.输出学生总数\n"); printf("\t\t\t6.退出\n"); printf("\t\t*************************************\n"); printf("请选择: "); scanf("%d",&k); switch(k) {case1: head=creslink();break; case2: printf("请输入新学生的学号,姓名,系别,年龄,性别: "); scanf("%s%s%s%d%c",num,name,xibie,&age,&sex); insert(head,num,name,xibie,age,sex); break; case3: printf("请输入要删除的学生的学号: "); scanf("%s",num); delete(head,num); break; case4: list(head);break; case5: f=getlen(head);printf("学生总数为: %d",f);break; case6: return; } } } 实验五文件操作 实验目的: 1.初步了解C语言中文件操作的类型; 2.掌握文件的打开、关闭及读写的操作 3.能熟练进行字符及数据块的读写操作,为后续的课程设计打好基础。 实验内容: 程序1: 从键盘上输入若干个学生的学号及考试成绩,将这些数据写入磁盘文件y.dat中。 (由学号等于0作终止标记) #include"stdio.h" main() {structstudent {intnum; floatscore;}; structstudentstu; FILE*fp; fp=fopen("y.dat","w"); scanf("%d%f",&stu.num,&stu.score); while(stu.num! =0) {fprintf(fp,"%d%f\n",stu.num,stu.score); scanf("%d%f",&stu.num,&stu.score);} fclose(fp);} 程序2: 设有一文件cj.dat存放了50个人的成绩(英语、计算机、数学),存放格式为: 每人一行,成绩间由逗号分隔。 计算三门课平均成绩,统计个人平均成绩大于或等于90分的学生人数。 #include main() {FILE*fp; inti=0,num=0; floatx,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; floatx,y,z; fp1=fopen("cj.txt","r"); fp2=fopen("stud.txt","w"); while(! feof(fp1)) {fscanf(fp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实践 实验 题目