编程题 2.docx
《编程题 2.docx》由会员分享,可在线阅读,更多相关《编程题 2.docx(61页珍藏版)》请在冰豆网上搜索。
编程题2
01、从键盘输入三个整数a、b、c,输出其中最大的数。
#include"stdio.h"
intmain()
{
inta,b,c,max;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{if(a>c)max=a;}
else
{if(b>c)max=b;
elsemax=c;
}
printf("%d\n",max);
}
2、为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:
月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。
请编写程序计算电费。
输入格式:
输入在一行中给出某用户的月用电量(单位:
千瓦时)。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:
"cost=应付电费值";若用电量小于0,则输出"InvalidValue!
"。
#include
intmain()
{
doublei;
scanf("%lf",&i);
if(i<0)
{
printf("InvalidValue!
\n");
}
elseif(i<=50)
{
printf("cost=%.2f\n",0.53*i);
}
else
{
printf("cost=%.2f\n",0.53*50+(i-50)*0.58);
}
return0;
}
3、求出0~999之间的所有“水仙花数”并输出。
“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3,则153是一个“水仙花数”。
#include
intmain()
{
inti,j,k;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(100*i+10*j+k==i*i*i+j*j*j+k*k*k)
printf("%d",100*i+10*j+k);
printf("\n");
}
#include
voidmain(void)
{
inti,j,k,n;
printf("水仙花数是:
");
for(n=100;n<1000;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("\n%d",n);
}
}
4、找出不超过1000的十位数字为1,个位数字为3或7的所有数。
例如:
13、17、113、317等。
#include
intmain()
{
inti;
for(i=0;i<1000;i++)
{
if((i%10==3||i%10==7)&&i/10%10==1)
printf("%d",i);
}
return0;
}
5、输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
在一行中输出逆序后的字符串。
#include
#include
intmain()
{
chara[80],b[80];
inti,n,j=0;
gets(a);
n=strlen(a);
for(i=n-1;i>=0;i--)
b[j++]=a[i];
b[j]='\0';
strcpy(a,b);
puts(a);
return0;
}
6、有人想将手中一张面值100元的人民币换成5元、1元、0.5元面值的零钱100张,以上三种面值的零钱至少有一张,输出每种换法中各种面值零钱的张数。
#include
intmain()
{
inti,j,k,c=0;
for(i=1;i<20;i++)
for(j=1;j<95;j++)
{
k=100-i-j;
if(i*5+j+0.5*k==100)
{
c++;
printf("%d%d%d\n",i,j,k);
}
}
}
7、根据公式编写计算排列数的程序,(要求:
利用子函数实现阶乘的计算,分别用迭代法和递归法实现,并调用其中的一个子函数实现公式的计算)
迭代法:
#include
intstr(intm,intn);
main()
{
intn,m,jieguo;
printf("请输入m的值:
");
scanf("%d",&m);
printf("请输入n的值:
");
scanf("%d",&n);
jieguo=str(m,n);
printf("结果为%d",jieguo);
}
intstr(intm,intn)
{
intsum1=1,sum2=1,i;
for(i=1;i<=n;i++)
sum1=sum1*i;
for(i=1;i<=(n-m);i++)
sum2=sum2*i;
i=sum1/sum2;
returni;
}
递归法
#include
longfact(intn)
{
if(n==0||n==1)
return1;
else
return(n*fact(n-1));
}
main()
{
inti,n,m,r;
longp,q;
scanf("%d%d",&n,&m);
p=fact(n);
q=fact(n-m);
r=p/q;
printf("%d",r);
}
8、有一个长度为40的数组score,类型为double,让用户输入n(不大于40)个数,完成以下任务:
(1)写函数完成将用户输入的n个数进行升序排序:
voidsort(doublescore[],intn);
(2)让用户输入一个数x,写函数完成将此数插入到已排好序的数组中:
voidinsert(doublescore[],intn,doublex);
#include
voidsort(doublescore[],intn)
{
inti,j;
doublet;
for(i=0;ifor(j=i+1;jif(score[i]>score[j])
{
t=score[i];
score[i]=score[j];
score[j]=t;
}
}
voidinsert(doublescore[],intn,doublex)
{
inti,j;
doublet,k;
for(i=0;iif(score[i]>x)
{
t=score[i];
score[i]=x;
for(j=i+1;j<=n;j++)
{
k=score[j];
score[j]=t;
t=k;
}
break;
}
}
main()
{
doublescore[40],x;
intn,i;
printf("请输入数的个数:
");
scanf("%d",&n);
printf("请输入%d个数:
",n);
for(i=0;iscanf("%lf",&score[i]);
sort(score,n);
for(i=0;iprintf("%lf",score[i]);
printf("\n请输入一个要插入的数:
");
scanf("%lf",&x);
insert(score,n,x);
for(i=0;i<=5;i++)
printf("%lf",score[i]);
}
9、有一个长度为40的数组score,类型为double,让用户输入n(不大于40)个数,完成以下任务:
(1)写函数Sort,将用户输入的n个数进行排序
(2)写函数Count,返回数组中小于等于平均值的数的个数
(3)让用户输入一个数,将此数插入到已经拍好序的数组a中
#include
voidsort(doublescore[],intn)
{
inti,j;
doublet;
for(i=0;ifor(j=i+1;j{
if(score[i]>score[j])
{
t=score[i];
score[i]=score[j];
score[j]=t;
}
}
}
intcount(doublescore[],intn)
{
inti,count=0;
doublesum=0,ave;
for(i=0;isum+=score[i];
ave=(double)sum/n;
for(i=0;i{
if(score[i]<=ave)
count++;
}
returncount;
}
voidinsert(doublescore[],intn,doublex)
{
inti,j;
doublet1,t2;
for(i=0;iif(score[i]>x)
{
t1=score[i];
score[i]=x;
for(j=i+1;j<=n;j++)
{
t2=score[j];
score[j]=t1;
t1=t2;
}break;
}
}
intmain()
{
doublescore[40],x;
intn,i;
printf("请输入数的个数:
");
scanf("%d",&n);
printf("请输入%d个数:
",n);
for(i=0;iscanf("%lf",&score[i]);
sort(score,n);
printf("升序为:
");
for(i=0;iprintf("%10lf",score[i]);
printf("\n");
printf("小于等于平均值的个数为:
%d\n",count(score,n));
printf("请输入一个待插入的数:
");
scanf("%lf",&x);
insert(score,n,x);
printf("插入后结果为:
");
for(i=0;i<=n;i++)
printf("%10lf",score[i]);
return0;
}
10、从键盘输入三个整数a、b、c,将其按小到大排列。
#include"stdio.h"
voidmain()
{
inta,b,c,t;
printf("pleaseinputthreenumbers\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b)/*实现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);
}
11、输入n值,输出如图所示高和上底均为n的等腰梯形。
图为当n=5时
#include
intmain()
{
inti,j,a,b,n,k,c;
scanf_s("%d",&n);
for(i=2;i<=n+1;i++)
{
for(intk=n-i;k>=0;k--)
{
printf("");
}
for(j=1;j
{
printf("*");
}
printf("\n");
}
scanf_s("%d");
}
12、从键盘任意输入10个整数,计算其中所有正整数之和,并输出结果。
#include
intmain()
{
intarray[10];
inti,sum=0;
for(i=0;i<10;i++)
scanf_s("%d",&array[i]);
for(i=0;i<10;i++)
{
if(array[i]>0)
sum+=array[i];
}
printf("输入的数中所有正数之和为:
%d",sum);
return0;
}
13、输入一个整数,将其数值按小于10,10~99,100~999,1000以上分类并显示(例如:
输入358时,显示358is100to999)。
#include
intmain()
{
intn;
scanf_s("%d",&n);
if(n<10&&n>0)
printf("%dis<10\n",n);
elseif(n>=10&&n<=99)
printf("%dis10to99\n",n);
elseif(n>=100&&n<=999)
printf("%dis100to999\n",n);
elseif(n>=1000)
printf("%dis>=1000\n",n);
}
14、要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
#include
intmain()
{
intm,n;
inti;
intcnt=0;
intsum=0;
scanf_s("%d%d",&m,&n);
if(m==1)
m=2;
for(i=m;i<=n;i++){
intisPrime=1;
intk;
for(k=2;k{
if(i%k==0)
{
isPrime=0;
break;
}
}
if(isPrime){
cnt++;
sum+=i;
}
}
printf("%d%d\n",cnt,sum);
return0;
}
15、利用公式e=1/1!
+1/2!
+1/3!
+…+1/n!
计算e的值并输出(要求:
利用子函数实现n!
的计算,分别迭代法和递归法实现,并调用其中的一个子函数实现e的计算,误差小于10-5)
#include
doublejiecheng(doublen);
intmain()
{
doublea,n;
printf("请输入n的值:
");
scanf("%lf",&n);
a=jiecheng(n);
printf("e=%0.5lf\n",a);
return0;
}
doublejiecheng(doublen)
{
doublei,j,s,t=0,u=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
u=u*j;
}
s=1/u;
t=t+s;
}
returnt;
}
16、用户输入n(不大于40)个整数,输入整数值x,完成以下任务:
(1)写函数Fun1,实现将用户输入的n个整数进行升序排列
(2)写函数Fun2,查找数组中是否有整数x,如果有,则返回下标,如果没有,则返回-1
#include
voidFun1(intb[40],intm);
intFun2();
main()
{
inta[40];
inti,n,s,t;
scanf("%d",&n);
for(i=0;i{
scanf("%d",&a[i]);
}
Fun1(a,n);
for(i=0;i{
printf("%5d",a[i]);
}
printf("\n");
scanf("%d",&s);
t=Fun2(a,s,n);
printf("%d",t);
}
voidFun1(intb[40],intm)
{
inti,j,t;
for(i=0;i{
for(j=m-1;j>i;j--)
{
if(b[j-1]>b[j])
{
t=b[j];
b[j]=b[j-1];
b[j-1]=t;
}
}
}
}
intFun2(intc[40],intp,intk)
{
inti,j;
intf;
for(i=0;i{
if(p==c[i])
{
f=i;
break;
}
else
f=-1;
}
returnf;
}
17、编程求出1!
+2!
+3!
+…..+8!
+9!
+10!
的值并输出。
#include
voidmain()
{
inti,t=1,s=0;
for(i=1;i<=10;i++)
{
t*=i;
s+=t;
}
printf("%d",s);
}
18、求sn=a+aa+aaa+aaaa+aaaaa.....的值,a的值n的值均由用户指定。
例如:
a=2,n=4,s=2+22+222+2222.
#include
intmain()
{
inttn=0,a,i,sn=0,n;
scanf("a=%d,n=%d",&a,&n);
for(i=0;i<=n;i++)
{
sn=sn+tn;
tn=10*tn+a;
}
printf("%d\n",sn);
}
19、输入一个三位数,然后进行个位和百位的置换,如234,转换成432。
#include
voidmain()
{
inta,b,c,n;
scanf("%d",&n);
a=n/100;
b=n%100/10;
c=n%10;
printf("%d%d%d\n",c,b,a);
}
20、某歌手大赛,共有10个评委打分,分数采用百分制整数,去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的成绩,编程实现#include
main()
{
inta[10],i,j,t,sum=0;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
for(j=9;j>i;j--)
{
if(a[j-1]>a[j])
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
}}}
for(i=1;i<9;i++)
{
sum=sum+a[i];
}
printf("%d",sum/8);
}
21、一个四位数恰好等于它的前两位加后两位和的平方,编程找出所有满足要求的四位数。
比如:
3025=(30+25)*(30+25)。
#include
main()
{
inti,g,s,b,j,q,h;
for(i=1000;i<=9999;i++)
{
j=i/1000;
b=i%1000/100;
s=i%1000%100/10;
g=i%1000%100%10;
q=j*10+b;
h=s*10+g;
if((q+h)*(q+h)==i)
printf("%d\n",i);
}
22、输入n(n<=40)个自然数放在数组num中,完成以下任务
(1)写函数CountJi,计算数组中奇数的个数,主函数调用并输出奇数个数
(2)写函数SortJi,将数组中的奇数按照从大到小排序,主函数调用并输出排序后结果
例如:
输入数据为12345678910
调用SortJi函数,num中内容为:
92745638110
#include
#defineSIZE40
intCountJi(inta[],intn);
voidSortJi(inta[],intn);
main()
{
intnum[SIZE];
inti,n,count;
printf("请输入数的个数:
\n");
scanf("%d",&n);
printf("请输入%d个数:
",n);
for(i=0;iscanf("%d",&num[i]);
count=CountJi(num,n);
printf("奇数的个数为:
");
printf("%d",count);
SortJi(num,n);
printf("\n数组中奇数降序排列为:
");
for(i=0;iprintf("%d",num[i]);
}
intCountJi(inta[],intn)
{
inti,count=0;
for(i=0;iif(a[i]%2!
=0)
count++;
returncount;
}
voidSortJi(inta[],intn)
{
inti,k,t,j;
for(i=0;i{
if(a[i]%2!
=0)
{
k=i;
}
for(j=k+1;j{
if(a[j]%2!
=0)
{
if(a[j]>a[k])
{
t=a[k];
a[k]=a[j];
a[j]=t;
}