版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
lie程序设计(第三版)课后习题参考解答第1章C语言概述参照本章例题,编写ー个C程序,输出以下信息:VeryGood!解:main(){pHntf("******************************\n'').printf("\n”);VeryGood!\n");printf("VeryGood!\n");printf("\n”);printf("******************************\n''),)写ー个程序,输入a,b,c三个值,输出其中最大者。解:main(){inta,b,c,max;printf(“请输入三个数a,b,c:\n");scanf("%d,%d,%d”,&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf(w最大数为:%d",max);)第3章数据类型、运算符与表达式3.3请将下面各数用八进制和十六进制数表示:10 (2)32 (3)75 (4)-617(5)-111 (6)2483 (7)-28654 (8)21003解:(1)(10)10=(12)8=(A)16(32)10=(40)8=(20)16(75)10=(113)8=(4B)16(-617)10=(176627)8=(FD97)16此题可以这样考虑:带符号数在计算机中采用补码表示,正数的补码与原码相同,负数的补码=模+真值。若使用16位存储,模为216=65536。一617的补码为65536+(-167)=64919=(176627)8=(FD97)16(-111)1O=(177621)8=(FF91)16(2483)10=(4663)8=(9B3)16(-28654)10=(110022)8=(9012)16(21003)10=(51013)8=(520B)163.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。变量的类型25-232769int型long型sort型signedchar(8位)unsignedint型unsignedlong型unsignedshort型unsignedchar型注:如果没有学过二进制和补码,此题可以不做。解:各数据在内存中的存储形式如下表所示:变量的类型25-232769int型〇〇…0000110018位111111111111111015 100—001(溢出)14long型〇〇…00001100124 11 ... 111031 00...0100...00116 14short型100…0000110018111111111111111015 100—001(溢出)14signedchar(8位)10001100111111110 00000001(溢出)unsignedint型00-000011001TOC\o"1-5"\h\z811 ... 11015 100...00114unsignedlong 型00— 00001100124 11 ... 11031 00... 0100...00116 14unsignedshort型00—0000110018 11 ... 11015 100 ... 0018unsignedchar型00011001 11111110 00000001其中int和short类型,其取值范围是ー32768〜32767。32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求・次补码可得其真值,即ー(65536-32769)=-32767〇char和unsignedchar为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。同理,若将long赋给int,则截取低16位。3.5字符常量和字符串常量有什么区别?解:字符常量是ー个字符,用单引号括起来。字符串常量是由〇个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号‘、〇'。3.6写出以下程序运行的结果:main(){charcl='a',c2='b',c3='c',c4='\101',c5='\l16';printf(l4a%cb%c\tc%c\tabc\n",cl,c2,c3);printf(u\t\b%c%c",c4,c5);}解:程序运行的结果为:aabbccabcAN3.7要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E",用“E”代替“A”。因此,“China”应译为“Glmre”。请编・程序,用赋初值的方法使cl,c2,c3,c4,c5这5个变量的值分别为‘C','h','i','n','a',经过运算,使cl,c2,c3,c4,c5的值分别变为‘G','1','m','r','e',并输出。解:main(){charcl='C',c2='h',c3='i',c4='n',c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(“密码是%c%c%c%c%c\n,cl,c2,c3,c4,c5);)运行结果:密码是Glmre3.8例2.6能否改成如下:main(){intcl,c2; (原为charcl,c2)cl=97;c2=98;printf(i4%c%c\n”,cl,c2);printf(u%d%d\nM,cl,c2);}解:可以。因为在可输出的字符范围内,用整型和用字符型作用相同。9求下面算术表达式的值。x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4..7(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3,5,y=2.5解:2.53.53.10写出程序运行的结果。main(){inti,j,m,n;i=8;j=io;m=++i;n=j++;printf(u%d,%d,%d,%d“,i,j,m,n);}解:运行结果为:9,11,9,103.11写出下面赋值的结果。格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。int99char 'd'unsignedintfloatlongint解:int991007653char'c' 'd'42X76 6553553.65686842-1,L' ,5' ,D' ,*' xunsignedint991007653684265535float99.000000100.00000076.00000053.6568.00000042.00000065535.000000longint9910076536842655353.12出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。(1)a+=a (2)a-=2(3)a*=2+3(4)a/=a+a(5)a%=(n%=2),n的值等于5解:(1)24 (2) 10(3)60 (4) 0(5)0 (6) 0(6)a+=a-=a*=a第4章最简单的C程序设计^ー顺序程序设计4.4若a=3,b=4,c=5,x=1,2,y=2.4,z=-3.6,u=51247,n=128765,cl='a',c2='b',想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。要求输出的结果如下:a=D3ロロセ=ロ4ロロじ=ロ5x=1.200000,y=2.400000,z=-3.600000x+y=ロ3.60ロロy+z=-1.20ロロz+x=-2.40u=ロ51247ロロn=ロ口ロ128765cl=,a’ロorロ97(ASCII)c2='b'ロorロ98(ASCII)解:main()(inta,b,c;longintu,n;floatx,y,z;charcl,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;u=51247;n=128765;cl='a';c2='b';printf("\n”);printf("a=%2dロロb=%2dロロc=%2d\n”,a,b,c);printf("x=%.6f,y=%.6f,z=%.6f\n”,x,y,z);printf("x+y=ロ%.2fロロy+z=%.2fロロz+x=%.2f\n”,x+y,y+z,z+x);printf("u=%61dロロn=%91d\n",u,n);printf("cl='%c'or%d(ASCII)\n,,,cl,cl);printf("c2='%c'or%d(ASCII)\n,,,c2,c2);14.5请写出下面程序的输出结果:main(){inta=5,b=7;floatx=67.8564,y=-789.124;charc='A';longn=1234567;unsignedu=65535;printf("%d%d\n”,a,b);printf(“%3d%3d\n”,a,b);printf("%f,%f\n”,x,y);printf(u%-lOf,%-1Of\n”,x,y);printf(“%8.2f,%8.2f,%4f,%4f,%3f,%3f\n,,,x,y,x,y,x,y);printf(l4%e,%10.2e\n,,,x,y);printf("%c,%d,%〇,%x\n”,c,c,c,c);printf("%ld,%lo,%x\n”,n,n,n);printf("%u,%〇,%x,%d\n”,u,u,u,u);printf("%s,%5.3s\n","COMPUTER","COMPUTER");}运行结果:5ロ7□□5ロn767.856400,-789.12402367.856400Q,-789.124023□□□67.86,ロn-789.12,67.8564,-789.1240,67.856400,-789.1240236.785640e+01,ロロ-7.9e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-lCOMPUTER,□DCOM可以发现,输出数据中若有负号、e和小数点,这些字符也占位。用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,cl='A',c2='a’。问在键盘上如何输入?#include<stdio.h>voidmain()(inta,b;floatx,y;charc1,c2;scanf("a=%db=%d",&a,&b);scanf("%f%e",&x,&y);scanf("%c%c",&cl,&c2);}解:a=3db=7□8.5D71.82□ADa下面的scanf函数输入数据,使a=10,b=20,cl='A',c2='a',x=1.5,y=-3,75,z=67.8,请问在键盘上如何输入数据?scanf(“%5d%5d%c%c%f%f%*f,%f",&a,&b,&c1,&c2,&x,&y,&z);解:main()inta,b;floatx,y,z;charcl,c2;scanfC<%5d%5d%c%c%f%f%*f,%f,,&a,&b,&cl,&c2,&x,&y,&z);printf("a=%d,b=%d,cl=5c,c2=%c,x=%6.2f,y=6.2f,z=6.2f\n,,),a,b,cl,c2,x,y,z);}运行情况如下:□□□10nnD20Aal.5-3.75□1.5,67.8 (此行为输入的数据,其中口为空格)a=10,b=20,cl=A,c2=a,x=1.50,y=-3.75,z=67.80 (此行为输出)说明:按%5d格式的要求输入a和b时,要先键入三个空格,然后再键入10与200%*f是用来禁止赋值的。在输入时,对应于%*f的地方,随意打入了一个数1.5,该值不会赋给任何变量。4.8圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。解:main()floatpi,h,r,l,s,sq,vq,vz;pi=3.1415926;printf("请输入圆半径r,scanf(l4%f,%f,,&r,&h);l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0・pi*r*r*r;vz=pi*r*r*h;printf("圆周长为:printf("圆面积为:printf(“圆球表面积为:printf("圆球体积为:printf("圆柱体积为:圆柱高h:\n");l=%6.2i\n",1);s=%6.2f\n",s);sq=%6.2f\n",sq);sv=%6.2f\n",vq);sz=%6.2f\n",vz);)运行结果:请输入圆半径r,圆柱咼h:1.5,3/圆周长为:圆面积为:圆球表面积为:圆球体积为:1=9.42s=7.07sq=28.27sv=7.95圆柱体积为: sz=21.214.9输入一个华氏温度,要求输出摄氏温度,公式为C=(5/9)(F-32)输出要有文字说明,取2位小数。解:main(){floatc,f;printf(“请输入一个华氏温度:\n");scanf("%F',&f);c=(5.0/9.0)*(f-32); /*注意5和9要用实型表示,否则5/9的值为〇・/printf(“摄氏温度为:%5.2f\n",c););运行结果:请输入一个华氏温度:78/摄氏温度为:25.56第5章选择结构程序设计语言中如何表示“真”和“假”?系统如何判断ー个量的“真”和“假”?解:设有一个逻辑表达式,若其结果为“真”,则以1表示:若其结果为“假”,则以。表示。但是判断ー个逻辑量的值时,以〇代表“真”,以非〇代表“假”。例如3&&5的值为“真”,系统会给出3&&5的值为k写出下面各逻辑表达式的值。设a=3,b=4,c=5。a+b>c&&b==callb+c&&b-c!(a>b)&&!clll!(x=a)&&(y=b)&&0!(a+b)+c-l&&b+c/2解:01101有3个整数a,b,c,由键盘输入,输出其中最大的数。解:方法一:程序如下:main(){inta,b,c;printf(“请输入3个整数:”);scanf("%d,%d,%d”,&a,&b,&c);if(a<b)if(b<c)printf(wmax=%d\nM,c);elseprintf(t4max=%d\n,,,b);elseif(a<c)printfC4max=%d\n,,,c);elseprintf("max二%d\n",a);运行结果:请输入3个整数:12,34,9/max=34方法二:使用条件表达式,可以使程序更简明,清晰。main(){inta,b,c,temp,max;printf(“请输入3个整数:");scanf("%d,%d,%d”,&a,&b,&c);temp=(a>b)?a:b; /・将a和b中的大者存入temp中・/max=(temp>c)?temp:c; /*将a和b中的大者与c比较,取最大者・/printf("3个整数中最大数是%d\n”,max);方法三:a>b?(a>c?a:c):(b>c?b:c)运行结果:请输入3个整数:12,34,9/3个整数的最大数是34。有一函数:写ー程序,输入x值,输出y值。解:程序如下main(){intx,y;printf("输入x:");scanf("%d”,&x);if(x<l) /*x<l*/{y=x;printf("x=%d3d,y=x=%d\n”,x,y);elseif(x<10)/*1くx<10*/elseif(x<10){y=2*x-l;printf(44x=%3d,y=2*x-1=%d\nM,x,y);}else /*x210*/{y=3*x-ll;printf(44x=%3d, y=3*x-ll=%d\n,\x,y);}}运行结果:①输入x:4/x=4, y=2*x-l=7②输入x:-1/x=-l,y=x=-l③输入x:20/x=20, y=3*x-11=49给出ー百分制成绩,要求输出成绩等级’A’、’B’、’C‘、‘D‘、'E'。90分以上为‘A',8〇〜89分为‘B',7〇〜79分为‘C',6〇〜69分为‘D',60分以下为‘E'。解:程序如下#include"stdio.h"voidmain()(floatscore;chargrade;printf(”请输入学生成绩:り;scanf(n%fn,&score);while(score>100IIscore<0)(printf("\n输入有误,请重输”);scanf(n%f'\&score);)switch((int)(score/10))(case10:case9:grade=*A*;break;case8:grade=,B,;break;case7:grade=,C,;break;case6:grade='Df;break;case5:case4:case3:case2:case1:case〇:grade二'E';}printf(、成绩是%5.lf,相应的等级是%c。\n",score,grade);}给定一个不多于5位的正整数,要求:①求它是几位数;②分别打印出每ー位数字;③按逆序打印出各位数字。例如原数为321,应输出123。解:main()(longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;/・分别代表个位,十位,百位,车位,万位和位数・/printf(“请输入ー个整数(〇〜99999):”);scanf("%ld",&num);if(num>9999)place=5;elseif(num>999)place=4;elseif(num>99)place=3;elseif(num>9)place=2;elseplace=l;printf("place=%d\n”,place);printf(“每位数字为:");ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*1OOOO-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*1OOOO-thousand*1OOO-hundred*100-ten*10);switch(place){case5:printf("%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);printf("\n反序数字为:");printf(u%d%d%d%d%d\nM,indiv,ten,hundred,thousand,ten_thousand);break;case4:printfC6%d,%d,%d,%d^^,thousand,hundred,ten,indiv);printf("\n反序数字为:”);printf("%d%d%d%d\nM,indiv,ten,hundred,thousand);break;case3:printf(t4%d,%d,%dM,hundred,ten,indiv);printf("\n反序数字为:”);printf("%d%d%d\nM,indiv,ten,hundred);break;
case2:printf("%d,%d”,ten,indiv);printf("\n反序数字为:");printf(u%d%d\nM,indiv,ten);break;casel:printf("%d”,indiv);printf("\n反序数字为:");printf("%d\n”,indiv);break;}运行结果:请输入ー个整数(0-99999):98765/位数=5每位数字为:9,8,7,6,5反序数字为:56789企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元(100000<Iく20000〇)时,其中10万元按10%提成,高于10万元的部分,可提成7.5%;200000<1<400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;400000<1く600000时,高于40万元的部分按3%提成;600000<1く100000〇时,高于60万的部分按1.5%提成;1>1000000时,超过100万的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中由10万元按10%的比例提成,另外5万元则按7.5%提成。用if语句编程序,main(){longi;floatbonus.bon1.bon2.bon4.bon6.bon10:bon1=100000*0.1;bon1=100000*0.1;bon2=bon1+100000*0.075bon4=bon2+100000*0.05bon6=bon4+l00000*0.03bon1〇=bon6+400000*0.015;printf(“请输入利润i:”);scanf("%ld”,&i);if(i<=100000)bonus=i*0.1;elseif(i<=200000)bonus=bonl+(i-l00000)*0.075elseif(i<=400000)bonus=bon2+(i-200000)*0.05elseif(i<=600000)/・利润为10万元时的奖金・//・利润为20万元时的奖金・//・利润为40万元时的奖金・//・利润为60万元时的奖金・//・利润为100万元时的奖金・//・利润在10万元以内按0.1提成奖金・//・利润在!0万至20万元时的奖金・//・利润在20万至40万元时的奖金・/bonus=bon4+(i-400000)*0.03 /・利润在40万元至60万元时的奖金・/elseif(i<=1000000)bonus=bon6+(i-600000)*0.015/・利润在60万元至I00万元时的奖金・/elsebonus=bon10+(i-1000000)*0.01 /・利润在100万元以上时的奖金・/printf("奖金是%10.2fM,bonus);运行结果:请输入利润i:23400〇/奖金是:19200.00用switch语句编程序,main(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;intc;bonl=100000*0.1bon2=bon1+100000*0.075bon4=bon2+200000*0.05bon6=bon4+200000*0.03bon1〇=bon6+400000*0.015printf(“请输入利润i:”);scanf("%d",&i);c=i/100000;if(c>10)thenc=10;switch(c){case0:bonus=i*0.1;break;bonus二bonl+(i-100000)*0.075;break;bonus=bon2+(i-200000)*0.05;break;bonus=bon4+(i-400000)*0.03;break;bonus=bon6+(i-600000)*0.015;break;bonus=bon10+(i-1000000)*0.01;)printf("奖金是%10.2f",bonus);运行结果:请输入利润i:234000/奖金是:19200.00输入4个整数,要求按由小到大的顺序输出。解:程序如下include"stdio.h"voidmain()(intt,a,b,c,d;printf(”请输入4个整数:り;scanf(n%d,%d,%d,%dn,&a,&b,&c,&d);printf(,,a=%d,b=%d,c=%d,d=%d,,,a,b,c,d);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf("排序结果如下:\n");printf("%d%d%d%d\n",a,b,c,d);}有4个圆塔,圆心分别为(2,2),(-2,2),(2,-2),(-2,-2),圆半径为1〇见图4.4。这4个塔的高度分别为10mo塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为0)。解:程序如下main(){inth=10;floatx1=2,yI=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;printf(“请输入ー个点(x,y):");scanf("%f,%f”,&x,&y); /・求该点到各中心点的距离・/dl=(x-xl)*(x-xl)+(y-yl)*(y-yl);d2=(x-x2)*(x-x2)+(y+y2)*(y+y2;d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);d4=(x+x4)*(x+x4)+(y+y4)*(y+y4);if(dl>l&&d2>l&&d3>l&&d4>l)h=0;/*判断该点是否在塔外・/printf(“该点高度为%d",h);运行情况:请输入ー个点(x,y):0.5,0.7/该点高度为O请输入・一个点(x,y):2.1,2.3/该点高度为10第6章循环控制输入两个正整数m和n,求其最大公约数和最小公倍数。解:用辗转相除法求最大公约数main(){intp,r,n,m,temp;primf(“请输入两个正整数n,m:”);scanf("%d,%d”,&n,&m);if(n<m){temp=n;n=m;m=temp; /・把大数放在n中,小数放在m中・/)p=n*m; /・先将m和n的乘积保存在p中,以便求最小公倍数时用・/while(r!=0) /*求m和n的最大公约数・/{r=n%m;n=m;m=r;]printf(“它们的最大公约数为:%d\n",n);printf("它们的最小公倍数为:%d\n",p/n); /*p是原来两个整数的乘积・/}运行情况:请输入两个正整数:12,8/它们的最大公约数为:4它们的最小公倍数为:24输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。解:#include<stdio.h>main(){charc;intIetter=0,space=0,digit=0,other=0;printf(“请输入一行字符:\n");while((c=getchar())!=,\n,){if(c>='a'&&cv='z'IIc>='A'&&c<=,Z,)letter-H-;elseif(cニニ'')space++;elseif(c>=’〇’&&c<='9')digit++;elseother++;)printf("字母数=%d,空格数=%d,数字数=%d,其它字符数=%d\n”,letter,space,digit,other);}运行情况:请输入一行字符:Myteacher'saddressis“#123BeijingRoad,Shanghai”.字母数:38,空格数:6,数字数:3,其它字符数:6求Sn=a+aa+aaa+…+aa…a之值,其中a是ー个数字。例如:2+22+222+2222+22222n个a(此时n=5),n由键盘输入。解:main(){inta,n,i=l,sn=0,tn=0;printf("a,n=:");scanf("%d,%d",&a,&n);while(i<=n){tn=tn+a; /・赋值后的tn为i个a组成数的值・/sn=sn+tn; /・赋值后的sn为多项式前I项之和・/a=a*10;++i;}printf("a+aa+aaa+...=%d\n,,,sn);}运行情况:a,n:2,5/a+aa+aaa+...=24690求£n!(即求1+2!+…+20!)。解:main(){floats=O,t=l;intn;for(n=l;n<=20;n++)
t=t*n;s=s+t;t=t*n;s=s+t;/・求n!*//・将各项累加・/printfCl!+2!+...+20!=%e\n,,,s);1运行结果:l!+2!+…+20!=2.56133e+18注意:s不能定义为int型,因为int型数据的范围是ー32768〜32767;也不能定义为long型,因为long型数据的范围为ー21亿〜21亿,无法容纳求得的结果。求解:#include"stdio.h0#include"conio.h"main()(intn1=100,n2=50,n3=10,k;floatsl=0,s2=0,s3=0;for(k=1;k<=n1;k++)sl+=k;for(k=l;k<=n2;k++)s2+=k*k;for(k=l;k<=n3;k++)s3+=1.0/k;printf(,'sum=%8.2f\n",s1+s2+s3);getch();}打印出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个“水仙花数”,因为153=13+53+33。解:main(){inti,j,k,n;printf(““水仙花数”是:");for(n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)
printf("%4d”,n);}printf("\n”);}运行结果:“水仙花数”是:1533703714076.7•一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有“完数”,并按下面的格式输出其因子:6Itsfactorsare1,2,3解:方法一:#defineM1000/・定义寻找范围・/main(){intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;inti,a,n,s;for(a=2;av=M;a++)/*a是2〜1000之间的整数,检查它是否完数・/{n=0;/*n用来累计a的因子的个数s=a;/*s用来存放尚未求出的因子之和,开始时等于a*/for(i=l;iva;i++)/・检查i是否a的因子・/if(a%i==0)/・如果i是a的因子・/{n++;/*n加1,表示新找到ー个因子・/s=s-I;/*s减去已找到的因子,s的新值是尚未求出的因子之和*/switch(n)/*将找到的因子赋给kl…klO*/{case1:kl=i;break;/・找出的第1个因子赋给kl*/case2:k2=i;break;/・找出的第2个因子赋给k2*/case3:k3=i;break;/・找出的第3个因子赋给k3*/case4:k4=i;break;/・找出的第4个因子赋给k4*/case5:k5=i;break;/・找出的第5个因子赋给k5*/case6:k6=i;break;/・找出的第6个因子赋给k6*/case7:k7=i;break;/・找出的第7个因子赋给kl*/case8:k8=i;break;/・找出的第8个因子赋给k8*/case9:
k9=i;break; /・找出的第9个因子赋给k9*/case10:klO=i;break;/・找出的第10个因子赋给klO*/if(s==0){printf("%dItsfactorsare",a);if(s==0){printf("%dItsfactorsare",a);if(n>l)printf("%d,%d”,kl,k2);if(n>2)printf(ヽ%d”,k3);输入ー个因子・/if(n>3)printf(",%d",k4);if(n>4)printf(",%d”,k5);if(n>5)printf(",%d”,k6);if(n>6)printf(",%d”,k7);if(n>7)printf(",%d”,k8);if(n>8)printf(",%d”,k9);if(n>9)printf(",%d”,klO);printf("\n”);*s=0表示全部因子都已找到*//*n>!表示a至少有2个因子・//*n>2表示至少有3个因子,故应再/・以下类似・/运行结果:6Itsfactorsare1,2,328Itsfactorsare1,2,4,7,14496Itsfactorsare1,2,4,8,16,31,62,124,248方法二:main(){intm,s,i;for(m=2;m<1000;m++){s=0;for(i=l;i<m;i++)if((m%i)==0)s=s+i;if(s==m){printf("%d是ー个“完数”。它的因子是",m);for(i=l;i<m;i++)if(m%I==0)prin情("%d'',I);printf("\n”);|))方法三:此题用数组方法更简单。main(){intk[ll];inti,a,n,s;for(a=2;a<=1000;a++){n=0;s=a;for(i=l;i<a;i++)if((a%i)==O){n++;s=s-i;k[n]=i; /・将找到的因子赋给k[l],-,k[10]*/}if(s==0){printf("\n%d是ー个“完数”,它的因子是:",a);for(i=l;i<n;i++)printf("%d,”,k[i]);printf("%d\n'',k[n]);)))运行结果:6是ー个‘‘完数”,它的因子是:1,2,328是ー个‘‘完数”,它的因子是:1,2,4,7,14496是ー个“完数”,它的因子是:1,2,4,8,16,31,62,124,248有一分数序列:2ハ,3/2,5/3,8/5,13/8,21"3,…求出这个数列的前20项之和。解:main(){inti,t,n=20;floata=2,b=1,s=0;for(i=l;i<=n;i++){s=s+a/b;t=a;a=a+b; /・将前ー项分子与分母之和作为下ー项的分子・/b=t; /*将前ー项分子作为下ー项的分母・/}printf("sum=%9.6f\n",s);)运行结果:sum=32.660259ー球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?#include"stdio.hnvoidmain()floatsn=100,hn=sn/2;intn;for(n=2;n<=1〇;n++)(sn=sn+2*hn;/・第n次落地时共经过的米数・/hn=hn/2;/・第n次反弹高度・/)printf("第10次落地时共经过%f米。\n",sn);printf("第10次反弹%f米。\n",hn);)猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,见只剩ー个桃子了。求第一天共摘多少桃子。解:main(){intday,x1,x2;day=9;x2=l;while(day>0){xl=(x2+l)*2; /*第一天的桃子数是第二天桃子数加1后的2倍・/x2=x1;day--;)printfC'total=%d\n,,,x1);运行结果:total=1534用迭代法求x=。求平方根的迭代公式为xn+l=()+要求前后两次求出的x的差的绝对值小于10-5o解:用迭代法求平方根的算法如下:设定•・个x的初值x0;用上述公式求出x的下一个值xl;再将xl代入上述公式,求出x的下ー个值x2;如此继续下去,直到前后两次求出的x值(和xn+1)满足以下关系:Ixn+1—1<10—5为了便于程序处理,今只用变量x0和xl,先令x的初值x0=a/2(也可以是另外的值),求出xl;如果此时lxn+1—1210—5,则使x—xO,然后用这个新的xO求出下ー个xl;如此反复,直至ljlxn+l—1<10—5为止。 程序如下:#include<math.h>main(){floata,x0,xl;printf("Enterapositivenumber:n);scanf(“%f",&a); /*输入a的值・/x0=a/2;xl=(x0+a/x0)/2;do{x0=x1;x1=(x0+a/x0)/2;)while(fabs(xO-x1)>=le-5);printf(*Thesquarerootof%5.2fis%8.5f\n,,,a,xl);)运行结果:Enterapositivenumber:2/Thesquarerootof2.00is1.41421用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。解:牛顿迭代法又称牛顿切线法,它采用以下方法求根:先任意设定一个与真实的根接近的值xO作为第一个近似根,由xO求出f(xO),过(xO,f(xO))点做f(x)的切线,交x轴于xl,把它作为第二次近似根,再由x!求出f(xl),再过(xl,f(xl))点做f(x)的切线,交x轴于x2,再求出f(x2),再作切线如此继续下去,直到足够接近真正的x・为止。这就是牛顿迭代公式。本题中,f(x)=2x3-4x2+3x-6=((2x-4)x+3)x-6f'(x)=6x2-8x+3=(6x-8)+3#include"stdio.h"#include"math.h”voidmain()(floatxl,xO,f,fl;xl=1.5;do(x0=x1;f=((2*x0・4)*x0+3)*x0・6;fl=(6*x0-8)*x0+3;xl=x0-f7fl;}while(fabs(xl-xO)>=le-5);printf("THerootofequationis%5.2f\nu,xl);}用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。解:二分法的思路如下:先指定一个区间[xl,x2],如果函数f(x)在此区间是单调变化,可以根据f(xl)和f(x2)是否同符号来确定方程f(x)=0在[xl,x2]区间是否有ー个实根。若f(xl)和f(x2)不同符号,则f(x)=0在[xl,x2]区间必有・个(且只有ー个)实根。若f(xl)和f(x2)同符号,说明在[xl,x2]区间无实根,要重新改变xl和x2的值。当确定[xl,x2]有一个实根,采用二分法将[xl,x2]区间一分为二,再判断在哪个小区间中有实根。如此不断进行下去,直到小区间足够小为止。算法N-S图如下:#include"stdio.h"#include"math.h"voidmain()floatx0,x1,x2,fx0,fxl,fx2;doprintf("Pleaseenterxl,x2:");scanf("%f,%f",&xl,&x2);fxl=xl*((2*xl-4)*xl+3)-6;fx2=x2*((2*x2-4)*x2+3)-6;}while(fx1*fx2>0);dox0=(xl+x2)/2;fx0=x0*((2*x0-4)*x0+3)-6;if(fx0*fxl<0)x2=x0;fx2=fx0;}elsexl=x0;fx1=fx0;)}while(fabs(fxO)>=le-5);printf("x=%6.2f\n",x0);}打印出以下图案:解:
main(){intI,j,k;for(i=0;iv=3;i++){for(j=O;j<=2-i;j++)printf(""for(k=0;k<=2*i;k++)printf(“*”);printf(“\n”);)for(i=0;i<=2;i++)main(){intI,j,k;for(i=0;iv=3;i++){for(j=O;j<=2-i;j++)printf(""for(k=0;k<=2*i;k++)printf(“*”);printf(“\n”);)for(i=0;i<=2;i++){for(j=O;j<=i;j++)print”"");for(k=0;k<=4-2*i;k++)printf(“*”);printf(“\n”);})运行结果:/・输出・号前面的空格・//・输出・号・//・输出完一行・号后换行・//・输出下面3行・号・//・输出・号前面的空格・//・输出・号・//・输出完一行・后换行・/****两个乒乓球队进行比赛,各出3人。甲队为A、B、C3人,乙队为X、丫、Z3人。已抽签决定比赛名单。有人向队员打听比赛名单。A说他不和X比,C说他不和X、Z比。请编程找出3对赛手的名单。解:用计算机程序处理此问题时,必须对每ー种成对的组合ーー检验,看他们是否符合条件。开始时,并不知道A、B、C与X、Y、Z中哪ー个比赛,可以假设A与i比赛,B与j比赛,C与k比赛。#include"stdio.h"voidmain()(chari,j,k;/*i是A的对手,j是B的对手,k是C的对手・/for(i='X";i<='Z';i++)for(j='X,;j<='Z';j++)if(i!=j)for(k='X';k<='Z';k++)if(i!=k&&j!=k)if(i!='X'&&k!='X"&&k;='Z')printf("A-%c\tB-%c\tC-%c\n",i,j,k);第7章数组用筛法求100之内的素数。解:所谓“筛法”指的是"Eratosthenes筛法”。Eratosthenes是古希腊的著名数学家。他采用的方法是:在ー・张纸上写下1〜1000之间的全部整数,然后逐个判断它们是否素数,找出ー个非素数就把它挖掉,最后剩下的就是素数。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950...具体做法如下:先将1挖掉(因为1不是素数)。用2去除它后面的各个数,把能被2整除的数(如4,6,8-)挖掉,即把2的倍数挖掉。用3去除它后面各数,把3的倍数挖掉。分别用4,5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如在上表中1〜50范围内的素数,要一直进行到除数为47为止。事实上,这ー过程可以简化。如果需要找1〜n范围内的素数,只需进行到除数为(取其整数)即可。例如对1〜50,只需进行到将7(即的整数部分)作为除数即可。上面的算法可表示为:挖去1;用刚オ被挖去的数的下ー个数p去除p后面的各数,把p的倍数挖掉;检查p是否小于的整数部分(如果n=1000,则检查p<31否),如果是,则返回(2)继续执行,否则就结束;纸上剩下的就是素数。解题的基本思路有了,但要变成计算机的操作,还要作进ー步的分析。如怎样判断ー个数是否已被“挖掉”,怎样找出某ー个数p的倍数,怎样打印出未被挖掉的数。可以设ー个数组a,a[l]到a[100]的值分别是1,2,3,…100。然后用上述方法将非素数“挖去”。如果ー个数被认为是非素数,就将它的值变为零,最后将不为零的数组元素输出,就是所求的素数表。程序如下:#include<math.h>main(){inti,j,n,a[101J;for(i=l;i<=100;i++)a[i]=i;for(i=2;i<sqrt(100);i++)for(j=i+l;j<=l00;j++){if(a[i]!=0&&a[j]!=O)if(a|j]%a[i]=0)a[j]=O;} /・非素数,赋值为〇,"挖掉”*/printf("\n”);for(i=2,n=0;i<=100;i++){if(a[i]!=0){printf("%5d”,a[i]);
n++;}if(n==10) /・此处if语句的作用是在输出10个数后换行・/{printf("\n”);n=0;})运行结果:2357 11 13 17 19 23 29 313741434753596167 71 73 79 83 89 977.2用选择法对10个整数排序(从小到大)。解:选择排序的思路如下:设有10个元素aロトa[10],将a[l]与a[2]~a[10]比较,若a[l]比a[2]~a[10]都小,则不进行交换,即无任何操作。若a[2卜a[10]中有一个以上比a[l]小,则将其中最小的ー个(假设为a[i])与a[l]交换,此时a[l]中存放了10个中最小的数。第二轮将a⑵与a[3卜a[10]比较,将剩下9个数中的最小者a[i]与a⑵对换,此时a[2]中存放的是10个中第2小的数。依此类推,共进行9轮比较,a[l]到a[10]就已按由小到大的顺序存放。程序如下:main(){inti,j,min,a[l1];{inti,j,min,a[l1];printf("Enterdata:\n");for(i=l;i<=10;i++){printfCa[%d]=,,,i);scanf("%d”,&a[i]);}printf("\n");for(i=l;i<=10;i++)pritnf("%5d”,a[i]);printf("\n”);for(i=l;i<=9;i++){min=i;for(j=i+l;j<=10;j++)if(a[min]>a[j])min=j;a[0]=a[i];a国对换・/a[i]=a[min];a[min]=a[0];}printf("\nThesortednumbers:\n");for(i=l;i<=10;i++)printf("%5d”,a[i]);/・输入10个数・//・输出这10个数・//・以下8行是对10个数排序・//・以下3行将a[i+l]~a[10]中最小者与/・输出已牌好序的10个数・/运行结果:Enterdata:a[l]=6Za[2]=90Za[3]=45Za[4]=56/a[5]=l/a[6]=15Za[7]=44Za[8]=78Za[9]=58Za[10]=101Z6 9045561 15 44 78 58 101Thesortednumber:1 6154445 56 58 78 90 101说明:定义a数组有11个元素:a[0]~a[10],但实际上只对a[l卜a[10]这10个元素输入值并排序,这样符合人们的习惯。a[〇]用作两数交换时的中间变量。7.3求一个3X3矩阵对角线元素之和。解:main(){inta[3][3],sum=O;inti,j;printf(44Enterdata:\nM);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d”,&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printff'sum=%5d\n,,,sum);}运行情况如下:Enterdata:123456789/sum=15此程序中用的是整型数组,运行结果是正确的。如果用的是实型数组,程序应修改为:main(){floata[31[3],sum=O;intij;printfC'Enterdata:\n");for(i=0;i<3;i++)for(j=O;j<3;j++)scanf("%C,&a[i][j]); /*注意:在%f前有一空格,否则无法输入数据・/for(i=0;iv3;i++)sum=sum+a[i][i];printf(6<sum=%6.2f\nM,sum);)该程序在TurboC3.0下可正常运行,得到结果:sum=16.50但在TurboC2.0环境下运行此程序时,出现运行错误,在输入数据后系统显示出错信息:scanf:floatingpointfomatsnotlinkedAbnormalprogramtermination经过检查,程序的逻辑和语法都是正确的,而且在其它的C系统中(例如BorlandC++)可以正常运行。出现这种情况是所用的C编译系统不完善,处理的方法有两个:ー是把程序移到其它C系统上运行(但往往不方便);二是迁就所用的C系统,修改程序,避开其缺陷,这就需要通过多次试验掌握其规律。对以上程序来说,可以有多种替代的方案,例如可以把程序中第5〜7行改为:for(i=0;i<3;j++)scanf(u%f%f%r,&a[i][0],&[i][l],&a[i][2]);它在效果上应与原来的第5〜7行等价,但上机运行时发现仍不能正常运行,再改为:for(j=0;j<3;j++)scanfC%f%f%r,&a[0][j],&[1][j],&a[2][j]);它也是与原来的5〜7行等价的,上机运行时发现可以正常运行。程序如下:main(){floata[3][3],sum=O;inti,j;printf(44Enterdata:\n")for(j=0;j<3;j++)scanf("%f%f%r,&a[0][j],&a[l][j],&a[2][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf(ltsum=%6.2f\n,,,sum);)运行情况如下:Enterdata:1.12.23.34.45.56.67.78.89.9/应注意数据与元素的对应关系:1.1是a[〇][〇]的值,2.2是a[l][0]的值,3.3是a[2][0]的值……7.4有一•个已排好序的数组,今输入ー数,要求按原来排序的规律将它插入数
组中。解:程序如下:main(){inta[11]={1,4,6,9,13,16,19,28,40,100);/*注意数组a长度应足够大,以便容纳新插入的元素・/inttemp1,temp2,number,end,i,j;printf(44arraya:\nM);for(i=0;i<10;i++)printf("%5d”,a[i]);printf(“\n”);printf(44Insertdata:");scanfC<%d",&number);end=a[9];if(number>end)a[10]=number;else{for(i=0;i<10;i++){if(a[i]>number) /・找到合适的插入位置为i*/{templ=a[i];a[i]=number;for(j=i+l;jvll;j++)/*将原来的第i个元素移至第i+1位置,其它顺序后移・/{temp2=afj];a[j]=templ;templ=temp2;}break;}}}printf(46Now,arraya:\n");for(i=0;i<ll;i++)printfC%6d",a[i]);)运行情况如下:arraya:运行情况如下:arraya:1 4 6 9 13 16Insertdata:5/Now,arraya:1 4 5 6 9 1319 28 40 10016 19 28 40 100加以改进后,可以采用以下方法。voidmain()(inta[ll]={1,4,6,9,13,16,19,28,40,100};inttemp1,temp2,number,end,i,j;printf(narraya:\n");for(i=0;i<10;i++)printf(”%5d”,a[i]);printf(ヽ”);printf(MInsertdata:");scanf("%d",&number);for(i=9;i>=0&&a[i]>number;i-) /・从数组中最后ー个数开始比较,凡大于number的数向后移动・/a[i+l]=a[i];a[i+l]=number;/*将number插入到合适位置*/for(i=0;i<ll;i++)printf("%5d",a[i]);printf("\n");)7.5将一个数组中的值按逆序重新存放。例如原来顺序为:8,6,541。要求改为:1,4,5,6,8〇解:程序如下:#defineN5main(){inta[N],i,temp;printf("Enterarraya:\n’');for(i=0;ivN;i++)scanfC'%d”,&a[i]);printf("arraya:\n");for(i=0;i<N;i++)printf(“%4d”,a[i]);for(i=0;ivN/2;i++){temp=a[i];a[i]=a[N-M];a[N-i-l]=temp;}printf("\nNow,arraya:\n’');for(i=0;i<N;i++)printf("%4d'',a[i]);printf("\n”);)运行情况如下:Enterarraya:86541/arraya:8 6 5 4 1Now,arraya:14 5 6 8程序中第二个for循环也可以写成:for(i=0,j=N-l;i<j;i++,j—){temp=a[i];a[i]=a[j];a[j]=temp;)7.6打印出以下的杨辉三角形(要求打印出10行)。11112131641解:杨辉三角形是(a+b)n展开后各项的系数。例如:(a+b)0展开后为1 系数为1(a+b)l展开后为a+b 系数为1,1(a+b)2展开后为a2+2ab+b2 系数为1,2,1(a+b)3展开后为a3+3a2b+3ab2+b3 系数为 1,3,3」(a+b)4展开后为a4+4a3b+6a2b2+4ab3+b4 系数为1,4,6,4,1以上就是杨辉三角形的前5行。杨辉三角形各行的系数有以下规律:各行第一个数都是1。各行最后一个数都是1。从第3行起,除上面指出的第一个数和最后一个数外,其余各数是上ー行同列和前一列2个数之和。例如第4行第2个数(3)是第3行第2个数(2)和第3行第1个数(1)之和。可以这样表示:a[i][j]=a[i-l][j]+a[i-l][j-l],其中i为行数,j为列数。#defineN11main(){inti,j,a[N][N];for(i=l;i<N;i++){a[i][i]=l;a[i][l]=l;)for(i=3;i<N;i++)for(j=2;j<=i-l;j++)a[i]U]=a[i-l]U-l]+a[i-l]U];
for(i=l;i<N;i++){for(j=l;j<=i;j++)printf("%6d”,a[i][jD;printf(M\nM);)1运行结果:111TOC\o"1-5"\h\z2 1411051201561353521715670562881841261268436913 311 4 61 5 101 6 151 7 211 8 281 9 367.7输出魔方阵。所谓魔方阵是指这样的方阵(方阵的阶数应为奇数),它的每…行、每一列和对角线之和均相等。例如,三阶魔方阵为要求输出由1〜n2之间的自然数构成的魔方阵。解:魔方阵中各数的排列规律如下:1)将1放在第一行中间一列。2)从2开始直到nXn止各数依次按下列规则存放:每ー个数存放的行比前ー个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列)。3)如果上一个数的行数为1,则下ー个数的行数为n(指最下一行),列数同样加1〇例如,1在第1行第2列,则2应放在最下一行第3歹リ。4)当上一个数的列数为n时,下ー个数的列数应为1,行数同样减lo例如2在第3行最后一列,则3应放在第2行第1歹リ。5)如果按上面规则确定的位置上已经有数,或上一个数是第1行第n列时,则把下ー个数放在上一•个数的下面。例如,按上面的规定,4应该放在第1行第2列,但该位置已经被1占据,所以4就放在3的下面。由于6是第1行第3歹リ(即最后一列),故7放在6的下面。按此方法可以得到任何的魔方阵。voidmain()inta[16][16],i,j,k,p,n;p=l;while(p==l)printf("Entern(n=lto15):");scanf("%d",&n);if(n!=0&&n<=15&&n%2!=0) /・要求阶数为1至15之间的奇数・/p=0;)/・初始化,第0行和第0列不用,与魔方阵构造规则一致*/for(i=l;i<=n;i++)for(j=l;j<=n;j++)a[i][j]=O;j=n/2+l;a[l]|j]=l;for(k=2;k<=n*n;k++)(i—;j++;if(i<l&&j>n)(i+=2;j-;)else(if(i<l)i=n;if(j>n)j=l;1if(a[i]|j]=O)a[i][j]=k;else(i+=2;j-;a[i][j]=k;/・输出魔方阵・/for(i=l;i<=n;i++)(for(j=l;j<=n;j++)printf("%7d",a[i][j]);printf(',\nn);}systemC^ause");}7.8找出ー个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。解:ー个二维数组最多有一个鞍点,也可能没有。解题思路是:先找出一行中值最大的元素,然后检查它是否该列中的最小值,如果是,则是鞍点(不需要再找别的鞍点了),输出该鞍点:如果不是,则再找下一行的最大数,……。如果每一行的最大数都不是鞍点,则该数组无鞍点。程序如下:defineN10defineM10main(){inti,j,k,m,n,flagl,flag2,a[N][M],max,maxi,maxj;printf(u\n输入行数n:”);scanf("%d'',&n);printf(u\n输入列数m:”);scanf("%d”,&m);for(i=0;i<n;i++){printf("第%d行?\n",i);for(j=0;j<m;j+-F)scanf("%d'',&a[i]UD;}for(i=0;ivn;i++){for(j=0;j<m;j++)print"5dmi皿);printf("\n”);}flag2=0;for(i=0;ivn;i++){max=a[il[0];for(j=0;j<m;j++)if(a[il[j]>max){max=a[i][j];maxj=j;}for(k=0,flag1=1;k<n&&flagl;k++)if(max>a[k][maxj])flag=0;if(flagl){printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max);flag2=l;})if(!flag2)printf("\n矩阵中无鞍点!\n");)运行结果:①输入行数n:3/输入列数m:4/第〇行?1234/第1行?4556/第2行?3567/TOC\o"1-5"\h\z12 3 44 5 3 63 5 6 7第〇行,第3列的4是鞍点②输入行数n:3/输入列数m:4/第〇行?24907/第1行?3458/第2行?9123/TOC\o"1-5"\h\z2 4 90 73 4 5 89 12 3矩阵中无鞍点!7.9有15个数按从小到大的顺序存放在ー个数组中。输入一个数,要求用折半查找法找出该数是数组中第儿个元素的值。如果该数不在数组中,输出“不在表中”。解:折半查找是ー种效率较高的查找方法,但前提是待查找的序列必须有序。其思路是:假定待查找序列按从大到小排列,设变量low指向待查找区间的下限(ー开始时指向第一个元素),变量high指向待查找区间的上限(ー开始时指向最后一个元素),令变量,将待查找元素与mid所指元素比较,若相等,则查找成功;若小于,由于待查找序列按从大到小排列,可以断定待查找元素只可能在mid+1〜high区间,令low=mid+l,查找区间缩小一半,然后继续在此区间进行折半查找;类似的,若大于,则令high=mid-l。如此反复进行,如果出现low>high,则表示查找失败,即序列中不存在待查找元素。下面的程序演示了随机产生N—1个。〜99的整数,存放在数组川〜[№1]单元中,主要为了与人的习惯一致,即第1个元素存放位置是⑴号单元。然后进行冒泡法排序,最后根据用户输入的数据进行折半查找(可进行多次)。#defineN16voidmain()(intarray[N],i,j,number,low,high,mid;charch;printf(MTheoriginalarrayis:");for(i=l;i<N;i++)(array[i]=rand()%100; /・产生并显示NT个〇〜99的随机整数,存放在数组ロ]〜[№1]单元中・/printf("%3d",array[i]);)printf("\n");/・冒泡法排序・/for(i=l;ivN;i++)for(j=l;j<N-i;j+-f-)if(array[j]<array[j+l])(array[O]=array[j];array[j]=arrayfj+l];array[j+1]=array[O];)/・显示排序后的数列・/printf("Thesortedarrayis:");for(i=l;i<N;i++)printf("%3d",array[i]);printf("\n");/・折半査找,可进行多次・/while(l){printf("\nPleaseinputthenumberwhichyouwantto
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 期中模拟检测卷03(解析版)
- 2025年昌吉职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年新疆科信职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025科学仪器行业技术发展与市场前景分析
- 外架工劳务分包合同范本
- 股东转让出资合同书
- 2024年旅游项目规划设计合同
- 医疗仪器行业发展趋势
- 环境保护与绿色航空发展
- 营销推广服务合同模板
- 天津市五区县重点校2024-2025学年高一上学期1月期末联考试题 化学 含答案
- 吉林省吉林市普通中学2024-2025学年高三上学期二模试题 生物 含答案
- 2025年湖南省通信产业服务限公司春季校园招聘76人高频重点提升(共500题)附带答案详解
- 《电影之创战纪》课件
- 2024-2025学年人教版五年级(上)英语寒假作业(一)
- 开题报告-铸牢中华民族共同体意识的学校教育研究
- 浙江省五校镇海中学2025届高考考前模拟数学试题含解析
- 公司2025年会暨员工团队颁奖盛典携手同行共创未来模板
- 数 学2024-2025学年人教版七年级数学上册有理数混合运算100题
- 新沪科版八年级物理第三章光的世界各个章节测试试题(含答案)
- 人教版五年级上册四则混合运算300道及答案
评论
0/150
提交评论