法133计算机科学课第15周实践题目及参考解答

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597

编程练习1:输出1000以内的所有素数。

参考解答:

#include<stdio.h>
#include<math.h>
int main()
{
    int m,i,k,prime;
    for(m=2;m<=200;m++)
{
    prime=1;
    k=sqrt(m);
    for(i=2; i<=k; i++) //最多循环至……
        if(m%i==0)
        {
            prime=0;
            break;
        }
    if(prime==1)
        printf("%d ",m);
}
    return 0;
}

编程练习2:求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。

参考解答:

#include<stdio.h>
int main()
{
    int n,a,b,c,sum;
    int i,f;
    n=100;
    while(n<1000)
    {
        sum=0;
        c=n%10;  //个位数,
        b=(n/10)%10;  //十位数
        a=n/100;  //百位数
        for(f=1,i=1; i<=a; ++i)  f=f*i; //求 a!
        sum += f;
        for(f=1,i=1; i<=b; ++i)  f=f*i; //求 b!
        sum += f;
        for(f=1,i=1; i<=c; ++i)  f=f*i; //求 c!
        sum += f; //此时sum的值为a!+b!+c!
        if(sum==n)  //若条件成立,则 n 就是要找的数。
            printf("%d ",n);
        ++n;  //考察下一个n
    }
    return 0;
}

解2:

#include<stdio.h>
int main()
{
    int n,a,b,c,sum;
    int i,f;
    for(n=100;n<1000;n++)
    {
        sum=0;
        c=n%10;  //个位数,
        b=(n/10)%10;  //十位数
        a=n/100;  //百位数
        for(f=1,i=1; i<=a; ++i)  f=f*i; //求 a!
        sum += f;
        for(f=1,i=1; i<=b; ++i)  f=f*i; //求 b!
        sum += f;
        for(f=1,i=1; i<=c; ++i)  f=f*i; //求 c!
        sum += f; //此时sum的值为a!+b!+c!
        if(sum==n)  //若条件成立,则 n 就是要找的数。
            printf("%d ",n);
    }
    return 0;
}

编程练习3:输入一个正整数,判断其是否为一个回文数(例1221、12321都是回文数)。提示:输入一个正整数n(例1234)后,构造出其反序数m(对应4321),若这两个数相等,则n是回文数(1234就不是回文数)。算法流程图如右图所示。

参考解答:

#include<stdio.h>
int main()
{

    int m,n,k;
    scanf("%d",&n);
    k=n;
    m=0;
    while(k>0)
    {
        m=m*10+k%10;
        k=k/10;
    }
    if(m==n)
        printf("%d是回文数\n",n);
    else
        printf("%d不是回文数\n",n);
    return 0;
}

编程练习4:输出1000以内的所有回文数。

参考解答:

#include<stdio.h>
int main()
{

    int m,n,k;
    for(n=0; n<1000; n++)
    {
        k=n;
        m=0;
        while(k>0)
        {
            m=m*10+k%10;
            k=k/10;
        }
        if(m==n)
            printf("%d ",n);
    }
    return 0;
}

编程练习5:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,1、2、3是6的因子,所以6是完数。编程序,输入n,判断n是否是完数。

参考解答:

#include<stdio.h>
int main( )
{
    int i,n,s;
    scanf("%d",&n);
    s=1; //s表示因子和。1是任何数的因子,所以s=1,也使下一句可以从2开始尝试
    for(i=2; i<n; i++) //从2开始到n-1,逐个去试
    {
        if(n%i==0)
            s+=i;  //如果i是n的因子,则累加
    }
    if(n==s)
        printf("%d是完数\n",n);
    else
        printf("%d不是完数\n",n);
    return 0;
}

编程练习6:找出1000内的所有完数。

参考解答:

#include<stdio.h>
int main( )
{
    int i,n,s;
    for(n=2; n<1000; n++)
    {
        s=1; //s表示因子和。1是任何数的因子,所以s=1,也使下一句可以从2开始尝试
        for(i=2; i<n; i++) //从2开始到n-1,逐个去试
        {
            if(n%i==0)
                s+=i;  //如果i是n的因子,则累加
        }
        if(n==s)
            printf("%d ",n);
    }
    return 0;
}
时间: 2024-10-30 20:31:24

法133计算机科学课第15周实践题目及参考解答的相关文章

法133计算机科学课第13周实践题目及参考解答

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 [课后练习1] 完成下面"歌手大奖赛计分程序"的设计(至少一项要求): 1.在歌手大奖赛中,有10位评委为参赛的选手打分,分数为0~10分(运行时由人控制).选手最后得分为去掉一个最高分和一个最低分后的平均值.请编写一个程序实现计分. 2.做一个更通用的计分程序,评委人数n可以在输入成绩之前输入,从而评委人数可以灵活调整. 3.进一步完善程序.一次运行程序只计算

法133计算机科学课第12周实践题目及参考解答

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 Problem A:2447: 求N组数的最大公约数Description计算一组数的最大公约数Input第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行Output每组的两个整数(a和b)的最大 公约数,每个结果独占一行Sample Input398 7280 3612 144Sample Output2412

法133计算机科学课第9、10周实践题目及参考解答

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 2398:分段函数求值[双分支] Description 编程序,计算下面函数的值并输出: y = x - 1 (当x>=1), y = -x + 1 (当x<1) Input 一个整型数x Output 按公式计算出的y Sample Input 2 Sample Output 1 参考解答: #include <stdio.h> int main() {

计算机科学-第15周 递归函数 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 1.阅读下面关于递归函数的程序,在草稿纸上画出函数调用"递推-回归"的过程,得出运行结果,并和实际运行结果进行对照(1) #include <stdio.h> int fact(int n); int main(){ long x=0,y=0; x=5; y=fact(x); printf("%ld\n"

计算机科学-第4周 结构 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 例1: 用一个结构表示点,输入点的横纵坐标,输出该点到原点的距离 #include <stdio.h> #include <math.h> struct Point { float x; float y; }; int main() { struct Point p; float d; printf("请输入点的坐标: &

计算机科学-第6周 文件 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 题目:文件salary1.txt是某单位100名员工的工号.基本工资和绩效工资.编程序(1)从文件中读取数据,求出总工资,并在屏幕上显示信息:(2)将完整的工资单保存到文件salary2.txt中.(3)将总工资超过5000元的员工的工号保存到文件rich.txt中.(4)在屏幕上显示工资最高的员工的工资信息提示:(1)定义一个结构体数组保存从文件中读入的

计算机科学-第13周 函数 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 1.阅读程序:阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解函数的用法(1) #include <stdio.h> void fun(int x, int y) { x=x*10; y=y+x; printf("%d\t%d\n",x,y); } int main() { int a=2, b=3; f

计算机科学-第9周 数组、结构体、指针综合练习 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 发现第9周的题目及参考没有公布,补上. 1.阅读程序阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解指针的用法(1) #include<stdio.h> int main(){ char a[]="Hello World",*p; int i; i=8; p=a+i; printf("%s\n&

计算机科学-第3周 排序和查找 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 本周练习需要的数据文件下载自:链接 练习一 salary.txt中是某企业(不超过500)职工的工资,请编程读入数据,给每名职工的工资增加20%后降序排序,并输出排序后的结果.运行程序时,请将salary.txt复制到源文件同一文件夹下.Salary.txt在提供的材料中. 下面是完成应用的部分代码,可以增加定义需要的变量,但不建议改动已有的代码: #in