第四次编程总结

作业一:
题目:输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:
输入在一行中给出21世纪的某个截止年份。

输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

输入样例1:
2048
输出样例1:
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
输入样例2:
2000
输出样例2:
Invalid year!
1)实验代码:
#include<stdio.h>
nt main()
{
int year,i,count;
scanf("%d",&year);
count=0;

if(year<2000||year>2100)
printf("Invalid year!");

else
{
	for(i=2001;i<=year;i++)
	{
		if((i%4==0&&i%100!=0)||(i%400==0))
		{
			printf("%d\n",i);
			count++;
		}
	}
    if(count==0)
    printf("None\n");
    }

	


return 0;
 } 

2)设计思路:
第一步:定义year,i,count。
第二步:如果输入的年份小于2000或者大于2100,那么它就会输出”Invalid year!",令count=0。
第三步:如果输入的年份不在上述范围中,那么将进入循环,如果满足循环内的条件(i%40&&i%100!=0)||(i%4000)那么就会输出闰年年份。
第四步:如果进入循环之后,count依旧等于0,那么就会输出“None”。
3)调试过程中遇到的问题及解决办法:

解决方法:21实际的第一年是2001年而不是2000年,所以不能写year<=2000,需要把=去掉
4)运行结果截图:

作业二:
题目:本题要求将输入的任意3个整数从小到大输出。

输入格式:
输入在一行中给出3个整数,其间以空格分隔。

输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:
4 2 8
输出样例:
2->4->8
1)实验代码:

 #include<stdio.h>
int main()
  {
         int a,b,c;
         scanf("%d%d%d",&a,&b,&c);
         if(a>b&&a>c&&b>c)
 	     {
 		printf("%d->%d->%d",c,b,a);
 	    } 
                else if(a>c&&a>b&&c>b)
 	    {
 		printf("%d->%d->%d",b,c,a);
 	    }
                 else if(b>a&&b>c&&a>c)
 	    {
 		printf("%d->%d->%d",c,a,b);
 	    }
                 else if(b>c&&b>a&&c>a)
 	    {
 		printf("%d->%d->%d",a,c,b);
	     }
                 else if(c>a&&c>b&&a>b)
 	    {
 		printf("%d->%d->%d",b,a,c);
	     }
                 else if(c>b&&c>a&&b>a)
 	    {
 		printf("%d->%d->%d",a,b,c);
	     }
                 else if(a==b&&a==c&&b==c)
            {
                printf("%d->%d->%d",c,b,a);
            }
      return 0;	
 }

2)设计思路:
第一步:定义a,b,c
第二步:列出a,b,c之间大小关系的所有可能,再用if语句表达出来
第三步:得出需要结果
3)调试过程中遇到的问题及解决办法:

没有考虑到全等的情况,应在后面添加一段全等的情况时的代码。
4)运行结果截图:

作业三:
题目:
本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:
10 31
输出样例:
7 143
1)实验代码:

include<stdio.h>

int main()
{
int i, j, m, n;
int flag = 0, count = 0, sum = 0;

scanf("%d%d", &m, &n);
for (i = m; i <= n; i++)
{
	//flag = 0;
	if (i == 1)
		flag = 0;
	else if (i == 2)
		flag = 1;
	else
	{
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
			flag = 1;
		}
	}

	if (flag == 1)
	{
		count++;
		sum+=i;
	}

}

printf("%d %d", count, sum);

return 0;

}
2)设计思路:
第一步:定义i,j,m,n,且定义count和sum的初始值为0.还要令flag=0以用于检测输入的i值是否为素数。
第二步:使用for循环语句令i=m,且i<=m,再循环进入下一步。
第三步:把特殊情况i等于1和2时单独用if语句进行判断。是素数,则flag=1,不是素数,那么flag依旧等于0.
第四步:再让j从2开始且小于i进行j循环,再在这个循环内判断i是否能被j整除,若能则flag=0,终止循环,若不能则跳出循环。
第五步:当flag等于1的时候,说明跳出前段循环的都是素数,那么再用count++对这些素数进行计数,再求sum+=i对这些素数进行求和,即可得出题目所求结果。
3)调试过程中遇到的问题及解决办法:

解决办法:没有将特殊情况i=1和i=2时的情况进行分析,所以需在第一个for循环后面加上对这两种情况的判断分析。
4)运行结果截图:

posted @ 2019-04-18 22:46  入江直树  阅读(427)  评论(2编辑  收藏  举报