C语言老师所给习题解答.docx

上传人:b****8 文档编号:24029579 上传时间:2023-05-23 格式:DOCX 页数:67 大小:83.84KB
下载 相关 举报
C语言老师所给习题解答.docx_第1页
第1页 / 共67页
C语言老师所给习题解答.docx_第2页
第2页 / 共67页
C语言老师所给习题解答.docx_第3页
第3页 / 共67页
C语言老师所给习题解答.docx_第4页
第4页 / 共67页
C语言老师所给习题解答.docx_第5页
第5页 / 共67页
点击查看更多>>
下载资源
资源描述

C语言老师所给习题解答.docx

《C语言老师所给习题解答.docx》由会员分享,可在线阅读,更多相关《C语言老师所给习题解答.docx(67页珍藏版)》请在冰豆网上搜索。

C语言老师所给习题解答.docx

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;i

temp=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;i

Scanf(“%d”,&a[i]);

For(i=0;i

For(j=0;j

If(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;j

Printf(“%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;i

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("%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;i

if(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;

展开阅读全文
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1