项 目 案 例 报 告
- 格式:doc
- 大小:80.00 KB
- 文档页数:7
项目案例报告
课程名称:高级语言程序设计
院系:计算机科学与信息工程学院学生姓名:
学号:
专业班级:C语言程序设计
指导教师:
2013年6月
案例一
【案例内容】
一、有n个人围成一圈,顺序排序。
从第1个人开始报数(从1到4依次用指针实现报数),凡报到4的人退出圈子,问最后留下的是原来第几号的那一位(用指针实现)。
【案例分析】
有n个人围成一圈,顺序排序,第一个开始数数,数到4的人退出圈子,问最后留下的是原来第几号的那一位。
【案例实现】
#include<stdio.h>
int main()
{
int i,k,n,m,num[50],*p; //定义变量,定义数组和指针变量,
scanf("%d",&n); //给n赋值
p=num; //初始化指针变量p
for(i=0;i<n;i++) //借助for循环语句
*(p+i)=i+1;
i=0; k=0; m=0;
while(m<n-1)
{
if(*(p+i)!=0) k++;
if(k==4) //四个人循环
{
*(p+i)=0;
k=0; //轮到数字为四的人标记为0
m++; //循环继续
}
i++;
if(i==n) i=0;
}
while(*p==0) p++;
printf("%d\n",*p); //输出最后剩下的人
return 0;
}
【案例验证】
图1 上机测试
【案例总结】
(1)锻炼了独立分析解决问题的思维
(2)更加深刻认识了变成原理
(3) 运用了数组,循环语句,解决问题
案例二
【案例内容】
八、这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。
问怎样排法,才能使每次投入大海的都是非教徒。
【案例分析】
30个人围成一圈(15教徒,15非教徒),第一个人开始数数,数到9的被扔海里,如何排序才能使每次扔海里的都是非教徒。
【案例实现】
#include<stdio.h>
#include<string.h>
int main()
{
int a[30],n=0,d=0,i=-1; 定义数组,和变量
memset(a,0,sizeof(a));
printf("三十个人的排列如下(1代表非教徒,0代表教徒):\n");
while(n<15) //当n小于15时继续进行循环
{
i++;
if(i>30)
i=-1;
if(a[i]==0&&d==9)
{
a[i]=1;
d=0;
n++;
}
else
{
d++;
}
}
for(i=0;i<30;i++)
printf("%d ",a[i]); //输出排列顺序
puts("");
return 0;
}
【案例验证】
图1 上机测试【案例总结】
(1)运用循环语句解决问题
(2)锻炼了思维的缜密度。