2016.03.28—06.30北京理工大学MOOCC语言程序设计(下)网上作业答案第一周编程作业1、求最大公约数和最小公倍数(15分)题目内容:编写程序,在主函数中输入两个正整数a,b,调用两个函数fun1()和fun2(),分别求a和b的最大公约数和最小公倍数,在主函数中输出结果。输入格式:两个正整数输出格式:最大公约数和最小公倍数输入样例:12,40[回车]输出样例:最大公约数:4[回车]最小公倍数:120[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.hintfun1(intm,intn){intr;r=m%n;returnr==0?n:fun1(n,r);}intfun2(intm,intn){intt;t=m*n/fun1(m,n);returnt;}intmain(){intt,m,n;scanf(%d,%d,&m,&n);if(mn){t=m;m=n;n=t;}printf(最大公约数:%d\n,fun1(m,n));printf(最小公倍数:%d\n,fun2(m,n));return0;}2、排序并插入(15分)题目内容:编写程序,在主函数中定义一个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出。输入格式:9个整数和1个整数输出格式:10个整数输入样例:2,3,1,5,6,76,89,31,90[回车]7[回车]输出样例:1,2,3,5,6,7,31,76,89,90[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.hintmain(){intt,j,i,n[10];for(i=0;i9;i++){scanf(%d,&n[i]);if(i8)scanf(,);}scanf(%d,&n[9]);for(i=0;i9;i++){for(j=0;j=8-i;j++){if(n[j]n[j+1]){t=n[j];n[j]=n[j+1];n[j+1]=t;}}}for(i=0;i10;i++){printf(%d,n[i]);if(i9)printf(,);}return0;}第二周编程作业1、最大公约数(15分)题目内容:输入两个整数m,n,用递归算法实现计算两个数的最大公约数。输入格式:输入两个整数m,n输出格式:最大公约数输入样例:12,40[回车]输出样例:4[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.hintgcd(intm,intn){intr;r=m%n;returnr==0?n:gcd(n,r);}intmain(){intt,m,n;scanf(%d,%d,&m,&n);if(mn){t=m;m=n;n=t;}printf(%d\n,gcd(m,n));return0;}2、奇数求和(15分)题目内容:用递归算法实现,输入整数n(n0),求1+3+5+7….+(2*n-1)的和输入格式:输入整数n输出格式:输出和输入样例:5[回车]输出样例:25[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.hintfun(intn){intf;if(n==1)f=1;elsef=fun(n-1)+2;returnf;}intmain(){inti,m,t=0;scanf(%d,&m);for(i=0;im;i++){t=t+fun(i+1);}printf(%d\n,t);return0;}第三周编程作业1、巧算自然数(10分)题目内容:编程实现输入一个自然数,若为偶数,则把它除以2;若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。输出经过多少次可以得到自然数1和每次得到的值。输入格式:输入一个自然数输出格式:输出经过多少次可以得到自然数1和每次得到的值输入样例:22[回车]输出样例:22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1[回车]step=16[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.hintfun(intn){if(n%2==0)n=n/2;elsen=3*n+1;returnn;}intmain(){inti,m;scanf(%d,&m);for(i=1;;i++){printf(%d,,m);m=fun(m);if(m==1)break;}printf(1\nstep=%d\n,i+1);return0;}2、卖鸭子(10分)题目内容:编程调用递归函数。一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了7个村子后还剩2只鸭子,问他出发时共赶多少只鸭子?经过每个村子时依次卖出多少只鸭子?输入格式:无输出格式:出发时总鸭子数每个村子卖出鸭子数输入样例:无输出样例:(不是结果,仅表示格式)sum=25[回车]sell=8,sell=4,[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.hintfun(inti){intsum;if(i==7)sum=2;elsesum=(fun(i+1)+1)*2;returnsum;}intmain(){inti;printf(sum=%d\n,fun(0));for(i=1;i=7;i++)printf(sell=%d,,fun(i)+2);printf(\n);return0;}3、输出各位数字之和(10分)题目内容:编程调用递归函数,求输入一个数,输出这个数的各位数字之和。输入格式:输入一个数输出格式:输出这个数的各位数字之和输入样例:2354[回车]输出样例:14[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.hintmain(){intnum=0;ints=0;inti=0;scanf(%d,&num);while(num){s+=num%10;num=num/10;i++;}printf(%d\n,s);return0;}第四周编程作业1、对称字符串(15分)题目内容:从键盘输入一个字符串,判断是否为对称字符串,若是输出“YES”,若不是输出“NO”输入格式:一个字符串输出格式:YESorNO输入样例1:abcdedcba[回车]输出样例1:YES[回车]输入样例2:1234432[回车]输出样例2:NO[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.h#includestring.hchars[100];inthuiwen(inta,intb){if(a==b||ba)return1;elseif(s[a]==s[b])returnhuiwen(a+1,b-1);elsereturn0;}intmain(){intlength;intresult;gets(s);length=strlen(s);result=huiwen(0,length-1);if(result==1)printf(YES\n);elseprintf(NO\n);}2、排序(10分)题目内容:用指针方法,将一维数组inta[10]中元素按从小到大顺序输出。输入格式:10个整数,空格隔开输出格式:排序后的10个数,逗号隔开输入样例:1234564378981113390[回车]输出样例:7,11,12,33,34,43,56,81,89,90[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.h#includestring.hfun(pa,n)int*pa,n;{inti,j,t;for(i=0;in-1;i++){for(j=i+1;jn;j++){if(*(pa+i)*(pa+j)){t=*(pa+i);*(pa+i)=*(pa+j);*(pa+j)=t;}}}}intmain(){inta[10],i;for(i=0;i10;i++)scanf(%d,&a[i]);fun(a,10);for(i=0;i9;i++)printf(%d,,a[i]);printf(%d\n,a[9]);return0;}3、查找数(15分)题目内容:用指针方法,在一个一维数组inta[10]的元素中,查找给定的数,若找到则输出该数,若没找到,输出No。输入格式:第一行:10个整数,空格隔开第二行:要查找的数输出格式:找到的数orNo输入样例1:112243567890764210[回车]43[回车]输出样例1:43[回车]输入样例2:1834562179[回车]10[回车]输出样例2:No[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.h#includestring.hintmain(){intb,i,a[10],*p=a;for(i=0;i10;i++)scanf(%d,&a[i]);scanf(%d,&b);for(i=0;;i++){if(b==*(p+i)){printf(%d\n,*(p+i));break;}if(i==9){printf(No\n);break;}}return0;}第五周编程作业1输出指定学生成绩(15分)题目内容:从键盘输入3个同学4门课的成绩,输出指定同学的成绩和平均分。输入格式:输入3个同学4门课的成绩输出格式:输出指定同学的成绩和平均分输入样例:8978807688787590999210089[回车]1[回车]输出样例:89788076[回车]80.75[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.h#includestring.hintmain(){intn,i,j,a[3][4];floatx=0;for(i=0;i3;i++){for(j=0;j4;j++){scanf(%d,&a[i][j]);}}scanf(%d,&n);for(i=0;i4;i++)x=x+a[n-1][i];x=x/4;for(i=0;i4;i++){printf(%d,a[n-1][i]);if(i!=3)printf();}printf(\n);printf(%g\n,x);return0;}2、成绩排序(10分)题目内容:从键盘输入3个同学4门课的成绩,将其按平均分从高到低排序输出。输入格式:输入3个同学4门课的成绩输出格式:按平均分从高到低排序输出输入样例:8978807688787590999210089[回车]输出样例:99,92,100,89[回车]88,78,75,90[回车]89,78,80,76[回车]时间限制:500ms内存限制:32000kbCode:#includestdio.h#includestring.hintmain(){intm,i,j,k,a[3][4],b[3];for(i=0;i3;i++){for(j=0;j4;j++){scanf(%d,&a[i][j]);}}for(i=0;i3;i++){b[i]=0;for(j=0;j4;j++)b[i]+=a[i][j];}for(i=0;i2;i++)for(j=i+1;j3;j++)if(b[i]b[j]){m=b[i];b[i]=b[j];b[j]=m;for(k=0;k4;k++){m=a[i][k];a[i][k]=a[j][k];a[j][k]=m;}}for(i=0;i3;i++){for(j=0;j3;j++)printf(%d,,a[i][j]);printf(%d\n,a[i][j]);}return0;}第六周编程作业1、统计字符串出现次数(10分)题目内容:从键盘输入两个字符串,输出第二个串在第一个串中出现的次数。如果没有,