经典练习c语言编程的题目及答案整理Word格式文档下载.docx
《经典练习c语言编程的题目及答案整理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《经典练习c语言编程的题目及答案整理Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
i=1;
switch
(
i/3
)
{
case
0:
printf("
zero"
1:
one"
2:
two"
正确答案是:
zeroonetwo。
5.水仙花数是指一个N位正整数(N>
=3),它的每个位上的数字的N次幂之和等于它本身。
例如:
153=13
+53+33。
本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<
=N<
=7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
intmain(void){
inti,j,n,low=1,high,temp,sum,item,remainder;
&
n);
for(i=1;
i<
n;
++i)
low*=10;
/*得到n位数的下限*/
high=low*10;
/*得到n位数的上限*/
for(i=low;
high;
++i){
temp=i;
sum=0;
while(temp>
0){
remainder=temp%10;
item=remainder;
for(j=1;
j<
++j)
item*=remainder;
sum+=item;
temp/=10;
}
if(i==sum)
printf("
i);
}
6.时间换算
UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。
现在,你的程序要读入一个整数,表示BJT的时和分。
整数的个位和十位表示分,百位和千位表示小时。
如果小时小于10,则没有千位部分;
如果小时是0,则没有百位部分;
如果分小于10分,需要保留十位上的0。
如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。
你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。
提醒:
要小心跨日的换算。
输入格式:
一个整数,表示BJT的时和分。
一个整数,表示UTC的时和分。
903
103
时间限制:
500ms内存限制:
32000kb
inth,m,input,b;
h=input/100;
m=input%100;
if(h>
=8){
b=(h-8)*100+m);
}else{
b=(h+24-8)*100+m);
}
7.信号报告
题目内容:
无线电台的RS制信号报告是由三两个部分组成的:
R(Readability)信号可辨度即清晰度.
S(Strength)
信号强度即大小.
其中R位于报告第一位,共分5级,用1—5数字表示.
∙1---Unreadable
∙2---Barelyreadable,occasionalwordsdistinguishable
∙3---Readablewithconsiderabledifficulty
∙4---Readablewithpracticallynodifficulty
∙5---Perfectlyreadable
报告第二位是S,共分九个级别,用1—9中的一位数字表示
∙1---Faintsignals,barelyperceptible
∙2---Veryweaksignals
∙3---Weaksignals
∙4---Fairsignals
∙5---Fairlygoodsignals
∙6---Goodsignals
∙7---Moderatelystrongsignals
∙8---Strongsignals
∙9---Extremelystrongsignals
现在,你的程序要读入一个信号报告的数字,然后输出对应的含义。
如读到59,则输出:
Extremely
strong
signals,
perfectly
readable.
一个整数,信号报告。
整数的十位部分表示可辨度,个位部分表示强度。
输入的整数范围是[11,59],这个范围外的数字不可能出现在测试数据中。
一句话,表示这个信号报告的意义。
按照题目中的文字,先输出表示强度的文字,跟上逗号和空格,然后是表示可辨度的文字,跟上句号。
注意可辨度的句子的第一个字母是小写的。
注意这里的标点符号都是英文的。
33
Weak
readable
with
considerable
difficulty.
intrs;
rs);
if(rs%10!
=0){
intr=rs/10;
ints=rs%10;
switch(s){
case1:
Faintsignals,barelyperceptible,"
break;
case2:
Veryweaksignals,"
case3:
Weaksignals,"
case4:
Fairsignals,"
case5:
Fairlygoodsignals,"
case6:
Goodsignals,"
case7:
Moderatelystrongsignals,"
case8:
Strongsignals,"
case9:
Extremelystrongsignals,"
switch(r){
unreadable."
barelyreadable,occasionalwordsdistinguishable."
readablewithconsiderabledifficulty."
readablewithpracticallynodifficulty."
perfectlyreadable."
也可以写成下面这样:
ints;
intr;
intn;
scanf("
r=n/10;
s=n%10;
switch(s){
case0:
"
case1:
Faintsignals,barelyperceptible,"
break;
case2:
Veryweaksignals,"
case3:
Weaksignals,"
case4:
Fairsignals,"
case5:
Fairlygoodsignals,"
case6:
Goodsignals,"
case7:
Moderatelystrongsignals,"
case8:
Strongsignals,"
case9:
Extremelystrongsignals,"
switch(r){
barelyreadable,occasionalwordsdistinguishable."
readablewithconsiderabledifficulty."
readablewithpracticallynodifficulty."
return0;
8.数字特征值
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。
对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。
这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。
按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。
比如,对于342315,这个二进制数字就是001101。
这里的计算可以用下面的表格来表示:
数字
4
2
1
5
数位
6
数字奇偶
奇
偶
数位奇偶
奇偶一致
二进制位值
32
16
8
按照二进制位值将1的位的位值加起来就得到了结果13。
你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。
提示:
将整数从右向左分解,数位每次加1,而二进制值每次乘2。
一个非负整数,整数的范围是[0,100000]。
一个整数,表示计算结果。
342315
13
#include"
stdio.h"
math.h"
//使用pow函数需要引用
//number:
输入的正整数;
ret:
结果
intnumber=-1,ret=0;
number);
if(number>
0&
&
number<
=100000)
//cont:
数位;
num:
个位数;
binary:
二进制位值;
intcont=1,num,binary=1;
do
{
num=number%10;
//等到个位上的数
if((num%2==0&
cont%2==0)||(num%2==1&
cont%2==1))//判断奇偶一致性
{
if(cont!
=1)
binary=pow(2,cont-1);
//pow(2,3):
幂次方函数,表示2的3次方
ret+=binary;
//相加每一位奇偶一致的二进制位值,得到十进制数
number/=10;
//去掉个位上的数
cont++;
}while(number>
0);
ret);
9.奇偶个数
你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。
程序输出读到的数据中的奇数和偶数的个数。
一系列正整数,整数的范围是(0,100000)。
如果输入-1则表示输入结束。
两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。
两个整数之间以空格分隔。
934257-1
42
inta,i=0,j=0;
do{
a);
if(a%2==1)
i++;
if(a%2==0)
j++;
while(a!
=-1);
i,j);
10.素数和
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<
n<
=m<
=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
两个整数,第一个表示n,第二个表示m。
一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
24
15
#include<
intmain(){
intm=0;
intn=0;
inti;
intj;
intsum=0;
intisPrime=1;
intnum=0;
n,&
m);
for(i=2;
i<
=20000;
i++){
for(j=2;
j<
i;
j++){
if((i%j)==0){
isPrime=0;
if(isPrime==1){
num++;
if(num>
=n&
num<
=m){
sum+=i;
if(num==m)
isPrime=1;
XX文库-让每个人平等地提升自我}
sum);
11.念整数
你的程序要读入一个整数,范围是[-100000,100000]。
然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出:
1.yi
er
san
si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。
当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
1.fu
si
yi
一个整数,范围是[-100000,100000]。
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
-30
fusanling
intx;
intnum;
x);
intlength=0;
intonum;
intnumbit=1;
intnumbox;
if(x<
0)
fu"
num=-x;
else
num=x;
onum=num;
while(num>
9)
num/=10;
length++;
while(length>
numbit*=10;
length--;
num=onum;
while(numbit>
numbox=num/numbit;
switch(numbox)
case0:
ling"
yi"
er"
san"
si"
wu"
liu"
qi"
ba"
jiu"
default:
error"
num%=numbit;
numbit/=10;
if(numbit>
"
#defineARRAY_SIZE200
inti,a,b,integer_part;
charresult[ARRAY_SIZE+1]={0};
/*存放小数部分*/
%d/%d"
a,&
integer_part=a/b;
/*商的整数部分*/
a=a%b;
/*余数*/
for(i=0;
ARRAY_SIZE;
a*=10;
/*余数乘以10作为下一轮计算的被除数*/
result[i]=(a/b)+'
0'
;
/*得到一位商*/
a%=b;
/*新余数*/
if(a==0)
break;
result[i+1]='
\0'
printf("
%d.%s\n"
integer_part,result);
return0;