c语言编程20例.docx
《c语言编程20例.docx》由会员分享,可在线阅读,更多相关《c语言编程20例.docx(35页珍藏版)》请在冰豆网上搜索。
![c语言编程20例.docx](https://file1.bdocx.com/fileroot1/2023-5/23/34e06bbf-3afd-44a7-a444-b1fdbddf1ba3/34e06bbf-3afd-44a7-a444-b1fdbddf1ba31.gif)
c语言编程20例
1.开学第一考
问题描述
开学的第一个周末,像往届一样,新生都会参加英语分级考试。
所谓英语分级考试就是为了测试一下新生的英语水平,并将他们分成1~4,4个等级。
分级规则如下:
95分(含95分)以上为level4,只需修一个学期的大学英语;85分(含85分)至95分为level3,需修大学英语两个学期;75分(含75分)至85分为level2,需修3个学期的大学英语;剩下的为level1,对不起,就只能修4个学期的大学英语了。
小明是刚12级计算机系的新生,他不小心知道了自己的分级考试成绩,于是乎他就迫切的想知道自己会被分在哪一个level,这不,就麻烦一下新生中大神小强,写一个小程序来判定一下小明会被分在哪一个level吧!
输入格式
输入一个整数代表小明的分数
输出格式
输出小明被分在哪一个英语等级,level1、level2、level3、level4,如果分数不在[0,100]区间内,输出“Error!
”(注意:
不输出引号)
样例输入
60
101
样例输出
level1
Error!
解答:
#include
intmain()
{
inta;
scanf("%d",&a);
if(a>100)
printf("Error!
\n");
elseif(a>=95)
printf("level4\n");
elseif(a>=85)
printf("level3\n");
elseif(a>=75)
printf("level2\n");
elseif(a>=0)
printf("level1\n");
elseprintf("Error!
\n");
return0;
}
2.小明的考题1——分段函数
问题描述
小明是一个数学狂,自吹自擂说自己的数学是如何如何的好,但是他的风头却被大神小强抢光了,小明就很郁闷,自言自语了一句:
不就是编程牛逼点嘛,有本事编几个程序出来解解数学题啊。
运气挺背的是,小强就在他后面,不小心就听到了……小强倒是很大方的说:
要不你就出几个题考考我?
小明这下就得瑟了,呵,小样,看我不整死你!
因为小明不知大神的底,于是乎第一题就出了一个简单的分段函数题:
输入格式
输入仅包含一个整数x,并且-100<=x<=100
输出格式
输出仅一个整数,表示函数值f(x)
样例输入
-10
样例输出
-440
解答
#include
intmain()
{
intx,g,f;
scanf("%d",&x);
g=x*x-550;
if(xf=g+x+4;
elsef=g-x;
printf("%d\n",f);
return0;
}
3.小明的考题2——数与单词
问题描述
上一道分段函数的题目被小强轻松秒杀了,这一次,小明知道该出有深度一点的题目了。
“数学是科学之王”,小明对此坚信不疑!
数学的强悍之处在于它能通过一种映射的关系,把两种不相关的东西联系在一起。
现在,小明想考小强的是,小强需要建立起阿拉伯数字与英文字母的对应关系,小明不想过于为难小强,就限制了一下定义域为0—9的10个数字,映射规则为:
0—zero、1—one、…、9—nine,现在小明随便说一个0—9的数字,小强的程序能后输出该数字对应的英文单词。
输入格式
输入数据为一个[0,9]区间的整数
输出格式
输出该数字对应的英文单词
样例输入
8
样例输出
eight
解答
#include
intmain()
{
intx;
scanf("%d",&x);
if(x==0)
printf("zero\n");
elseif(x==1)
printf("one\n");
elseif(x==2)
printf("two\n");
elseif(x==3)
printf("three\n");
elseif(x==4)
printf("four\n");
elseif(x==5)
printf("five\n");
elseif(x==6)
printf("six\n");
elseif(x==7)
printf("seven\n");
elseif(x==8)
printf("eight\n");
elseif(x==9)
printf("nine\n");
return0;
}
4.小明的考题3——必杀技
问题描述
小明为了这最后一题煞费苦心,不过他还是没有什么头绪。
这天,他去宿舍楼下的邮局给高中的那群哥们姐妹寄几张咱厦大魅力风光的明信片。
抬头的时候瞥了一眼墙上挂着的信函资费说明,详情如下:
平信分本埠和外埠,按首重和续重计收资费,首重100克以内,每重20克(不足20克按20克计算)本埠0.80元,外埠1.20元。
续重101~2000克,每重100克(不足100克按100克计算)本埠1.20元,外埠2.00元。
这下,小明可就有主意了。
他就用这个信函的资费考考小强。
输入格式
输入两个整数kw,以空格隔开。
(k=1ork=2,k=1代表本埠,k=2代表外埠。
w代表信函重量,单位g,已知0输出格式
输出资费,结果保留两位小数。
样例输入
195
样例输出
4.00
解答
#include
intmain()
{
intk,w;
doubles;
scanf("%d%d",&k,&w);
if(k==1)
if(w<=100)
{if(w%20)
s=(w/20+1)*0.8;
elses=w/20*0.8;
}
else
{if(w%100)s=4.00+((w-100)/100+1)*1.2;
elses=4.00+(w-100)/100*1.2;
}
if(k==2)
if(w<=100)
{if(w%20)
s=(w/20+1)*1.2;
elses=w/20*1.2;
}
else
{if(w%100)s=6.00+((w-100)/100+1)*2.00;
elses=6.00+(w-100)/100*2.00;
}
printf("%.2lf\n",s);
return0;
}
5.四则运算器
问题描述
三题下来,小明败得彻彻底底的,看着小强写的那些代码,自己瞬间压力山大了。
不过,小明就是小明,灵光忽地乍现:
自己何不拜小强为师,这样以后的编程不就有师傅做靠山,那不就变得easy啦?
小明说到做到,当即就拜小强为师。
小强秉着助人为乐的原则,也就收下了小明这个徒弟。
不过呢,拜师得有考验才行了,这不,就换小强考考小明啦!
不过,小强也不打算怎么为难小强!
既然小明数学不错,那就让他去做做简单的数学方面的题吧。
给出一个计算式,求结果。
ps:
计算式只包含“+”、“-”、“*”、“/”其中一种运算
输入格式
输入一个计算式,格式为:
a#b=。
#为运算符。
注意,运算符与数之间有空格!
当#为/,即计算除法时,要判断除数是否为0,若除数为0,输出“Error!
”
输出格式
输出结果,保留4位小数。
当#为/,即计算除法时,要判断除数是否为0,若除数为0,输出“Error!
”(输出无引号)
样例输入
15+23=
样例输出
38.0000
解答
#include
intmain()
{
doublea,b,s;
charc;
scanf("%lf%c%lf=",&a,&c,&b);
if(c=='+'){s=a+b;
printf("%.4f\n",s);
}
elseif(c=='-'){s=a-b;
printf("%.4f\n",s);
}
elseif(c=='*'){s=a*b;
printf("%.4f\n",s);
}
elseif(c=='/')
{s=a/b;
if(b==0)
printf("Error!
\n");
elseprintf("%.4f\n",s);
}
return0;
}
6.算日期
问题描述
自从收了小明这个徒弟之后,小强的生活就没平静过,小明发扬勤奋好问的精神,总是缠着小强问这问那的。
这天,小强在去食堂的路上不小心看见小明迎面走来,正打算避开他的时候,不过小明也正好看见小强像他走去,就喊着“师傅师傅”,小强这下没得躲了。
小明问了小强非常意外的问题:
师傅,今天几号啊。
小强随口答道:
XX号。
不过就在这时,小强却想到了一个可以打发小明的方法,他对小明说:
小明啊,你不是想让我给你出出题做嘛,我正好想到一个,今天是XXXX年XX月XX日,你给我算算今天是今年的第多少天吧!
小明还想问问怎么做来着,只见小强已经开溜了……
输入格式
输入一个日期,格式为yyyy/mm/dd
输出格式
输出一个整数,表示该日期在当年中为第几天
.
样例输入
2000/03/01
样例输出
61
解答
#include
intmain()
{
inta,b,c,t;
scanf("%d/%d/%d",&a,&b,&c);
if(a%4||!
(a%100)&&a%400)
{
if(b==1)t=c;
elseif(b==2)t=c+31;
elseif(b==3)t=c+59;
elseif(b==4)t=c+90;
elseif(b==5)t=c+120;
elseif(b==6)t=c+151;
elseif(b==7)t=c+181;
elseif(b==8)t=c+212;
elseif(b==9)t=c+243;
elseif(b==10)t=c+273;
elseif(b==11)t=c+304;
elseif(b==12)t=c+334;
printf("%d\n",t);
}
elseif(!
(a%4)&&(a%100)||!
(a%400))
{
if(b==1)t=c;
elseif(b==2)t=c+31;
elseif(b==3)t=c+60;
elseif(b==4)t=c+91;
elseif(b==5)t=c+121;
elseif(b==6)t=c+152;
elseif(b==7)t=c+182;
elseif(b==8)t=c+213;
elseif(b==9)t=c+244;
elseif(b==10)t=c+274;
elseif(b==11)t=c+305;
elseif(b==12)t=c+335;
printf("%d\n",t);
}
return0;
}
7.分数约简
问题描述
自从小明拜小强为师后,自知和师傅之间有着无法逾越的差距!
不过他并不气馁,他决定通过的努力一点一点缩短与师傅之间的距离!
这不才刚学完循环结构,他就迫不及待的想练习了。
于是他自己去找了一些题来练手!
这第一个题很简单,就是给出一个分数,把它化为最简分式。
输入格式
第一行输入一个整数T,代表有T个测试数据。
接下来的T行,每行输入两个非负整数m、n,m是分母,n是分子。
输出格式
输出最简分式,格式a/b。
若b=1,只输出a;若分子n=0,则输出“Error!
”(输出无引号)
样例输入
3
1216
153
200
样例输出
3/4
5
Error!
解答
#include
#include
intmain()
{
intT,m,n,c,t,d,a,b,f;
scanf("%d",&T);
for(t=1;t<=T;t++)
{
scanf("%d%d",&m,&n);
if(n==0)printf("Error!
");
elseif(m==0)printf("%d",m);
elseif(m>=n)
{
if(!
(m%n))printf("%d",m/n);
elseif(m%n)
{
a=m;
b=n;
do
{
c=(int)fmod(a,b);
a=b;
b=c;
}while(c!
=0);
d=m/a;
f=n/a;
printf("%d/%d",d,f);
}
}
elseif(m{
a=n;
b=m;
do
{
c=(int)fmod(a,b);
a=b;
b=c;
}while(c!
=0);
d=m/a;
f=n/a;
printf("%d/%d",d,f);
}
printf("\n");
}
return0;
}
8.再做分段函数
问题描述
这次小明给自己找了一个分段函数的题:
输入格式
第一行输入一个n,代表有n个测试数据,接下来的n行,每行输入变量x的值
输出格式
输入对应变量x的函数值f(x),每个结果一行
样例输入
2
-1500
500
样例输出
2500
-7500
解答
#include
intmain()
{
intn,i,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
while(x<0)
{
x=-5*x-10000;
}
y=5*x-10000;
printf("%d\n",y);
}
return0;
}
9.简单的数列求和
问题描述
再来,有通项公式
求前n项和Sn
输入格式
输入n
输出格式
输出前n项和Sn(保留4位小数)
样例输入
5
样例输出
7.5000
解答
#include
intmain()
{
doubleSn,n,i;
Sn=0;
i=1;
scanf("%lf",&n);
while(i<=n)
{
Sn=Sn+i/2;
i++;
}
printf("%.4f\n",Sn);
return0;
}
10.找闰年
问题描述
再来,小明回想到,自己不是曾经出了一题闰年的题来考自己的师傅吗?
那我何不就改改,然后自己做?
他想:
要不我就输出给定的任一一个时间段之间的闰年吧!
输入格式
输入两个整数m,n,代表两个年份。
保证m1000输出格式
输出[m,n]之间的所有闰年,每行5个
样例输入
19982015
样例输出
2000200420082012
解答
#include
intmain()
{
intm,n,t;
t=0;
scanf("%d%d",&m,&n);
while(m<=n)
{
if(!
(m%4)&&(m%100)||!
(m%400))
{
printf("%d",m);
t=t+1;
if(t%5==0)printf("\n");
}
m=m+1;
}
printf("\n");
return0;
}
11.小明的自娱自乐
问题描述
练习完前面四个题,小明有点累了,就上上网,找找c语言的资料。
碰巧看到这样一道题:
输入一个正整数,然后从个位开始一次输出每一位数字对应的英文字母。
例如:
输入1532,输出twothreefiveone。
输入格式
第一行输入一个T,代表有T组测试数据,T<100
对于每一组测试数据,输入一个整数x(0输出格式
对于每一组测试数据,输出对应结果,每个结果占一行
样例输入
3
24
1993
562431
样例输出
fourtwo
threeninenineone
onethreefourtwosixfive
来源
解答
#include
intmain()
{
intT,a,b,t,c;
scanf("%d",&T);
for(t=1;t<=T;t++)
{
scanf("%d",&a);
while(a!
=0)
{
b=a/10;
c=a-10*b;
if(c==0)printf("zero");
elseif(c==1)printf("one");
elseif(c==2)printf("two");
elseif(c==3)printf("three");
elseif(c==4)printf("four");
elseif(c==5)printf("five");
elseif(c==6)printf("six");
elseif(c==7)printf("seven");
elseif(c==8)printf("eight");
elseif(c==9)printf("nine");
a=b;
}
printf("\n");
}
return0;
}
12.Simplea+b
问题描述
普通的a+b太没有意思了,小明决定玩点花样:
如果加法没有进位,结果会是怎样?
输入格式
输入两个正整数a和b(0<=a,b<100000000)
输出格式
输出没有进位情况下加法的结果。
PS:
类似125+932的情况,输出的数的首位不能为0,即125+932=57;类似5555+5555的情况输出只有一个0.
样例输入
4579
样例输出
14
解答
#include
intmain()
{
inta,b,i,x1,x2,x,m=1,n=1,h=0;
i=1;
scanf("%d%d",&a,&b);
while(m!
=0||n!
=0)
{
m=a/10;
x1=a-10*m;
n=b/10;
x2=b-10*n;
x=x1+x2;
if(x>=10)
h=h+(x-10)*i;
elseif(x<10)
h=h+x*i;
i=i*10;
a=m;
b=n;
}
printf("%d\n",h);
return0;
}
13.几何级数的计算机验证法
问题描述
从前有棵树,叫高数,上面挂了许多人!
这个传说一直言传至今!
不过在小明看来,他肯定不会是那个会挂的人,他比其他提前预习了后面的章节,其中,他看了几何级数
|x|<1从理论上证明,他已经看懂了。
但是,他想到,既然自己数学计算机的,何不借用计算机来进行验证?
于是他开始编程……当等式左右两项之差的绝对值小于10^-6时,认定等式左右两项相等,请输出此时等式右边的项数n是多少!
输入格式
第一行输入一个整数T,代表有T组测试数据
对于每组测试数据,输入一个(-1,1)间的浮点数x
输出格式
输出每组测试数据的结果,各占一行
样例输入
9
0.1
0.2
0.3
0.4
0.5
-0.6
-0.7
-0.8
-0.9
样例输出
6
8
11
15
20
26
37
59
125
解答
#include
#include
intmain()
{
intT,n,i;
doublex,a,c,s=0,b=1;
scanf("%d",&T);
for(i=1;i<=T;i++)
{
scanf("%lf",&x);
a=1/(1-x);
for(n=0;b>=0.000001||b<=-0.000001;n++)
{
c=pow(x,n);
s=s+c;
b=a-s;
}
b=1;
s=0;
printf("%d",n-1);
printf("\n");
}
return0;
}
14.解铃还须系铃人1
问题描述
小明喜欢看谍战片,特别是喜欢看破译电报的桥段。
现在他学了C语言,他想借助电脑,将自己的一些文档进行加密。
不过有一次在整理硬盘的时候,他不小心把源文档给删掉了。
只留下了加密后的文档。
当然之间看加密的文档是看不出他写的是什么,不过小明还记得自己是怎么加密的,规律如下:
即第i个字母变成第(26-i+1)个字母。
简单归纳该方法为对称转换加密。
按照上述规律转换,非字母字符不变。
例如“China!
”转换为“Xsrmz!
”
A→Z, a→z
B→Y, b→y
C→X, c→x
…
Z→A,z→a
输入格式
输入一行加密后的字符串
输出格式
输出破译的字符串,注意请不要遗漏任何字符和输出多余的字符
样例输入
RdrooerhrgXsrmzmvcgdvvp.
样例输出
IwillvisitChinanextweek.
来源
解答
#include
intmain()
{
charb,d,c,i,t;
while((c=getchar())!
='\n')
{if(c>='A'&&c<='Z')
{i=c-64;
b=64+26-i+1;
printf("%c",b);
}
elseif(c>='a'&&c<='z')
{t=c-96;
d=97+26-t;
printf("%c",d);
}
elseprintf("%c",c);
}
printf("\n");
return0;
}
15.解铃还须系铃人2
问题描述
小强见小明再写破译代码,他就小明出了一题。
有这么一种加密方式,主要代码如下:
intmain()
{
charinp;
inti=0;
while(scanf("%c",&inp)!
=EOF)
{
if((inp>='A')&&(inp<='Z'))
{
inp=((inp-'A')+i)%26+'A';
}
elseif((inp>='a')&&(inp<='z'))
{
inp=((inp-'a')+i)%