C语言老师所给习题解答.docx
《C语言老师所给习题解答.docx》由会员分享,可在线阅读,更多相关《C语言老师所给习题解答.docx(67页珍藏版)》请在冰豆网上搜索。
![C语言老师所给习题解答.docx](https://file1.bdocx.com/fileroot1/2023-5/23/10ec1e48-577e-4d87-a133-428d801cd43b/10ec1e48-577e-4d87-a133-428d801cd43b1.gif)
C语言老师所给习题解答
(本内容由洪文杰同学提供,在此表示感谢!
)
C语言上机题汇总
1.输入三角形两个边长及其夹角(角度值),求第三边边长和三角型面积。
#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;
}
扩展:
编写已知三角形三边求面积的函数。
#include
#include
intmain()
{
floata,b,c,s,area;
printf("依次输入a,b,c(空格识别一个数):
");
scanf("%f%f%f,",&a,&b,&c);
if(a+b>c&&a-b{p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("三角形面积是:
%f\n",s);
}
elseprintf("这不是三角形\n");
}
2输入一个字符,若是小写字母,则转换成大写字母输出;若是大写字母,则转换成小写字母输出。
#include
main()
{
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!
");
}
3输入一个大写字母,输出字母表中它前面的字母和后面的字母。
如果输入的字母为A或Z,则分别输出提示信息“没有前面的字母”或“没有后面的字母”。
#include
voidmain()
{
charch,c;
boolflag=1;
while(flag)
{
printf("请输入一个大写字母:
\n");
scanf("%c%c",&ch,&c);
if(ch>'A'&&ch<'Z')printf("%c,%c\n",ch-1,ch+1);
elseif(ch=='A')printf("%c\n没有前面的字母\n",ch+1);
elseif(ch=='Z')printf("%c\n没有后面的字母\n",ch-1);
elseif(ch=='q')flag=0;
else
printf("----输入的为非法字符!
\n");
printf("\n");
}
}
4编写程序,输入一个整数,判断它能否被3、5、7整除,并根据情况输出下列信息:
能同时被3、5、7整除。
能同时被3、5、7中的两个数整除,并输出这两个数。
只能被3、5、7中的一个数整除,输出该数。
不能被3、5、7中的任何一个数整除。
范例1
#include
intmain()
{
intm;
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;
}
范例2
#include"stdio.h"
main()
{
intx,y,z;
scanf("d%",x);
if(x%3==0&&x%5==0&&x%7==0)printf("能同时被3个数整除");
elseif((x%3==0&&x%5==0&&x%7!
=0)printf("3,5");
elseif(x%7==0&&x%5==0&&x%3!
=0)printf("5,7");
elseif(x%7==0&&x%5==0&&x%5!
=0))printf("3,7");
elseif(x%3==0&&x%5!
=0&&x%7!
=0)printf("3");
elseif(x%3!
=0&&x%5==0&&x%7!
=0)printf("5")
elseif(x%3!
=0&&x%5!
=0&&x%7==0)printf("7");
elseif(x%3!
=0&&x%5!
=0&&x%7!
=0)printf("都不能被整除")
}
5已知正整数A>B>C且A+B+C<100,求满足
共有多少组,并输出满足条件的组合。
#include"stdio.h"
main()
{inta,b,c,cout=0;
for(c=1;c<100;c++)
for(b=c+1;b<100;b++)
if(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);
}
6求
的值,直到最后一项的值小于
。
扩展1:
求1-1/2+1/4-1/7.....的值,直到最后一项的值小于
。
#definePRECISION0.00001
intmain()
{
floatlastValue=0.0f,totalValue=0.0f;
intsymbol=1,i=1,j=1;
do{
lastValue=((float)symbol)/i;
i+=j;
j++;
symbol*=-1;
totalValue+=lastValue;
}
while(lastValue>PRECISION||-lastValue>PRECISION);
printf("sis:
%f",totalValue);
getch();
}
扩展2:
输入一个数X,计算并输出下式S=X+X^2/2!
+X^3/3!
+X^4/4!
........的值,直到最后一项的绝对值小于10的-5次方(保留两位小数)
#include
#include//fabs()
intmain()
{doublex,s,a;
inti;
scanf("%lf",&x);
a=x;
s=a;
for(i=1;;i+=2)
{
a*=x*x*(-1)/((i+1)*(i+2));
if(fabs(a)<1e-7)break;
s+=a;
}
printf("%.8f\n",s);
return0;
}
7用迭代法求某数
的平方根,已知求平方根的迭代公式为:
。
取
为迭代初值,迭代的结束条件取
。
#include"stdio.h"
#include"math.h"
main()
{floata,x0,x1;
printf("\nInputa:
");scanf("%f",&a);
if(a<0)
printf("Error!
\n");
else
{x0=a/2;
x1=(x0+a/x0)/2;
do
{x0=x1;
x1=(x0+a/x0)/2;
}
while(fabs(x0-x1)>1e-6);
printf("sqrt(%f)=%f\n",a,x1);
}
}
8分别输出100以内(不包括100)所有偶数的和与所有奇数的和。
#include
main()
{
intx=1,sj=0,so=0;
while(x<=100)
{
if(x%2==1)
sj+=x;
if(x%2!
=1)
so+=x;
x++;
}
printf("sj=%d\n",sj);
printf("so=%d",so);
}
9利用嵌套循环输出以下图形(行与行之间无空行,列与列之间无空列):
#
##
###
####
#include
intmain()
{
inti,j,k;
for(j=1;j<=5-I;j++)
printf(“”);
for(k=I;k>=1;k--)
printf(“#”);
printf(“\n”);
}
Return0;
}
10使用循环找到并输出100以内的所有素数。
inti,j,n=100,m=1,temp=1;
for(i=2;itemp=1;
for(j=2;j
if(i%j==0){
temp=0;
break;
}
}
if(temp==1){
printf("%d",i);
if(m>=5){
printf("\n");
m=1;
}
m++;
}
}
11利用循环找出并输出所有的“水仙花数”。
“水仙花数”是一个三位数,其各位数字的立方和等于该数本身。
如
,所以153是“水仙花数”。
C语言的"水仙花数"代码
main(){
inti,j,k;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++)
if((i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k)))
printf("%d%d%d",i,j,k);
getch();
}
C语言的"水仙花数"代码
main(){
intge,shi,bai,number;
for(number=100;number<1000;number++){
bai=number/100;
shi=(number%100)/10;
ge=number%10;
if(number==bai*bai*bai+shi*shi*shi+ge*ge*ge)
printf("\nnumber=%d\n",number);}
getch();
}
范例三main(){
inti,x,y,z;
for(i=100;i<=999;i++){
x=i%10;/*个位*/
y=(i/10)%10;/*十位*/
z=(i/100)%10;/*百位*/
if(x*x*x+y*y*y+z*z*z==i)printf("%d\n",i);}
}
12输出斐波那契数列的前40项。
斐波那契数列是个整数数列,其定义为:
范例一:
#include
intfun(intn)
{
if(n==1||n==2)return1;
elsereturnfun(n-1)+fun(n-2);
}
voidmain()
{
inti;
for(i=1;i<=40;i++){
printf("%d\n",fun(i));
}
}
范例二:
main()
{
longfib[40]={1,1};
inti;
for(i=2;i<40;i++)
{
fib[i]=fib[i-1]+fib[i-2];
}
for(i=0;i<40;i++)
{
printf("F%d==%d\n",i,fib[i]);
}
return0;
}
13输出100以内所有的“同构数”。
所谓“同构数”一个正整数,它出现在其平方数的右边。
例如:
5是25右边的数,25是625右边的数,5和25都是同构数。
#include
main()
{
inti;
for(i=1;i<=100;i++)
if(i*i%10==i)
printf("%d",i);
}
14指定一个正整数n,并输入n个整数,用冒泡法将它们由小到大顺序排列并输出。
#include
intmain
{
IntI,j,n,temp,a[10];
Scanf(“%d”,&n);
Printf(“theoriginalnumbers:
\n”);
For(i=0;iScanf(“%d”,&a[i]);
For(i=0;iFor(j=0;jIf(a[j-1]>a[j])
{
Temp=a[j-1]>a[j];a[j-1]=a[j];a[j]=temp
}
Printf(“\nthesortednumberis:
\n”);
For(i=0;jPrintf(“%d”,a[i]);
Return0;
}
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;
intj;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%d\n",j,i,i*j);
}
return0;
}
16利用循环打印以下杨辉三角(要求打印7行):
1
11
121
1331
14641
15101051
1615201561
C语言双重循环输出杨辉三角前10行:
直角三角形杨辉三角:
#include
#defineM10
voidmain()
{
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");
}
}
金字塔型杨辉三角:
#include
voidmain()
{
inta[10][10],i,j;
for(i=0;i<10;i++)
{
for(j=10;j>=i;j--)
printf("%2c",'');/*两个空格*/
for(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("%3d",a[i][j]);/*%3d后一个空格*/
if(i==j)
printf("\n");
}
}
}
17利用循环输出下列图形(无空行和空列):
*
***
*****
*******
#include
Intmain()
{
IntI,j,k;
For(i=1;i<=4;i++)
Printf(“”);
For(k=1;k>=1;k--)
Printf(““#””);
Printf(“\n”)
}
Return0;
}
18不使用strcat函数,将两个字符串连接起来。
#include
inta[20],b[20],i=0,j=0;
while(a[i]!
='\0')
{
i++;
}
while(b[i]!
='\0')
{
a[i++]=b[i++];
}
a[i]='\0';
printf("%s",a);
范例二:
#include
#include
#include
intmain()
{
charstr1[]="123asd456";
charstr2[]="abcdef";
intlen;
len=strlen(str1)+strlen(str2);
char*str3=(char*)malloc((len+1)*sizeof(char));
inti,j=0,k=0;
for(i=0;i<=len;i++)
{
if(str1[j])
str3[i]=str1[j++];
elseif(str2[k])
str3[i]=str2[k++];
else
str3[i]='\0';
}
printf("%s\n",str3);
return0;
}
范例二:
#include
main()
{
chara[100],b[100],*p,*q;
scanf("%s%s",a,b);
p=a;
q=b;
while(*p)
++p;
while(*q)
*p++=*q++;
*p='\0';
printf("%s\n",a);
}
19编写函数,求
的值。
n的值由键盘获得。
#include
main()
{inti=1,n;doublesum=0;
scanf("%ld",&n);
while(i<=n){i;sum=sum+1/i;i++;}
printf("%f\n",sum);
}
20编写函数intfun(charstr[])并在主函数中调用它。
此函数的功能是判别字符串str是否为“回文”,若是,返回1,否则返回0(回文是指正反序相同的字符串,如“13531”、“madam”是回文,“1353”、“mrs”不是回文)。
#include
#include
main()
{ints(chara[20]);
chara[20];
intt;
gets(a);
t=s(a);
if(t==1)
printf("yes");
if(t==0)
printf("no");
}
ints(chara[20])
{
intm,n,i;
n=strlen(a);
for(i=0;iif(a[i]!
=a[n-i-1])
return0;
return1;
}
21用递归方法计算
。
扩展:
用递归方式计算a!
+b!
+c!
并要求输出结果
#include
intfac(intn)//如果n大于十二,改用double或者longlong,输出也相应改变
{
if(n==0)return1;
elsereturnfac(n-1)*n;
}
voidmain()
{
inta,b,c;
intsum;
printf("请分别输入a,b,c,并用逗号隔开:
\n");
scanf("%d%d%d",&a,&b,&c);
sum=fac(a)+fac(b)+fac(c);
printf("%d\n",sum);
}
22用静态局部变量法计算
。
扩展:
编写求n的阶乘的函数(用到静态局部变量),调用此函数求多项式之和:
1/1!
+1/2!
+1/3!
+…1/n!
,直到最后两项之差小于10的负5次方。
#include
doublejiecheng(intn)
{
staticdoublenum=1;
num*=n;
returnnum;
}
voidmain()
{
intn;
doublesum=0,temp,item=1;
for(n=2;;n++)
{
sum+=item;
temp=1.0/jiecheng(n);
if(item-temp<1e-5)break;
item=temp;
}
printf("sum=%lf\n",sum);
}
23编写函数,求
,其中:
#include
doublefun(intn)
{
inti;
doublesum=0.0;
for(i=1;i<=n;i++)
{
sum+=1.0/i;
}
returnsum;
main()
{
intn;
doubles;
printf("\nInputn1\n2\n3\n4:
");
scanf("%d%d%d%d",&n1&n2&n3&n4);
s=fun(n1)+fun(n2)+fun(n3)+fun(n4);
printf("%d",s);
}
扩展范例:
请编写函数fun,其功能是:
计算并输出下列多项式值:
S=1+
+…+
注意:
n的值要求大于1但不大于100。
#include
doublefun(intn)
{
inti,j,k;
doublesum=0.0,t;
for(i=1;i<=n;i++)
{
t=0.0;
for(j=1;j<=i;j++)
t+=j;
sum+=1.0/t;
}
returnsum;