精心整理c语言程序编程经典题型.docx

上传人:b****7 文档编号:9185716 上传时间:2023-02-03 格式:DOCX 页数:12 大小:17.92KB
下载 相关 举报
精心整理c语言程序编程经典题型.docx_第1页
第1页 / 共12页
精心整理c语言程序编程经典题型.docx_第2页
第2页 / 共12页
精心整理c语言程序编程经典题型.docx_第3页
第3页 / 共12页
精心整理c语言程序编程经典题型.docx_第4页
第4页 / 共12页
精心整理c语言程序编程经典题型.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

精心整理c语言程序编程经典题型.docx

《精心整理c语言程序编程经典题型.docx》由会员分享,可在线阅读,更多相关《精心整理c语言程序编程经典题型.docx(12页珍藏版)》请在冰豆网上搜索。

精心整理c语言程序编程经典题型.docx

精心整理c语言程序编程经典题型

程序填空题:

 

第一题,以下函数的功能是将任意整数进行因式分解,

请完成该程序的空缺使函数能够正常运算

 voidf(intn)

{

       for(inti=2;i

       {

               //———–

(1)————

               {

                       printf(“%d“,i);

                       n=n/i;

               }

       }

       if(n>1)printf(“%d\n”,n);

}

 

#include"stdio.h"

voidf(intn)

{

for(inti=2;i

{

if(n%i==0)

{

printf("%d",i);

n=n/i;

}

}

if(n>1)printf("%d\n",n);

}

main()

{

f(6);

}

 

 第二题,以下函数的功能是将给定字符串进行倒序输出,

请完成该函数空缺部分。

 char*p=“abcdef”;

char*q=(char*)malloc(strlen(p)+1);

for(inti=0,intlen=strlen(p);i

       q=p[i+1];

q[len-1]=p[0];

—–

(2)—-;

printf(“%s\n”,q);

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

main()

{

char*p="abcdef";

char*q=(char*)malloc(strlen(p)+1);

for(inti=0,intlen=strlen(p);i

*q=p[i+1];

q[len-1]=p[0];

printf("%s\n",q);

}

 第三题,(这题的题目到底是要干啥,本人到现在沿未明了,数学学统计好,但可以确定原题给出的代码就是如此)

 intf(intm,intn)

{

       inta=1;

       intm1=m;

      //—–(3)—-

       a*=m1–;

       intb=1;

       while(n>1)

               b*=n–;

       returna/b;

}

 第四题,任意给出一个四位数,

把它重新组成一个四位的最大数和一个最小数,

算出两者间的差。

例如:

3721这个数,可以重组成:

7321和1237,相数之差为7321-1237

请完善下面这个函数,以实现此功能

#include"stdio.h"

intf(intn)

{

intN[4];

for(inti=0;i<4;i++)

{

N[3-i]=n%10;

n=n/10;

}

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

for(intj=0;j<3-i;j++)

if(N[j]>N[j+1])

{

intt=N[j+1];

N[j+1]=N[j];

N[j]=t;

}

intn_min=0;

for(i=0;i<4;i++)

n_min=n_min*10+N[i];

intn_max=0;

for(i=3;i>=0;i--)

n_max=n_max*10+N[i];

returnn_max-n_min;

}

main()

{

printf("%d\n",f(1100));

}

#include"stdio.h"

voidpaixu(inta[],intn,intp)

{

inti,j,k,t;

for(i=0;i

{

k=i;

for(j=i+1;j

if(p==0)//jiangxu

{

if(a[j]>a[k])

k=j;

}

else

{

if(a[j]

k=j;

}

if(k!

=i)

{

t=a[k];

a[k]=a[i];

a[i]=t;

}

}

}

main()

{

intx,i;

inta[4];

intsum1,sum2;

printf("输入一个4位整数:

\n");

scanf("%d",&x);

a[0]=x/1000;

a[1]=x%1000/100;

a[2]=x%100/10;

a[3]=x%10;

paixu(a,4,0);

sum1=1000*a[0]+100*a[1]+10*a[2]+a[3];

paixu(a,4,1);

sum2=1000*a[0]+100*a[1]+10*a[2]+a[3];

printf("%d\n",sum1-sum2);

}

 第五题,假设有m+n个人,其中,

m个人手持面额为5角的硬币,

n个人手持面额为1元的硬币,0.5*m+nm

他们都要乘车买票,

现假设售票员手中无零钞,

票价为5角,

下面这个函数就可以算出这m+n个人所有可能的买票情况,

请完善此函数。

//m:

持有5角币的人数

//n:

持有1元币的人数

//返回:

所有顺利完成购票过程的购票次序的种类数

intf(intm,intn)

{

       if(m

       if(n==0)return1;

       return_________f(m,n-1)+f(m-1,n)______________;

}

最后一题:

编程题:

注:

最后一题的编程题对参赛者的要求相当高,以下代码在你提交自己的程序设计思路前是不可见的。

求二十四点:

//Calcu24.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include“stdafx.h”

#include“conio.h”

#include“stdlib.h”

#include“time.h”

#include“math.h”

#include“string.h”

/*

 从一副扑克牌中,任取4张。

 2-10按其点数计算(为了表示方便10用T表示),J,Q,K,A统一按1计算

 要求通过加减乘除四则运算得到数字24。

 本程序可以随机抽取纸牌,并用试探法求解。

*/

voidGivePuzzle(char*buf)

{

       charcard[]={‘A’,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’T',’J',’Q',’K'};

       for(inti=0;i<4;i++){

               buf=card[rand()%13];

       }

}

voidshuffle(char*buf)

{

       for(inti=0;i<5;i++){

               intk=rand()%4;

               chart=buf[k];

               buf[k]=buf[0];

               buf[0]=t;

       }

}

intGetCardValue(intc)

{

       if(c==’T') return10;

       if(c>=’0′&&c<=’9′)returnc–’0′;

       return1;

}

charGetOper(intn)

{

       switch(n)

       {

       case0:

               return‘+’;

       case1:

               return‘-’;

       case2:

               return‘*’;

       case3:

               return‘/’;

       }

       return‘‘;

}

doubleMyCalcu(doubleop1,doubleop2,intoper)

{

       switch(oper)

       {

       case0:

               returnop1+op2;

       case1:

               returnop1–op2;

       case2:

               returnop1*op2;

       case3:

               if(fabs(op2)>0.0001)

                       returnop1/op2;

               else

                       return100000;

       }

       return0;

}

voidMakeAnswer(char*answer,inttype,char*question,int*oper)

{

       charp[4][3];

       for(inti=0;i<4;i++)

       {

               if(question==‘T’)

                       strcpy(p,“10″);

               else

                       sprintf(p,“%c”,question);

       }

       

       switch(type)

       {

       case0:

               sprintf(answer,“%s%c(%s%c(%s%c%s))”,

                       p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);

               break;

       case1:

               sprintf(answer,“%s%c((%s%c%s)%c%s)”,

                       p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);

               break;

       case2:

               sprintf(answer,“(%s%c%s)%c(%s%c%s)”,

                       p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);

               break;

       case3:

               sprintf(answer,“((%s%c%s)%c%s)%c%s”,

                       p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);

               break;

       case4:

               sprintf(answer,“(%s%c(%s%c%s))%c%s”,

                       p[0],GetOper(oper[0]),p[1],GetOper(oper[1]),p[2],GetOper(oper[2]),p[3]);

               break;

       }

}

boolTestResolve(char*question,int*oper,char*answer)

{

       //等待考生完成

}

returntrue;

      //returnfalse;

}

/*

 采用随机试探法:

就是通过随机数字产生加减乘除的组合,通过大量的测试来命中的解法

 提示:

 1.需要考虑用括号控制计算次序的问题比如:

(10–4)*(3+A),实际上计算次序的数目是有限的:

    A*(B*(c*D))

        A*((B*C)*D)

        (A*B)*(C*D)

        ((A*B)*C)*D

        (A*(B*C))*D

 2.需要考虑计算结果为分数的情况:

(3+(3/7))*7

 3.题目中牌的位置可以任意交换

*/

boolTryResolve(char*question,char*answer)

{

       intoper[3]; //存储运算符,0:

加法1:

减法2:

乘法3:

除法

       

       for(inti=0;i<1000*1000;i++)

       {

               //打乱纸牌顺序

               shuffle(question);

               

               //随机产生运算符

               for(intj=0;j<3;j++)

                       oper[j]=rand()%4;

               if(TestResolve(question,oper,answer)) returntrue;

       }

       returnfalse;

}

intmain(intargc,char*argv[])

{

       //初始化随机种子

       srand((unsigned)time(NULL));

       charbuf1[4];  //题目

       charbuf2[30]; //解答

       printf(“***************************\n”);

       printf(“计算24\n”);

       printf(“AJQK均按1计算,其它按牌点计算\n”);

       printf(“目标是:

通过四则运算组合出结果:

24\n”);

       printf(“***************************\n\n”);

       for(;;)

       {

               GivePuzzle(buf1); //出题

               

               printf(“题目:

”);

               for(intj=0;j<4;j++){

                       if(buf1[j]==‘T’)//、、、、初始化buf1[];

                               printf(“10“);

                       else

                               printf(“%c“,buf1[j]);

               }

               printf(“\n按任意键参考答案…\n”);

               getch();

               if(TryResolve(buf1,buf2)) //解题

               {

               //       //printf(“a\n”);

                       

                       //for(inti=0;i<17;i++)

                       //       printf(“%c”,buf2);

                       

                       printf(“参考:

%s\n”,buf2);

               }

               else

                       printf(“可能是无解…\n”);

               printf(“按任意键出下一题目,x键退出…\n”);

               if(getch()==‘x’)break;

       }

       return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1