需掌握的编程题.docx

上传人:b****6 文档编号:13836897 上传时间:2023-06-17 格式:DOCX 页数:24 大小:34.50KB
下载 相关 举报
需掌握的编程题.docx_第1页
第1页 / 共24页
需掌握的编程题.docx_第2页
第2页 / 共24页
需掌握的编程题.docx_第3页
第3页 / 共24页
需掌握的编程题.docx_第4页
第4页 / 共24页
需掌握的编程题.docx_第5页
第5页 / 共24页
需掌握的编程题.docx_第6页
第6页 / 共24页
需掌握的编程题.docx_第7页
第7页 / 共24页
需掌握的编程题.docx_第8页
第8页 / 共24页
需掌握的编程题.docx_第9页
第9页 / 共24页
需掌握的编程题.docx_第10页
第10页 / 共24页
需掌握的编程题.docx_第11页
第11页 / 共24页
需掌握的编程题.docx_第12页
第12页 / 共24页
需掌握的编程题.docx_第13页
第13页 / 共24页
需掌握的编程题.docx_第14页
第14页 / 共24页
需掌握的编程题.docx_第15页
第15页 / 共24页
需掌握的编程题.docx_第16页
第16页 / 共24页
需掌握的编程题.docx_第17页
第17页 / 共24页
需掌握的编程题.docx_第18页
第18页 / 共24页
需掌握的编程题.docx_第19页
第19页 / 共24页
需掌握的编程题.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

需掌握的编程题.docx

《需掌握的编程题.docx》由会员分享,可在线阅读,更多相关《需掌握的编程题.docx(24页珍藏版)》请在冰点文库上搜索。

需掌握的编程题.docx

需掌握的编程题

需掌握的编程题

一、选择结构

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//sqrt函数需引用

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个数组元素后一个开始

if(q

{p=j;q=a[j];}//记录下大的数组元素的位置和值直到最大哪个元素

if(i!

=p)//如果这个最大的元素不是第i个元素

{s=a[i];a[i]=a[p];a[p]=s;}//和第i个元素交换

}//每次循环将最大的元素交换到a[i]中

printf("从大到小排序完成:

\n");

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

printf("%d\t",a[i]);

}

重点关注下面的冒泡法排序

#include

voidmain()

{inta[10];

inti,j,t;

printf("input10numbers:

\n");

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

scanf("%d",&a[i]);

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

for(j=0;j<9-i;j++)

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

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

printf("\nthesortednumbers:

");

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

printf("%d,",a[i]);

}

【例7-9】有一个3×4矩阵,要求编写C语言程序秋初其中的最大值,以及其所在的行号和列号。

分析:

首先将数组中的第一个元素认为是最大值,然后将数组中的其他元素与之相比较,出现更大的数的时候,最大值就换成当前数据,并记住相应的行号和列号,一直比较到最后一个元素,就能够得到最大的数据和它所在的行号和列号了。

程序清单如下:

#include

voidmain()

{inti,j,r=0,l=0,max,a[3][4];//r和l记录初始行号和列号

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

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

scanf("%d",&a[i][j]);

max=a[0][0];

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

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

{if(max

{max=a[i][j];r=i;l=j;}

}

printf("最大数a[%d][%d]=%d\n",r,l,max);

}

3.编写程序,进行字符串的截取,即从键盘上输入一个字符串str1,将此字符串中从第m个字符开始的n个字符形成另一个字符串str2。

例如:

str1=”computer”,m=2,n=5,这样,str2=”omput”。

解:

先定义两个字符型的一维数组str1,str2,再要求用户分别输入字符串1,和字符的定位m以及需要截取的字符的个数n。

这时就需要判断m和n的值是否有效,然后再进行字符串的截取。

程序如下:

#include

#include

voidmain()

{

charstr1[10],str2[10];

intm,n,i;

printf(

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2