C语言作业.docx

上传人:b****8 文档编号:11337076 上传时间:2023-02-27 格式:DOCX 页数:66 大小:31.82KB
下载 相关 举报
C语言作业.docx_第1页
第1页 / 共66页
C语言作业.docx_第2页
第2页 / 共66页
C语言作业.docx_第3页
第3页 / 共66页
C语言作业.docx_第4页
第4页 / 共66页
C语言作业.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

C语言作业.docx

《C语言作业.docx》由会员分享,可在线阅读,更多相关《C语言作业.docx(66页珍藏版)》请在冰豆网上搜索。

C语言作业.docx

C语言作业

ProblemB:

算术基本运算

Description

计算两整数x和y(0

Input

输入只有一行,格式见sample。

Output

输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample

SampleInput

x=11,y=3

SampleOutput

x+y:

14

x-y:

8

x*y:

33

x/yquotient:

3,remainder:

2

x^2:

121

y^3:

27

HINT

注意输入输出格式。

了解C语言整数除法运算符的特点,并且没有求幂的运算符。

#include

intmain()

{

intx,y;

scanf("x=%d,y=%d",&x,&y);

printf("x+y:

%d\n",x+y);

printf("x-y:

%d\n",x-y);

printf("x*y:

%d\n",x*y);

printf("x/yquotient:

%d,remainder:

%d\n",x/y,x%y);

printf("x^2:

%d\n",x*x);

printf("y^3:

%d\n",y*y*y);

return0;

}

ProblemC:

求圆的面积和周长

Description

从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。

Input

输入一个浮点型数据,有效数字不会超过十进制的6位。

Output

输出为两行。

第一行为圆的面积,第二行为圆的周长,格式见sample。

SampleInput

3

SampleOutput

Area:

28.260000

Perimeter:

18.840000

HINT

了解浮点类型的输入、输出和算术运算符

#include

intmain()

{

doubleArea,Perimeter,r,p=3.14;

scanf("%lf",&r);

Area=p*r*r,Perimeter=2*p*r;

printf("Area:

%lf\n",Area);

printf("Perimeter:

%lf\n",Perimeter);

return0;

}

ProblemD:

平均值

Description

求3个数的平均值。

Input

输入只有一行,为3个较小的整数。

Output

输出为这3个整数的平均值,保留3位小数。

SampleInput

123

SampleOutput

2.000

HINT

注意除法运算对整型数据和浮点型数据是不一样的。

#include

intmain()

{

intx,y,z;

floatave;

scanf("%d%d%d",&x,&y,&z);

ave=(x+y+z)/3.0;

printf("%.3f",ave);

return0;

}

 

ProblemE:

货币兑换

Description

给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。

要计算的外币有三种:

美元、欧元、日元。

Input

输入有三行。

第一行依次为美元、欧元、日元外币汇率,用空格分开。

汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。

汇率浮动范围为(0,10000)。

第二行为外币金额x,第三行为人民币金额y。

x,y均为整数,且0

Output

输出为两行。

第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。

第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。

所有金额精确到小数点后两位。

SampleInput

668.5200908.06857.9852

1500

1500

SampleOutput

10027.8013621.03119.78

224.38165.1918784.75

HINT

了解浮点数据类型的精确度和输出控制。

 

#include

intmain()

{

doublea,b,c;

doublex;

doubley;

scanf("%lf%lf%lf",&a,&b,&c);

scanf("%lf",&x);

scanf("%lf",&y);

printf("%.2lf%.2lf%.2lf\n",x*0.01*a,x*0.01*b,x*0.01*c);

printf("%.2lf%.2lf%.2lf\n",y/a*100,y/b*100,y/c*100);

return0;

}

ProblemF:

求字符的值

Description

从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。

Input

输入为3个字符。

Output

输出为3行。

每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。

每个输出的值占3个字符,不足3个字符前面补0。

SampleInput

0A

SampleOutput

048060030

032040020

065101041

HINT

了解字符值的存储和整型的关系。

#include

intmain()

{

charx,y,z;

scanf("%c%c%c",&x,&y,&z);

printf("%.3d%.3o%.3x\n",x,x,x);

printf("%.3d%.3o%.3x\n",y,y,y);

printf("%.3d%.3o%.3x\n",z,z,z);

return0;

}

ProblemG:

奇数还是偶数?

Description

输入一个整数,判读它是奇数还是偶数。

Input

输入只有一行,为一个100以内的正整数。

Output

输出为一行。

若输入为偶数则输出“even”,奇数输出“odd”。

SampleInput

30

SampleOutput

even

HINT

用整数运算可以解决,练习“?

:

”表达式。

#include

intmain()

{

intx;

scanf("%d",&x);

if(x%2==0)

printf("even");

else

printf("odd");

return0;

}

ProblemH:

绝对值

Description

求整型数据和浮点型数据的绝对值。

Input

输入两个数,第一个是整数,第二个是浮点数。

Output

输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。

SampleInput

-1

1

SampleOutput

1

1

HINT

求绝对值可以用标准库函数来完成,也可以自己判断。

注意浮点数的输出格式。

求绝对值的函数在哪个头文件?

貌似很多人会搞错,包括很多编书的人!

#include

#include

intmain()

{

intx;

floaty;

scanf("%d",&x);

scanf("%f",&y);

printf("%d\n",abs(x));

printf("%g\n",fabs(y));

return0;

}

ProblemI:

简单的打折计算

Description

商店规定:

消费满n元,可以打八八折。

设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:

元),精确到分。

Input

输入只有一行,三个整数m、n和x,且0

Output

输出金额,精确到分。

SampleInput

953004

SampleOutput

334.40

HINT

了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。

#include

intmain()

{

intm,n,x;

doubley;

scanf("%d%d%d",&m,&n,&x);

y=m*x;

if(y>n)

y=y*0.88;

else

y=y;

printf("%.2lf\n",y);

return0;

}

Description

输入一个正整数的年份,判断是否为闰年。

Input

输入只有一行,为一个10000以内的正整数。

Output

输出为一行。

若输入为闰年偶数则输出“Yes”,否则输出“No”。

SampleInput

2010

SampleOutput

No

HINT

了解逻辑运算符和关系运算符。

#include

intmain()

{

inta;

scanf("%d",&a);

if(a%4==0&&a%100!

=0||a%400==0)

printf("Yes");

elseprintf("No");

return0;

}

ProblemK:

GHacker的解谜过关游戏

Description

GHacker最近痴迷于一个新上市的解谜游戏,其中一关的过关是破解一个字符串S。

经过3天的冥思苦想,GHacker成功的搞明白了这其中的奥秘,把串S中的整数取出来求和,就可以过关了。

但是GHacker的数学实在糟糕。

他无法在短暂的时间内算出来,只好求助Jackie。

Jackie观察到虽然每次出现的数字不同,但是其它的符号并不会变化。

于是Jackie编写了一个非常短的程序,帮助GHacker把这一关过了。

Input

输入为串S,只有一行。

Output

串S中用非数字(0~9)分隔开的非负整数之和,不会超出int类型的数据范围。

SampleInput

`13?

:

[7514],54.487=="(438922x159?

?

392)%032\n111cdef120$95;

SampleOutput

447899

HINT

scanf()可以解决这个问题,注意转义字符和格式控制字符。

#include

intmain()

{

inti,sum,num;

charstr[1000];

while(scanf("%s",str)!

=EOF)

{

num=sum=0;

for(i=0;;i++)

{

if(str[i]>='0'&&str[i]<='9')

num=num*10+str[i]-'0';

else

{

sum=sum+num;num=0;

if(str[i]=='\0')break;

}

}

printf("%d\n",sum);

}

return0;

}

ProblemL:

水仙花数

Description

如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。

如:

13+53+33=153。

Input

一个整数x,100<=x<=999。

Output

x是水仙花数,则输出“YES”,否则为“NO”。

SampleInput

153

SampleOutput

YES

#include

intmain()

{

intx,a,b,c,sum;

scanf("%d",&x);

a=x/100;

b=(x-a*100)/10;

c=(x-a*100-b*10);

sum=a*a*a+b*b*b+c*c*c;

if(x==sum)

printf("YES");

else

printf("NO");

return0;

}

ProblemM:

求1+2+...+n=?

Description

给定一个n,求出s=1+2+3+...+n的值。

Input

输入只有一行,包含一个正整数n(n<=232)。

Output

输出一行,为1+2+...+n的值。

SampleInput

10

SampleOutput

55

HINT

n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。

#include

intmain()

{

unsignedlonglongn,s,a;

scanf("%llu",&n);

a=n%2;

if(a==0)

{

s=n/2*(n+1);

printf("%llu",s);

}

elseif(a!

=0)

{s=n*((n+1)/2);

printf("%llu",s);

}

return0;

}

ProblemN:

2的多少次幂

Description

从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。

Input

一个非负有理数x,x在[0,2256]范围内。

Output

一个整数y。

SampleInput

1

SampleOutput

0

HINT

看起来数据很大,但是用double完全可以存储。

为什么?

请研究下IEEE-754标准的浮点数存储格式。

这里要用到C语言标准库的数学函数。

#include

intmain()

{

doublex;

scanf("%lf",&x);

printf("%g",log2(x));

return0;

}

ProblemA:

哪一行比较长

Description

读取两行字符串,按每行的长度从长到短输出。

Input

输入为两行,每行不会超过26个字符。

Output

输出为两行,按每行的长度从长到短输出。

SampleInput

abcdefghijk

abcdefghijklmnopqrstuvwxyz

SampleOutput

abcdefghijklmnopqrstuvwxyz

abcdefghijk

HINT

了解字符串的存储和操作,了解gets()和scanf("%s")读入字符串的不同之处。

#include

#include

intmain()

{

intx,y;

chara[30],b[30];

gets(a);

gets(b);

x=strlen(a);

y=strlen(b);

if(x>y)

{

puts(a);

puts(b);

return0;

}

puts(b);

puts(a);

}

ProblemB:

三个数比较大小

Description

从键盘上输入0~100之间的三个数,按从小到大的顺序输出。

Input

输入只有一行,为三个整数。

Output

按从小到大输出这三个数。

SampleInput

151020

SampleOutput

101520

HINT

用if语句判断各种情况可以解决这个问题。

 

include

intmain()

{

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);

return0;

}

ProblemC:

输出是m的倍数或n的倍数、但不是m和n的公倍数的数

Description

输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n

Input

输入三个整数,依次为k、m、n。

Output

从小到大输出符合题意的所有整数,两数之间用一个空格分开。

SampleInput

1523

SampleOutput

23489101415

HINT

难点在于输出格式的控制:

空格在数的中间,学会用循环时边界情况的特殊处理。

 

#include

intmain()

{

intk,m,n,a;

scanf("%d%d%d",&k,&m,&n);

{

if(m>n)

{

printf("%d",n);

for(a=n+1;a<=k;a++)

{

if((a%m==0&&a%n!

=0)||(a%m!

=0&&a%n==0))

printf("%d",a);}

}

else

{

printf("%d",m);

for(a=m+1;a<=k;a++)

{

if((a%m==0&&a%n!

=0)||(a%m!

=0&&a%n==0))

printf("%d",a);}

}

}

return0;

}

ProblemD:

A+BProblem

Description

计算a+b,0<=a,b<1000。

Input

输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。

Output

每行输出一个a+b的值,顺序与输入对应。

SampleInput

12

1020

SampleOutput

3

30

HINT

OJ系统上测试输入结束符为EOF(EndOfFile),其值为-1。

用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。

本题解法参看FAQ。

#include

intmain()

{

inta,b;

while(scanf("%d%d\n",&a,&b)!

=EOF)

printf("%d\n",a+b);

}

ProblemE:

A+BProblem(II):

Input/OutputPratice

Description

计算a+b,0<=a,b<1000。

Input

输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。

Output

每行输出一个a+b的和,顺序与输入对应。

SampleInput

2

12

1020

SampleOutput

3

30

HINT

N给出了测试样例数,用for循环处理方便。

 

#include

intmain()

{

inta,b,N,i;

scanf("%d\n",&N);

for(i=1;i<=N;i++)

{

scanf("%d%d",&a,&b);

printf("%d\n",a+b);

}

return0;

}

ProblemF:

A+BProblem(III):

Input/OutputPratice

Description

计算a+b,0<=a,b<1000。

Input

输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。

当测试样为00时表示输入结束,00不参与运算。

Output

每行输出一个a+b的值,顺序与输入对应。

SampleInput

12

1020

00

SampleOutput

3

30

HINT

练习break的使用。

 

#include

intmain()

{

inta,b;

while(scanf("%d%d",&a,&b))

{

if(a==0&&b==0)

break;

printf("%d\n",a+b);

}

}

ProblemG:

A+BProblem(IV):

Input/OutputPratice

Description

计算a+b,0<=a,b<1000。

Input

输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。

Output

每行输出一个a+b的值,顺序与输入对应。

每个格式样例之间用一个空行分隔开。

SampleInput

12

1020

1535

SampleOutput

3

30

50

HINT

由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。

#include

intmain()

{

inta,b,i;

scanf("%d%d",&a,&b);

printf("%d\n",a+b);

while(scanf("%d%d",&a,&b)!

=EOF)

printf("\n%d\n",a+b);

}

ProblemH:

n个数的最大值和最小值

Description

找出n个数中最大的数和最小的数,并将它们的值输出出来。

Input

输入为n+1个整数,都在int类型范围内。

这些数可能用若干空格或者换行符分隔开。

输入的第1个数为n,表示后续有n个数输入。

从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。

Output

输出为两行,格式见sample。

SampleInput

301-1

SampleOutput

Themaximumnumberis1.

Theminimumnumberis-1.

HINT

分隔符是空格还是回车都是空白符,对scanf("%d")来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。

 

#include

intmain()

{

intn,i,max,min,x,y;

scanf("%d",&n);

scanf("%d",&x);

min=x;

max=x;

for(i=3;i<=n+1;i++)

{

scanf("%d",&y);

if(min>y)

min=y;

if(max

max=y;

}

printf("Themaximumnumberis%d.\n",max);

printf("Theminimumnumberis%d.\n",min);

return0;

}

ProblemI:

成绩的等级

Description

把百分制的考试成绩转换成五级制的成绩:

90~100:

Excellent

80~89:

Good

70~79:

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1