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

上传人:b****0 文档编号:12831521 上传时间:2023-04-22 格式:DOCX 页数:68 大小:185.63KB
下载 相关 举报
C语言程序设计实践实验题目.docx_第1页
第1页 / 共68页
C语言程序设计实践实验题目.docx_第2页
第2页 / 共68页
C语言程序设计实践实验题目.docx_第3页
第3页 / 共68页
C语言程序设计实践实验题目.docx_第4页
第4页 / 共68页
C语言程序设计实践实验题目.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

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

《C语言程序设计实践实验题目.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实践实验题目.docx(68页珍藏版)》请在冰豆网上搜索。

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1