北理c语言上机答案(全)_第1页
北理c语言上机答案(全)_第2页
北理c语言上机答案(全)_第3页
北理c语言上机答案(全)_第4页
北理c语言上机答案(全)_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 Hello world让我们用C语言向世界问好。最早的程序基本是这个样子的:程序一:#include void main() printf(Hello world.n);程序二:#include int main() printf(Hello world.n); return 0;上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。 输入:无输出:Hello world.程序实例1:#include void main() printf(Hello world.n); 结果:Hello world.程序实例2:#include int main() printf(Hello world.n); return 0; 结果:Hello world.1. Welcome to Beijing.让我们来练习如何显示多行文字。输入:无输出:就是下面的那段文字。程序实例1:#includestdio.h int main() printf(Welcomen); printf(ton); printf(Beijing.n); return 0; 结果:WelcometoBeijing.程序实例2:#include void main() printf(WelcomentonBeijing.n); 结果:WelcometoBeijing.1 练习最简单的printf和scanfprintf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。输入:整型变量x的值。输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真看看-1的八进制和十六进制输出,请想想是为什么。程序实例1:#includestdio.h main() int x; scanf(%d,&x); printf(x=%d,x=%o,x=%xn,x,x,x); 结果:输入:-1输出: x=-1,x=37777777777,x=ffffffff程序实例2:#include stdio.h void main() long x; scanf(%d,&x); printf(x=%d,x=%o,x=%0xn,x,x,x); 结果:输入:292输出:x=292,x=444,x=1241 练习两个整数之间的运算背景:基本练习。输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444输出:分别输出进行+、-、*、/、*之后的运行结果。程序实例1:#include void main() int a,b,c,d,e,f,g; scanf(%d %d,&a,&b); printf(%d+%d=%dn,a,b,c=a+b); printf(%d-%d=%dn,a,b,d=a-b); printf(%d*%d=%dn,a,b,e=a*b); printf(%d/%d=%dn,a,b,f=a/b); printf(%d%d=%dn,a,b,g=a%b); 结果:输入:103输出:10+3=1310-3=710*3=3010/3=310%3=1程序实例2:#include void main() int x1,x2,x3,x4,x5,a,b; scanf(%d %d,&a,&b); x1=a+b; x2=a-b; x3=a*b; x4=a/b; x5=a%b; printf(%d+%d=%dn%d-%d=%dn%d*%d=%dn%d/%d=%dn%d%d=%d,a,b,x1,a,b,x2,a,b,x3,a,b,x4,a,b,x5); 结果:输入:123 444输出:123+444=567123-444=-321123*444=54612123/444=0123%444=1231 学习打印你的第一个图形背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。程序如下:#include void main() printf(*n); printf(*n); printf(*n); printf(*n);要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。输入:无。输出:指定图形。程序实例1:#include int main( void ) printf( *n ); printf( *n ); printf( *n ); printf( *n ); return 0; 结果:输入:无输出:*程序实例2:#includestdio.h main() printf( *n); printf( *n); printf( *n); printf(*n); 结果:输入:无输出:*1 温度转换(06秋)背景: 经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。温度转换的公式为:F(C95)32 ;C(F32)59 ;式中F-华氏温度,C-摄氏温度。输入:第一个数据(1 或 2 )确定转换的类型:华氏转摄氏(1);摄氏转华氏(2); 第二个数据是相应需要转换的温度值。 输出:相应的转换后的温度值(保留小数点后 2 位)。程序实例1:#include void main() int a; float x,y; scanf(%d%f,&a,&x); if ( a=1 ) y=(x-32)*5.0/9.0; printf(The Centigrade is %.2fn,y); else if(a=2) y=(x*9.0/5.0)+32; printf(The Fahrenheit is %.2fn,y); 结果:输入:1100输出:TheCentigradeis37.78输入:2-6.67输出:TheFahrenheitis19.99程序实例2:#include void main() float C;int a; scanf(%d %f,&a,&C); switch (a) case 1: printf(The Centigrade is %.2fn,(C-32)*5/9);break; case 2: printf(The Fahrenheit is %.2fn,(C*9/5)+32);break; default: printf(errorn); 结果:输入:10输出:TheCentigradeis-17.78输入:288输出:TheFahrenheitis190.402 计算圆柱的侧面积及体积如果已知圆柱的底面半径 r ,以及高 h ,则可计算出圆柱的侧面积 s=2rh ,体积 v= r 2 h 。其中 =3.1415926 输入:第一行输入圆柱的底面半径 r第二行输入圆柱的高 h 输出:s=,v= 要求 1. 所有变量都定义为双精度类型2. 结果精确到小数点后两位程序实例1:#include #include void main() double r,h,s,v,PAI=3.1415926; scanf(%lfn%lf,&r,&h); s=2*PAI*r*h; v=PAI*r*r*h; printf(s=%.2f,v=%.2fn,s,v); 结果:输入:28输出:s=100.53,v=100.53程序实例2:#includevoid main()double pi=3.1415926; int r,h; scanf(%d,&r); scanf(%d,&h); printf(s=%5.2f,v=%5.2fn,2*pi*r*h,pi*r*r*h); 输入:510输出:s=314.16,v=785.403 计算时钟的夹角背景: 钟面上的时针和分针之间的夹角总是在 之间 ( 包括 和 ) 。举例来说,在十二点的时候两针之间的夹角为 ,而在六点的时候夹角为 ,在三点的时候为 。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。 输入:每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 0, 59 上 ) 。 输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。程序实例1:#include void main() float x,y,z; scanf(%f %f,&x,&y); z=6*y-(30*x+y/2); if (z=-180) z+=360; else if(z=180) z=360-z; else z=z; if (y10) printf(At %.0f:0%.0f the angle is %.1f degrees.,x,y,z); else printf(At %.0f:%.0f the angle is %.1f degrees.,x,y,z); 输入:120输出:At12:00theangleis0.0degrees.程序实例2:#include #include main() int x,y; float z; scanf(%d%d,&x,&y); z=fabs(30*x-(float)y*11/2); z=z180?360-z:z; if(y0。输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateral triangle 等腰三角形:isoceles triangle 不构成三角形:non-triangle 一般三角形:triangle程序实例1:#include void main() int a,b,c; scanf(%d %d %d,&a,&b,&c); if(a+b=c|a+c=b|b+c=a) printf(non-triangle.); else if(a=b&b=c) printf(equilateral triangle.); else if(a=b&b!=c|a=c&c!=b|b=c&c!=a) printf(isoceles triangle.) ; else printf(triangle.); 结果:输入:222输出:equilateraltriangle.程序实例2:#includevoid main() int a,b,c; scanf(%d%d%d,&a,&b,&c); if(a=b&b=c&c=a) printf(equilateral triangle.n); elseif(a+bc&a+cb&b+ca) (a=b|b=c|c=a)?printf(isocelestriangle.n):printf(triangle.n); else printf(non-triangle.n); 结果:输入:131输出:non-triangle.5 求解一元二次方程初中的时候我们就会求解一元二次方程了,下面让我们来教计算机如何求解。输入 a,b,c ,就一元二次方程 ax+bx+c=0 的根。 输入:假设 a,b,c均int。输出:要求输出的根为 double 型,保留 6 位小数。程序实例1:#include stdio.h #include math.h void main() int a,b,c,a2; double x1=0,x2=0,q; scanf(%d%d%d,&a,&b,&c); q=b*b-4*a*c; a2=2*a; if(a=0) if(b=0) printf(Input error!n); else printf(x=%.6fn,-c*1.0/b); else if(q0) printf(x1=%.6fnx2=%.6fn,(-b+sqrt(q)/a2,(-b-sqrt(q)/a2); else if(q=0) printf(x1=x2=%.6fn,-b*1.0/a2); else if(q0) if(b=0) printf(x1=%.6finx2=%.6fin,sqrt(-q)/a2,-sqrt(-q)/a2); else printf(x1=%.6f+%.6finx2=%.6f-%.6fi,-b*1.0/a2,sqrt(-q)/a2,-1.0*b/a2,sqrt(-q)/a2); 结果:输入: 0 0 0输出:Inputerror!输入:2 2 2输出:x1=-0.500000+0.866025ix2=-0.500000-0.866025i程序实例2:#include#include void main() double a,b,c,d; scanf(%lf%lf%lf,&a,&b,&c); d=b*b-4*a*c; if(a=0&b=0) printf(Input error!n); else if(a=0) printf(x=%lfn,c=0?0:-c/b); else if(d=0) printf(x1=x2=%.6lfn,b=0?0:-b/(2*a); else if(d0) printf(x1=%lfnx2=%lfn,(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a); else if(b=0) printf(x1=%lfinx2=-%lfin,sqrt(-d)/(2*a),sqrt(-d)/(2*a); else printf(x1=%lf+%lfinx2=%lf-%lfin,-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(2*a); 结果: 输入:10 0 0输出:x1=x2=0.000000你会输出一行星号吗?(本题不记分噢)我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。输入:N值输出:一行中N个星号。程序实例1:#includevoid main() int n,i;scanf(%d,&n); for(i=1;i=n;i+) printf(*);printf(n); 结果:输入:4输出:*输入:8输出: *6 计算SUM的值已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + . + 1/n输入:n 输出:表达式 sum 的值。结果保留 6 位小数。 程序实例1:#include void main() int n,k; double sum; scanf(%d,&n); sum=1.0; for(k=2;k=n;k+) sum=sum+1.0/k; printf(sum=%.6lfn,sum); 结果:输入:1输出:sum=1.000000程序实例2:#includevoid main() double sum,i; int n; scanf(%d,&n); for(i=1,sum=0;i=n;i+) sum=sum+1/i; printf(sum=%.6lf,sum); 结果:输入: 3输出:sum=1.8333337 贪吃的猴子有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入:天数n输出:第一天的桃子个数程序实例1:#include void main() int n,i,y; scanf( %d,&n ); for( i=n-1, y=1 ; i=1; i-) y = 2*(i+y); if( y=1 )printf( The monkey got %d peach in first day.,y ); if( y!=1 )printf(The monkey got %d peachs in first day.,y); 结果:输入:3输出:Themonkeygot14peachsinfirstday.8 求最后3位数值中学时我们就会求一个数的 n 次方了,但计算机不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出 a 的 n 次方的最后 3 位数就可以了。 输入:和 n 的值。假设 a=150 。 输出:求 a 的 n 次方的最后 3 位数。程序实例1:#includevoid main() int i,x,y,m=1; scanf(%d %d,&x,&y); for(i=1;i=y;i+) m=m*x%1000; if(m=0)printf(The last 3 numbers is 000.n);elseprintf(The last 3 numbers is %d.n,m); 结果: 输入:100输出:Thelast3numbersis1.程序实例2:#includevoid main() int a,n,i,s; scanf(%d%d,&a,&n); i=1; s=1; while(i=n) s=s*a%1000; i+; if(n!=0) printf(The last 3 numbers is %0.3d.n,s); else printf(The last 3 numbers is %d.n,s); 结果:输入:10010输出:Thelast3numbersis000.9 分数的四则运算在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用C语言来实现。输入:分数1 操作符 分数2输出:计算结果要求:计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3程序实例1:#include int main() int a,b,c,d,e,f,x,y,z; char g; scanf(%d/%d %c %d/%d,&a,&b,&g,&c,&d); if(g=+) e=a*d+b*c;f=b*d; if(g=-) e=a*d-b*c;f=b*d; if(g=*) e=a*c;f=b*d; if(g=/) e=a*d;f=b*c; x=e; y=f; z=x%y; if(z!=0) while(z!=0) x=y;y=z;z=x%y; e=e/y; f=f/y; if(f0) printf(%d/%d %c %d/%d = %d/%d,a,b,g,c,d,e,f); if(f0) printf(%d/%d %c %d/%d = %d/%d,a,b,g,c,d,-e,-f); else printf(%d/%d %c %d/%d = %d,a,b,g,c,d,e/f); printf(n); return 0; 结果:输入:1/3+1/2输出:1/3+1/2=5/6程序实例2:#includemath.h #include void main() int a,b,c,d,m,n,x,y,v;char z; scanf(%d/%d %c %d/%d,&a,&b,&z,&c,&d); switch (z) case(+):m=a*d+b*c;n=b*d;break; case(-):m=a*d-b*c;n=b*d;break; case(*):m=a*c;n=b*d;break; case(/):m=a*d;n=b*c;break; x=fabs(m);y=fabs(n);v=x%y; while(v!=0) x=y;y=v;v=x%y; if(m/y=0) printf(%d/%d %c %d/%d = 0n,a,b,z,c,d); else if(n/y=1) printf(%d/%d %c %d/%d = %dn,a,b,z,c,d,m/y); else printf(%d/%d %c %d/%d = %d/%dn,a,b,z,c,d,m/y,n/y); 结果: 输入:1/2+2/6输出:1/2+2/6=5/610 黑色星期五在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。输入:年份输出:判断该年是否包含黑色星期五,如包含,给出具体日期程序实例1:#include stdio.h void main() int year,month,day,i,k=0,ruinian,n;int a12=6,2,2,5,0,3,5,1,4,6,2,4;int b12=6,2,3,6,1,4,6,2,5,0,3,5,c12=0; scanf (%d,&year); n=(year%400)*365+(year%400+3)/4-(year%400)/100+5)%7; ruinian=(year%4=0 & year%100!=0 | year%400=0); for (i=0;i12;i+) if (ruinian=1)?bi:ai)+n)%7=5) ci=1; k+; printf (There %s %d Black %s in year %d.n%s:n,(k=1)?is:are,k,(k=1)?Friday:Fridays,year,(k=1)?It is:They are); for (i=0;i12;i+) if (ci=1) printf (%d/%d/13n,year,i+1); 结果:输入:2006输出:Thereare2BlackFridaysinyear2006.Theyare:2006/1/132006/10/13程序实例2:#includestdio.h void main() int m,y,k=0,i,w,a6; scanf(%d,&y); for(m=1;m=2;m+) w=(13+2*(m+12)+3*(m+13)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400)%7; if(w=4) ak=m;k+; for(m=3;m13;m+) w=(13+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; if(w=4) ak=m;k+; if(k=1) printf(There is 1 Black Friday in year %d.nIt is:n%d/%d/13n,y,y,a0); else printf(There are %d Black Fridays in year %d.n,k,y); printf(They are:n); for(i=0;ik;i+) printf(%d/%d/13n,y,ai); 结果:输入:2007输出:There are 2 Black Fridays in year 2007They are:2007/4/132007/7/1311 百马百担有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担输入:无输出:大、中、小马的个数,用逗号分隔。例如:2,30,68说明:大、中、小马都必须有,结果中要列出所有的组合可能每个结果占一行 因为有多个结果,结果的排序按照大马的个数从少到多程序实例1:#include void main() int bigHorse,middleHorse,smallHorse; bigHorse=0; while(bigHorse=33) middleHorse=1; while(middleHorse50) smallHorse=100-bigHorse-middleHorse; if(3*bigHorse+2*middleHorse+smallHorse/2=100&smallHorse%2=0) printf(%d,%d,%dn,bigHorse,middleHorse,smallHorse); middleHorse+; bigHorse+; 结果: 输入:无输出:2,30,685,25,708,20,7211,15,7414,10,7617,5,78程序实例2#includevoid main() int a,b,c; for(a=0;a=33;a+) for(b=1;b50;b+) c=100-a-b; if(3*a+2*b+c/2=100&c%2=0) printf(%d,%d,%dn,a,b,c); 结果:输入:无输出:2,30,685,25,708,20,7211,15,7414,10,7617,5,7812 零钱换整钱小明去银行存钱,拿了一堆硬币。已知 1 角的硬币厚度为 1.8mm , 5 角的硬币厚 1.5mm , 1 元的硬币为 2.0mm 。小明将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,发现 3 摞硬币一样高。银行正好把这些硬币换成若干张面值为 10 元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个? 输入:无 输出:1 角的数量,5 角的数量,1元的数量,总金额。(例如:20,30,40,50)说明:在结果中只输出各个对应的数字即可程序实例1:#include int yue(int a,int b) int t; t=a%b; while(t) a=b,b=t,t=a%b; return b; int main(void) int x,y,z; x=18*15/yue(18,15); x=x*20/yue(x,20); z=y=x/18+x*5/15+x/2; while(z%100) z+=y; printf(%d,%d,%d,%dn,z/y*x/18,z/y*x/15,z/y*x/20,z/10); return 0; 结果: 输入:无输出:50,60,45,80程序实例2:#include int main() int i,j,k,a; for(i=10;i+=10) j=6*i/5;k=9*i/10;a=0.1*i+0.5*j+1.0*k; if(a%10=0) printf(%d,%d,%d,%dn,i,j,k,a);break; return 0; 结果: 输入:无输出: 50,60,45,8013 找出最大素数素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。输入: 取值范围输出: 该范围内的最大素数程序实例1#include #include int judgeis(int a) int i; for(i=2;isqrt(a);i+) if (a%i=0) return 0; return 1; int main() int n; scanf(%d,&n); while(judgeis(n)=0)n-; printf(The max prime number is %d.,n); return 0; 结果: 输入:100输出:Themaxprimenumberis97.程序实例2:#include #include int IsPrime(int n) int i; for(i=2;i= 0)。输出: 打印相应的空心倒三角形。图样参见测试用例。程序实例1:#include int main(void) int n,i,j; scanf(%d,&n); for(i=0;in;i+) for(j=0;j(2*n-1-i);j+) if (i=0|i=j|j=(-i+2*n-2)printf(*); else printf( ); printf(n); return 0; 结果:输入:3输出:*程序实例2:#include stdio.h void main() int r,l,h; scanf(%d,&h); for(r=1;r=2*h-1;r+) printf(*); for(r=2;r=h;r+) printf(n); for(l=1;l=2*h-r;l+) printf(%s,(l=r|l=2*h-r)?*: ); 结果:输入:5输出:*15 空心字符菱形输入:菱型起始字母和菱形的高度。输出:参看测试用例,打印空心的由字符组成的菱形。程序实例1:#include stdio.h #include math.h void main() char c;int n,i,j; scanf(%c%d,&c,&n); for(c=c+n-1,i=1-n;i=n-1;i+) for(j=1;j=2*n-1-abs(i);j+) if(j=abs(i)+1|j=2*n-1-abs(i) printf(%c,c-abs(i); else printf( ); printf(n); 结果: 输入:C4输出:CDDEEFFEEDDC程序实例2:#includestdio.h int main() int i,j,h;char e; scanf(%c %d,&e,&h); for(i=1;i=h;i+) for(j=1;j=h+i-1;j+) if(j=h-i+1|j=h+i-1)printf(%c,e+i-1); else printf( ); printf(n); for(i=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论