您好,欢迎访问三七文档
第1页共14页需掌握的编程题一、选择结构1.输入整数a和b,如果a2+b2大于100,则输出a+b的值,否则输出a–b的值。#includestdio.hvoidmain(){inta,b;scanf(%d%d,&a,&b);if(a*a+b*b100)printf(%d\n,a+b);elseprintf(%d\n,a-b);}打印输出语句可以写成:printf(%d,(a*a+b*b100?a+b:a-b));2.输入整数n,如果n既是5又是7的整倍数,则输出yes,否则输出no。#includestdio.hvoidmain(){intn;scanf(%d,&n);if(n%5==0&&n%7==0)//同时满足两个条件printf(yes\n);elseprintf(no\n);}3.输入三个整数,要求按由小到大的顺序输出。#includestdio.hvoidmain(){inta,b,c,t;scanf(%d%d%d,&a,&b,&c);if(ab){t=a;a=b;b=t;}//两两比较if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(%d,%d,%d\n,a,b,c);}4.某商场为促销实行打折销售商品,具体办法是假定购买某种商品的数量为x件,折扣如下:商品数量折扣x<5没有折扣第2页共14页5≤x<101%折扣10≤x<212%折扣21≤x<304%折扣30≤x6%折扣假定商品价格为p元,编程计算某顾客购买x件商品的应付金额。计算公式如下:sum=p*x*(1-d)其中,sum为应付金额,d为折扣数,用if-else-if语句实现。#includestdio.hvoidmain(){intx;floatp,d,sum;scanf(%d,%f,&x,&p);if(x5)d=0.0;elseif(x10)d=0.01;elseif(x21)d=0.02;elseif(x30)d=0.04;elsed=0.06;sum=p*x*(1-d);printf(sum=%.2f\n,sum);}考虑一下如果用case语句怎么实现?5.在屏幕上显示一张如下所示的时间表:*****Time*****1morning2afternoon3nightPleaseinputyourchoice:操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1时显示“Goodmorning”,选择2时显示“Goodafternoon”,选择3时显示“Goodnight”,对于其他的选择显示“Selectionerror!”,用switch语句编程实现。#includestdio.hvoidmain(){intn;printf(*****Time*****\n);printf(1morning\n);printf(2afternoon\n);printf(3night\n);printf(Pleaseinputyourchoice:);第3页共14页scanf(%d,&n);switch(n){case1:printf(Goodmorning\n);break;case2:printf(Goodafternoon\n);break;case3:printf(Goodnight\n);break;default:printf(Selectionerror!\n);}}6.输入两个实数和一个算术运算符(+,-,*,/),根据运算符执行相应的运算并输出运算结果。#includestdio.hvoidmain(){floatf1,f2,result;charop;scanf(%c%f%f,&op,&f1,&f2);//先输入算符,然后再输入两个实数switch(op){case'+':result=f1+f2;break;case'-':result=f1-f2;break;case'*':result=f1*f2;break;//千万别忘记需要加上break语句case'/':result=f1/f2;break;}printf(%f%c%f=%f\n,f1,op,f2,result);}二、循环结构【例5-11】输出100以内的素数。分析:素数是指除了能被1和它本身整除外,不能被其它任何整数整除的数。例如,17就是一个素数,除了1和17之外,它不能被2~16之间的任何整数整除。根据素数的这个第4页共14页定义,可得到判断素数的方法:把n作为被除数,把i=2~(m-1)依次作为除数,判断被除数m与除数i相除的结果,若都除不尽,即余数都不为0,则说明n是素数,反之,只要有一次能除尽(余数为0),则说明n存在一个1和它本身以外的另一个因子,它不是素数。因此可以使用穷举法来解决。程序清单如下:#includestdio.hvoidmain(){intn,i;for(n=2;n=100;n++){for(i=2;in;i++)if(n%i==0)break;//余数为零则不是素数,跳出内循环if(i=n)printf(\t%d,n);}}1.编写程序,生成以下的图案。解:由图案分析知道,每行输出的数字的个数和行数相等,那么在外循环i表示行数,内循环j表示每行输出的数字,数字的具体数值就是从1到i。程序如下所示:#includestdio.hvoidmain(){inti,j,lines;printf(pleaseinputlines=);scanf(%d,&lines);for(i=1;i=lines;i++)//外循环控制行数{for(j=1;j=i;j++)//内循环打印数字printf(%d,j);printf(\n);}}2.打印所有水仙花数。水仙花数指的是一个三位正整数,它的三个数字的立方和等于该数本身,例:153=13+53+33112123123412345123456123456712345678123456789第5页共14页解:首先,水仙花数只能是一个三位数,即在100~999之间,然后将这个三位整数的个位、十位和百位分离出来,进行判断即可。程序如下所示:#includestdio.hvoidmain(void){inti,j,k,n;printf(resultis:);for(n=100;n1000;n++){i=n/100;//分出百位,记住整数相除是整数j=(n-i*100)/10;//分出十位k=n%10;//分出个位if(n==i*i*i+j*j*j+k*k*k)printf(%d,n);}printf(\n);}3.pi的近似值可用以下公式求得:222222n1......413121116若n取值10000,则最后一项的值约为10-4,认为可达到精度要求。请编写程序求pi的近似值。解:这是一个累加和的例子,但是判断循环的条件有所不同,当每次的累加项大于10-4时,就进入循环,继续累加,否则就停止循环。程序如下:#includestdio.h#includemath.h//sqrt函数需引用voidmain(){floati=1.0,e=1.0;floats=0;while(e0.0001)//精度要求{s+=1/(i*i);i++;e=1/(i*i);//每次的累加项指的是e=1/(i*i)}s=sqrt(s*6);printf(%.4f\n,s);}4.编写程序:接收两个整数num1和num2,找出这两个数之间所有奇数的和。解:本题要求用户输入两个整数,先要判断出两个数的大小,然后,在两个数之间进行循环,遇到奇数就累加。程序如下:#includestdio.hvoidmain()第6页共14页{inta,b,temp,i,s=0;printf(pleaseinput2interge=);scanf(%d%d,&a,&b);if(ab)temp=a,a=b,b=temp;//将小数赋给a,大数赋给bfor(i=a;i=b;i++)if(i%2!=0)s+=i;printf(thesumofoddbetween%dand%dis%d\n,a,b,s);}5.编写程序计算如下和数的程序:201NNS!解:本题可以使用双重循环,内层循环实现阶乘,外层循环实现累加和。程序如下:#includestdio.h#defineN20voidmain(){doublea=1,b=0,i,j;//定义为double类型是考虑到结果是个很大的数for(i=1;i=N;i++){a=1;for(j=1;j=i;j++)a=a*j;b=b+a;}printf(%lf\n,b);}7.试输出以下图案:解:可以先分段考虑,将图案分做两下两个部分,上半部分每一行需要输出的空格数3、2、1、0,每一行需求输出的*的数量是1、3、5、7,下半部分类似。程序如下:#includestdio.hvoidmain(){inta,b,c;for(a=1;a=4;a++)//外循环控制行{for(b=1;b=4-a;b++)printf();//输出空格*************************第7页共14页for(c=1;c=2*a-1;c++)printf(*);//输出*号,printf(\n);}for(a=4-1;a=1;a--)//外循环控制行{for(b=1;b=4-a;b++)printf();for(c=1;c=2*a-1;c++)printf(*);printf(\n);}}下面为指定正三角形高度的算法程序(具有通用性)#includestdio.hvoidmain(){inti,j,h;printf(输入高度-》);scanf(%d,&h);for(i=1;i=h;i++){for(j=1;j=(h-i);j++){printf();}for(j=1;j=(i*2-1);j++){printf(*);}printf(\n);}for(i=h-1;i=1;i--){for(j=1;j=(h-i);j++){printf();}for(j=1;j=(i*2-1);j++){printf(*);}printf(\n);}}三.函数与编译预处理例6-8:利用函数完成求50以内的全部素数,并按每行5个数输出。#includemath.h//使用平方根函数,需要包含数学库第8页共14页#includestdio.hintprime(intx)//函数判断x是否素数,若x是素数则返回1;否则返回0{inti,r=1;for(i=2;i=sqrt(x);i++)if(x%i==0){r=0;break;}returnr;}voidoutput(intx,intn)//x接收了main函数中m的值,是要输出的素数{//n是输出素数的个数,其值从main函数中n传过来printf(%6d,x);if(n%5==0)printf(\n);//每输出10个素数产生一次换行}voidmain(){intm,n=0;for(m=2;m=50;m++)if(prime(m))//作为表达式调用prime函数,根据其函数值判断m是否素数{n++;//若是素数,则计数1次output(m,n);//作为一条独立语句调用output函数}}例6-11:编写交换两个变量值的函数swap()。分析:交换两个变量值需要借助于第三个变量。函数swap()并不作具体计算,只是完成一段功能,不需要返回明确结果值,因此函数类型定义为void。#includestdio.hvoidswap(intx,inty);voidmain(){inta=5,b=2;swap(a,b);//a和b是实参,将其值分别复制给形参x和yprintf(a=%d,b=%d\n,a,b);}voidswap(intx,inty)//x和y是形参,需要分配存储单元,所以要有类型符
本文标题:需掌握的编程题
链接地址:https://www.777doc.com/doc-5398583 .html