实验七 分支结构程序设计(4)
实验七 分支结构程序设计(4)
一、实验目的和要求:
1.掌握分支结构程序的设计思想,以及程序执行过程;
2.掌握关系运算符、逻辑运算符和条件运算符;
3.掌握if嵌套程序设计;
4.掌握switch分支程序设计方法。
二、实验内容:
1.输入年月,求该月的天数。
2. 从键盘上输入两个整数a、b,求a/b的值。(精确到小数点后第9位)
3. 如果一个三位数的各位数字之和等于该数本身,则称为水仙花数。判断从键盘输入的一个数是否为水仙花数。
4. 求[1,550]之间同时满足除3余2和除5余3条件的数之和。
5. 从键盘输入一个小于20000的整数,判断该数是否为回文数。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
6. 一个箱子里有n个苹果和一条虫子,虫子每x小时吃掉一个苹果。假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时还有多少个完整的苹果?要求:n、x、y从键盘输入,均为整数,且y<=n*x。
三、实验步骤与结果
1.输入年月,求该月的天数。
(1)设计思路
有针对的分析二月,闰年平年的判断,然后用switch,就能分类的判断
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
int year, month; //定义变量
printf("输入年和月(用,分隔):\n");
scanf_s("%d %d", &year, &month); //键盘输入变量
switch (month) //switch来接收月份的类型并判断
{
case 2:if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
printf("这个月是29天!\n"); //针对二月的特殊分析
else
printf("这个月是28天!\n");
break; //满足就跳出
case 4:
case 6:
case 9:
case 11:printf("这个月是30天!\n"); break; //满足30天的情况输出
default:printf("这个月是31天!\n"); break; //默认满足31天的输入
}
return 0;
}
(3)运行结果与分析
2. 从键盘上输入两个整数a、b,求a/b的值。(精确到小数点后第9位)
(1)设计思路
根据输入的数据进行小数点位数限制输出
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b); //键盘输入两个整数
printf("%.*lf",10,1.0*a/b); //主要是精确到小数点后九位的输出格式
}
(3)运行结果与分析
3. 如果一个三位数的各位数字之和等于该数本身,则称为水仙花数。判断从键盘输入的一个数是否为水仙花数。
(1)设计思路
对数的位数的拆分,然后进行运行判断
(2)程序源码(加注释)
#include <stdio.h>
int main()
{
int num;
int a;
int b;
int c; //输入三个变量
printf("输入一个三位整数:\n");
scanf("%d", &num);
a=num%10; //取num的个位数
b=num/10%10; // 取num的十位数
c=num/100; //取num百位数 //每一位数的取出
if(num== a*a*a+ b*b*b+ c*c*c) //检验是否为水仙花数
{
printf("%d是水仙花数!\n", num);
}
else
{
printf("%d不是水仙花数!\n", num);
}
return 0;
}
(3)运行结果与分析
4. 求[1,550]之间同时满足除3余2和除5余3条件的数之和。
(1)设计思路
在限制的范围内的数的运算,运算符的灵活运用
(2)程序源码(加注释)
# include <conio.h>
# include <stdio.h>
# include <math.h>
main()
{
int sum;
int i; //定义两个两个变量
sum=0;
for(i=1;i<=550;i++) //条件判断1-500之间
{
if(i%3==2&&i%5 ==3) //同时满足%3余2和%5余3
sum+=i; //求满足的数的和
}
printf("%ld\n",sum); //输出定义类型为长整型
}
(3)运行结果与分析
5. 从键盘输入一个小于20000的整数,判断该数是否为回文数。
(1)设计思路
主要是对回文数的理解,然后就是进行一个数据的倒置输出
(2)程序源码(加注释)
#include <stdio.h>
int main()
{
int num, temp;
int sum=0; //定义数据类型
printf("请输入一个数(小于等于20000):"); //提示输入的数
scanf("%d", &num);
if(num>20000) //判断是否大于20000
printf("超出范围!!!\n");
else{ //满足条件之后进行回文数判断
temp=num;
while(num)
{
sum = sum*10 + num%10;
num /= 10;
}
if(temp == sum) //回文数,就是从前往后读和从后往前读是同一个数的数
printf("是回文数\n");
else
printf("不是回文数\n");
}
return 0;
}//就是把它倒过来,比如12325; 它反过来是52321; 你比较这两个是否相等就行; 然后你就要想怎么通过12325得到52321; 就用到这个sum = sum*10 + num%10; num /= 10; 这个是核心,得到52321
(3)运行结果与分析
6. 一个箱子里有n个苹果和一条虫子,虫子每x小时吃掉一个苹果。假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时还有多少个完整的苹果?要求:n、x、y从键盘输入,均为整数,且y<=n*x。
(1)设计思路
对输入数据进行判断,苹果的完整性的考虑,然后就是考虑全面
(2)程序源码(加注释)
#include <stdio.h>
int main()
{
int n,x,y,a;
printf("分别输入n,x和y的值(均为整数,且y<=n*x)");
scanf("%d %d %d",&n,&x,&y);
if(y>n*x)
printf("输入超出范围!!!\n");
else{
if(n>y/x&&y%x==0) //对虫子吃苹果的速度和经过多少小时进行运算和苹果数判定,主要要考虑到是否取整
{
a=n-y/x;
printf("剩%d个苹果",a);
}
else if(n>y/x&&y%x!=0)
{
a=n-y/x-1; //不是一个整的苹果就要减去
printf("剩%d个完整苹果",a);
}
else
{
printf("没有剩完整的苹果");
}
}
return 0;
}
(3)运行结果与分析
四、实验总结与心得
总结:
1,不会的一定要尽量弄懂
2,不会的记清楚一点
心得:
1,很多地方都记不住
2,需要自己花时间多敲