




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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.409 分数的四则运算在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用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/611 百马百担有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,7816 邮票组合(选作)背景:我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资。现在,邮局有4种不同面值的邮票。在每个信封上最多能贴5张邮票,面值可相同,可不同。输入:四种邮票的面值。输出:用这四种面值组成的邮资最大的从1开始的一个连续的区间。说明:如结果为10,则表明使用4张邮票可组合出1、2、3、4、5、6、7、8、9、10这些邮资。名词解释: 邮资:就是你寄东西需要花多少钱。 邮票面额:是由国家发行的具有固定价格的花纸片,被称为邮票。如果你寄东西,邮局称了重量,告诉你要240分。这样你就要贴邮票了。如果现在邮局的邮票有面值为80分、50分、20分和10分的四种,你就可以采用不同的组合得到240的邮资,例如:采用3张80分的可以凑出240分;或者24张10分的凑起来240分也可以。显然不同邮票的组合都可以得到同样一种邮资。程序实例1:/*This program is to find the max set*/ #include main() int a,b,c,d,i,j,k,l; static int s1000; scanf(%d%d%d%d,&a,&b,&c,&d); for (i=0;i=5;i+) for (j=0;i+j=5;j+) for (k=0;k+i+j=5;k+) for (l=0;k+i+j+l=5;l+) if (a*i+b*j+c*k+d*l) sa*i+b*j+c*k+d*l+; for (i=1;i=1000;i+) if(!si) break; printf(The max is %d.n,-i); return 0; 结果:输入:141221输出:Themaxis71.程序实例2:#include stdio.h int total,max; int value5,num1000 = 0 ; void findmax(int n,int p) int i; if (p 5 ) for (i = n;i = 4;i +) total += valuei; if (max total) max = total; numtotal = 1; findmax(i,p + 1); total -= valuei; int main() int i; for (i = 1;i = 4;i +) scanf(%d,&valuei); total = 0;max = 0; findmax(1,0); for (i = 1;i = max;i +) if (!numi) break; printf(The max is %d.n,i - 1); return 0; 结果: 输入:1 3 7 12输出:The max is 46.18 等值数列段(06秋)如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。输入:由N个元素组成的整数数列A(其中N=50)输出:A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出No equal number list. 说明: 始末位置是指数组下标,即0表示第一个元素。 如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。 当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。NN开始,输入j+记数器加1i+ 记数器加1保存长度和位置没遍历完 in ?如果相临字符相等是否也与下一字符相等输出,结束是否为最长YNYNYY程序实例1:#includestdio.hmain()int i=0,j=0,k,n,max=0,maxnum=0,a50;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);/*输入*/for(i=j;in;i+)/*循环遍历*/j=i+1;if(ai=aj)/*如果相临的相等,i不变,继续看相等字符有多长*/while(ai=a+j);/*循环直到不相等为止*/if(maxnum0)/*输出*/printf(The longest equal number list is from %d to %d.n,max,maxnum+max-1);elseprintf(No equal number list.n);结果:输入:512345输出:Noequalnumberlist.程序实例2:#includestdio.h void main() int a,x50,i,j,m=0,n=0; scanf(%d,&a); for(i=0;ia;i+) scanf(%d,&xi); for(i=0;ia-1;i=j) j=i+1; while(xj=xi&jn-m) m=i;n=j-1; if(n-m)=0) printf(No equal number list.n); else printf(The longest equal number list is from %d to %d.n,m,n); 输入:结果:6101110输出:Thelongestequalnumberlistisfrom2to4.19 大家一起做游戏(06秋)幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。 每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。 现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。输入:小朋友的个数(=50) 要被练习的数字输出:最终被留下的小朋友的序号说明:如“要被练习的数字”是5,则每次数到5的同学要退出该游戏N数组计数器加1输出,结束更改数组 置零计数器更改从头遍历开始,输入,初始化小朋友是否已退出遍历数组结束只剩下一位小朋友YNY这次是否退出NYYY报数记数器加1程序实例1:#includestdio.hmain() int m,n,d,i,temp,a100;scanf(%d%d,&n,&m);for(i=0;in;i+)ai=i+1;temp=0;d=0;while(dn-1)/*标志次数,n-1次后结束,这是将只剩一个小孩*/for(i=0;in;i+)if(ai!=0)/*小朋友还没退出游戏*/ temp+; /*小朋友报数的数字*/if(temp=m) /*小朋友这次该退出游戏*/ ai=0; /*在数组中表示出来*/temp=0; /*报数从新开始*/d+; /*退出人数加1*/ for(i=0;in;i+)/*输出,寻找最后一个退出的小朋友*/if(ai!=0)printf(The left child is NO %d.n,ai);结果:输入103:输出:TheleftchildisNO4.程序实例2:#include void main() int a51,i,j,x,n; scanf(%d %d,&n,&j); for ( i=0;i=n-2;i+) ai=i+1;an-1=0;x=n-1; while( ax!=x ) for( i=1;i=j-1;i+) x=ax; ax = aax; printf( The left child is NO %d.,x+1 ); 结果: 输入:5015输出:TheleftchildisNO22.23 删除重复字符(06秋)背景:输入一个长度不超过 100 的字符串,删除串中的重复字符。输入:输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。输出:删除重复字符后的字符串。例如:abced。开 始输入字符串求串长len,I=1输出第一个字符J=0YIlen?NNJi结束Ynumi=numj?NYJ+输出第i个字符I+程序实例1:#include#includemain()char num99;int i,j,len,m=0;gets(num);/*输入字符串*/len=strlen(num);/*求字符串长度*/printf(%c,num0);for(i=1;ilen;i+,m=0)/*从第二个开始*/for(j=0;ji;j+)/*判断是否与前边的相等*/if(numi=numj)/*如果有相等的*/m=1;break;if(m=0)/*如果没有相等的*/printf(%c,numi); 结果:输入:abacaeedabcdcd输出: abced程序实例2:#includestdio.h #includestring.h void main() char ch101; int i,j,k,s; gets(ch); s=strlen(ch); for(i=1;is;i+) for(j=0;ji;j+) if(chi=chj) for(k=i;ks;k+) chk=chk+1; i-;s-;break; puts(ch); 输入:111122233344455577yuyuyu输出:123457yu24 单词排序(06秋)输入 5 个单词,将它们按从大到小的顺序排列后输出。输入:5个单词输出:排序后的顺序开 始输入5个字符串i=0i4?J=iYJ5?NN输出Y结束Nwiwj?Ywi交换wji+j+程序实例1:#include#includemain()char w520,a20;int i,j;for(i=0;i5;i+)gets(wi); /*用一维数组读串的方式生成二维数组*/for(i=0;i4;i+)for(j=i;j5;j+)if(strcmp(wi,wj)0) /*用字符串比较函数判断*/ /*冒泡法排序:直接交换*/strcpy(a,wj);strcpy(wj,wi);strcpy(wi,a);for(i=0;i5;i+)puts(wi); /*用一维数组写串的方式输出二维数组*/ 输入:BASICC+PascalCFortran输出:PascalFortranC+CBASIC程序实例2:#includestdio.h #includestring.h void main() char ch526,c26; int i,j,k; for(i=0;i5;i+) gets(chi); for(i=0;i4;i+) k=i; for(j=i+1;j5;j+) if(strcmp(chk,chj)0) k=j; if(k!=i) strcpy(c,chi); strcpy(chi,chk); strcpy(chk,c); for(i=0;i5;i+) puts(chi); 输入:BASICC+CFortranPascal输出:PascalFortranC+CBASIC25 大数分解(06秋) 我们在“计算机科学导论”的期末考试中有一道试题。下面请你看看那题目应该如何编写。从键盘输入的一个大于 1 的整数,通过算法将该整数分解为若干因子的乘积。输入:一个正整数。输出:分解后的各个因子。开 始输入正整数ai=2Y结束a=1?NNi+a/i=0?Ya=a/i输出i程序实例1:#include void main() int n,i; scanf(%d,&n); for(i=2;n1;) if(n%i=0) printf(%dn,i);n/=i; else i+; 输入:24输出:2223程序实例2:#includestdio.h void main() int n,i; scanf(%d,&n); for(i=2;i=n;) if(n%i=0) printf(%dn,i); n/=i; continue; else i+; 输入:15输出:3526 铺地板(选作)背景: 你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下:1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25 学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。输入:方阵N的大小。输出 方阵。程序实例1:#includestdio.h int main() int a,i,j,k,x100100; scanf(%d,&a); x00=1; for(k=2,i=0,j=0;k=a*a;k+) if(i+1)%2=0&(j+1)%2=0)|(i+1)%2!=0&(j+1)%2!=0) if(i-10&j+1a-1) i+; else i-;j+; xij=k; else if(j-10&i+1a-1) j+; else i+;j-; xij=k; if(a*a=1) printf(1n); else for(i=0;ia;i+) for(j=0;ja;j+) if(a*a100) j=a-1?printf(%2dn,xij):printf(%2d ,xij); else j=a-1?printf(%3dn,xij):printf(%3d ,xij); return 0; 输入:5输出:12671535814164913172210121821231119202425程序实例2:#include main() int i, j, n, a1010; scanf (%d,&n); a00=1; for ( i=0,j=1;jn;j+ ) aij=aij-1+(j=j/2*2)?2*j:1); for (i=1; in; i+) for (j=0; jn-1;j+) aij=(i+j)=(i+j)/2*2)?ai-1j+1-1:ai-1j+1+1); aij=ai-1j+(n-i)=(n-i)/2*2?1:(n-i)*2); if (n=1) printf(%d,a00); else for ( i=0;in;i+ ) printf(%2d,ai0); for ( j=1;jn;j+ ) printf(%3d,aij); printf(n); return 0; 输入:1输出:127 编码问题(选作)(06秋)设有一个整形数组 A0.N-1;存放的元素为 0N-1 (1N0?Nilen?Y结束bi=caiYj=1 k=0保存Ki+更改数组CNji?i-Yajai?YK+Nj+程序实例1:#include stdio.h void main( ) int i,j,t,n; int arr11,ans11= 0 ,num10; scanf(%d%d,&t,&n); for (i = 1;i = n;i +) scanf(%d,&arri); arr0 = 20; if (t = 1) for (i = 1;i = n;i +) for (j = 1;j arrj) ansi +; else for (i = 0;i = 1;i -) ansi = numarri; for (j = arri;j = i - 1;j +) numj = numj + 1; for (i = 1;i n;i +) printf(%d ,ansi); printf(%dn,ansn); 输入:16430512输出: 000312程序实例2:#include stdlib.h #include int cmp(const void *a, const void *b) return *( int* ) a - *( int* ) b; void main() int mode,i,j,n,a13,b13,m13; scanf(%d%d,&mode,&n); for(i=0;in;i+) scanf(%d,&ai); if(mode=1) b0=0; for(i=1;in;i+) for(j=0,bi=0;ji;j+) if(ajai) bi+; else for(i=0;i=0;i-) bi=mai; mai=n; qsort(m,n,sizeof(int),cmp); for(i=0;in;i+) printf(%d%s,bi,i!=n-1? :); 输入:270100456输出: 231045628 洗牌(选作)假设我们有 2n 张牌,它们以 1, 2, ., n, n+1, ., 2n 编号并在开始时保持着这种顺序。一次洗牌就是将牌原来的次序变为 n+1, 1, n+2, 2, ., 2n, n,也就是将原来的前 n 张牌放到位置 2, 4, ., 2n,并且将余下的 n 张牌按照他们原来的次序放到奇数位置 1, 3, ., 2n-1。已经证明对于任何一个自然数 n,这 2n 张牌经过一定次数的洗牌就回到原来的次序。但我们不知道对于一个特定的 n,需要几次洗牌才能将牌洗回原来的次序。输入:牌张数的一半n,即初始情况下一共有2n张牌输出:将牌洗回原来的次序所需要的洗牌次数开 始输入n02*n-1i, ia i K=1,i=0i2*n?in?i+b2*i=aiY02*n-1 i=a i ?NNK+,i=0YYN输出kb2*(i-n)-1=ai结束i=2程序实例1:#include int main( void ) int n; int count; int i; scanf( %d, &n ); i = 2; count = 1; while ( i != 1 ) if ( i n ) i = 2 * ( i - n - 1 ) + 1; else i = 2 * i; count +; printf( %dn, count ); return 0; 输入:10输出:6程序实例2:#include stdio.h int main() long n,a=1,t=0; scanf(%ld,&n); do a=(t+,a=n?a*2:(a-n)*2-1); while(a!=1); printf(%ldn,t); return 0; 输入:3输出:329 扫雷(选做)背景 你玩儿过扫雷游戏吧?有个操作系统中带了这个小游戏,那个系统叫什么来着?在游戏中要想过关,就必须要在一个 NxM 的区域上找出所有的地雷。游戏过程中,计算机会在地图上显示一些数字从而帮助你确定哪里有地雷。例如,在下面这个有两颗地雷的 4x4 的地图(*表示地雷): *.*. 根据上面的地图,可以计算出应该提供给游戏者的数字如下所示: *10022101*101110 每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。 输入: 输入中将包括一系列的地图,每个地图的第一行有两个整数 n 和 m(0 n,m = 100),它们表示了地图的行数和列数。下面的 n 行每行都有 m 个字符,其中 . 表示安全而 * 表示地雷。如果地图的 n 和 m 都为 0,则表示输入结束。 输出 :针对每一个地图,首先输出一行: Field #x:其中 x 是当前地图的编号(从 1 开始)。下面的 n 行则将地图中的 . 以数字表示,该数字表示该方格周围有多少颗地雷。程序实例1:#include stdio.h void main() int m,n,t,p,q,x,y,a200200; char c; t=1; scanf(%d%d,&m,&n); A: if(m=0) goto B; for(p=0;p=m;p+) for(q=0;q=n;q+) apq=0; for(p=0;pm;p+) for(q=0;q=n;q+) scanf(%c,&c); if(c=*) apq=-1; for(x=p-1;x=p+1;x+) for(y=q-1;y=0&x=0&y=n&axy!=-1) axy+; printf(Field #%d:n,t); for(p=0;pm;p+) for(q=1;q=n;q+) (apq=-1)?printf(*):printf(%d,apq); printf(n); scanf(%d%d,&m,&n); t+; if(m!=0) printf(n);goto A; B: ; 输入:44*.*.35*.*.00输出:Field#1:*10022101*101110Field#2:*100332001*100程序实例2:#include int main(void) int f(int m,int n,int i,int j,char a100100); int m,n,i,j,b=0; char a100100; scanf(%d %d,&m,&n); while(m!=0&n!=0) b+; if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子企业的保洁合同范本
- 窗子外包安装合同协议书
- 注塑厂生意转让合同范本
- 租用农地建厂房合同范本
- 终止劳动合同保密协议书
- 私人对私人加工协议合同
- 法院办理协议离婚协议书
- 申请企业并购协议书范本
- 物业维修承包合同协议书
- 高质量门窗采购合同范本
- 青少年体态管理课件
- 网络安全维护与用户免责声明
- 风湿免疫病患者结核病诊治及预防实践指南(2025版)解读课件
- 山东省枣庄市峄城区2024-2025学年七年级上学期期末考试数学试题(原卷版+解析版)
- 脑积水患者治疗与护理
- 物业工程前期介入方案
- 2024年杭州萧山环境投资建设集团有限公司招聘笔试真题
- T-FSS 16-2024 电水壶标准规范
- SAP销售订单处理用户操作手册
- DBJT 13-309-2019非开挖顶管技术规程
- 我国个人破产制度构建初探
评论
0/150
提交评论