需掌握的编程题.docx
- 文档编号:13836897
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:24
- 大小:34.50KB
需掌握的编程题.docx
《需掌握的编程题.docx》由会员分享,可在线阅读,更多相关《需掌握的编程题.docx(24页珍藏版)》请在冰点文库上搜索。
需掌握的编程题
需掌握的编程题
一、选择结构
1.输入整数a和b,如果a2+b2大于100,则输出a+b的值,否则输出a–b的值。
#include
voidmain()
{
inta,b;
scanf("%d%d",&a,&b);
if(a*a+b*b>100)
printf("%d\n",a+b);
else
printf("%d\n",a-b);
}
打印输出语句可以写成:
printf("%d",(a*a+b*b>100?
a+b:
a-b));
2.输入整数n,如果n既是5又是7的整倍数,则输出yes,否则输出no。
#include
voidmain()
{
intn;
scanf("%d",&n);
if(n%5==0&&n%7==0)//同时满足两个条件
printf("yes\n");
else
printf("no\n");
}
3.输入三个整数,要求按由小到大的顺序输出。
#include
voidmain()
{
inta,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}//两两比较
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;}
printf("%d,%d,%d\n",a,b,c);
}
4.某商场为促销实行打折销售商品,具体办法是假定购买某种商品的数量为x件,折扣如下:
商品数量
折扣
x<5
没有折扣
5≤x<10
1%折扣
10≤x<21
2%折扣
21≤x<30
4%折扣
30≤x
6%折扣
假定商品价格为p元,编程计算某顾客购买x件商品的应付金额。
计算公式如下:
sum=p*x*(1-d)
其中,sum为应付金额,d为折扣数,用if-else-if语句实现。
#include
voidmain()
{intx;
floatp,d,sum;
scanf("%d,%f",&x,&p);
if(x<5)
d=0.0;
elseif(x<10)
d=0.01;
elseif(x<21)
d=0.02;
elseif(x<30)
d=0.04;
else
d=0.06;
sum=p*x*(1-d);
printf("sum=%.2f\n",sum);
}
考虑一下如果用case语句怎么实现?
5.在屏幕上显示一张如下所示的时间表:
*****Time*****
1morning
2afternoon
3night
Pleaseinputyourchoice:
操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1时显示“Goodmorning”,选择2时显示“Goodafternoon”,选择3时显示“Goodnight”,对于其他的选择显示“Selectionerror!
”,用switch语句编程实现。
#include
voidmain()
{intn;
printf("*****Time*****\n");
printf("1morning\n");
printf("2afternoon\n");
printf("3night\n");
printf("Pleaseinputyourchoice:
");
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.输入两个实数和一个算术运算符(+,-,*,/),根据运算符执行相应的运算并输出运算结果。
#include
voidmain()
{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之间的任何整数整除。
根据素数的这个定义,可得到判断素数的方法:
把n作为被除数,把i=2~(m-1)依次作为除数,判断被除数m与除数i相除的结果,若都除不尽,即余数都不为0,则说明n是素数,反之,只要有一次能除尽(余数为0),则说明n存在一个1和它本身以外的另一个因子,它不是素数。
因此可以使用穷举法来解决。
程序清单如下:
#include
voidmain()
{
intn,i;
for(n=2;n<=100;n++)
{
for(i=2;i if(n%i==0)break;//余数为零则不是素数,跳出内循环 if(i>=n)printf("\t%d",n); } } 1 12 123 1234 12345 123456 1234567 12345678 123456789 1.编写程序,生成以下的图案。 解: 由图案分析知道,每行输出的数字的个数和行数相等,那么在外循环i表示行数,内循环j表示每行输出的数字,数字的具体数值就是从1到i。 程序如下所示: #include voidmain() {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+33 解: 首先,水仙花数只能是一个三位数,即在100~999之间,然后将这个三位整数的个位、十位和百位分离出来,进行判断即可。 程序如下所示: #include voidmain(void) {inti,j,k,n; printf("resultis: "); for(n=100;n<1000;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的近似值可用以下公式求得: 若n取值10000,则最后一项的值约为10-4,认为可达到精度要求。 请编写程序求pi的近似值。 解: 这是一个累加和的例子,但是判断循环的条件有所不同,当每次的累加项大于10-4时,就进入循环,继续累加,否则就停止循环。 程序如下: #include #include voidmain() {floati=1.0,e=1.0;floats=0; while(e>0.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,找出这两个数之间所有奇数的和。 解: 本题要求用户输入两个整数,先要判断出两个数的大小,然后,在两个数之间进行循环,遇到奇数就累加。 程序如下: #include voidmain() {inta,b,temp,i,s=0; printf("pleaseinput2interge="); scanf("%d%d",&a,&b); if(a>b) temp=a,a=b,b=temp;//将小数赋给a,大数赋给b for(i=a;i<=b;i++) if(i%2! =0) s+=i; printf("thesumofoddbetween%dand%dis%d\n",a,b,s); } 5.编写程序计算如下和数的程序: 解: 本题可以使用双重循环,内层循环实现阶乘,外层循环实现累加和。 程序如下: #include #defineN20 voidmain() { 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,下半部分类似。 程序如下: #include voidmain() {inta,b,c; for(a=1;a<=4;a++)//外循环控制行 {for(b=1;b<=4-a;b++)printf("");//输出空格 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"); } } 下面为指定正三角形高度的算法程序(具有通用性) #include voidmain() { 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个数输出。 #include #include intprime(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。 #include voidswap(intx,inty); voidmain() {inta=5,b=2; swap(a,b);//a和b是实参,将其值分别复制给形参x和y printf("a=%d,b=%d\n",a,b); } voidswap(intx,inty)//x和y是形参,需要分配存储单元,所以要有类型符 {intt; t=x;x=y;y=t; printf("x=%d,y=%d\n",x,y); } 1.两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。 解: 设两个整数为m和n,用辗转相除法求最大公约数,最小公倍数=m*n/最大公约数。 算法: 求最大公约数。 1)判断m 若m 2)判断(r=u%v)! =0? 若满足m=n,n=r;循环 3)最小公倍数=m*n/最大公约数。 include inthcf(intm,intn) {intt,r; if(m t=m,m=n,n=t; while((r=m%n)! =0)m=n,n=r; return(n); } intlcd(intm,intn,inth) { return(m*n/h); } voidmain() { intm,n,h,l; scanf("%d%d",&m,&n); h=hcf(m,n); printf("最大公约数=%d\n",h); l=lcd(m,n,h); printf("最小公倍数=%d\n",l); } 4.编写函数用以求表达式x2-5x*4,x作为参数传送给函数,调用此函数求 yl=22-5*2十4; y2=(x+15)2-5*(x十15)十4;若x=3 y3=sin2x—5*sinx十4;若x=300 解: 1)sin(x)的x为弧度值,若求度要进行转换。 2)要将数学函数头文件math.h包括进来。 程序如下: #include #include doublefun(doublex); voidmain() {doublex; printf("y1=%.3lf\n",fun (2)); scanf("%lf",&x); printf("y2=%.3lf\n",fun(x+15)); scanf("%lf",&x); printf("y3=%.3lf\n",fun(sin(x*180/3.1516))); } doublefun(doublex) {return(x*x+5*x+4); } 7.所谓“同构数”是指这样的数,它出现在其平方数的右边。 例如: 输入整数5,52=25,5是25中右侧的数,所以5是同构数。 x的值由主函数从键盘读入,要求x≤100。 100以内1,5,6,25,76这几个数是所谓的同构数 解: 由“同构数”的定义可得: 只要求出平方数或平方数的最后一位或平方数的最后两位,然后与x进行判断即可,分别求余后即得出平方数的右边。 程序如下: #include intfun(intx) {intt; t=x*x; if(t==x||t%10==x||t%100==x) return1; else return0; } voidmain() {intx; printf("Enterx: ");scanf("%d",&x); if(x>100) {printf("Dataeror! ");gotoend;}//end是标号 if(fun(x)) printf("%dYes! \n",x); else printf("%dNo! \n",x); end: ;//标号语句后是空语句 } 10.根据以下公式,编写pi函数求的 值,且返回的 值满足精度∈≤10-8。 解: 先求出表达式右边的和,然后将和*2,求出 。 程序如下: #include doublepi(doubleeps); voidmain() {doubleeps=0.00000001; printf("pi=%.7lf\n",pi(eps)); } doublepi(doubleeps) {doubles=1.0,t=1.0;intn; for(n=1;t>eps;n++) {t=n*t/(2*n+1);s+=t;} return(2.0*s); } 和前面一个题目类似,只不过换成函数实现 四、数组 【例7-3】对数组中的数据进行排序。 分析: 排序指的是将数组中的各个元素按照数值的大小由升序(或者降序)的形式重新排列。 程序清单如下: #include voidmain() {inti,j,p,q,s,a[10]; printf("\ninput10numbers: \n"); for(i=0;i<10;i++) scanf("%d",&a[i]);//由用户输入了10个任意的整数作为数组的10个元素 for(i=0;i<10;i++) {p=i;q=a[i];//外循环记下第i个数组元素的位置和数组元素的值 for(j=i+1;j<10;j++)//内循环取第i个数组元素后一个开始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 掌握 编程
![提示](https://static.bingdoc.com/images/bang_tan.gif)