第十周编程总结
7-1 求奇数和 (15 分)
本题要求计算给定的一系列正整数中奇数的和。
1).实验代码
#include<stdio.h>
int main()
{
int N,sum,i;
i=1;
sum=0;
scanf("%d",&N);
while(N>0){
if(N%2!=0){
sum+=N;
scanf("%d",&N);
}
else {
scanf("%d",&N);
}
}
printf("%d",sum);
return 0;
}
2). 设计思路
第一步:定义变量
第二步:输入变量
第三步:调用while语句,判断奇数,累加奇数
第四步:输出答案
3).本题调试过程碰到的问题及解决方法
-
问题:在调用while语句前,没有给N赋值
解决方法:赋值给N
4).运行结果截图
7-3 韩信点兵 (10 分)
在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:
· 按从1至5报数,记下最末一个士兵报的数为1;
· 再按从1至6报数,记下最末一个士兵报的数为5;
· 再按从1至7报数,记下最末一个士兵报的数为4;
· 最后按从1至11报数,最末一个士兵报的数为10;
请编写程序计算韩信至少有多少兵。
1)实验代码
#include<stdio.h>
int main()
{
int N=0;
while((N%5!=1)||(N%6!=5)||(N%7!=4)||(N%11!=10)){
N++;
}
printf("%d\n",N);
return 0;
}
2).设计思路
第一步:定义变量
第二步:调用while语句进行兵数判断
第三步:输出答案
3) .本题调试过程碰到的问题及解决方法
问题:while语句的条件使用错误
解决方法:更改条件
4).运行结果截图
7-2 求整数的位数及各位数字之和 (15 分)
对于给定的正整数N,求它的位数及其各位数字之和。
1).实验代码
#include<stdio.h>
int main()
{
int number=0,N,sum=0,amount=0;
scanf("%d",&N);
while(N!=0){
number=N%10;
N=N/10;
sum+=number;
amount++;
}
printf("%d %d",amount,sum);
return 0;
}
2).设计思路
第一步:定义变量
第二步:输入变量
第三步:调用while语句,进行循环
第四步:取余得到个位数,取整赋值,得到除个位数的其他位数,继续取余得到其他位数,累加各位数字,计算位数
第五步:输出答案
3).本题调试过程碰到的问题及解决方法
问题:变量没有初始化
解决方法:将变量初始化
4).运行结果截图
7-4 整除光棍 (20 分)
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。
2).实验代码
#include<stdio.h>
int main()/*模拟竖式计算*/
{
int m,n,dividend=1,i=0,t,count=0;
scanf("%d",&m);
while(1){
t=dividend/m; //t是商
dividend%=m; //取余
count++; //每次循环计算位数
if(i||t){ //等价于if(i!=0||t!=0),排除一开始商是0的情况,判断条件千万不能用商,商有0状态
printf("%d",t);
i=1;
}
if(dividend==0){
printf(" %d\n",count); //余数为0,结束循环,输出结果
break;
}
dividend=dividend*10+1; //模拟被除数为 “光棍 ”
}
return 0;
}
2). 设计思路
第一步:模拟竖式计算,定义变量
第二步:输入变量
第三步:调用while语句进行无限循环,取商,取余,每次循环计算位数
第四步:排除一开始商是0的情况,
第五步:输出商的值
第六步:当余数为零时结束循环,打印光棍位数
3).本题调试过程碰到的问题及解决方法
问题:没有考虑到商有0的状态
解决方法:再定义一个变量,排除商有0的情况而导致无法打印
4).运行结果截图