项目案例报告
课程名称:高级语言程序设计
院部:
学生姓名:
学号:
专业班级:
指导教师:周晏
2015年6月
案例一
【案例内容】
统计一个文件中的数字个数、字母个数、其他字符个数。
【案例分析】
利用函数,指针,和循环知识先判断是否为大写字母,是大写字母个数加1,若否,再看是否为小写字母,是小写字母个数加1,若否,再看是否为数字,是数字个数加1,若否,再看是否为空格,是空格个数加1,若否,则其他字符个数加1,如此循环判断即可。
【案例实现】
#include<stdio.h>
int main()
{
void fun(char(*p)[10]); //fun函数声明
char a[4][10];
int i;
printf("输入共有4行,每行有10个字符的文章\n");
for(i=0;i<4;i++)
gets(a[i]);
fun(a);
return 0;
}
void fun(char(*p)[10]) //定义fun函数
{
int i,j,k,o,t,m,n;
n=m=k=t=o=0;
for(i=0;i<4;i++)
for(j=0;j<10;j++)
if(*(*(p+i)+j)>='A'&&*(*(p+i)+j)<='Z')
n++; //大写字母个数加1。
else if(*(*(p+i)+j)>='a'&&*(*(p+i)+j)<='z')
m++; //小写字母个数相应加1。
else if(*(*(p+i)+j)>='0'&&*(*(p+i)+j)<='9')
k++; //数字个数相应加1.
else if(*(*(p+i)+j)==' ')
o++; //空格字数相应加1,。
else
t++; //其他字符相应加1.
printf("大写字母个数为:%d\n小写字母个数为:%d\n数字个数为:%d\n空格个数为:%d\n其它字符个数为:%d\n",n,m,k,o,t);
}
【案例验证】
输入:I have 20
books. And
you?*****
I have one
输出:
大写字母个数为:3
小写字母个数为:21
数字个数为:2
空格个数为:7
其他字符个数为:7
图1 上机测试
【案例总结】
(1) 通过进行该项目我了解了函数和指针的定义和使用。
(2) 熟练地掌握了循环和判断语句的用法。
(3) 认识到一个程序在编写之前设计算法的重要性
(4) 认识到数学思想对程序设计的重要性。
案例二
【案例内容】
九、某公司由于人多,午餐分为多批次就餐,严格要求每批次就餐时间。
并定期抽查就餐情况。
请编写程序实现就餐抽查情况。
要求实现函数:
void check_lunch(int num, int time,int input[], int output[])
【输入】int num,就餐总人数
int time,就餐分批数
char input[],就餐情况
【输出】char output[],违规就餐情况
【返回】无
说明:对就餐分3批的情况,12人就餐,正确的就餐情况应如下分布[1,2,3,1,2,3,1,2,3,1,2,3],不符合该分布的即是违规,输出时对相应位置0。
例:
1)输入:num = 12,time = 3,input =[1,2,3,3,1,3,1,1,1,1,2,3]
输出:output = [1,2,3,0,0,3,1,0,0,1,2,3]
2)输入:num = 11,time = 4,intput = [1,2,3,4,2,3,3,4,1,2,3]
输出:output = [1,2,3,4,0,0,3,4,1,2,3]
【案例分析】
对就餐分3批的情况,12人就餐,正确的就餐情况应如下分布[1,2,3,1,2,3,1,2,3,1,2,3],不符合该分布的即是违规,输出时对相应位置0。
对就餐分4批的情况,11人就餐,正确的就餐情况应如下分布[1,2,3,4,1,2,3,4,1,2,3],不符合该分布的即是违规,输出时对相应位置0。
【案例实现】
#include<stdio.h>
int num;
int main()
{
void check_lunch(int num, int time,int input[], int output[]); //check lunch函数声明。
int input[100];
int num;
int output[100];
int time,i;
printf("请分别输入就餐人数num和分批次数time:\n");
scanf("%d%d",&num,&time);
printf("输入就餐情况(input[]):\n");
for(i=0;i<num;i++)
scanf("%d",&input[i]);
check_lunch(num,time,input,output);
return 0;
}
void check_lunch(int num, int time,int input[], int output[]) //定义check lunch函数。
{
int i,k=1;
for(i=0;i<num;i++)
{
if(input[i]==k)
output[i]=k; //符合该分布的即是正确,输出相应位置数字。
else
output[i]=0; //不符合该分布的即是违规,输出时对相应位置为0。
k++;
if(k==time+1)
k=1;
}
printf("输出正确的就餐情况,不符合该分布的即是违规,输出时对相应位置0:\n");
for(i=0;i<num;i++)
printf("%c ",output[i]+48);
printf("\n");
}
【案例验证】
输入:12 3
1 2 3 3 1 3 1 1 1 1 2 3
输出:1 2 3 0 0 3 1 0 0 1 2 3 如图2
输入:11 4
1 2 3 4 2 3 3 4 1 2 3
输出:1 2 3 4 0 0 3 4 1 2 3 如图3
图2 上机测试
图3 上机测试
【案例总结】
(1) 通过进行该项目我了解了函数和指针的定义和使用。
(2) 熟练地掌握了循环和判断语句的用法。
(3) 认识到一个程序在编写之前设计算法的重要性
(4) 认识到数学思想对程序设计的重要性。