C语言上机题目来源及答案概要.docx
《C语言上机题目来源及答案概要.docx》由会员分享,可在线阅读,更多相关《C语言上机题目来源及答案概要.docx(19页珍藏版)》请在冰豆网上搜索。
![C语言上机题目来源及答案概要.docx](https://file1.bdocx.com/fileroot1/2023-2/9/b18b5184-cbf1-450e-bd70-c3e804ec5b7f/b18b5184-cbf1-450e-bd70-c3e804ec5b7f1.gif)
C语言上机题目来源及答案概要
C语言”上机题目汇总
2012-2013-2
1.输入三角形两个边长及其夹角(角度值),求第三边边长和三角型面积。
(上机指导P983
(2))
#include
#include
floatpi=3.141592;
intmain()
{
floata,b,c,v,s;
scanf("%f%f%f",&a,&b,&v);c=sqrt(a*a+b*b-2*a*b*cos(v/180*pi));
s=a*b*sin(v/180*pi)/2;
printf("c=%0.2f,s=%0.2f\n",c,s);
return0;
}(测试通过)
2.输入一个字符,若是小写字母,则转换成大写字母输出;若是大写字母,则转换成小写字母输出。
(上机指导P1012
(2))
#include
intmain()
{
charch;
printf("input:
");
scanf("%c",&ch);
if(ch>='a'&&ch<='z')
printf("%c",ch-32);
elseif(ch>='A'&&ch<='Z')
printf("%c",ch+32);
elseprintf("inputerror!
");
return0;
}(测试通过)
3.输入一个大写字母,输出字母表中它前面的字母和后面的字母。
如果输入的字母为A或乙则分别输出提示信息“没有前面的字母”或“没有后面的字母”。
(上机指导P1012(3))
#include
intmain()
{
charc;
printf("请输入一个大写字母:
");
scanf("%c",&c);
if(c>'A'&&c<'Z')
printf("前一个字母是:
%c,后一个字母是:
%c",c-1,c+1);
elseif(c=='A')
printf("A的前面没有字母,A的后一个字母是%c",c+1);
elseif(c=='Z')
printf("Z的后面没有字母,Z的前一个字母是%c",c-1);
else
printf("输入有误请重新输入");
return0;
}(测试通过)
4.编写程序,输入一个整数,判断它能否被3、5、7整除,并根据情况输出下
列信息:
(上机指导P1022(6))
(1)能同时被3、5、7整除。
(2)能同时被3、5、7中的两个数整除,并输出这两个数。
(3)只能被3、5、7中的一个数整除,输出该数。
(4)不能被3、5、7中的任何一个数整除。
#include
intmain()
{
intm;
printf("pleaseinput:
");
scanf("%d",&m);
if((m%3==0)&&(m%5==0)&&(m%7==0))printf("能同时被3,5,7整除");
elseif((m%3==0)&&(m%5==0)&&(m%7!
=0))
printf("能被3和5整除,");
elseif((m%3==0)&&(m%7==0)&&(m%5!
=0))
printf("能被3和7整除,");
elseif((m%7==0)&&(m%5==0)&&(m%3!
=0))
printf("能被7和5整除,");
elseif((m%7==0)&&(m%5!
=0)&&(m%3!
=0))
printf("能被7整除,");
elseif((m%7!
=0)&&(m%5==0)&&(m%3!
=0))
printf("能被5整除,");
elseif((m%7!
=0)&&(m%5!
=0)&&(m%3==0))
printf("能被3整除,");
else
printf("不能被3,5,7任一个整除");
return0;
}(测试通过)
5.已知正整数A>B>C且A+B+CV100,求满足2+4=4共有多少组,并输
A2B2C2
出满足条件的组合。
(上机指导P1062(3))
#include
intmain()
{
inta,b,c,cout=0;
for(c=1;c<100;c++)
for(b=c+1;b<100;b++)for(a=b+1;a<100;a++)
if(a+b+c>100)break;
elseif(1.0/(a*a)+1.0/(b*b)==1.0/(c*c))
{
printf(”A=%dB=%dC=%d\n",a,b,c);
cout++;
}
printf("%d\n",cout);
return0;
}(测试通过)
6.求1+-+-+-+—+—+的值,直到最后一项的值小于10-5。
(上机指
247111622
导P1062(4))
#include
intmain()
{
inti,a=1;
doubleb=0,s=0;
for(i=1;b<0.00001;i++){
a=i+a;
b=1.0/a;
s=s+b;
}
printf("%f",s);
return0;
}(测试通过)
7.用迭代法求某数a的平方根,已知求平方根的迭代公式为:
Xn=」(Xn-1+』)o
2Xn-1
取a为迭代初值,迭代的结束条件取人-x甘£10'5o(课本例6-6)
2
8.分别输出100以内(不包括100)所有偶数的和与所有奇数的和。
(课本例
6-8
9.利用嵌套循环输出以下图形(行与行之间无空行,列与列之间无空列):
(课
本例6-9)
#
##
###
####
10.使用循环找到并输出100以内的所有素数。
(课本例6-11)
11.利用循环找出并输出所有的“水仙花数”。
“水仙花数”是一个三位数,其
各位数字的立方和等于该数本身。
如153=13+53+33,所以153是“水仙花
数”。
(课本例6-19)
12.
输出斐波那契数列的前40项。
斐波那契数列是个整数数列,其定义为:
13.输出100以内所有的“同构数”。
所谓“同构数”一个正整数,它出现在其平方数的右边。
例如:
5是25右边的数,25是625右边的数,5和25都是同构数。
(做过的习题)
#include
intmain()
{
inti;for(i=1;i<=100;i++)
if(i*i%10==i||i*i%100==i)printf("%d\n",i);
return0;
}(测试通过)
14.指定一个正整数n,并输入n个整数,用冒泡法将它们由小到大顺序排列并输出。
(课本例7-4)
15.利用循环打印下列九九乘法表:
(习题)
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81#include
intmain()
{
inti,j,k;
printf("\n\n九九乘法表:
\n\n\n");
for(i=1;i<=9;i++){
for(j=1;j<=i;j++){
k=i*j;
printf("%d*%d=%-3d",j,i,k);
}printf("\n");
}
return0;
}
16.利用循环打印以下杨辉三角(要求打印7行):
(课本P983)
1
1
1
1
2
1
1
3
3
1
1
4
6
41
1
5
10
1051
1
6
15201561
#include
#defineM7
intmain()
{
inta[M][M],i,j;
for(i=0;ifor(j=0;j<=i;j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
printf("%5d",a[i][j]);
if(i==j)printf("\n");
}
return0;
}
17.利用循环输出下列图形(无空行和空列):
(6-9变形)
*****
*******
#includeintmain(){inti,j,k;
for(i=1;i<=4;i++){
for(j=1;j<=8-i;j++)printf("");for(j=1;j<=2*i-1;j++)
printf("*");printf("\n”);
}return0;
}(测试通过)
18.不使用strcat函数,将两个字符串连接起来。
(课本例7-13)
19.编写函数,求1+1+1+1++1的值。
n的值由键盘获得。
(课本例8-6)
234n
20.编写函数intfun(charstr[])并在主函数中调用它。
此函数的功能是
判别字符串str是否为“回文”,若是,返回1,否则返回0(回文是指正反序相同的字符串,如“13531”、“madam”是回文,“1353”、“mrs”不是回文)。
(课本例8-9)
21.用递归方法计算n!
。
(课本例8-13)
22.用静态局部变量法计算n!
。
#include
intmain()
{
inti;
longn,s;
scanf("%d",&n);
for(i=s=1;i<=n;i++)
s=s*i;
printf("n!
=%ld\n",s);
return0;
}(测试通过,不过我不会用静态局部变量法,就只用了个循环)
23.编写函数,求
Rs=s1+s2+s3+s4,其中:
(课本例8-22)
…11
1
s1=1+—+—+
+-
23
50
o11
1
s2=1+—i—+
+-
23
100
11
s3=1+—+—+
1+—
23
150
…11
1+—
23
200
25.编写函数,求出n个a之积。
调用该函数,输入两个正整数n和a,求
a+aa+aaa+A+aa$^a之和。
(上机指导P1182
(2))
#includeintfun(inta,intn)inti,sum1=0,sum2=0;for(i=0;isum仁sum1*10+a;sum2+=sum1;
}
returnsum2;
}
intmain()
{
inta,n;
printf("Entertheaandn:
”);scanf("%d%d",&a,&n);
printf("result:
%d",fun(a,n));return0;
26.编写程序,使用字符指针将字符数组s1中的字符串拷贝到字符数组s2中去。
(课本例9-5)
27.使用“指向函数的指针”编写函数,求多项式x4+x-1当x=1.5,2.5,3.5,4.5
时的值。
(课本例9-16)
28.编写函数,将直角坐标(x,y)转换为极坐标(r,q)。
转换公式为:
(课本例
9-29)
29.编写函数,使用指针参数将字符串ch2复制到字符串ch1的末尾,实现ch1与ch2的连接。
(课本例9-32
30.利用指针编写程序,将一个一维数组a[10]中的最大元素和首元素换位,最
小元素和末元素换位。
数组元素由键盘获得。
(上机指导P1212(4))
#include"stdio.h"
voidmain()
{
intmax,min,*p,a[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);
p=a;
max=a[0];
for(i=1;i<10;i++,p++)if(max<*p)max=*p;
for(i=1;i<10;i++)
while(a[i]==max)
a[i]=a[O];
a[O]=max;
p=a;
min=a[9];
for(i=1;i<10;i++,p++)
if(min>*p)
min=*p;
for(i=1;i<10;i++)
while(a[i]==min)
a[i]=a[9];
a[9]=min;
for(i=0;i<10;i++)
printf("%d",a[i]);
}(测试通过)
31.试编程序,输入整数a和b,若a2+b2大于100,则输出a2b2百位以上(包括百位)的数字,否则输出两数之和。
#include
intmain()
{
inta,b;
longs;
printf("请输入整数a,b:
");
scanf("%d%d",&a,&b);
s=a*a+b*b;
if(s>100)
printf("%d",s/100);
else
printf("%d",a+b);
return0;
}(测试通过)
32.试编程序,求一个整数任意次方的最后三位数。
即求xy的最后三位数,要
求x,y从键盘输入,使用循环实现,不能使用数学库函数。
#include
voidmain()
{
inti,x,a;
longr=1;
printf("输入1个整数:
");
scanf("%d",&x);
printf("输入乘方数:
");
scanf("%d",&a);
for(i=1;i<=a;i++)
r=r*x%1000;
printf("%d的%d次方的后3位是%03ld",x,a,r);
}(测试通过)
33.求99的个、十、百位上数字之和。
#include
intmain()
{
inti,m=1,sum=0;for(i=1;i<9;i++){m=m*9%1000;
}
while(m)
{sum+=m%10;m/=10;
}printf("%d\n",sum);
return0;
}(测试通过)
34.输出100以内每位数的积大于每位数的和的所有正整数。
#include"stdio.h"voidmain(){intn,k=1,s=0,m;
for(n=1;n<=100;n++){
k=1;s=0;
m=n;
while(m>=1){k*=m%10;s+=m%10;m=m/10;
}
if(k>s)printf("%d\n",n);
}}(测试通过)
35.通过循环按行优先顺序为一个5X5的二维数组a赋1到25的自然数,然
后输出该数组的左下半三角。
(习题)
#include
intmain(void)
{
inta[5][5],k=1,i,j;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
{
a[i][j]=k;
k++;
}
}for(i=0;i<5;i++)
{for(j=0;j<=i;j++)printf("%d",a[i][j]);
printf("\n");
}
return0;
}(测试通过)
36.从键盘输入若干整数(个数小于30),其值在0至4的范围内,用-1作为
输入结束的标志。
统计每个整数的个数。
#include
intmain()
{
inta=0,b=0,c=0,d=0,e=0,num,i;
printf("从键盘输入若干整数:
\n");
for(i=1;i<=30;i++)
{
scanf("%d",&num);
if(num==(-1))break;
switch(num)
{
case0:
a++;break;
case1:
b++;break;
case2:
c++;break;
case3:
d++;break;
case4:
e++;break;
}
}
printf("0的个数为:
%d\n1的个数为:
%d\n2的个数为:
%d\n",a,b,c);
printf("3的个数为:
%d\n4的个数为:
%d\n",d,e);
return0;
}(测试通过)
37.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数,然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。
#include
intmain()
{
inta[30],b[5],i=0,j;
while(i<30)
a[i++]=2*(i+1);
i=0;
while(i<5)
{
j=i*6;b[i]=a[j]+a[j+1]+a[j+2]+a[j+3]+a[j+4]+a[j+5];b[i]/=6;
i++;
}
i=0;
while(i<5)
printf("%d\n",b[i++]);
return0;
}(测试通过)
38.数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b,
并按每行3个元素的格式输出数组b。
#include
intmain()
{
inti,a[10];
intb[10];
printf("请输入10个整数,其中前9个数不能为0:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
b[i]=a[i]/a[i-1];
for(i=1;i<10;i++)
{
printf("%d\t",b[i]);
if(i%3==0)
printf("\n");}
return0;
}(测试通过)
39.编写函数sstrcmp,实现两个字符串的比较(即实现与strcmp函数功能相同的函数)。
若两个字符串相等,返回值为0;若不等,则返回两个对应自负的ASCII码值差值。
若前者大,应返回正值,若后者大,应返回负值。
#include
#defineN30
voidmain()
{
chars1[N],s2[N];
inti,j=0;
puts("输入字符串s1:
");
gets(s1);
puts("输入字符串s2:
");
gets(s2);
for(i=0;(s1[i]!
='\0')&&(s2[i]!
='\0');i++)
j=s1[i]-s2[i];
if((s1[i]=='\0')&&(s2[i]=='\0'))
printf("%d\n",j);
else
printf("%d\n",s1[i]-s2[i]);
}(测试通过)