说明:本题解仅供参考,仅为单纯一种解法,笔者深知自己水平有限,鼓励大家用更加简洁的代码来解题。本题解仅供学习使用,请勿直接抄袭,由于部分题目设置了禁止粘贴,所以以截图方式呈现。
题目来源:头歌实践教学平台
循环结构设计2
(1)求平均数
很简单,创建数组求和,之后除去人数即可,注意当人数为0人时,输出0.00
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n;
double z,sum = 0,ave;
scanf("%d",&n);
if(n>0){
for(int i = 0;i < n;i++){
scanf("%lf",&z);
sum += z;
}
ave = sum/n;
}else{
ave = 0.00;
}
printf("the number of students:the scores:average=%.2lf",ave);
/*********End**********/
return 0;
}
(2)求各位数字之积
考虑到用while循环,在使用过程中,每次将num%10,得到个位数字,然后判断其是否为0,之后用x存储积,最后,让num/10为下次循环做准备。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int num;
scanf("%d",&num);
int x = 1,y;
if(num % 10 == 0){
x = 0;
}else{
while(num > 0){
y = num % 10;
if(y != 0){
x *=y;
}
num /= 10;
}
}
printf("%d",x);
/*********End**********/
return 0;
}
(3)求阶乘之和
首先需要定义两个long long变量存储结果(考虑到结果可能超出int范围)之后用两个for循环,第一个检索1-n的每个数,第二个算出阶乘,在第一个循环末尾,我们用b存储结果,输出记得用%lld
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n;
scanf("%d",&n);
long long a = 0,b = 0;
for(int i = 1;i <= n;i++){
a = 1;
for(int j = 1;j <= i;j++){
a *= j;
}
b += a;
}
printf("%lld",b);
/*********End**********/
return 0;
}
(4)水仙花数
首先利用之前的方法,分离每个数字,之后利用math.h下的pow函数求出三次方之和,检查是否等于原数。
当然,考试的时候如果想不到也可以直接无脑printf
#include<stdio.h>
#include<math.h>
int main(void)
{
/*********Begin*********/
for(int i = 100;i < 1000;i++){
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
int b = pow(ge,3) +pow(shi,3) + pow(bai,3);
if(b == i)
printf("%d ",i);
}
/*********End**********/
return 0;
}
(5)寻找完数
我们首先用一个for循环遍历1-1000的数,之后再利用for循环来求出因数,最后检查是不是完数。
#include<stdio.h>
#include<math.h>
int main(void)
{
/*********Begin*********/
for(int i = 1;i <=1000;i++){
int sum = 0;
for (int j = 1;j <= sqrt(i);j++){
if(i % j == 0){
sum +=j;
if(j != i / j) {
sum += i / j;
}
}
}
if((sum-i )== i){
printf("%d\n",i);
}
}
/*********End**********/
return 0;
}
(6)分数求和
我们先创建一个sum来存储结果,之后用for循环来进行计算,其中如果是偶数那就-=,如果是奇数就+=,得出结果。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
double sum = 0;
double b = 0;
for(int i = 1;i<= 100;i++){
b = 1.00 / i;
if(i % 2 == 0){
sum -= b;
}else{
sum += b;
}
}
printf("%.3lf",sum);
/*********End**********/
return 0;
}
祝大家学习愉快,我们下次实验课再见!
ps.数组的题还在赶工,马上就可以写出来了。看在这么辛苦的份上点点赞吧!!!
鸣谢:翟海霞老师