C语言复习题
【设计型】5.1 输出一行星号
编写程序在一行中输出 N 个星号。 输入: N值
输出: 一行中N个星号 #include int a,i; scanf(\"%d\ for(i=1;i<=a;i++) printf(\"*\"); printf(\"\\n\"); return 0; } 【设计型】5.2 打印平行四边形 输入图形的高 n ,输出如下例( n=5 )所示的图形 . ***** ***** ***** ***** ***** 11 路漫漫其修远兮,吾将上下而求索 - 输入: 整数n例如 5 输出: 由*组成的高为5的平行四边形 #include int i,j,num; scanf(\"%d\ for(i=0;i 【设计型】5.3 编程计算 编写程序,输入n的值,求 :1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n (保留四位小数) #include 22 路漫漫其修远兮,吾将上下而求索 - double n,i,sum,k=1.0; scanf(\"%lf\ i=1,sum=0; while(i<=n) { sum=sum+k/i; i++; k=-k;(用这个式子实现正负交替) } printf(\"sum=%.4lf\\n\ return 0; } 【设计型】5.4 分数序列 有一个分数序列: 求出其前n项的和。 ...............,输入整数n, 输出语句格式为:printf(\"sum=%16.10f\\n\#include int n,a,b,i,temp; double sum; scanf(\"%d\ 33 路漫漫其修远兮,吾将上下而求索 - i=1,sum=0,a=2,b=1; while(i<=n) { sum=sum+a*1.0/b; temp=a; a=a+b; b=temp;(几个式子实现数值的变换) i++; } printf(\"sum=%16.10f\\n\ return 0; } 【设计型】5.5 求e的值 编写程序,从键盘输入整数 n , 求 e 的值 . e=1+1/1!+1/2!+1/3!+..+1/n! 注意:用 double 型数据计算输出语句:printf(\"sum=%16.10f\\n\ #include int n,i; double sum,jc; scanf(\"%d\ i=1,sum=1.0 jc=1.0; while(i<=n) { jc=jc*i; sum=sum+1.0/jc; i++; } printf(\"sum=%16.10f\\n\ return 0; 44 路漫漫其修远兮,吾将上下而求索 - } 【设计型】5.6 最大公约数 输入两个正整数m和n,求它们的最大公约数和最小公倍数 比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。 #include int yu,m,n,temp,bei,ji; scanf(\"%d%d\ if(m } (最大公约数求法) bei=ji/n;(最小公倍数求法) printf(\"the greatest common divisor is %d\\n\ printf(\"the least common multiple is %d\\n\ return 0; 55 路漫漫其修远兮,吾将上下而求索 - } 【设计型】5.7 水仙花数 输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33 输出语句:printf(\"%d\\n\ #include int a,b,i,j,k; for(i=1;i<=9;i++) { for(j=0;j<=9;j++) { for(k=0;k<=9;k++) (三重循环从1到999) {a=i*i*i+j*j*j+k*k*k; b=100*i+10*j+k; if(a==b) printf(\"%d\\n\ } } return 0; } 【设计型】5.8 完数 一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如 66 路漫漫其修远兮,吾将上下而求索 - 果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No #include int yinzi,num,i,sum=0; scanf(\"%d\ for(yinzi=1; yinzi } if(sum==num) { printf(\"Yes,its factors are \"); for(i=1; i printf(\" %d\ } (输出因子具体值) printf(\"\\n\"); } else printf(\"No\\n\"); return 0; 77 路漫漫其修远兮,吾将上下而求索 - } 【设计型】5.9 素数 输入两个正整数m和n,求出[m,n]区间的所有素数 #include int m,n,i,j,tag=1; scanf(\"%d%d\ for(i=m; i<=n; i++) { for(j=2; jif(i%j==0) { tag=0; break; } else tag=1; } if(tag) printf(\" %d\ 88 路漫漫其修远兮,吾将上下而求索 - } printf(\"\\n\"); return 0; } 【设计型】5.10 回文数 输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No #include double num; scanf(\"%lf\ int min=0, max=num; while (max>0) { min=min*10+(int)max%10;(将数字反过来) max=max/10; } if(num==min) printf(\"Yes\\n\"); else printf(\"No\\n\"); return 0; 99 路漫漫其修远兮,吾将上下而求索 - } 【设计型】5.11 贪吃的猴子 有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。 输入: 天数n 输出: 第一天的桃子个数,输出语句为printf(\"The monkey got %d peachs in first day.\\n\Smaple: Input: 5 Output The monkey got 114 peachs in first day. 提示: 问题分析: 总共 t0 日 吃掉 剩余 1 t0/2+1 t0-(t0/2+1)=t0/2-1 t1=t0/2-1 =>t0=(t1+1)*2 2 t1/2+2 t1-(t1/2+2)=t1/2-2 t2=t1/2-2 =>t1=(t2+2)*2 .... n-1 tn-2/2+(n-1) tn-2-(tn-2/2+(n-1))=tn-2/2-(n-1) tn-1=tn-2/2-(n-1) => tn-2= (tn-1+n-1)*2 1010 路漫漫其修远兮,吾将上下而求索 - n 1 0 tn-1=1 #include int i,t,sum; scanf(\"%d\ sum=1; for(i=t;i>1;i--) { sum=(sum+i-1)*2;? } printf(\"The monkey got %d peachs in first day.\\n\ return 0; } 【创新型】5.12 马戏团观众人数 一个马戏团表演, n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。编程,输入总人数 n ,输出满足要求的男人、女人和小孩人数的全部方案。若 n 人无法满足条件,则输出“No output\\n”。 输入: 人数 n 输出: 男人、女人和小孩人数 #include 1111 路漫漫其修远兮,吾将上下而求索 - int man,woman,child,total,sum,tag=0; scanf(\"%d\ for(man=0; man<=total; man++) { for(woman=0; woman<=(total-man); woman++) { child=total-man-woman; sum=50*man+20*woman+1*child; if(sum==1200) { tag=1; printf(\"%d %d %d\\n\ } } } if(tag==0) printf(\"No output\\n\"); return 0; } 【设计型】5.13 迭代法 用迭代法求 .求平方根的迭代公式为: 1212 路漫漫其修远兮,吾将上下而求索 - 要求前后两次求出的x的差的绝对值小于10-5。 #include double x,a,b; double i; scanf(\"%lf\ b=x; for(i=1;;) { a=i; i=(i+x/i)/2; if(fabs(i-a)<=0.00001) { printf(\"The square root of %.2lf is %.5lf\\n\ break; } } return 0; } 1313 路漫漫其修远兮,吾将上下而求索 - 【设计型】5.14 cos(x)-x=0 利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。 Xn+1=cos(Xn) 迭代步骤如下: (1)取X1初值为0.0; (2)X0=X1,把X1的值赋给X0; (3)X1=cos(X0),求出一个新的X1; (4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2); (5)所求X1就是方程cos(X)-X=0的一个实根,输出X1,输出语句为printf(\"x=%lf\。 提示:本题x0和x1定义为double类型 #include double x0,x1; for(x1=0;;) { x0=x1; x1=cos(x0); if(fabs(x0-x1)<=0.000001) { 1414 路漫漫其修远兮,吾将上下而求索 - printf(\"x=%lf\\n\ break; } } return 0; } 【设计型】5.15 求一个三位数,其值等于其各位阶乘之和 编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。 输出格式:printf(\"%d\\n\ #include int i,j,k,l,ge,shi,bai,s1,s2,s3; for(i=100; i<=999; i++) { ge=i%10; shi=i%100/10; bai=i/100; s1=1; s2=1; s3=1; 1515 路漫漫其修远兮,吾将上下而求索 - for(j=1; j<=ge; j++) s1=s1*j; for(k=1; k<=shi; k++) s2=s2*k; for(l=1; l<=bai; l++) s3=s3*l; if(i==s1+s2+s3) { printf(\"%d\\n\ break; } } } 【研究创新型】6.1 谁能出线 背景: 电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。 输入: 按顺序给出一个小组10个人的最后得分(int)。 输出: 1616 路漫漫其修远兮,吾将上下而求索 - 能够出线的学生序号(0~9)。 #include int i,a[10],max; for(i=0;i<10;i++) scanf(\"%d\max=a[0]; for(i=0;i<10;i++) { } for(i=0;i<10;i++) if(a[i]==max) if(max<=a[i]) max=a[i]; printf(\"%d\\n\ return 0; 【设计型】6.2 统计素数的个数 求出 2 到 m 之间 ( 含 m,m<=1000) 所有素数并放在数组 a 中。 输入:正整数m 输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制) 如:输入:10 1717 路漫漫其修远兮,吾将上下而求索 - 输出:2 3 5 7 4 #include int i,j,k=0,a[1001],m,yu,tag,num=0; scanf(\"%d\ for(i=2; i<=m; i++) { tag=1; a[k]=i; for(j=2; jyu=i%j; if(yu==0) { tag=0; num++; break; } } if(tag==1) { printf(\"%4d\ 1818 路漫漫其修远兮,吾将上下而求索 - } k++; } printf(\"\\n\"); printf(\"%d\\n\ return 0; } 【设计型】6.3 冒泡法排序 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 编写程序,对输入的十个数按照从小到大排序 #include int i,j,a[10],z; for(i=0; i<10; i++) { scanf(\"%d\ } 1919 路漫漫其修远兮,吾将上下而求索 - for(j=0; j<9; j++) { for(i=0; i<9-j; i++) { if(a[i]>a[i+1]) { z=a[i+1]; a[i+1]=a[i]; a[i]=z; } } } for(j=0; j<10; j++) { printf(\" %d\ } printf(\"\\n\"); return 0; } 【设计型】6.4 插入法排序 如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。 定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。 2020 路漫漫其修远兮,吾将上下而求索 - #include int a[11],i,j,t; for(i=0; i<10; i++) scanf(\"%d\ scanf(\"%d\ for(i=0; i<10; i++) { if(a[i]>a[10]) { t=a[10]; for(j=10; j>i; j--) { a[j]=a[j-1]; } a[i]=t; break; } } for(i=0; i<11; i++) printf(\" %d\ printf(\"\\n\"); 2121 路漫漫其修远兮,吾将上下而求索 - return 0; } 【设计型】6.5 求各位数字组成的最大数 任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。 输入: 自然数 n 输出: 各位数字组成的最大数 #include int a[12],num,i,j,k,m,t; scanf(\"%d\ for(i=0;;i++) { k=num%10; num=num/10;(分离各个位数) a[i]=k; if(num==0) break; } for(m=0; m2222 路漫漫其修远兮,吾将上下而求索 - for(j=0; j t=a[j+1]; a[j+1]=a[j]; a[j]=t; } } } for(j=i;j>=0;j--) printf(\"%d\ printf(\"\\n\"); return 0; } 【设计型】6.6 数组逆序输出 问题描述 从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。要求输出每个元素时以一个空格隔开。 提示: 用第一个与最后一个交换。 #include 2323 路漫漫其修远兮,吾将上下而求索 - { int a[10],i,t; for(i=0;i<=9;i++) scanf(\"%d\ for(i=0;i<5;i++)(第一个与最后一个调换) { t=a[i]; a[i]=a[9-i]; a[9-i]=t; } for(i=0;i<=9;i++) printf(\"%d \ printf(\"\\n\"); return 0; } 【设计型】6.7 求最大值 问题描述 要求从键盘输入10个整型数据,找出其中的最大值并显示出来。 输入范例 3 0 54 -710 27 32767 10 1 500 2 输出范例 32767 提示 2424 路漫漫其修远兮,吾将上下而求索 - 先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。 #include int a[n],i,max; for(i=0; i<10; i++) scanf(\"%d\ max=a[0]; for(i=1; i<10; i++) { if(a[i]>max) max=a[i]; } printf(\"%d\ printf(\"\\n\"); return 0; } 【设计型】6.8 二维数组 程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n 。 例如: 数组中的值为 2525 路漫漫其修远兮,吾将上下而求索 - 假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d) #include int a[4][4],i,j,n,count=0; for(i=0; i<=3; i++) { for(j=0; j<=3; j++) scanf(\"%d\ } scanf(\"%d\ for(j=0; j<=3; j++) { for(i=j; i<=3;i++) { a[i][j]=n*a[i][j]; } 2626 路漫漫其修远兮,吾将上下而求索 - } for(i=0; i<=3; i++) { for(j=0; j<=3; j++) { count++; printf(\"%4d\ if(count%4==0) printf(\"\\n\"); } } return 0; } 【设计型】6.9 在屏幕上显示杨辉三角形 杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。 其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。 杨辉三角有如下性质: 1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。 2727 路漫漫其修远兮,吾将上下而求索 - 2、第n行的数字个数为n个。 3、每个数字等于上一行的左右两个数字之和。 编写程序,输入正数n, 将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 #include int i,j,n; int a[10][10]; scanf(\"%d\ n=n+1; for(i=0; i for(i=2; i 路漫漫其修远兮,吾将上下而求索 - for(j=1; ja[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0; i printf(\"%3d\ } printf(\"\\n\"); } return 0; } 【设计型】6.10 求二维数组周边元素之和 编写一个程序,求出4×5的二维数组周边元素之和。 输入:二维数组元素 输出:周边元素之和 如: 输入: 1 3 5 7 9 2929 路漫漫其修远兮,吾将上下而求索 - 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 输出:61 #include { int a[4][5],i,j,sum1=0,sum2=0,sum; for(i=0;i<4;i++) { for(j=0;j<5;j++) scanf(\"%d\ } for(j=0;j<5;j++) sum1=sum1+a[0][j]+a[3][j]; for(i=0;i<4;i++) sum2=sum2+a[i][0]+a[i][4]; sum=sum1+sum2-a[0][0]-a[0][4]-a[3][4]-a[3][0]; printf(\"%d\\n\ return 0; } 【设计型】6.11 存储并输出一个矩阵 编程,输入 n ,存储并输出如下例( n=5 )所示的 图形。 1 2 3 4 5 3030 路漫漫其修远兮,吾将上下而求索 - 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1 #include int a[5][5],i,j,n,count=0; scanf(\"%d\ for(i=0; i a[i][j]=1; } } for(i=0; i 3131 路漫漫其修远兮,吾将上下而求索 - } for(i=0; i } } return 0; } 【设计型】6.12 给数组中的元素按顺序编号 对数组 a[10] 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10) 则输出为: (4,1,3,7,1,4,6,8,9,10) #include int a[11],c[11]; int i,j,t,m; 3232 路漫漫其修远兮,吾将上下而求索 - for(i=1;i<11;i++) { scanf(\"%d\ c[i]=a[i]; } for(j=1;j<=10;j++) for(i=1;i<11-j;i++) if(a[i]>=a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } for(m=1;m<11;m++) for(i=1;i<11;i++) if(c[m]==a[i]) { printf(\"%3d\ break; } printf(\"\\n\"); return 0; } 3333 路漫漫其修远兮,吾将上下而求索 - 【设计型】8.1 字符转换 描述 提取一个字符串中的所有数字字符(‘0’...‘9’)将其转换为一个整数输出。 输入 一个以回车符为结束标志的字符串(少于80个字符)。 输出 把字符串中的所有数字字符(‘0’...‘9’)转换为一个整数并输出。 #include char word[20]; int i,n; scanf(\"%s\ n=strlen(word); for(i=0; i<=n; i++) { if(word[i]>='0'&&word[i]<='9') { printf(\"%c\ } } 3434 路漫漫其修远兮,吾将上下而求索 - printf(\"\\n\"); return 0; } 【设计型】8.2 合并字符串 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。 输入: 两个已经排好顺序(升序)的字符串 输出: 一个合并在一起的有序(升序)的字符串 要求: 设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。 如果采用先进行串连接,然后再进行排序的算法,则效率太低了。 #include char a[100],b[100]; char n[200],t; int i,j,k,m; gets(a); gets(b); 3535 路漫漫其修远兮,吾将上下而求索 - for(i=0;a[i]!=0;i++) n[i]=a[i]; for(j=0;b[j]!=0;j++,i++) n[i]=b[j]; n[i]='\\0'; for(k=0;kfor(m=k+1;mn[m]) { t=n[k]; n[k]=n[m]; n[m]=t; } } printf(\"%s\\n\ return 0; } 【设计型】8.3 删除重复字符 背景: 输入一个长度不超过 100 的字符串,删除串中的重复字符。 输入: 3636 路漫漫其修远兮,吾将上下而求索 - 输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。 输出: 删除重复字符后的字符串。例如:abced。 #include char str1[100],str2[100]; int i,j,n,k=0,tag=0; scanf(\"%s\ str2[0]=str1[0]; printf(\"%c\ n=strlen(str1); for(i=0; i tag=0; break; } tag=1; 3737 路漫漫其修远兮,吾将上下而求索 - } if(tag==1) { str2[k+1]=str1[i]; printf(\"%c\ k++; } } printf(\"\\n\"); return 0; } 【设计型】8.4 删除字符串中指定字符 输入两个字符串 s1 和 s2 ,在 s1 中删除任何 s2 中有的字符。例如, s1 :“ abc123ad ”, s2 :“ a1 ” ,则输出“bc23d ”。 输入: 两个字符串 s1 和 s2 输出: 删除后的字符串 s1 #include char str1[100],str2[100]; int i,j,n1,n2,tag=0; 3838 路漫漫其修远兮,吾将上下而求索 - scanf(\"%s%s\ n1=strlen(str1); n2=strlen(str2); for(i=0; i tag=0; break; } tag=1; } if(tag==1) printf(\"%c\ } printf(\"\\n\"); return 0; } 【设计型】8.5 单词有多少 3939 路漫漫其修远兮,吾将上下而求索 - 用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 \"stop\" 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。 输入: 多个字符串 输出: 单词的数量 #include char str[10][20],str2[]={'s','t','o','p','\\0'}; int i,num=0; for(i=0;;i++) { scanf(\"%s\ if(strcmp(str[i],str2)==0) break; num++; } printf(\"%d\\n\ return 0; } 【设计型】8.6 在指定位置插入字符串 输入两个字符串 s1 、 s2 和 s1 中任意字符 k ,在 s1 中的指定字符 k 第一次出现的位置处插入字符串 s2 并输出。 输入: 两个字符串 s1 、 s2 和 s1 中任意字符 k 4040 路漫漫其修远兮,吾将上下而求索 - 输出: 插入后的字符串 s1 #include char str1[15],str2[15],t; int i,n,num=0; gets(str1); gets(str2); t=getchar(); n=strlen(str1); for(i=0; i for(i=0; i 路漫漫其修远兮,吾将上下而求索 - return 0; } 【研究创新性】8.7 Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often come to collect loyal supporters from here on Earth. Unfortunately, they only have room to pick up one group of followers on each trip. They do, however, let the groups know ahead of time which will be picked up for each comet by a clever scheme: they pick a name for the comet which, along with the name of the group, can be used to determine if it is a particular group's turn to go (who do you think names the comets?). The details of the matching scheme are given below; your job is to write a program which takes the names of a group and a comet and then determines whether the group should go with the UFO behind that comet. Both the name of the group and the name of the comet are converted into a number in the following manner: the final number is just the product of all the letters in the name, where \"A\" is 1 and \"Z\" is 26. For instance, the group \"USACO\" would be 21 * 19 * 1 * 3 * 15 = 17955. If the group's number mod 47 is the same as the comet's number mod 47, then you need to tell the group to get ready! 4242 路漫漫其修远兮,吾将上下而求索 - (Remember that \"a mod b\" is the remainder left over after dividing a by b; 34 mod 10 is 4.) Write a program which reads in the name of the comet and the name of the group and figures out whether according to the above scheme the names are a match, printing \"GO\" if they match and \"STAY\" if not. The names of the groups and the comets will be a string of capital letters with no spaces or punctuation, up to 6 characters long. #include char comet[10],group[10]; int i,n1,n2,sum1=1,sum2=1; int yu1,yu2; scanf(\"%s%s\ n1=strlen(comet); n2=strlen(group); for(i=0;i 4343 路漫漫其修远兮,吾将上下而求索 - yu1=sum1%47; yu2=sum2%47; if(yu2==yu1) printf(\"GO\\n\"); else printf(\"STAY\\n\"); return 0; } 【研究创新型】8.8 大数相加 问题描述: 编写C程序,它能以字符串形式读入两个无符号正整数m和n,计算并输出这两个整数之和 输入格式: 输入由两行组成,第一行为无符号整数m,第二行为无符号整数n,且m和n的值最长25位 输出格式: 输出为一行,即两个无符号整数m和n之和 输入样例: 9999888888 355729288 输出样例: 10355618176 #include char s1[N],s2[N]; int a[N]= {0},b[N]= {0},L1,L2,c,k,i; scanf(\"%s%s\ 4444 路漫漫其修远兮,吾将上下而求索 - L1=strlen(s1); L2=strlen(s2); if(L1 a[i]+=b[i]; if(a[i]>=10) { a[i]-=10; a[i-1]++; } } if(a[0]!=0) { for(i=0; i<=c; i++) printf(\"%d\ } 4545 路漫漫其修远兮,吾将上下而求索 - else { for(i=1; i<=c; i++) printf(\"%d\ } printf(\"\\n\"); return 0; } 【设计型】9.1 数的合并 请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。 例如:当a=45,b=12,调用该函数后,c=5241。 #include int shi,qian,ge,bai,fun; shi=a/10; qian=a%10; ge=b/10; bai=b%10; fun=qian*1000+bai*100+shi*10+ge; return (fun); 4646 路漫漫其修远兮,吾将上下而求索 - } int main() { int a,b,c; scanf(\"%d%d\ c=fun(a,b); printf(\"c=%d\\n\} 【设计型】9.2 素数的判断 请编写函数fun,其功能是判断一个整数n是否为素数,如果是素数,则返回1,否则返回0。 #include int i,flag=1,fun=1; for(i=2; i flag=0; break; } } 4747 路漫漫其修远兮,吾将上下而求索 - if(flag==0) fun=0; else fun=1; return fun; } int main() { int a; scanf(\"%d\ if(fun(a)) printf(\"Prime\\n\"); else printf(\"Non Prime\\n\"); return 0; } 【设计型】9.3 求级数 请编写函数fun,它的功能是计算下列级数和,值由函数值返回。 例如,当n=10,x=0.3时,函数值为1.349859。 请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。 #include double fun(double x,int n) { 4848 路漫漫其修远兮,吾将上下而求索 - int i,jc=1; double sum=1.0,m=1.0; for(i=1; i<=n; i++) { m=m*x; jc=jc*i; sum=sum+m*1.0/jc; } return sum; } int main() { double x; int n; scanf(\"%lf%d\ printf(\"%lf\\n\ return 0; } 【设计型】9.4 求大于m且紧靠m的k个素数 请编写一个函数,其功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。 例如,若输入17 5,则应输出19 23 29 31 37 4949 路漫漫其修远兮,吾将上下而求索 - 请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。 #include void fun(int m,int k,int xx[]) { int num,i,j; num=0; for(i=m+1;; i++) { for(j=2; j=i) { xx[num]=i; num++; } if(num>=k) break; } } int main() { int m,n,zz[1000]; scanf(\"%d%d\ fun(m,n,zz); 5050 路漫漫其修远兮,吾将上下而求索 - for(m=0;m 【设计型】9.5 删除指定字符 请编写函数fun,其功能是:从字符串中删除指定的字符。同一字母的大、小写按照不同的字符处理。 #include void fun(char str[] ,char ch) { int i,j; for(i=0; str[i]!=0; i++) { if(str[i]==ch) { for(j=i; str[j]!=0; j++) str[j]=str[j+1]; i--; } 5151 路漫漫其修远兮,吾将上下而求索 - } } int main() { char str[80]; char ch; gets(str); scanf(\"%c\ fun(str,ch); printf(\"%s\\n\ return 0; } 【设计型】9.6 杀鸡用牛刀——学习递归喽 背景: 哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。 功能: 求整数 n 到 m 区间的累加和,其中n<=m。 输入: 区间的起始点n 区间的终止点m 输出: 累加和 要求: 使用递归算法完成。 5252 路漫漫其修远兮,吾将上下而求索 - #include int sum=0; if(n==m) sum=sum+m; else sum=n+fun(n+1,m); return sum; } int main() { int m,n,s; scanf(\"%d%d\ s=fun(n,m); printf(\"%d\\n\ return 0; } 【设计型】9.7 求最大公约数——递归 请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。 5353 路漫漫其修远兮,吾将上下而求索 - 输入: n和m 输出: