c语言题库答案精选干货文档格式.docx
《c语言题库答案精选干货文档格式.docx》由会员分享,可在线阅读,更多相关《c语言题库答案精选干货文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
i++)
if(str[i]〉='
a’&&str[i]<='z’)
str[i]=str[i]-32;
else
if(str[i]>
=’A'&
&
str[i]〈='Z'
)
str[i]=str[i]+32;
...文档交流仅供参考...
}
puts(str);
return
0;
3,找出最重的苹果(彭玉旭)
小明有n个苹果(n〈20),每一个苹果都有一定的重量,请找出最重的苹果,并输出该苹果的重量
第一个整数是n,表示苹果的个数,接下来的n个整数是苹果的重量,每个整数之间用空格隔开
输出描述:
最重的苹果的重量
样式输入:
245 93
93
#include〈stdio。
h〉
int
main()
n;
max=0,num;
scanf(”%d"
,&
n);
while(n--)
{
scanf(”%d",&num);
if(num〉max)
max=num;
printf(”%d”,max);
return
0;
}
4,函数求解1/n的累加(谌海军)
利用自定义函数编写程序,求下面的式子:
Y=1+1/2+1/3……+1/n(n的数值由键盘输入,n〈=100)...文档交流仅供参考...
输入一个正整数
输出为小数,保留小数点后8位有效数字.
8
2.71785714
#include<
stdio。
h>
intmain()
double y=0;
intn,i;
scanf("
%d”,&n);
for(i=1;
i〈=n;
i++)
y+=1.0/i;
printf("%。
8lf",y);
return 0;
5,汽水瓶(谌海军)
题目描述:
有这样一道智力题:
“某商店规定:
三个空汽水瓶可以换一瓶汽水。
小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?
”答案是5瓶,方法如下:
先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。
如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入为一个正整数n(1〈=n〈=100),表示空汽水瓶个数。
输出为一个正整数,表示可换汽水的瓶数。
10
5
#include<stdio。
h〉
int
main()
{
n,count=0,k;
scanf("
%d",&n);
while(n〉1)
k=n/3+n%3;
count+=n/3;
n=k;
if(n==2)
count++;
break;
}
printf(”%d",count);
return
0;
/*也可以两个两个换——*/
#include<
stdio.h>
/
intmain()
{
intn;
ﻩscanf("
%d",&n);
printf(”%d”,n/2);
return0;
6,栽树(彭玉旭)
在某食堂门前有n(n〈200)个树坑,编号是从0~n-1,开始时是没有树的。
每个月,园林工人都会在编号a~b(0<=a<
=b<
=n-1)之间栽树(包括a,b),如果树坑原来有树,则不需要从新栽树。
请计算4个月后,食堂门前总共有多少棵树。
第一个整数是n,接下来有8个整数,分别为每个月栽树的编号。
食堂门前树的总数。
10
12
23
3 4
45
#include〈stdio。
h>
main()
tree[200]={0},n,i;
scanf("%d"
n);
star,end,j;
for(i=1;
i<5;
i++)
scanf("
%d%d",&star,&end);
for(j=star;
j<
=end;
j++)
tree[j]=1;
}
sum=0;
for(i=0;
i<n;
i++)
sum+=tree[i];
printf("%d",sum);
return
7,密码破译(闫博钊)
某组织欲破获一个外星人的密码,密码由一定长度的字串组成。
此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。
现在就请你编程找出能破译此密码的两个钥匙。
输入第一行为钥匙的个数N(1≤N≤5000)输入第二行为密码的长度 以下N行为每个钥匙的长度
若无法找到破译此密码的钥匙,则输出仅1行0。
若找到两把破译的钥匙,则输出有两行,分别为两把钥匙的编号.若有多种破译方案,则只输出一种即可。
10
80
27
9
4
73
23
68
12
64
92
24
6
7
#include<
stdio。
h>
int
main()
n,l;
x[5000];
i;
scanf("%d%d”,&
n,&l);
for(i=0;
i〈n;
i++)
scanf("%d”,&
x[i]);
j;
for(i=0;
i<
n-1;
i++)
for(j=i+1;
j<
n;
j++)
if(x[i]+x[j]==l)
printf("%d\n%d",i+1,j+1);
return 0;
printf("0"
);
return
9,基因编码(闫博钊)
小可可选修了基础生物基因学。
教授告诉大家SuperSamuel星球上Kitty猫的基因的长度都是2的正整数次幂 2k(k≤ 8),全是由两种不同的基因单元组成的。
这两种不同的基因单元分别记成0 和 1,于是Kitty猫的基因可以写成一个01串表达式 S。
为了便于分析和降低数据存储量,教授发明了ABC 编码规则。
该编码规则是不断地按照A(若S串全是0)T(S)= B(若S串全是1) CT(S1)T(S2)(否则把S串分成两个等长的子串S1和S2) 对Kitty猫基因01串表达式S进行改写,直至最终被改写成只含有字符“A”、“B"
、“C”的符号串.例如T(01001011) = CT(0100)T(1011) =CCT(01)T(00)CT(10)T(11)=CCCT(0)T
(1)ACCT
(1)T(0)B=CCCABACCBAB请你编写程序帮助小可可求出Kitty猫基因的ABC编码以协助教授开展科研工作。
测试数据以一行的形式存放Kitty猫基因的01串表达式,字符串长度不超过500
对应测试数据,以一行的形式输出这个Kitty猫基因的ABC编码.
CCCABACCBAB
#include
<stdio.h〉
#include
<string.h>
void
ABC(char
str[],int
star,int
end)
a=0,b=0,i;
for(i=star;
i<end;
if(str[i]=='
0’)
a++;
else
if(str[i]==’1')
b++;
if(a==end-star)
printf("A”);
else
if(b==end-star)
printf("B”);
printf("
C");
ABC(str,star,(star+end)/2);
ABC(str,(star+end)/2,end);
main()
char
str[500],l;
gets(str);
l=strlen(str);
ABC(str,0,l);
return
0;
10,最大公约数(闫博钊)
输入两个整数a,b(1≤a,b≤100000),请编写程序求出他们的最大公约数。
输入两个整数ab,用空格隔开
输出对应a,b的最大公约数
2510
#include〈stdio.h>
intgcd(intm,intn)/*经典的最大公约数*/
if(n==0)returnm;
return gcd(n,m%n);
int main()
{
ﻩintm,n;
scanf("
%d%d",&
m,&n);
printf(”%d”,gcd(m,n));
return0;
11,大数相加(彭玉旭)
a+b这个程序大家都会做,但是如果a和b都比较大时该怎么办呢。
其实我们可以把输入一个比较大的数用字符串表示,模拟人工加法方式。
如123+23,一个字符串是123另外一个字符串是23,从字符串的最后开始加,得到146.结果最大是两个字符串最长的那个值加1.现在请你计算两个不超过30位的十进制的数的和。
知识点:
字符串输入,字符的0~9的加法运算。
提示:
字符0的ASCII是48,注意进位处理...文档交流仅供参考...
包行四行,每一行包含不超过30个的由0~9的字符组成字符串。
第一行加第二行的和以及第三行加第四行的和。
每一个和占一行
123
123
3
246
126
stdio。
h>
#include〈string.h>
intmain()
intlena,lenb,i,j,n,t,temp,k,num=2,count;
ﻩintc[32]={0};
inta[32]={0},b[32]={0};
chara1[32],b1[32];
count=1;
while(num--)
ﻩ{
scanf(”%s%s”,a1,b1);
ﻩlena=strlen(a1);
lenb=strlen(b1);
ﻩif(lena<
lenb)k=lenb;
ﻩelsek=lena;
for(i=0;
i〈lena;
i++)a[i]=a1[lena—i-1]-’0’;
ﻩfor(i=0;
i<lenb;
i++)b[i]=b1[lenb-i-1]-’0’;
for(i=0;
i〈k;
i++)
ﻩﻩ{
ﻩc[i]=a[i]+b[i]+c[i];
ﻩc[i+1]=c[i+1]+c[i]/10;
ﻩc[i]=c[i]%10;
ﻩ}
if(c[k]) k++;
ﻩﻩfor(i=k-1;
i>=0;
i-—)printf(”%d”,c[i]);
ﻩﻩif(num〉=1) printf(”\n”);
/*memset(c,0,sizeof(c));
/*memset 库函数,在string.h里用来清零的最快办法*/...文档交流仅供参考...
ﻩﻩmemset(a,0,sizeof(a));
ﻩmemset(b,0,sizeof(b));
*/
}
return0;
12,字符串比对(谌海军)
有字符串a(长度<
=100),b(长度〈=10),计算b串在a串中出现的次数。
解题思路:
1、用gets语句从键盘输入两个字符串赋予a,b字符数组;
2、建立两层嵌套循环,外循环至a串结束标志为止,内循环至b串结束标志为止;
3、内循环中比对b串与a串的数据,满足条件时计数,否则break;
4、所有循环结束后输出计数值。
输入为两个字符串,第一个字符串长度小于100,第二个字符串长度小于10;
输出为一个正整数;
abcdefghijklmnababcdeabc
abc
#include<stdio。
h〉
#include〈string.h〉
int main()
chara[100],b[10];
inti,l1,l2,j,k,c,d,cnt=0;
ﻩscanf("
%s%s”,a,b);
intl=strlen(b);
ﻩchar*q=strstr(a,b);
ﻩwhile(q!
=NULL)
ﻩ{
ﻩﻩcnt++;
ﻩﻩq=strstr(q+1,b);
//题目的意思不是很懂要是ccccccccccc这样的话有几个?
}
printf("
%d",cnt);
return0;
13,围圈报数(谌海军)
有n(n〈=100)围成一圈,顺序排号(从1排到n).从第一个人开始报数(从1报到m(m〈=9)),凡报到m的人退出圈子,问最后留下的是原来第几号的那位?
1、定义一个长度为100数组a,初始化为0;
2、接收键盘输入值n,m,数组a的前n-1个元素赋值为1~n;
3、建立两层嵌套循环,外循环至退出人数为n—1为止,内循环中从0循环至n,将a数组中非0的数据逢m置零,同时记录退出人数;
4、循环全部结束后输出最后留下的一个a数组的非零元素的值。
输入为两个正整数,第一个〈=100,第二个<
=9;
1003
91
/*数学问题f[1]=0;
f[i]=(f[i-1]+m)%i;
(i>1)都不用存数组
#include<
stdio.h〉
intmain()
intn,m,i,s=0;
scanf("
%d%d"
&
n,&m);
for(i=2;
=n;
i++)
s=(s+m)%i;
printf("%d\n"
,s+1);
return0;
}*/
#include<
stdio。
i,m,n,exit=0,count=0;
int
a[100]={0};
scanf("
%d%d"
&n,&m);
for(i=0;
i〈n;
i++)
a[i]=i+1;
i=0;
while(n—exit>
1)
if(a[i]!
=0)
count++;
if(count==m){
count=0;
a[i]=0;
exit++;
i++;
if(i==n)
i=0;
for(i=0;
if(a[i]!
printf("%d",a[i]);
return
14,星期几?
(谌海军)
编一个程序,已知今天是星期几,计算出n天后是星期几。
要求使用枚举变量。
枚举变量的赋值只能用枚举常量来表示,但是枚举常量均有一个整形数代表,可将改整形数存入枚举变量地址以实现外部赋值的目的.如:
enumday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}d1;
scanf(”%d”,&
d1);
当键盘输入1时,相当于将d1赋值为Mon,即d1=Mon枚举变量的输出,只能输出其代表的整形数,如需输出其对应的枚举常量,可借助字符串数组的方式处理;
如:
char*p[]={“Sun”,“Mon"
,“Tue”,"
Wed”,”Thu"
,”Fri",”Sat"
};
printf("
%s"
,*(p+2));
其输出结果为:
Tue...文档交流仅供参考...
输入为两个正整数,第一个数n(n<
=6)表示今天是星期几,第二个数m(m〈=1000),表示求m天后是星期几;
输出为一个长度为3的字符串,表示星期几的名称;
1 4
Fri
#include<stdio.h>
intmain()
{/*表示枚举变量完全看不懂的说-—*/
char *p[]={"
Sun"
,"Mon"
”Tue”,"
Wed"
”Thu”,"Fri"
”Sat"
intm,d;
scanf(”%d%d",&d,&
m);
printf("
%s"
*(p+(d+m)%7));
return0;
15,abc+cba=1333(卜胜贤)
已知abc+cba=1333,其中a,b,c均为一位数,编程求出所有满足条件的a,b,c所有组合。
(知识点:
控制语句)...文档交流仅供参考...
无
输出数据为多组,每组两个整形数;
123321
456654
……
#include<
stdio.h>
main()
i,a,b,c;
for(i=100;
i<
1000;
a=i/100;
b=i/10%10;
c=i%10;
if(i+c*100+b*10+a==1333)
printf("
%d
%d%d%d\n"
i,c,b,a);
}
16,整数各位取奇数(卜胜贤)
将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:
87653142时,t中的数为:
7531。
(知识点:
控制语句、函数、指针)...文档交流仅供参考...
输入数据为一个不大于100000000的整形数;
输出数据为一个不大于100000000的整形数;
987654321
97531
#include〈stdio。
#include<
string.h>
intmain()
ﻩchar a[15];
ﻩgets(a);
ﻩinti,l=strlen(a);
ﻩfor(i=0;
i++)
ﻩif((a[i]%2)/*’0’的ASCII为48——*/
ﻩﻩprintf("%c”,a[i]);
ﻩreturn0;
17,四位反序数(卜胜贤)
设N是一个四位数,它的n倍恰好是其反序数(例如:
123的反序数是321),编程,输出一个满足条件的N.(知识点:
输入为一个整形数n(2〈=n<
=9)
输出为一个四位数的整形数
9
1089
#include<stdio.h〉
#include<
string.h〉
main()
{