C语言acm练习.docx
- 文档编号:16820996
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:53
- 大小:25.92KB
C语言acm练习.docx
《C语言acm练习.docx》由会员分享,可在线阅读,更多相关《C语言acm练习.docx(53页珍藏版)》请在冰点文库上搜索。
C语言acm练习
C语言ACM练习:
1.Calculatea+b
main()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
}
2.编写一个C程序,输出以下信息:
**************************
Very Good!
**************************
数*号可看出,Very前面9空格,Good前面……
*也是输出的一部分,别光打印VeryGood!
#include
main()
{
printf("**************************\n");
printf("VeryGood!
\n");
printf("**************************\n");
}
3.编写一个程序,输入a、b、c三个值,输出其中最大值。
#include
voidmain()
{
inta,b,c,d;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
d=a;
else
d=b;
if(d>c)
d=d;
else
d=c;
printf("%d\n",d);
}
4.要将"China"译成密码,译码规律是:
用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。
因此,"China"应译为"Glmre"。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
main()
{
charc1,c2,c3,c4,c5;
scanf("%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5);
printf("%c%c%c%c%c",c1+4,c2+4,c3+4,c4+4,c5+4);
}
5.设圆半径r,圆柱高h求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。
用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
PI=3.14
#include
main()
{floatr,h,C1,Sa,Sb,Va,Vb;
scanf("%f%f",&r,&h);
C1=2*3.14*r;
Sa=3.14*r*r;
Sb=4*Sa;
Va=4*3.14*r*r*r/3;
Vb=Sa*h;
printf("C1=%.2f\n",C1);
printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);
}
6.输入一个华氏温度,要求输出摄氏温度。
公式为c=5(F-32)/9输出要求有文字说明,取位2小数。
#include
main()
{
floatc,F;
scanf("%f",&F);
c=5.0*(F-32)/9;
printf("c=%.2f\n",c);
}
7.有三个整数abc,由键盘输入,输出其中的最大的数。
用函数调用实现。
intmax(inta,intb)
{
return((a>b)?
a:
b);
}
intmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d",max(a,max(b,c)));
return0;
}
8.有一个函数
y={x x<1
|2x-1 1<=x<10
\3x-11 x>=10
写一段程序,输入x,输出y
/*
有一个函数
y={xx<1
|2x-11<=x<10
\3x-11x>=10
*/
#include
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
{
y=x;
}
elseif(x<10)
{
y=2*x-1;
}
else
{
y=3*x-11;
}
printf("%d",y);
}
9.给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
90分以上为A80-89分为B70-79分为C60-69分为D60分以下为E
#include
main()
{
intscore,temp,log;
chargrade;
log=1;
while(log)
{
//printf("pleaseenterscore:
");
scanf("%d",&score);
if((score>100)||(score<0))
printf("\nerror,tryagain!
\n");
else
log=0;
}
if(score==100)
temp=9;
else
temp=(score-score%10)/10;
switch(temp)
{
case1:
case2:
case3:
case4:
case5:
case0:
grade='E';break;
case6:
grade='D';break;
case7:
grade='C';break;
case8:
grade='B';break;
case9:
grade='A';
}
printf("%c\n",grade);
}
用if也行
10.给出一个不多于5位的整数,要求1、求出它是几位数2、分别输出每一位数字3、按逆序输出各位数字,例如原数为321,应输出123
/*
SampleInput
12345
SampleOutput
5
12345
54321
*/
#include
main()
{
intn,num,n1,n2,n3,n4,n5;
scanf("%d",&n);
if(n<10)
num=1;
elseif(n<100)
num=2;
elseif(n<1000)
num=3;
elseif(n<10000)
num=4;
elseif(n<100000)
num=5;
printf("%d\n",num);
switch(num)
{
case5:
n5=n/10000;
n=n%10000;
case4:
n4=n/1000;
n=n%1000;
case3:
n3=n/100;
n=n%100;
case2:
n2=n/10;
n=n%10;
case1:
n1=n;
}
switch(num)
{
case5:
printf("%d",n5);
case4:
printf("%d",n4);
case3:
printf("%d",n3);
case2:
printf("%d",n2);
case1:
printf("%d",n1);
}
printf("\n");
switch(num)
{
case5:
printf("%d%d%d%d%d",n1,n2,n3,n4,n5);
break;
case4:
printf("%d%d%d%d",n1,n2,n3,n4);
break;
case3:
printf("%d%d%d",n1,n2,n3);
break;
case2:
printf("%d%d",n1,n2);
break;
case1:
printf("%d",n1);
}
printf("\n");
}
11.企业发放的奖金根据利润提成。
利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000
200000
400000
I>1000000时,超过1000000元的部分按1%提成。
从键盘输入当月利润I,求应发奖金
#include
main()
{
intn,num,n1,n2,n3,n4,n5;
scanf("%d",&n);
num=(n-1)/100000;
if(n>1000000)
num=10;
n1=0;
switch(num)
{
case10:
//I>1000000时,超过1000000元的部分按1%提成。
n1=n1+(n-1000000)/100*1;
n=n-1000000;
case9:
case8:
case7:
//600000
n1=n1+(n-600000)/1000*15;
n=n-600000;
case6:
case5:
//400000
n1=n1+(n-400000)/100*3;
n=n-400000;
case4:
case3:
//200000
n1=n1+(n-200000)/100*5;
n=n-200000;
case2:
//低于200000元(100000
n1=n1+(n-100000)/1000*75;
n=n-100000;
case1:
//利润低于或等于100000元的,奖金可提10%;
case0:
n1=n1+n/100*10;
}
printf("%d\n",n1);
}
12.输入两个正整数m和n,求其最大公约数和最小公倍数。
辗转相除法
#include
main()
{intr,m,n,sum;
scanf("%d%d",&m,&n);
sum=m*n;
if(m { r=m; m=n; n=r; } r=m%n; while(r) { m=n; n=r; r=m%n; } printf("%d%d\n",n,sum/n); } //135 13.输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。 #include #include main() { charstr[81],c; inti,j,e=0,s=0,d=0,other=0; gets(str); i=0;j=0; while((c=str[i++])! ='\0') { if(c=='') { s++; } elseif((c>='0')&&(c<='9')) { d++; } elseif(((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z'))) { e++; } else { other++; } } printf("%d%d%d%d\n",e,d,s,other); } //输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 //aklsjflj123sadf918u324asdf91u32oasdf/.';123 //231624 14.求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如: 2+22+222+2222+22222(n=5),n由键盘输入。 #include #include main() { inta=2,n,sum,i,j,sn=0; scanf("%d",&n); for(i=0;i { sum=2; for(j=0;j { sum=sum*10+a; //printf("%d\n",sum); } sn=sn+sum; } printf("%d\n",sn); } //求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值, //其中a是一个数字。 例如: 2+22+222+2222+22222(n=5),n由键盘输入。 15.求Sn=1! +2! +3! +4! +5! +…+n! 之值,其中n是一个数字。 #include main() { longlongn,sum,i,j,sn=0; scanf("%lld",&n); for(i=1;i<=n;i++) { sum=1; for(j=1;j<=i;j++) { sum=sum*j; //printf("%d\n",sum); } sn=sn+sum; } printf("%lld\n",sn); } //求Sn=1! +2! +3! +4! +5! +…+n! 之值,其中n是一个数字。 16.求以下三数的和,保留2位小数1~a之和1~b的平方和1~c的倒数和 /* Input abc Output 1+2+...+a+1^2+2^2+...+b^2+1/1+1/2+...+1/c */ #include voidmain() { inta,b,c,i,j,sum=0; floatsum2=0,sn=0; scanf("%d%d%d",&a,&b,&c); for(i=1;i<=a;i++) { sum=sum+i; } sn=sn+sum; sum=0; for(i=1;i<=b;i++) { sum=sum+i*i; } sn=sn+sum; sum2=0; for(i=1;i<=c;i++) { sum2=sum2+1.0/i; } sn=sn+sum2; printf("%.2f\n",sn); //return0; } 17.打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 main() { inti,j,k,n; for(n=100;n<1000;n++) { i=n/100;//百位 j=n/10-i*10;//十位 k=n%10; if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%d\n",n); } } } 18.一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子: main() { inti,j,k,n; scanf("%d",&k); for(n=1;n { j=0; for(i=1;i { if(0==n%i) { j=j+i; } } if(j==n) { printf("%ditsfactorsare",n); for(i=1;i { if(0==n%i) { printf("%d",i); } } printf("\n"); } } } /* 6itsfactorsare123 28itsfactorsare124714 496itsfactorsare1248163162124248 */ 19.有一分数序列: 2/13/25/38/513/821/13......求出这个数列的前N项之和,保留两位小数。 main() { inti,j,k,n; floatsum=0,a,b,temp; scanf("%d",&k); a=2; b=1; for(n=1;n<=k;n++) { sum=sum+a/b; temp=a; a=a+b; b=temp; } printf("%.2f",sum); printf("\n"); } 20一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高? 共经过多少米? 保留两位小数 main() { inti,j,k,h,n; floatsum=0,a,b,temp; scanf("%d%d",&h,&n); sum=h; a=h; for(i=1;i<=n;i++) { sum=sum+a; a=a/2; //printf("%.2f%.2f\n",a,sum); } sum=sum-a*2; printf("%.2f%.2f",a,sum); printf("\n"); } /* 31.252875.00 */ 21.猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。 求第一天共摘多少桃子。 main() { inti,a,sum,n; scanf("%d",&n); sum=1; a=1; for(i=1;i { a=(a+1)*2; //printf("%d%d\n",a,sum); } printf("%d",a); printf("\n"); } /* 猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时, 见只剩下一个桃子了。 求第一天共摘多少桃子。 10 1534 */ 22.用迭代法求。 求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n])要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数 #include voidmain() { doublex,y,y0; scanf("%lf",&x);//格式lf y=1; do { y0=y; y=1.0/2*(y+x/y);//1.0变浮点数 } while(fabs(y-y0)/y>0.00001); //printf("Squarerootof%lfis%lf\n",x,y);//格式lf printf("%.3lf\n",y);//格式lf } /* 用迭代法求。 求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n])要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数 4 2.000 */ 23.用筛法求之N内的素数。 #include #include #include voidCreatePrime(char*primes,intn) { inti,j,s; primes[0]=primes[1]=0; for(i=2;i primes[i]=1; s=sqrt(n); for(i=2;i<=s;i++) { if(primes[i]) { for(j=2*i;j primes[j]=0; } } } voidmain() { intn,i; char*IsPrime; scanf("%d",&n); IsPrime=malloc(n)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 acm 练习