C语言基础编程题.docx
《C语言基础编程题.docx》由会员分享,可在线阅读,更多相关《C语言基础编程题.docx(20页珍藏版)》请在冰豆网上搜索。
![C语言基础编程题.docx](https://file1.bdocx.com/fileroot1/2023-2/1/570b58be-5ff1-47e2-9277-9a304a258ce9/570b58be-5ff1-47e2-9277-9a304a258ce91.gif)
C语言基础编程题
5-1 求幂之和 (15分)
本题要求编写程序,计算sum=2^1+2^2+2^3+\cdots+2^nsum=21+22+23+⋯+2n。
可以调用pow函数求幂。
输入格式:
输入在一行中给出正整数nn(\le≤10)。
输出格式:
按照格式“result=计算结果”输出。
输入样例:
5
输出样例:
result=62
#include
#include
intmain()
{
inti,n,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=sum+pow(2,i);
}
printf("result=%d\n",sum);
return0;
}
5-2 近似求PI (15分)
本题要求编写程序,根据下式求\piπ的近似值,直到最后一项小于给定精度eps。
\frac{\pi}{2}=1+\frac{1!
}{3}+\frac{2!
}{3\times5}+\frac{3!
}{3\times5\times7}+\cdots+\frac{i!
}{3\times5\times\cdots\times(2\timesi+1)}+\cdots2π=1+31!
+3×52!
+3×5×73!
+⋯+3×5×⋯×(2×i+1)i!
+⋯
输入格式:
输入在一行中给出精度eps,可以使用以下语句来读输入:
scanf("%le",&eps);
输出格式:
在一行内,按照以下格式输出\piπ的近似值(保留小数点后5位):
PI=近似值
输入样例:
1E-5
输出样例:
PI=3.14158
#include
#include
intmain()
{
doublea=1,b=3,i=1,j=3;
doubleeps,m=1,sum=0;
scanf("%le",&eps);
while(m>eps)
{
m=a/b;
sum=sum+m;
i=i+1;
j=j+2;
a=a*i;
b=b*j;
}
printf("PI=%.5lf\n",2+2*sum);
return0;
}
5-3 判断素数 (15分)
输入一个正整数m,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
输入格式:
在一行中输入一个正整数m。
输出格式:
对每一组输入,在一行中输出结果并换行。
输入样例:
17
输出样例:
YES
#include
#include
intmain()
{
inti,j,n;
scanf("%d",&n);
j=sqrt(n);
for(i=2;i<=j;i++)
if(n%i==0)break;
if(i>=j&&n!
=1)
printf("YES\n");
else
printf("NO\n");
return0;
}
5-4 出生年 (15分)
以上是新浪微博中一奇葩贴:
“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。
”也就是说,直到2013年才达到“4个数字都不相同”的要求。
本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。
输入格式:
输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1,3000]之间,n可以是2、或3、或4。
注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。
输出格式:
根据输入,输出x和能达到要求的年份。
数字间以1个空格分隔,行首尾不得有多余空格。
年份要按4位输出。
注意:
所谓“n个数字都不相同”是指不同的数字正好是n个。
如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。
输入样例1:
19884
输出样例1:
252013
输入样例2:
12
输出样例2:
00001
#include
#include
intmain()
{
inty,n,a,b,c,d,f[10],l=0;
scanf("%d%d",&y,&n);
for(inti=y;i<10000;i++)
{
a=i/1000;
b=i/100%10;
c=i%100/10;
d=i%10;
memset(f,0,sizeof(f));
f[a]=1;
if(f[b]!
=1)
f[b]=1;
if(f[c]!
=1)
f[c]=1;
if(f[d]!
=1)
f[d]=1;
intsum=0;
for(intj=0;j<10;j++)
{
sum=sum+f[j];
}
if(sum==n&&l==0)
{
printf("%d%04d\n",i-y,i);
l++;
}
}
return0;
}
5-5 计算函数P(n,x) (10分)
输入一个正整数repeat(0输入一个整数n(n>=0)和一个双精度浮点数x,输出函数p(n,x)的值(保留2位小数)。
1(n=0)
x(n=1)
((2n-1)p(n-1,x)-(n-1)*p(n-2,x))/n(n>1)
例:
括号内是说明
输入样例:
3(repeat=3)
00.9(n=0,x=0.9)
1-9.8(n=1,x=-9.8)
101.7(n=10,x=1.7)
输出样例:
p(0,0.90)=1.00
p(1,-9.80)=-9.80
p(10,1.70)=3.05
∙时间限制:
400ms
∙内存限制:
64MB
∙代码长度限制:
16kB
∙判题程序:
系统默认
∙作者:
王秀
∙单位:
福州大学
窗体顶端
题目判定
解题程序
窗体底端
#include
intmain()
{
doublep(intn,doublex);
intrepeat,ri,n;
doublex,result;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%d%lf",&n,&x);
result=p(n,x);
printf("p(%d,%.2lf)=%.2lf\n",n,x,result);
}
return0;
}
doublep(intn,doublex)
{
doublet;
if(n==0)
t=1;
elseif(n==1)
t=x;
else
t=((2*n-1)*p(n-1,x)-(n-1)*p(n-2,x))/n;
returnt;
}
5-6 在数组中查找指定元素 (10分)
输入一个正整数repeat(0输入一个正整数n(1要求定义并调用函数search(list,n,x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,函数形参list的类型是整型指针,形参n和x的类型是int,函数的类型是int。
输出格式语句:
printf("index=%d\n",);
输入输出示例:
括号内为说明,无需输入输出
输入样例:
2(repeat=2)
3(n=3)
12-6
2(x=2)
5(n=5)
12254
0(x=0)
输出样例:
index=1
Notfound
∙时间限制:
400ms
∙内存限制:
64MB
∙代码长度限制:
16kB
∙判题程序:
系统默认
∙作者:
王秀
∙单位:
福州大学
窗体顶端
题目判定
窗体底端
#include
intmain()
{
intsearch(intlist[],intn,intx);
intn,i,a[10],res,x,repeat,index,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
scanf("%d",&x);
res=search(a,n,x);
if(res!
=-1)
printf("index=%d\n",res);
else
printf("Notfound\n");
}
return0;
}
intsearch(intlist[],intn,intx)
{
inti,q=-1;
for(i=0;i{
if(list[i]==x)
{
returni;
}
}
returnq;
}
5-7 使用函数的选择法排序 (10分)
输入一个正整数repeat(0输入一个正整数n(1要求定义并调用函数sort(a,n),它的功能是采用选择排序算法,将数组a的前n个元素按从小到大的顺序排序,函数形参a的类型是整型指针,形参n的类型是int,函数的类型是void。
输出格式:
数据直接以空格分隔,最后的一个数据后面没有空格。
输入输出示例:
括号内为说明,无需输入输出
输入样例:
3(repeat=3)
4(n=4)
5176
3(n=3)
123
5(n=5)
54321
输出样例:
Aftersorted:
1567
Aftersorted:
123
Aftersorted:
12345
∙时间限制:
400ms
∙内存限制:
64MB
∙代码长度限制:
16kB
∙判题程序:
系统默认
∙作者:
王秀
∙单位:
福州大学
窗体顶端
题目判定
解题程序
窗体底端
#include
#defineMAXN10
voidsort(inta[],intn);
intmain()
{
inti,n,x,j;
inta[MAXN];
scanf("%d",&x);
for(j=0;j{
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
sort(a,n);
printf("Aftersorted:
");
for(i=0;iprintf("%d",a[i]);
printf("%d",a[i]);
printf("\n");
}
return0;
}
voidsort(inta[],intn)
{
inti,x,j,temp;
for(i=0;i{
x=i;
for(j=i+1;jif(a[j]x=j;
if(x!
=i)
{
temp=a[x];
a[x]=a[i];
a[i]=temp;
}
}
}
5-8 求组合数 (15分)
本题要求编写程序,根据公式C^{m}_{n}=\frac{n!
}{m!
(n-m)!
}Cnm=m!
(n−m)!
n!
算出从nn个不同元素中取出mm个元素(m\lenm≤n)的组合数。
建议定义和调用函数fact(n)计算n!
,其中n的类型是int,函数类型是double。
输入格式:
输入在一行中给出两个正整数mm和nn(m\lenm≤n),以空格分隔。
输出格式:
按照格式“result=组合数计算结果”输出。
题目保证结果在double类型范围内。
输入样例:
27
输出样例:
result=21
∙时间限制:
400ms
∙内存限制:
64MB
∙代码长度限制:
16kB
∙判题程序:
系统默认
∙作者:
颜晖
∙单位:
浙江大学城市学院
窗体顶端
题目判定
窗体底端
#include
intmain()
{
doublefact(intn);
intm,n;
doublesum;
scanf("%d%d",&m,&n);
if(n>=m)
sum=fact(n)/(fact(m)*fact(n-m));
printf("result=%.0lf\n",sum);
return0;
}
doublefact(intn)
{
inti;
doubles=1;
for(i=1;i<=n;i++)
{
s=s*i;
}
returns;
}
5-9 判断数字字符 (10分)
编写函数,判断指定的字符是否是数字字符,如果是函数返回1,否则函数返回0.要求在主调函数中输入该字符,调用函数并输出判断结果。
输入格式:
在一行中给出1个字符。
输出格式:
对于给定输入的字符,输出判断结果yes或no。
输入样例:
6
输出样例:
yes
输入样例:
H
输出样例:
no
∙时间限制:
400ms
∙内存限制:
64MB
∙代码长度限制:
16kB
∙判题程序:
系统默认
∙作者:
韩玫瑰
∙单位:
济南大学
窗体顶端
题目判定
解题程序
窗体底端
#include
intmain()
{
voidpanduan(charch);
charch;
scanf("%c",&ch);
panduan(ch);
return0;
}
voidpanduan(charch)
{
if(ch>='0'&&ch<='9')
printf("yes\n");
else
printf("no\n");
}
5-10 函数编程-分段函数 (15分)
编写函数,计算下面分段函数的值。
输入格式:
输入一个实数x的值
输出格式:
输出y的结果值
输入样例:
0
输出样例:
y=-1.000000
输入样例:
3.5
输出样例:
y=-8.619337
∙时间限制:
400ms
∙内存限制:
64MB
∙代码长度限制:
16kB
∙判题程序:
系统默认
∙作者:
韩玫瑰
∙单位:
济南大学
窗体顶端
题目判定
解题程序
窗体底端
#include
#include
intmain()
{
doublex,y;
scanf("%lf",&x);
if(x<=-2)
y=-exp(2*x+1)+3;
elseif(-2y=2*x-1;
elseif(x>3)
y=2*log10(3*x+5)-11;
printf("y=%lf\n",y);
return0;
}
5-11 有理数比较 (10分)
本题要求编写程序,比较两个有理数的大小。
输入格式:
输入在一行中按照“a1/b1a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照“a1/b1关系符a2/b2”的格式输出两个有理数的关系。
其中“>>”表示“大于”,“<<”表示“小于”,“==”表示“等于”。
输入样例1:
1/23/4
输出样例1:
1/2<3/4
输入样例2:
6/83/4
输出样例2:
6/8=3/4
∙时间限制:
400ms
∙内存限制:
64MB
∙代码长度限制:
16kB
∙判题程序:
系统默认
∙作者:
乔林
∙单位:
清华大学
窗体顶端
题目判定
窗体底端
#include
#include
intmain()
{
doublea1,a2,b1,b2;
scanf("%lf/%lf%lf/%lf",&a1,&b1,&a2,&b2);
if(a1/b1>a2/b2)
printf("%.0lf/%.0lf>%.0lf/%.0lf\n",a1,b1,a2,b2);
elseif(a1/b1==a2/b2)
printf("%.0lf/%.0lf=%.0lf/%.0lf\n",a1,b1,a2,b2);
elseif(a1/b1printf("%.0lf/%.0lf<%.0lf/%.0lf\n",a1,b1,a2,b2);
return0;
}
5-12 通讯录的录入与显示 (10分)
通讯录中的一条记录包含下述基本信息:
朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。
本题要求编写程序,录入NN条记录,并且根据要求显示任意某条记录。
输入格式:
输入在第一行给出正整数NN(\le≤10);随后NN行,每行按照格式姓名生日性别固话手机给出一条记录。
其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15位的连续数字,前面有可能出现+。
在通讯录记录输入完成后,最后一行给出正整数KK,并且随后给出KK个整数,表示要查询的记录编号(从0到N-1N−1顺序编号)。
数字间以空格分隔。
输出格式:
对每一条要查询的记录编号,在一行中按照姓名固话手机性别生日的格式输出该记录。
若要查询的记录不存在,则输出NotFound。
输入样例:
3
Chris1984/03/10F+86181779452
LaoLao1967/11/30F0+86
QiaoLin1980/01/01M8417233310086
217
输出样例:
LaoLao0+86F1967/11/30
NotFound
#include
#include
structlist
{
charname[11];
charnum[17];
charphone[17];
charsex[2];
charbirthday[11];
};
structlistp[100];
intmain()
{
inti=0;intj=0,N,K;
scanf("%d",&N);
for(i=0;iscanf("%s%s%c%s%s",&p[i].name,&p[i].birthday,&p[i].sex,&p[i].num,&p[i].phone);}
scanf("%d",&K);
intnumber;
for(i=0;iscanf("%d",&number);
if(number=0){
printf("%s%s%s%s%s\n",p[number].name,p[number].num,p[number].phone,p[number].sex,p[number].birthday);}
else{printf("NotFound\n");}}
return0;
}
5-13 查找单价最高和最低的书籍 (10分)
编写程序,从键盘输入n(n<10)本书的名称和定价并存入结构数组中,查找并输出其中定价最高和最低的书的名称和定价。
输出格式语句:
printf("highestprice:
%.1f,%s\n",);
printf("lowestprice:
%.1f,%s\n",);
输入输出示例:
括号内为说明,无需输入输出
输入样例:
3(n=3)
ProgramminginC
21.5
ProgramminginVB
18.5
ProgramminginDelphi
25
输出样例:
highestprice:
25.0,ProgramminginDelphi
lowestprice:
18.5,ProgramminginVB
#include
structbook
{
chara[100];
doubleb;
};
intmain()
{
inti,j,n;
chark;
structbooks[100],temp;
scanf("%d",&n);
for(i=0;i{
scanf("%c",&k);
gets(s[i].a);
scanf("%lf",&s[i].b);
}
for(i=0;ifor(j=i+1;jif(s[j].b>s[i].b){temp=s[i];s[i]=s[j];s[j]=temp;}
printf("highestprice:
%0.1f,%s\n",s[0].b,s[0].a);
printf("lowestprice:
%0.1f,%s\n",s[n-1].b,s[n-1].a);
return0;
}