视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
C语言编程题目
2025-09-28 00:38:44 责编:小OO
文档
软件学院/信息学院 C语言上机试题

大家学习C语言是为了使用,不是为了考试,所以我希望你们能先自己动手做做,然后再参考一下答案。我知道有些同学喜欢死记硬背,也许可以把这些题目的答案都背下来,但是那样做一点好处都没有。大学里,别把分数看得那么重要。找工作没人在乎你到底考了多少分。能诚实的对待考试,正确的看待分数,真才实学才是最应该得到的。     大家可以到 10.2.55.55下载所有源代码(前提是我开电脑了,一般我晚上开)

特别声明:出题老师请您注意!去年C语言笔试卷子时,有些题目是只有软件学院/信息学院的同学需要做的,但是卷头写的是“此题只有信息学院的同学做”,小心呀,今年别才出现这样的错误了!别忘了软件学院!!!

第二部分 - 简单数值计算:

2-1. 编程,输出200以内所有完全平方数C(满足C2=A2+B2)及其个数。

————

main()

{      int a,b,c,n=0;

for(c=1;c<=200;c++)

for(a=1;a<=200;a++)

for(b=1;b<=200;b++)

    if(c*c==a*a+b*b){printf("%4d",c);a=201;b=201;n++;}

    printf("\\nn=%d\\n",n);

}

2-2. 设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),编程,输出所有满足条件的N。

————

main()

{

    int a=1,b,c,d;

for(d=0;d<=9;d++)

for(b=0;b<=1;b++)

for(c=0;c<=9;c++)

    if(9000*a+900*b+90*c+9*d == 1000*d+100*c+10*b+a)

    printf("%d\\n",1000*a+100*b+10*c+d);

}

2-3. 口袋中有12个球,其中3红,3白和6黑,从中任取8个球,编程,输出所有不同的取法。输出形式如下:

      RED   WHITE  BLACK

  ------------------------

   1:  0      2      6

   2:  0      3      5

     。。。。

————

main()

{

    int r,w,b,n=1;

    printf("   red   white   black\\n---------------------\\n");

for(r=0;r<=3;r++)

for(w=0;w<=3;w++)

for(b=0;b<=6;b++)

    if(r+w+b==8)printf("%2d : %d   %3d     %3d\\n",n++,r,w,b);

}

2-4. 小明有五本新书,要借给A、B、C三位小朋友,每人每次只能借一本,编程,输出所有不同的借法。

————

main()

{

    int a,b,c;

for(a=1;a<=5;a++)

for(b=1;b<=5;b++)

for(c=1;c<=5;c++)

    if(a!=b&&b!=c&&c!=a)printf("a--%d ; b--%d ; c--%d\\n",a,b,c);

}

2-5. 编程,求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 13 + 53+ 33

————

main()

{

    int a,b,c;

for(a=1;a<=9;a++)

for(b=0;b<=9;b++)

for(c=1;c<=9;c++)

    if(100*a+10*b+c == a*a*a+b*b*b+c*c*c)

    printf("%d \\n",100*a+10*b+c);

}

2-6. 100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。编程,输出所有满足条件的方案(即大、中、小马的数目)。

————

main()

{

    int a,b,c;

for(a=0;a<=33;a++)

for(b=0;b<=50;b++)

for(c=0;c<=100;c+=2)

    if(a+b+c==100 && 3*a+2*b+c/2==100)

    printf("big--%d ; middle--%d ; small--%d\\n",a,b,c);

}

2-7. 用一元人民币兑换成1分、2分和5分硬币,编程,输出所有不同的兑换方法及兑换方法个数。

————

main()

{

    int a,b,c,n=0;

for(a=0;a<=100;a++)

for(b=0;b<=50;b++)

for(c=0;c<=20;c++)

    if(a+2*b+5*c==100)

    {  printf("1fen--%d ; 2fen--%d ; 5fen--%d\\n",a,b,c);n++;}

    printf("n=%d",n);

}

2-8. 编程,从键盘输入1个人的工资(1000—9999之间的整数),计算给这个人发工资时,需面值100元,50元,20元,10元,5元,2元和1元的人民币各多少张?输出总张数最少的10种方案。

————

这道题比较麻烦,我没有找到很好的方法,现在的思路是先找到张数最少的那种,记下一共n张;然后找张数是n-1的次数;n-2的次数;…当这些次数到10的时候,就是最少的10种方案

请大家自己完成,如果有什么好的方法请告诉我,谢谢。

2-9. 编程,输出555555的约数中最大的三位数。

————

main()

{

    int a;

for(a=999;a>=100;a--)

    if(555555%a==0){printf("\\n%d",a);break;}

}

2-10. 编程,输出所有个位数为6且能被31整除的五位数及其个数。

————

main()

{

    int a,n=0;

for(a=1000;a<=9999;a++)

    if( (  (a%31)*10+6  )%31==0){printf("\\n%d6",a);n++;}

    printf("\\nn=%d",n);

}

2-11. 一辆卡车违犯交通规则,撞人逃跑。现场三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙是位数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索,编程,输出车号。

————

main()

{

    int a,b,c;

for(a=0;a<=9;a++)

for(b=0;b<=9;b++)

for(c=32;c<=99;c++)

    if(1100*a+11*b==c*c)

    printf("%d",c*c);

}

2-12. 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何? 编程,输出所有可能的购买方案。

————

main()

{

    int a,b,c;

for(a=0;a<=20;a++)

for(b=0;b<=33;b++)

for(c=0;c<=300;c+=3)

    if(a+b+c==100 && 5*a+3*b+c/3==100)

    printf("cock--%d ; hen--%d ; child--%d\\n",a,b,c);

}

2-13. 编程,输出1000到100000之间所有满足下列条件的所有整数及其个数:整数的各位数字之和等于5。

————

main()

{

    int a,b,c,d,e,n=0;

for(a=0;a<=5;a++)

for(b=0;b<=5;b++)

for(c=0;c<=5;c++)

for(d=0;d<=5;d++)

for(e=0;e<=5;e++)

if(a+b+c+d+e==5 && 10000*a+1000*b+100*c+10*d+e>1000)

    {printf("%d\\n",10000*a+1000*b+100*c+10*d+e);n++;}

    printf("n=%d",n);

}

2-14. 编程,任意输入一个偶数n,请将它分解为两个素数之和。输出形式为:*=*+*

————

int fun(int n)

{    int i,j;

for(i=2;i<=n-1;i++)

for(j=2;j<=n-1;j++)

    if(i*j==n)return(0);

    return(1);

}

main()

{

    int n,a,b;

    printf("Input n=");

    scanf("%d",&n);

for(a=2;a<=n-2;a++)

    if(fun(a)*fun(n-a))printf("%d=%d+%d\\n",n,a,n-a);

}

2-15. 有一正整数等差数列,其前四项之和是26,前四项之积是880,编程,输出此数列的前四项。

————

main()

{

    int a,b,c,d;

for(a=1;a<=25;a++)

for(b=1;b<=25;b++)

for(c=1;c<=25;c++)

for(d=1;d<=25;d++)

    if(a+b+c+d==26  &&  a*b*c*d==880 && a-b==b-c&&b-c==c-d)

    {printf("%d  %d  %d  %d",a,b,c,d);}

}

2-16. 一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。编程,输出这个自然数。

————

main()

{

    int a,k;

for(a=1;a>=1&&a<=632767;a++)

    {       k=((a/8)/8)/8;

        if(    a%8==1 && (a/8)%8==1 && ((a/8)/8)%8==7 &&

            a%17==4 && (a/17)%17==15  && ((a/17)/17)==2*k )

        {printf("\\n%d",a);}

    }

}

2-17. 如果一个数恰好等于它的因子之和,则称该数为“完全数”。如:6的因子是1、2、3,而6=1+2+3,则6是个“完全数”。编程,输出1000以内的全部“完全数”。

————

int fun(int i)

{    int k,re=0;

for(k=1;k    if(i%k==0)re+=k;

    return(re);

}

main()

{

    int n;

for(n=1;n<1000;n++)

    if( fun(fun(n))==n )printf("%d\\n",n);

}

2-18. 一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,编程,输出这个三位数。

————

main()

{

    int n,a,b,c,x,y,z;

for(n=81;n<=342;n++)

    {    a=n%7;b=(n/7)%7;c=(n/49)%7;

        x=n%9;y=(n/9)%9;z=(n/81)%9;

        if(a==z&&b==y&&c==x)printf("%d\\n",n);

    }

}

2-19.用40元买苹果、西瓜和梨共100个,3种水果都要。已知苹果0.4元一个,西瓜4元一个,梨0.2元一个。问可以各买多少个?编程,输出全部购买方案。

————

main()

{

    int a,b,c;

for(a=1;a<=98;a++)

for(b=1;b<=8;b++)

for(c=1;c<=98;c++)

    if(a+b+c==100 && 4*a+40*b+2*c==400)

    printf("apple--%d ; water melon--%d ; pear--%d\\n",a,b,c);

}

2-20. 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

————

int fun(int i)

{    int k,re=0;

for(k=1;k    if(i%k==0)re+=k;

    return(re);

}

main()

{

    int n;

for(n=1;n<3000;n++)

    if( fun(fun(n))==n )printf("%d\\n",n);

}

2-21.马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭共花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?编程,输出全部可能的答案。

————

main()

{

    int a,b,c;

for(a=1;a<=15;a++)

for(b=1;b<=23;b++)

for(c=1;c<=28;c++)

    if(a+b+c==30 && 3*a+2*b+c==50)

    printf("man--%d ; women--%d ; child--%d\\n",a,b,c);

}

2-22. 一个数如果恰好等于它的各因子(该数本身除外)之和(如:6=3+2+1),则称其为“完数”;若因子之和大于该数,则称其为“盈数”。求出2到60之间所有“完数”和“盈数”,并以如下形式输出:

        E: e1 e2 e3 ......(ei为完数)

        G: g1 g2 g3 ......(gi为盈数)

————

这道偶忘写了,大家自己做一下吧 ^-^

2-23. 有一堆硬币,面值只有1分、2分和5分三种。其中有57枚面值不是5分,有77枚面值不是2分;有72枚面值不是1分。问1分、2分和5分的硬币各有多少?编程,输出全部可能的答案。

————

main()

{

    int a,b,c;

for(a=0;a<=57;a++)

for(b=0;b<=57;b++)

for(c=0;c<=72;c++)

    if(a+b==57 && b+c==72 && a+c==77)

    printf("1fen:%d ; 2fen:%d ; 5fen:%d\\n",a,b,c);

}

2-24. 编程,求解下列算式中各字母所代表的数字并输出。

              PEAR

             - ARA            ───────

               PEA

————

main()

{

    int p,e,a,r;

for(p=1;p<=9;p++)

for(e=0;e<=9;e++)

for(a=1;a<=9;a++)

for(r=0;r<=9;r++)

    if(1000*p+100*e+10*a+r - 101*a-10*r == 100*p+10*e+a)

    printf("p=%d ; e=%d ; a=%d ; r=%d \\n",p,e,a,r);

}

2-25. 设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。编程,输出满足条件的所有a、b、c的值。

————

main()

{  int a,b,c;

for(a=1;a<=9;a++)

{ for(b=1;b<=9;b++)

{ for(c=0;c<=9;c++)

          {  if(100*a+110*b+12*c==532)

             printf("a=%3d b=%3d c=%3d",a,b,c);

          }

       }

    }

}

2-26.面包bread、奶油butter和咖啡coffee在一起可以组成一个算式:

                B R E A D

                B R E A D

            + B U T T E R 

              C O F F E E 

     设A、B、C、D、E、F、O、R、T和U均代表数字0~9之一。编程,输出各字母所代表的数字。

————

main()

{

    int a,b,c,d,e,f,o,r,t,u;

    double s1,s2,s3;

for(a=0;a<=9;a++)

for(b=0;b<=9;b++)

for(c=0;c<=9;c++)

for(d=0;d<=9;d++)

for(e=0;e<=9;e++)

for(f=0;f<=9;f++)

for(o=0;o<=9;o++)

for(r=0;r<=9;r++)

for(t=0;t<=9;t++)

for(u=0;u<=9;u++)

    {  s1=(10000*b+1000*r+100*r+10*a+d)*2;

       s2=100000*b+10000*u+1100*t+10*e+r;

       s3=100000*c+10000*o+1100*f+11*e;

       if(s1+s2==s3)

       printf("a=%d;b=%d;c=%d;d=%d;e=%d;f=%d;o=%d;r=%d;t=%d;u=%d\\n"

          ,a,b,c,d,e,f,o,r,t,u);

    }

}

2-27.我国明代数学家程大位写了一本《算法统宗》,里面有一题:一百馒头一百僧,大僧三个,小僧三人分一个,大小僧各几丁? 编程,输出大僧和小僧的人数。

————

main()

{

    int a,c;

for(a=0;a<=33;a++)

for(c=0;c<=300;c+=3)

    if(a+c==100 && 3*a+c/3==100)

    printf("old--%d ; young--%d\\n",a,c);

}

2-28.一个马戏团表演, 120个座位全满,全部门票收入是120元,现在知道,男人每人5元,女人每人2元,小孩每人1角。编程,输出男人、女人和小孩各有多少人。

————

main()

{

    int a,b,c;

for(a=0;a<=24;a++)

for(b=0;b<=60;b++)

for(c=0;c<=120;c+=10)

    if(a+b+c==120 && 5*a+2*b+c/10==120)

    printf("man--%d ; woman--%d ; child--%d\\n",a,b,c);

}

2-29.全排有46名战士,会骑马的有30人,会摔跤的有19人,会拳击的有24人。还知道不少人是多面手,会骑马和摔跤的有14人,会摔跤和拳击的有12人,会拳击和骑马的有8人。编程,输出三项全能的有几人?

——————

main()

{  int x ,a,b,c;

for(x=1;x<=12;x++)

    { a=30-14-8+x;

      b=16-14-12+x;

      c=24-12-8+x;

      if(a+b+c+14+12+8-2*x==40)

      printf("\\n%d Supper Soldier",x);

    }

}

2-30.三对情侣参加婚礼,三个新郎为A、B、C,三个新娘为X、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人听后知道他们在说假话。编程,输出谁将和谁结婚。

————

main()

{

    int a,b,c;

for(a='X';a<='Z';a++)

for(b='X';b<='Z';b++)

for(c='X';c<='Z';c++)

    if(a!='X' && c!='X' && c!='Z' &&a!=b&&b!=c&&c!=a)

    printf("A--%c ; B--%c ; C--%c\\n",a,b,c);

}

2-31.某侦察队接到一项紧急任务,要求在A、B、C、D、E、F 六个队员中尽可能多地挑若干人,但有以下条件:

       1. A和B二人中至少去一人           2. A和D不能一起去

       3. A、E和F三人中要派二人去          4. B和C都去或都不去

       5. C和D两人中去一个               6. 若D不去,则E也不去

     编程,输出选中的人选。

————

main()

{

    int a,b,c,d,e,f;

for(a=0;a<=1;a++)

for(b=0;b<=1;b++)

for(c=0;c<=1;c++)

for(d=0;d<=1;d++)

for(e=0;e<=1;e++)

for(f=0;f<=1;f++)

    {

        if(d==0)e=0;

     if(a+b>=1 && a+d!=2 && a+e+f==2 && b==c && c+d==1)

        printf("A:%d B:%d C:%d D:%d E:%d F:%d\\n",a,b,c,d,e,f);

        if(d==0)e=1;

    }

}

2-32.有A、B、C、D、E,每人额头上贴了一张或黑或白的纸。5人对坐,都可看到其他人的颜色,但都不知道自己的颜色。5人相互观察:

       A说:有三人额头上贴白纸,一人额头上贴的是黑纸

       B说:我看见其他四人额头上贴的都是黑纸

       C说:有一人额头上贴白纸,其他三人贴的是黑纸

       D说:我看见四人额头上贴的都是白纸

      E什么也没说

    现在已知额头贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。编程,输出这五人中额头贴白纸的人选和额头贴黑纸的人选。

————

main()

{

    int a,b,c,d,e,m,n,o,p;

for(a=0;a<=1;a++)

for(b=0;b<=1;b++)

for(c=0;c<=1;c++)

for(d=0;d<=1;d++)

for(e=0;e<=1;e++)

    {

        m=(a==1 && b+c+d+e==3) || (a==0 && b+c+d+e!=3);

        n=(b==1 && a+c+d+e==0) || (b==0 && a+c+d+e!=0);

        o=(c==1 && a+b+d+e==1) || (c==0 && a+b+d+e!=1);

        p=(d==1 && a+b+c+e==4) || (d==0 && a+b+c+e!=4);

        if(m*n*o*p==1)

        printf("A:%d B:%d C:%d D:%d E:%d\\n",a,b,c,d,e);

    }

}

2-33. 求解爱因斯坦数学题。有一条长阶梯,若每步跨2阶,则最后剩余1阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。若每次跨7阶,最后才正好一阶不剩。编程,输出这条阶梯共有多少阶?

————

main()

{

    int a;

    for(a=0;;a++)

    if(a%2==1 && a%3==2 && a%5==4 && a%6==5 && a%7==0)

    {printf("n:%d",a);break;}

}

2-34.我国古代数学名著<<孙子算经>>中,提出了闻名于世的“孙子问题”,即:今有物不知其数,三个三个地数,剩二个;五个五个地数,剩三个;七个七个地数,剩二个。编程,输出该物的个数。

————

main()

{

    int a;

    for(a=0;;a++)

    if(a%3==2 && a%5==3 && a%7==2)

    {printf("n:%d",a);break;}

}

P.S.顺便说一下,上机的时候好像抽到题后有一次换题的机会,所以如果你不幸抽到2-8那样的题,就直接换一道吧,呵呵。上机时间非常充裕,大概快的话10分钟三道题就都完成了,很容易的。

    下载本文

显示全文
专题