一、实验目的
通过针对循环问题求解的程序填空,认识循环结构的程序流程框架,理解循环结构流程控制语句的正确应用以及条件的正确表示、循环入口和循环结束的正确控制。
二、实验内容
1、题目:输入某年某月某日,判断这一天是这一年的第几天?
算法分析提示:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天。
特殊情况:闰年且输入月份大于3时需考虑多加一天。
请按照表格中“期待的输出”要求,将程序空缺的【1】、【2】、【3】、【4】、【5】语句补充完整,并调试运行,针对每一组输入,将对应的输出填写在表中。
输入 | 期待的输出 | 说明 |
2013.3.27 | It is the 86th | 按照格式输出 |
1996.3.27 | It is the 87th | |
2012.5.8 | ||
1990.10.1 | ||
2008.8.8 |
C的源程序如下:
/*题目:输入某年某月某日,判断这一天是这一年的第几天?*/
#include "stdio.h"
int main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch( 【1】 )/*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
【2】 ;
【3】 ;
default:printf("data error"); 【4】 ;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
【5】;
printf("It is the %dth day.",sum);
}
2、题目:将一个正整数分解质因数。
算法分析提示:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1) 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2) 如果n不等于最小的质数k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
C的源程序如下:
/*题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。*/
#include "stdio.h"
int main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2; 【1】 ;i++)
{
while( 【2】 )
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else
【3】;
}
printf("%d",n);
}
}
三、实验方法
1、 针对问题画出流程图;
2、 按照流程图和输出要求,将程序补充完整,并按照所给的5组输入数据进行调试运行,对照表格中的输出要求检查程序,使之完全符合输出格式要求。
四、实验报告
请按照表格中“期待的输出”要求,将程序空缺的【1】、【2】、【3】语句补充完整,并调试运行,针对每一组输入,将对应的输出填写在表中。
输入 | 期待的输出 | 说明 |
90 | 90=2*3*3*5 | 按照格式输出 |
123 | ||
234 | ||
2 | ||
0 |