1、C语言老师所给习题解答(本内容由洪文杰同学提供,在此表示感谢!) C语言上机题汇总1.输入三角形两个边长及其夹角(角度值),求第三边边长和三角型面积。#include#includefloat pi=3.141592;int main() float a,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.2fn,c,s); return 0;扩展:编写已知三角形三边求面积的函数。#include#includeint ma
2、in() float a,b,c,s,area; printf(依次输入a,b,c(空格识别一个数):); scanf(%f%f%f,&a,&b,&c); if(a+bc&a-bc)p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c);printf(三角形面积是:%fn,s);else printf(这不是三角形n);2输入一个字符,若是小写字母,则转换成大写字母输出;若是大写字母,则转换成小写字母输出。#include main()char ch;printf(input:);scanf(%c,&ch);if(ch=a&ch=A&ch=Z) printf(%c,ch+
3、32);else printf(input error!);3输入一个大写字母,输出字母表中它前面的字母和后面的字母。如果输入的字母为A或Z,则分别输出提示信息“没有前面的字母”或“没有后面的字母”。#includevoid main() char ch, c; bool flag= 1;while(flag) printf(请输入一个大写字母:n); scanf(%c%c, &ch, &c);if(ch A & ch Z) printf(%c, %cn, ch-1, ch+1); else if(ch = A) printf(%cn 没有前面的字母n, ch+1); else if(ch =
4、 Z) printf(%cn 没有后面的字母n, ch-1); else if(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 int main() int m; scanf(%d,&m); if (m/3=0)&(m/5=0)&(m/7=0) printf(能同时被3,5,7整除);
5、 else if( (m/3=0)&(m/5=0)&(m/7!=0) printf(能被3和5整除,); else if (m/3=0)&(m/7=0)&(m/5!=0) printf(能被3和7整除,); else if (m/7=0)&(m/5=0)&(m/3!=0) printf(能被7和5整除,); else if (m/7=0)&(m/5!=0)&(m/3!=0) printf(能被7整除,); else if (m/7!=0)&(m/5=0)&(m/3!=0) printf(能被5整除,); else if (m/7!=0)&(m/5!=0)&(m/3=0) printf(能被3整
6、除,); else printf(不能被3,5,7任一个整除); return 0; 范例2#include stdio.hmain()int x,y,z;scanf(d%,x);if (x%3=0 &x%5=0&x%7=0)printf(能同时被3个数整除);else if( (x%3=0&x%5=0&x%7!=0)printf(3,5);else if(x%7=0&x%5=0&x%3!=0) printf(5,7);else if(x%7=0&x%5=0&x%5!=0)printf(3,7);else if(x%3=0&x%5!=0&x%7!=0)printf(3);else if(x%3
7、!=0&x%5=0&x%7!=0)printf(5)else if(x%3!=0&x%5!=0&x%7=0)printf(7);else if (x%3!=0&x%5!=0&x%7!=0)printf(都不能被整除)5已知正整数ABC且A+B+C100,求满足共有多少组,并输出满足条件的组合。#include stdio.hmain()int a,b,c,cout=0; for(c=1;c100;c+) for(b=c+1;b PRECISION | -lastValue PRECISION); printf(s is: %f,totalValue );getch();扩展2:输入一个数X,计
8、算并输出下式S=X+X2/2!+X3/3!+X4/4!.的值,直到最后一项的绝对值小于10的-5次方(保留两位小数)#include#include/fabs()int main() double x,s,a; int i; 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(%.8fn,s); return 0; 7用迭代法求某数的平方根,已知求平方根的迭代公式为:。取为迭代初值,迭代的结束条件取。#includestdio.h#includem
9、ath.hmain()float a,x0,x1; printf(nInput a:);scanf(%f,&a); if(a1e-6); printf(sqrt(%f)=%fn,a,x1); 8分别输出100以内(不包括100)所有偶数的和与所有奇数的和。#includemain() int x=1,sj=0,so=0; while(x=100) if(x%2=1) sj+=x; if(x%2!=1) so+=x; x+; printf(sj=%dn,sj); printf(so=%d,so);9利用嵌套循环输出以下图形(行与行之间无空行,列与列之间无空列): # # #includeint
10、main()int i,j,k;for(j=1;j=1;k-) printf(“#”);printf(“n”);Return 0;10使用循环找到并输出100以内的所有素数。int i, j, n=100, m=1, temp=1;for(i=2;in;i+) temp = 1; for(j=2;j=5) printf(n); m = 1; m+; 11利用循环找出并输出所有的“水仙花数”。“水仙花数”是一个三位数,其各位数字的立方和等于该数本身。如,所以153是“水仙花数”。C语言的水仙花数代码main() int i,j,k; for(i=1;i10;i+) for(j=0;j10;j+)
11、 for(k=0;k10;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() int ge,shi,bai,number; for(number=100;number1000;number+) bai=number/100; shi=(number%100)/10; ge=number%10; if(number=bai*bai*bai+shi*shi*shi+ge*ge*ge)printf(nnumber=%dn,number); getch(); 范例三m
12、ain()int i,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(%dn,i);12输出斐波那契数列的前40项。斐波那契数列是个整数数列,其定义为:范例一:#includeint fun(int n) if(n = 1 | n = 2) return 1; else return fun(n-1) + fun(n-2);void main() int i; for(i = 1; i = 40; i+) printf
13、(%dn, fun(i); 范例二:main() long fib40 = 1,1; int i; for(i=2;i40;i+) fibi = fibi-1+fibi-2; for(i=0;i40;i+) printf(F%d=%dn, i, fibi); return 0;13输出100以内所有的“同构数”。所谓“同构数”一个正整数,它出现在其平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。#includemain()int i;for(i=1;i=100;i+)if(i*i%10=i)printf(%d,i);14指定一个正整数n,并输入n个整数,用冒泡法
14、将它们由小到大顺序排列并输出。#includeint mainInt I,j,n,temp,a10;Scanf(“%d”,&n);Printf(“ the original numbers:n”);For(i=0;in;i+) Scanf(“%d”,&ai);For(i=0;in-1;i+) For(j=0;jaj) Temp=aj-1aj;aj-1=aj;aj=tempPrintf(“n the sorted number is :n” );For(i=0;jn;i+)Printf(“%d”,ai);Return 0;15利用循环打印下列九九乘法表:1*1= 12*1= 2 2*2= 43*
15、1= 3 3*2= 6 3*3= 94*1= 4 4*2= 8 4*3=12 4*4=165*1= 5 5*2=10 5*3=15 5*4=20 5*5=256*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81#includeint mai
16、n() int i; int j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%d*%d=%dn,j,i,i*j); return 0;16利用循环打印以下杨辉三角(要求打印7行): 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 11 6 15 20 15 6 1C语言双重循环输出杨辉三角前10行: 直角三角形杨辉三角: #include #define M 10 void main() int aMM, i , j ; for(i=0;iM;i+) for(j=0;j=i;j+) if(i=j|j=0) aij=1;
17、else aij=ai-1j+ai-1j-1; printf(%5d,aij); if(i=j)printf(n); 金字塔型杨辉三角: #include void main() int a1010,i,j; for(i=0;i=i;j-) printf(%2c, );/*两个空格*/ for(j=0;j=i;j+) if(i=j|j=0) aij=1; else aij=ai-1j+ai-1j-1; printf(%3d ,aij); /*%3d后一个空格*/ if(i=j) printf(n); 17利用循环输出下列图形(无空行和空列):*#includeInt main()Int I,j
18、,k;For(i=1;i=1;k-)Printf(“ “#”);Printf(“n”)Return 0;18不使用strcat函数,将两个字符串连接起来。#includeint a20,b20,i=0,j=0;while(ai!=0) i+;while(bi!=0) ai+=bi+;ai=0;printf(%s,a);范例二:#include #include #include int main() char str1 = 123asd456; char str2 = abcdef; int len;len = strlen(str1) + strlen(str2); char *str3 =
19、 (char *)malloc(len+1) * sizeof(char); int i, j = 0, k = 0; for(i = 0; i = len; i+) if (str1j) str3i = str1j+; else if (str2k) str3i = str2k+; else str3i = 0; printf(%sn, str3); return 0;范例二:#includemain() char a100,b100,*p,*q; scanf(%s%s,a,b); p=a; q=b; while(*p) +p; while(*q) *p+=*q+; *p=0; printf
20、(%sn,a);19编写函数,求的值。n的值由键盘获得。#includemain()int i=1,n;double sum=0;scanf(%ld,&n);while(i=n) i;sum=sum+1/i;i+;printf(%fn,sum);20编写函数int fun(char str)并在主函数中调用它。此函数的功能是判别字符串str是否为“回文”,若是,返回1,否则返回0(回文是指正反序相同的字符串,如“13531”、“madam”是回文,“1353”、“mrs”不是回文)。#include #include main()int s(char a20);char a20;int t;
21、gets(a); t=s(a); if(t=1) printf(yes); if(t=0) printf(no); int s(char a20) int m,n,i; n=strlen(a); for (i=0;in/2;i+) if(ai!=an-i-1) return 0; return 1; 21用递归方法计算。扩展:用递归方式计算a!+b!+c!,并要求输出结果#include int fac(int n)/如果n大于十二,改用double或者long long,输出也相应改变 if(n=0) return 1; else return fac(n-1)*n;void main()
22、int a,b,c; int sum; printf(请分别输入a,b,c,并用逗号隔开:n); scanf(%d%d%d,&a,&b,&c); sum=fac(a)+fac(b)+fac(c); printf(%dn,sum);22用静态局部变量法计算。扩展:编写求n的阶乘的函数(用到静态局部变量),调用此函数求多项式之和:1/1!+1/2!+1/3!+1/n!,直到最后两项之差小于10的负5次方。#include double jiecheng(int n) static double num=1; num*=n; return num;void main() int n; double
23、sum=0,temp,item=1; for (n=2;n+) sum+=item; temp=1.0/jiecheng(n); if (item-temp1e-5)break; item=temp; printf(sum=%lfn,sum);23编写函数,求,其中:#include double fun (int n)int i;double sum=0.0;for(i=1;i =n;i+)sum+=1.0/i;return sum;main()int n; double s;printf(n Input n1n2n3n4: ); scanf(%d%d %d %d ,&n1&n2&n 3&n4); s=fun(n1)+fun(n2)+fun(n3)+ fun(n4);printf(%d,s); 扩展范例:请编写函数fun,其功能是:计算并输出下列多项式值:S=1+注意:n的值要求大于1但不大于100。#include double fun (int n)int i, j,k;double sum=0.0, t;for(i=1;i =n;i+) t=0.0; for(j=1;j=i;j+) t+=j;sum+=1.0/t;return sum;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1