C程序设计强化辅导讲义_第1页
C程序设计强化辅导讲义_第2页
C程序设计强化辅导讲义_第3页
C程序设计强化辅导讲义_第4页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

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

文档简介

C语言概述考核要点:.C语言程序有一个main函数和若干个其他函数组成.任何ー个程序有且仅有一个main函数,它可以出现在程序的任何位置;程序运行从main开始,在main中结束。.C的输入、输出.C的注释数据类型、运算符与表达式考核要点:.数据类型的转换问题:有隐式转换和显式转换(强制转换)。其中隐式转换的规律为:当两个数值类型的量参与运算时,占用内存空间小的量自动转换为占用空间大的量的数据类型(int—>float一>double—>longdouble)!参与赋值运算时,以等号左边的数据类型为准。强制类型转换用;(数据类型名)要转换的变量名例如;要把doublea转换为int型(int)a.对ー些常用的库函数的考核,请务必记住下列函数原型;include<math.h>intabs(intx); 求整数x的绝对值doubleexp(doublex);求e的x次幕doublepow(doublex,doubley);求x的y次暴doublesqrt(doublex): 求根号xinclude<string.h>unsignedintstrlen(char*str);求字符串str中的字符的个数(不包括へ0,)intstrcmp(char*strl,char*tr2);比较两个字符串strl,str2,strl>str2返回正数:strl=str2返回。:strkstr2返回负数。char*strcpy(char*strl,char*str2);JEstr2指向的字符串拷贝到strl中去。char*strcat(char*str1,char*str2);把字符串str2接到str!后面,strl最后面的、〇,被取消。3.以へ0,作为字符串结束标志4标识符定义规则如下:只能有字母、数字下划线组成:首字符不能为数字;不能使用关键字;大小写有区别。5++和 :前++变量时变量先+1再参与运算,后++是变量先参与运算再+16运算符的优先级:牢记下列关系,初等运算符,单目运算符〉算术运算符〉关系运算符,逻辑运算符,赋值运算符〉逗号运算符。其中&&的优先级比II髙,结合方向为从左往右。尤其要注意短路的题目,当逻辑表达式中,某部分的运算结果可能导致其余部分不再参与运算,例如:A&&B由结合性,先算A部分为真,则继续计算B部分:但若A部分为假,不论B部分为何值,整个表达式肯定为假,所以系统做的简化处理是不再计算B部分以节约运行开销。同理,AIIB:如果计算出A为真,系统也不会再计算B部分。复杂的情况是A&&BICAIIB&&C,我们也将在习题中讲解。7逗号表达式:逗号运算符优先级最低:逗号表达式从左到右依次计算每个表达式的值;整个逗号表达式的值是最后ー个表达式的值。8赋值表达式:赋值运算符的结合性是自右向左,整个赋值表达式的值是最左边被赋值变量的值。.条件表达式的结果:如果为真,则系统存为1;如果为假,则存为。判别条件表达式:如果表达式为非零值,则为真,如果为零值,则为假。.其他ー些需要注意的问题是:/:如果两边是整数,则为求商;否则为标准除法。%:两边只能是整数,为求余关系运算符千万不要以数学的观点来写,常见错误如下:a大于5小于9,写成5<a<9(这样永远为真),标准写法是a<5&&a<9千万不要把=与==混淆,前者是赋值运算符,后者是关系运算符,比如你判断a是否为9,应写成if(a==9)转义字符:‘、。。。',三位整数代表8进制:,'xhh,,两位hh表示16进制。以。开头的数是8进制数,如。1。;以。x(0X)开头的数是16进制数。printf,scanf,puts,gets,putchar,getchar不是关键字。历年试题执行"intk=ll;k=l/3*k++"后,k的值为a,0b,3c,4d,12设有定义"floaty=3.45678;intx;”则以下表达式中能实现将y中数值保留到小数点后2位,第3位四舍五入的表达式是A、y=(y*100+0.5)/100.0 bヽx=y*100+0.5,y=x/100.0C y=y*100+0.5/100.0 d、 y=(y/l00+0.5)*100.0设有说明‘'intj;floatx”则执行语句“x=j=4.8”后,x的值为常用的库函数:数学式根号下(xO+yb)/xy在c程序中对应正确的表达式为a,sqrt(x*x+y*y)/x*y b.SQRT(x*x+y*y)/x*yc.sqrt((x*x+y*y)/x/y) d.SQRT((x*x+y*y)/(x*y))判断两个字符串Sl,s2是否相等,应当使用A、if(sl==s2)bヽif(sl=s2)c、if(strcmp(sl,s2))dヽif(!strcmp(sl,s2))main(){printf(“%d\n”,strlen(ftab\134\\\x89B));}执行以上程序后,程序的输出是 设有说明"char*str="\t\'c\\language'n";”,则指针str所指字符串的长度为a、17b、13c、!5d、非法说明如下程序的输出结果是ー#include<string.h>main(){printf("%d\n”,strlen("abc\Odefg'');)标识符规则:在C语言中,下面符号串中能用作变量名标识符为ーaヽautob、putc、l*numd、2-and以下四个字符序列中,能用作用户自定义的标识符是A、putcharb、-doublec、A123-d、int以下常量中正确的是A、'abc'b、’\xl23'cヽ3.145E-1.2d、“a”以下所列字符常量中,不合法的是A、'\0xfTb、へ65' c、d,'\xla'运算符的优先级设有说明"imx=l,z=l,y=l,k;”,则执行语句“k=x++ll++y&&++z;”后。y的值为a1b2c3d4设有说明"inta=4,b=5,c=6,d=7,m=l,n=l,e;“执行语句"c=(m=a>b)&&(n=c>d);”后,m和n的值分别为 a1,1b1.0c0,ld0,0设有说明“intx=l,y=l,z=l,c>,执行语句"c=・メ&&づ11-セ;”后,x,y,z的值分别为a0,1,1b0,1,0c1,0,1d0,0,1以下程序段的输出结果是inta=0,b=4,k=2;k=a+l>0II(++a<0)&&(!(b—<=0));prinf(tt%d,%d,%d,,,k,a,b);a1,1,3b1,1,4c1,0,3d1,0,4以下程序段输出结果是ーinta=10,b=ll,c=12,s;s=a++<=10&&b-<2&&c++;printf(64%d,%d,%d,%dM,s,a,b,c);a0,11,10,13b1,11,10,13c0,11,10,12d1,11,10,12逗号表达式设有变量说明“intx:”则表达式“(x=4*5,x*5),x+25”的值为a20b45c100d125设有说明‘‘inta,b;",执行语句“b=(a=3*5,a*4),a+ほ”之后,b的值为a.15 b.30 c.60 d.90++和 :设有说明"intx,y,z,m=10,n=5;",执行下面三个语句:x=(—m==n++)?-m:++n;y=m++;z=n;则x,y,z的值分别为a.7,9,7 b.5.9.7 c.6,11,5 d.10.11.10设有说明"intx=2,y=3ゴ,则“++x>y-?x:y"的值为:a1b2c3d4赋值表达式:设有变量说明"intm=4;”,则执行语句"m+=m*=m-=m/=m;“后,m的值为a.12b.Oc.16 d.8设有说明"intj=5,m=2,k=7,n;",执彳亍语句"n+=m*=n=j*k;"后,n和m的值分别为和.若有"inta=5;a+=a-=-a*a;",则a的值为.设有语句"inta=2,b=3,c=2;a+=b*=(++b-c++);",变量b的值是.其他:下列表达式中,错误的是a.4.0%2.0 b.k+++j c.a+b>c+d?a:b d.x*=y+25

在C语言中,错误的语句是d.b=3*5,a*=4;a.a=b=c;b.; c.breakd.b=3*5,a*=4;设有“inta;",以下不能正确表达数学关系10<a<15的表达式是a,l0<a<15 b.a==lllla==12lla==13lla==14c.a>10&&a<15 d.!(a<=10)&&!(a>=15)以下所列语句中,合法的语句是a.a=l,b=2 b.++a; c.a=a+l=5; d.y=int(a);在c语言中,当关系表达式中的关系成立时,则该关系表达式的值为.补充试题:1下面四个选项中,均是合法转义字符的选项是A)ヽ"4\V 4\n' B)V4\017Iヾ’C)'O18' '\f''xab' D)'\\0' へ101' 'xlf'2在c语言中,int、char和short三种类型数据在内存中所占用的字节数A)由用户自己定A)由用户自己定义〇是任意的B)均为2个字节D)由所用机器的机器字长决定3若以下变量均是整型,的值为3若以下变量均是整型,的值为且num=sum=7;贝リ计算表达式sUM=num++,sUM++,++num后sumA)7A)7B)8C)9 D)104已知字母A的ASC码为十进制数65,且c2为字符型,则执行语句c2='A'+,6',3';B,c2中的值为A)DB)68 C)不确定的值 D)C5以下正确的叙述是A)在C程序中,每行中只能写一条语句B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数〇在C程序中,无论是整数还是实数,都能被准确无误地表示D)在C程序,%是只能用于整数运算的运算符6以下不正确的叙述是A)在C程序中,逗号运算符的优先级最低B)在C程序中,APH和aph是两个不同的变量C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值7已知各变量的类型如下:inti=8,k,a,b;unsignedlongw=5;doublex=1.42,y=5.2;则以下符合c语言语法的表达式是A)a+=a-=(b=4)*(a=3) B)a=a*3+2C)x%(-3) D)y=float(i)8已知各变量的类型说明如下:intk,a,b;unsignedlongw=5;doublex=1.42;则以下符合C语言语法的表达式是A)x%(-3) B)w+=-2C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)*(a=3)9下面不正确的字符串常量是A)'abe'B)^^12^12^^ C)"〇’' D)""10下面四个选项中,均是正确的数值常量或字符常量的选项是A)0.0Of8.9e '&' B)"a" 3.9e-2.5lei'ヽ''C)'3' 011OxffOO0aD)+001Oxabcd2e2 50.11下面四个选项中,均是正确的ハ进制数或十六进制数的选项是A)-100X8F-011 B)0abc-017OxcC)0010 -0x11Oxfl D)0al2-0x123-Oxa12下面四个选项中,均是不正确的ハ进制数或十六进制数的选项是A)016Ox8f018 B)0abc017OxaC)010 -0x11 0x16 D)0al27ff-12313若有说明语句:eharc='\72':则变量cA)包含1个字符 B)包含2个字符C)包含3个字符 D)说明不合法,c的值不确定14下面四个选项中,均是不合法的转义字符的选项是A)'V"'W 'ヽxf' B)'\1011'‘ヽ''\a'C)'\011''ヽf''ヽ}' D)'\abc''\101''xlf'15在C语言中,要求运算数必须是整型的运算符是/B)++〇!=D)%16下面四个选项中,均是合法的浮点数的选项是A)+le+l5e-9.4 03e2 B)-.6O 12e-4 -8e5C)123e 1.2e-,4 +2e-l D)-e3 ,8e-4 5.e-017下面四个选项中,均是不合法的浮点数的选项是A)160. 0.12e3 B)123 2e4.2 .e5O-.18 123e4 0.0 D)-e3 .234Ie318下面四个选项中,均是不合法的整型常量的选项是A)-Ofl-Oxffff0011B)-0xcdf017 12,4560-018 999 5e2 D)-0x48eg -068 03f19下面四个选项中,均是合法整型常量的选项是A)160-Oxffff011 B)-OxcdfOlaOxeC)-01 986,012 0668 D)-0x48a 2e5Ox20C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符A)必须为字母 B)必须为下划线〇必须为字母或下划线D)可以是字母,数字和下划线中任一字符21下面四个选项中,均是不合法的用户标识符的选项是A)AP_0doB)floatlaO_AC)b-agotointo D)_123tempint22下列四个选项中,均是C语言关键字的选项是A)autoenumincludeB)switchtypedefcontinueC)singedunionscanfD)ifstructtype23下列四组选项中,均不是C语言关键字的选项是A)defineIFtypeB)getccharprintfC)includescanfcaseD)whilegopow24假设所有变量均为整型,则表达式(a=2,b=5,b++,a+bO的值是A)7 B)8 C)6 D)225若x,I,j和k都是int型变量,则计算下面表达式后,x的值为x=(I=4,j=16,k=32)A)4 B)16 C)32 D)5226在c语言中(以16位pc机为例),5种基本数据类型的存储空间长度的排列顺序为A)char<int<longint<=float<doublechar=int<longint<=float<doublechar<int<longint=float=doublechar=int=longint<=float<double27下面正确的字符常量为A)"c"B)N" C)'w' D)"28表达式18/4*sqrt(4.0)/8值的数据类型为A)int B)floatOdouble D)不确定29设以下变量均为血类型,则值不等于フ的表达式是A)(x=y=6,x+y,x+1)B)(x=y=6,x+y,y+1)C)(x=6,x+1,y=6,x+y)D)(y=6,y+1,x=y,x+1)30若有定义;inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值为A)2.500000 B)2.750000 03.500000 D)0.00000031以下符号c语言语法的赋值表达式是d=9+e+f=d+9B)d=9+e,f=d+9d=9+e,e++,d+9D)d=9+e-H-=d+932设c语言中,ー个int型数据在内存中占2个字节,则unsignedint型数据的取值范围为A)0—255B)0—32767C)0—65535D)0—214748364733若以下定义,则能使值为3的表达式是intk=7,x=12A)x%=(k%=5) B)x%=(k-k%5)x%=k-k%D)(x%=k)-(k%=5)34设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位四舍五入运算的表达式是A)n=(n*l004-0.5)/100.0 B)m=n*l000+0.5,n=m/l00.0C)n=n*l004-0.5/100.0 D)n=(n/1004-0.5)*100.035在c语言中,char型数据在内存中存储形式是A)补码 B)反码 C)原码 D)ASCI!码36假设变量a是整型,f是实型,I是双精度型,则表达式10+'a,+I*f值的数据类型为A)intB)floatC)doubleD)不确定37sizeof(float)是A)ー个双精度型表达式 B)ー个整型表达式C)ー种函数调用 D)ー个不合法的表达式38设有说明:charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为A)floatB)charC)intD)double39已知字母a的ASCII码为十进制数97,且设ch为字符型变量,职责表达式ch=,a*,8し3的值为 40c语言中标识符只能有三种字符组成,它们是ー 和 41表达式8/4*(int)(125*(3.7+2.3))值的数据类型为 42若x和y都是double型变量,且x的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为ーーー43若有定义:inte=l,f=4,g=2,fk>atm=10.5,n=4.0,k;则计算赋值表达式k=(e+f)/sqrt((double)n)*l.2/g+m后k的值是——44表达式pow(2.8,(double(x)))值的类型为 45假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为 46设c语言中,ー个int型数据在内存占2个字节,贝リint型数据的取值范围为ーー47若a是int型变量,则计算表达式后a的值为ー--a=25/3%348当a=5,b=4,c=2时,表达式a>bl=c的值为ーー49若有以下定义,则计算表达式y+=y-=m*=y后的y的值 intm=5,y=250在c语言中(以16位pc机为例),ー个float型数据在内存中所占的字节数为——5ー个double型数据在内存中所占的字节数为ーー5I在c语言中的实型变量分为两种类型,他们是 52若x和n均是整型变量,且x的初值为12,n的初值为5,则计算表达式后x的值为 x%=(n%=2)53若有定义:intx=3,y=2;floata=2.5,b=3.5;则下面表达式的值为 (x+y)%2+(int)a/(int)b54若有定义:charc=へ010,;则变量c中包含的字符个数 55若有定义:inta=2,b=3,floatx=3.5,y=2.5;则下面表达式的值为 (float)(a+b)/2+(int)x%(int)y56若x和n均是int型变量,且x和n的初值均为5,则计算表达式后x的值为 的值为 x+=n++57若a是int型变量,且a的初值为6,则计算表达式后a的为ーーa+=a-=a*a58若a,b,c均为int型变量,则计算表达式后,a的值为・ーー,b的值为一-,c的值为 a=(b=4)+(c=2)59若x,a均是int型变量,则计算表达式(1)后的x的值为——计算表达式(2)后的x的值为——(1) x=(a=4,6*2)(2) x=a=4,6*260若s是int型变量,且s=6,则下面表达式的值是 s%2+(s+l)%261若a为整型变量,则计算下面表达式的值为——(a=4*5,a*2),a+662在c语言中(以16位的pc机为例),ー个char型数据在内存中所占的字节数——:一个int型数据在内存中所占的字节数为——63假设m为ー个三位数,从左到右用a,b,c表示各位的数字,则从左到右的各个数字是bac的三位数的表达式为 64若有定义:intb=7,floatva=2.5,c=4.7;则表达式的值为 a+(int)(b/3*(int)(a+c)/2%4参考答案1A2D3A4A5D6D7A8A9A10DI1C12D13A14B15D16B17B18D19A20C21C22B23A24B25C26A27C28C29C30A31B32c33D34B35D36c37B38D39'f'40字母,数字,下划线4lint428.0000004313.70000044double45946-32768至3276747248149-16504,851float.double520531541553.50000005610,657-60586,4,25912,46116226631,264(m/10)%100*10+m/100*10+m%10655.5000000程序基本结构考点回顾C程序语句:5种数据的输入/出及在C语言中的实现C的控制语句:ifswitchgotowhiledo-whileforbreakcontinue历年试题:条件表达式:关于if语句的错误描述是a条件表达式可以是任意的表达式b条件表达式只能是关系表达式或逻辑表达式C条件表达式的括号不可以省略delse配对的if语句是其之前最近的未配对的if语句在“while(!a)”中,其中“!a”与表达式 等价aa==1ba==0ca!=lda!=0循环:设整型变量x的当前值为3,执行下列循环语句后,输出的结果是doprintf(t<%d\f,,x-=2);while(!( x));a0bl-2c3 0 d死循环,输出许多值执行循环语句:for(x=0,y=0;y!=250llx<4;x++)y+=50;其循环体共执行ー次a5b4c3d2以下不至于造成死循环的语句是afor(y=0,x=1;x>++y;x=i++)i—x;bfor(;;x+=i);cwhile(x=8)x-;dfor(i=10,sum=0;sum<=i;)sum=一i以下程序打印所有符合下列条件的3位正整数:是某ー个数的平方数,其中有两位数字相同。如100,121等。main(){inta,b,c,n,k;for(k=10; ;k++){n= if(n>999)a=n/100;b=_c=n%10;if(!((a~b)*(b-c)*(c-a)))printf(\n%d,%d?,,n,k);main(){intj,k,s,m;for(k=l;k<10;k++){ s=l;m=k+2;for(j=k;j<m;j++,k++)s+=j;}printf(as=%d,k=%dw»s,k);)程序输出结果s=k=switch-case语句执行下列程序段后,变量I的值是inti=10;switch(i)(i+=l;i+=l;i+=l:defult:i+=l;}a13b12c11d14补充试题1、下面的程序段的运行结果是intn=0;while(n++<=2);print式“%d”,n);a2b3c4d有语法错误2、下面程序段的运行结果是x=y=O;while(x<15)y++,x+=++y;printf(<4%d,%dM,y,x);a20,7 b6,12c20,8 d8,203、设有程序段:t=0;whne(printf("*")){t++;if(t<3)break;}下面的描述正确的是a其中循环控制表达式与〇等价b其中循环控制表达式与‘〇’等价c其中循环控制表达式是不合法的d以上说法都不对4下面程序的功能是将键盘输入的ー对数,由小到大排序输出,当输入ー对相等数时结束循环,请选择填空#include<stdio.h>main(){inta,b,t;scanf("%d%d”,&a,&b);while(){if(a>b){t=a;a=b;b=t;}printf(4%d,%d\n,,,a,b);scanf("%d%d”,&a,&b);))aa!=bba!=bca==bda=b5设有程序段intk=10;while(k=O)k=k-l;则下面描述中正确的是awhile循环执行了10次 b循环是无限循环c循环体语句ー次也不执行 d循环体语句执行ー次6设有一下程序段intx=O,s=O;while(!x!=0)s+=++x;printfC%dM,s);则 a运行程序段后输出〇b运行程序段后输出1c程序段中的控制表达式是非法的 d程序段执行无限次7语句while(!e):中的表达式!e等价于ae==0be!=lce!=0de==18下面程序段的运行结果是a=l;b=2;c=2;while(a<b<c){t=a;a=b;b=t;c—}printf(u%d,%d,%d,,a,b,c);a1,2,0 b2,l,0 cl,2,1 d2,1,19putchar函数可以向终端输出ー个a整型变量表达式值 b实型变量值c字符串 d字符或字符型变量值10下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空intn=0,c;c=getchar();while(){if()n++;c=getchar();)11C语言提供的三种逻辑运算符是ヽ和12以下程序的运行结果是#include<stdio.h>voidmain(viod){intx=1,y,z;x*=3+2;printf("%d\t”,x);x*=y=z=5;printf("%d\t”,x);x=y==z;printf("%d\n”,x);

13当a=3,b=2,c=l时,表达式f=a>b>c的值是参考答案1c6d7b8b9c10b11a12a13d14c!=’\n',c>'0'&&cv='9' 15&&,ll,! 165,25,1 170数组要点回顾:.ー维数组的定义、初始化、引用、应用(排序/查找/插入).二维数组的定义、初始化、引用、应用(矩阵转置/求鞍点).字符数组的定义、初始化、应用(统计一行字符中各类字符的个数/统计单词个数/字符串排序).6个字符串处理函数。注意点:.数组名是ー个常量,因此若有inta[10];如下操作是错误的:a++,++a,-a,a一等:但如下操作是正确的:a+1,a—1(因为a并没有被修改)。.scanf以任意个空格代表ー个输入的结束,当用gets接受输入一个字符串时,是以回车代表ー个输入的结果。.以“”括起来的字符串,系统会自动在所有字符的最后加上一个へ〇,,但该・〇’不计入字符串的长度,也就是说,一个字符串所占内存空间要比字符串的长度大1:.数组下标从〇开始,到数组大小减1为止。历年试题字符串的输入输出:执行以下程序:main(){charstr[13];scanf(44%s,,,str);printf(44%s\n,\str);)若输入数据为abed1234efgh则程序的输出结果是aabedbabedefghcabcdl234dabcdl234efgh字符串的长度:若有如下语句:staticcharx[]="12345”*5,);bx数组长度大于*5,);bx数组长度大于y数组长度dx数组等价与y数组ax数组和y数组的长度相同c x数组长度小于y数组长度若有定义语句Mstaticcharstr[4H20]={"thank","you","very","much!”};则str数组中存储‘、〇’的数组元素有数组与循环:main(){starticintsq[3][3]={0,0,0,0,0,0,0,0,0)inti,j,k;i=l;j=O;sq[i][j]=l;for(k=2;k<=9;k++){i—;j-;if(i<0&&j<0){i++;j+=2;}elseif(i>=0&&j<0)j=2;elseif(i<0&&j>=0)i=2;elseif(i>=O&&j>=O&&sq[i][j]!=0){i++;j+=2;}sq[i][j]=k;)for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%5d,sq[i][j])printf(“\n”);})执行以上程序后,sq[0][2]=,sq[l][l]=sq[2][01=输入ー个正整数n,求出该数的所有因子,并按因子从小到大的顺序输出。例如,6的因子为1,2,3,输出“6一一>1,2,3"#include<stdio.h>intfactor(intm,intb[J){inti=0,j;for(j=2;j<=m/2;j++)if( ) =j;)main(){intn,a[100J,j,count;printf(“输入一个正整数:");scanf(“%d,&n);count=factor(n,a);printf("%d——>r\n);for(j=l;j<count;j++)printf(<<,%d,,,a[j]);printf"");有n个人围成一圈,他们的编号为1〜n,第一个人从1开始顺序报数,凡报到m时,该人退出圈子。其后的人再从1开始报数,直到最后一一个人退出圈子为止。输出依次退出圈子的人的序号。n和m的值从键盘上输入,且小于200。算法提示:a⑼……a[n-H分别存放n个人的序号],2,……n-l,n。报数时,若a[i]的值不为。,则参与报数;否则不参与报数。当a[j]对应的人出圈时,则将a[j]设置为〇。围成一圈报数时,下标值取n的余数。#include<stdio.h>viodcircele(intn,intb[],intm){intcount=O,i=0,k-0;printf("依次出圈子的人的序号为:;while(count ){if()Ti++;if(){printf(4l%d\t,,)b[k]);i=O;b[k]=O;count++;/・くn*//*b[k]!=0*//*i==m*/if(++k)k=0;printf(“\n”);/*==n*/main(){intn,a[200],m,i;printf(“输入围成一圈的人数:");scanf("%d”,&n);printf(“输入出圈的号数:“);scanf("%d”,&m);for(i=0;i<n;i++)a[i]=i+l;circle(n,a,m);下面的程序打印杨辉三角形,其格式为:1111 2 113 3 11 4 6 45 10 10 5 115 20 15 6 1TOC\o"1-5"\h\z1 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1^defineN11main(){inti,j,a[N+l][N+1];for(i=l;i<=N;i++){a[i][i]=l;a[i][l]=l;for(;i<N;i++)for(j=2;;j++)a[i][j]=for(i=l;i<N;i++){j=N-i-l;while(j>0){printf("");j—;}for(j=l;j<=i;j++)printf('<%6d”,a[i][j]);printf(“\n”);)printfC*\nM);补充试题:!若有说明:inta[3][4]={0};则下面正确的叙述是A)只有元素a⑼⑼可得到初值0B)此说明语句不正确〇数组a中各元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值02以下不能对二维数组a进行正确初始化的语句是inta[2][3]={0};inta[][3]={{1,2},{0}};C)inta[2][3]={{l,2},{3,4},{5,6}};D)inta[][31={1,2,3,4,5,6,7);3以下能对二维数组a进行正确初始化的语句是A)inta[2][]={{l,0,l},{5,2,3});B)inta[][3]={{l,2,3},{4,5,6});C)inta[2][4]={{l,2,3},{4,5},{6});D)inta[][3]={(l,0,l){},{l.l}};4若有说明inta[3][4]:则a数组元素的非法引用是Aa[〇][2*1]Ba[l][3]Ca[4-2][0]Da[0][4]5若有说明inta[3][4]5则对a数组元素的正确引用是Aa[2][4] Ba[l,3]Ca[l+l][O]Da(2)(l)6以下对二唯数组a的正确说明是Ainta[3][]Bfloata(3,4)Cdoublea[l][4]Dfloata(3)(4)7以下对一唯整型数组a的正确说明是Ainta(10);Bintn=10,a[n]; Cintn;scanf("%d",&n);inta[n];D#defineSIZE10(换行) inta[size];8在c语言中,引用数组元素时,其数组下标的数据类型允许是a整型常量b整型表达式c整型常量或整型表达式 d任何类型的表达式9以下能对ー维数组a进行正确初始化的语句是Ainta[10]=(0,0,0,0,) Binta[10]={]Cinta[]={0}Dinta[10]={10*l]10在c语言中,ー维数组的定义方式为:类型说明符数组名A[常量表达式]B[整型表达式]C[整形常量]或[整形表达式]D[整形常量]11若有说明:inta[10]:则对a数组元素的正确引用是A a[10]B a[3,5]Ca(5) D a[10-10]参考答案1d 2c3b4d5c 6c7d8c 9c lOdlid函数要点回顾:.函数的定义:有参函数/无参函数/空函数.函数的参数:实参/形参.返回值.函数调用方式.对被调函数的说明.函数的嵌套调用.函数的递归调用.数组作为函数的参数.局部变量/全局变量.存储类别注意点:1区别:函数声明,函数调用,函数定义。如果定义在调用之后,那么在调用之前,写上函数声明。例如:intfun(int); 函数声明,形参可以不写fun(&a); 函数调用intfun(intb){}函数定义,形参必须写明2注意传值和传地址的区别,如果主调函数向被调函数传值的话,那么不管被调函数中该形参如何改变,并不影响主调函数中实参的值;反之,如果是传地址的话,那么形参指向实参所在的地址,对形参的改变就是对实参的改变。3静态局部变量:如果被调用函数中定义了静态变量,那么当该被调函数第二次调用时,静态变量保留上次调用后的结果。4外部变量:如果在函数中发现在变量名前有extern关键字,说明该处是变量的声明,而此变量的真正的定义处在函数的外部。历年试题简单的函数调用:#include<stdio.h>inti,j=2;voidp(void){for(i=0;i<4;i++){printf(“%d”,++j);if((i+l)%2==0)printf("\n");}}main(){for(i=0;i<3;i++)p();printf("%d\n”,i);}程序输出的第一行是ー第二行是 第三行是main(){externintx;printf("%d”,x+=2);funl(2);}intx=l;funl(intx){printf(u%d,\x++);fun2();)fun2(void){printf(u%d,\x);{intx=5;printf(u%d,\x);}printf(“%d”,x);)传值调用:voidf(intb,intt){intm;if(b<t){m=(b+t)/2;printf(u%d\n",m);f(b,m-l);f(m+l,t);main(){f(l,6);},第二行是,最后一行是执行以上程序后,输出的第一行是,第二行是,最后一行是intm=10;intf(intx,inty){intm=5;m+=x*y;returnm;)main(){inta=6,b=7;ptintf("%d\n”,f(a,b)/m);}执行以上程序后,输出结果是.voidf(inta){if(a<0){printf(“-");a=-a;}printf("%c”,a%10+’〇');if((a=a/l0!=O)f(a);}main(){inta=-3567;f(a);printf("\n”);a=3456;f(a);printf("\n'');}执行以上程序后,输出的第一行是.第二行是.voidswap(inta,intb){intt;if(a>b)t=a;a=b;b=t;}main(){intx=15,y=12,z=20;if(x>y)swap(x,y);if(x>z)swap(x,z);if(y>z)swap(y,z);printfC6%d\t%d\t%d\n”,理y,z);}程序的输出结果为#include<stdio.h>voidfun2(intn){printf(u%d\n”,n);if(n<70)fun2(n+25);}main(){fun2(25);)程序输出的第一行是,第二行是.#include<stdio.h>main(){inta=l,b=2,xl,x2,x3;xl=add(a,b);x2=add(add(a,b),b);x3=add(a,b);printf(u%d\n%d\n%d\n”,xl,x2,x3);}intadd(intx,inty){staticintz=l;z=x+y+z;return(z);}程序输出的第一行是,第二行是第三行是.intfac(inta){intb=0;staticintc=3;b++;c++;returna+b+c;)main(){inta=3j;for0=0;j<3;j++)printf(^%d\nv,fac(a));}执行以上程序后,输出的第一行是,第三行是.intf(intx){inty=l;ststicintz=l;z+=z+y++;return(z+x);)main(){printf(%d\n?\f(3));printf(%d\n”,f(3));)执行以上程序后,输出的第一行和第二行分别是和递归调用:以下程序输出结果是.main(){printf(%d”,fun⑸);}

fun(intn){if(n==1)return1;returnn-fun(n-l);补充试题:1以下正确的说法是A)用户若需调用标准库函数,调用前必须重新定义B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义〇系统根本不允许用户重新定义标准库函数D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调2关于建立函数的目的,以下正确的说法是A)提高程序的执行效率 B)提高程序的可读性〇减少程序的篇幅 D)减少程序文件所占内存3若调用ー个函数,且此函数中没有return语句,则正确的说法是:该函数A)没有返回值 B)返回若干个系统默认值〇能返回一个用户所希望的值 D)返回一个不确定的值4以下正确的说法是:在C语言中A)实参和与其对应的形参各占用独立的存储单元B)实参和与其对应的形参共占用ー个存储单元〇只有当实参和与其对应的形参同名时オ共占用存储单元D)形参是虚拟的,不占用存储单元5以下正确的函数定义形式是A)doublefun(intx,inty){}B)doublefun(intx;inty)C)doublefun(intx,inty);D)doublefun(intx,y);参考答案:1参考答案:1B 2B3D编译预处理与位运算要点回顾:.编译预处理:在编译之前对ー些特殊的命令进行的处理.C提供的三种预处理命令:.宏定义:不带参的宏定义/带参数的宏定义.文件包含.条件编译:.六种位运算符注意点:1、程序在编译阶段对宏进行处理。2、在进行宏替换时,注意宏替换只是简单的进行替换,千万不要人为地增添ー些并不存在的括号。历年试题宏定义:有关宏定义的正确说明是一一ー.A、可出现在一行中的任何位置B、只能出现在程序开头,且每ー个宏定义单独占一行C、可能出现在程序的任何位置D、以#开头的行,可出现在程序的任何位置,通常每ー个宏定义只能占一行,使用字符‘ヽ’可实现ー个宏定义占用若干行。#defineA3main(){inta;#defineB(a)((A+l)*a)a=3*(A+B(5));printf(4<x=%d\n”,a);}程序是否正确(是或否) 若程序错误,则原因是(或程序正确,则输出结果是) 下列程序的输出结果为 #defineX(a)a*amain(){printf("%d\nM,X(4+5));}若有宏定义:#defineN2#defineY(n)((N+l)*n)则执行语句“z=2*(N+Y(N+2))ぐ后,z的值是ー以下程序输出结果是 #defineT(x,y,z)x*y*z/4main(){inta=l,b=3,c=5;printf("%d”,T(b+a,a*++b,a+b+c));补充题:1在位运算中,操作数每左移一位,其结果相当于A)操作数乘以2C)操作数除以42请读程序:#defineADD(x)x+xmain()(intm=l,n=2,k=3;intsum=ADD(m+n)*k;printfCtsum=%d,\sum);)上面程序的运行结果是A)sum=9 B)sum=10B)操作数除以2D)操作数乘以4C)sum=12D)sum=183以下叙述正确的是A)在程序的一行上可以出现多个有效的预处理命令行B)使用带参的宏时,参数的类型与宏定义时的一致C)宏替换不占用运行时间,只占编译时间4 以下程序运行的结果是#defineMIN(x,y)(x)<(y)?(x):(y)main(){intI=10,j=15,k;k=10*MIN(I,j);printf("%d\n”,k);)A)10B)15C)100D)1505以下叙述中不正确的是A)预处理命令行都必须以#号开始B)在程序中凡是以#号开始的语句行都是预处理命令行C)C程序在执行过程中对预处理命令行进行处理D)以下是正确的宏定义 #defineIBM_PC6表达式0x1310x17的值是A)0x13 B)0x17 C)0xE8D)0xc87若a=l,b=2则alb的值是A)0 B)1 C)2 D)38若有以下程序段:intx=1,y=2;x=xAyy=yAx;x=xAy;则执行语句后x和y的值分别是A)x=l,b=2 B)x=2,y=2 C)x=2,y=lD)x=l,y=l9请读程序片段:unsignedt=129;t=tAOO;printf(tt%d,%o\n,\t,t);以上程序片段的输出结果是A)0,0B)129,201 C)126,176 D)101,14510表达式0x1310x17的值是A)0x04 B)0x13 C)0xE8D)0xl711请读程序片段:intx=20;printf(44%d\n",〜x);上面程序片段的输出结果是A)02 B)-20 021D)-ll12以下运算附中优先级最低的是A)&&B)&〇IID)I13在位运算中,操作数每右移一位,其结果相当于A)操作数乘以2 B)操作数除以2C)操作数乘以4 D)操作数除以414在执行完以下C语句后,B的值是charZ='A';intB;B=((241&15)&&(ZPA,));A)0B)1QTRUED)FALSE15设有以下语句:charx=3,y=6,z;z=xAy«2;则z的二进制值是A)00010100B)00011011 000011100D)0001100016若有运算符vv,sizeof,ヽ&=,则它们按优先级由高到底的正确排列次序是A)sizeof,&=,«,AB)sizeof,«,A,&=C)A,«,sizeof,&=D)«,A,&=,sizeof17在C语言中,要求运算数必须是整型的运算符是A)AB)%C)!D))18在C语言中,要求运算数必须是整型或字符型的运算符是A)&& B)&C)!19sizeof(float)是A)一种函数调用ー个整型表达式21以下叙述中不正确的是A)表达式a&=b等价于a=a&bB)表达式al=b等价于a=albC)表达式a!=b等价于a=a!bD)表达式aA=b等价于a=aAb22表达式0xl3&0xl7的值是A)0x17B)0xl323请读程序片段:charx=56;x=x&056;printf(tt%d,%o\n,\x,x);以上程序片段的输出结果是A)56,70B)0,024若x=2,y=3则x&y的结果是A)0 B)2 C)325表达式〜Ox13的值是A)OxffecB)0xff71IIー个不合法的表达式D)一个符点表达式Oxf8B)OxecC)40,50B)62,76B)5C)0xff68B)0xffl81A2B3C4B5C6B7D8C9B1OA11C12C13B14B15B16B17B18B19C20D21C22B23C24B25A本讲要点:指向变量的指针变量指向ー维数组的指针变量指向二维数组的指针变量指向字符串的指针变量指向函数的指针变量指针数组返回指针值的函数指向指针的指针注意点:.概念指针:指内存地址,所以我们说ー个变量的指针,就是指这个变量所在内存的地址。我们用“&”符号来取ー个变量的地址。在TC2.0这个16位系统中,任何指针都是占2个字节。指针变量:顾名思义,它首先是个变量,该变量存储的是ー个指针;既然是变量,它显然已要占用内存,它所占用内存的地址就是ー个二级地址即二级指针。例如:int*p;强调两点:指针变量都是有“基类型”的,同时指针变量一定记得要赋值(否则它就存储一个随机地址,这是相当危险的)。intb;p=&b;指针数组:首先它是一个数组,这个数组里存储的都是指针(地址),通常当我们耍定义ー组字符串时会用到指针数组。例如:char*p⑶={“pascal",“c++”,“java”};这个数组里存了3个char型的指针表示三个字符串的首地址。数组的指针:指ー个数组的内存地址,即数组所占内存的首地址(也就是数组第一个元数所在的内存地址),就是我们前面说的数组名(再次强调的是:它是ー个常量)。函数的指针:指函数所占内存的首地址,即函数名。返回指针值的函数:顾名思义,它是ー个函数,这个函数返回一个指针。例如:int*fun(); fun函数返回一个指针。函数指针变量:通常简称为函数指针,这个变量里存的是一个地址,而该地址是ー个函数的苜地址。例如:voidfun();一个fun函数void(*p)()=fun; ー个指针变量p,用fun函数的首地址。(即含数名来初始化)这样,你就有三种方式来调用fun函数:fun()1 这是最常见的(*p)(); 这是c标准规定的例:第一个:inta[i];int*p=a; /・数组名是指针常量,所以这样赋值・/这样p和a就完全可以看成等价的p[i]=a[i]=*(p+i)=*(a+i),唯一小小的区别就是p是变量,a是常量。第二个:inta[3][4];int(*P)[4];2在进行串的赋值时,你需要考虑:对指针变量赋值,指针变量有确切的地址值了吗,还是ー个随即地址?数组名是常量,有没有对数组名直接赋值?有没有对ー个字节空间却赋了一个字符串?字符串的最后有一个系统默认‘、。’,用数组保存时,该字节空间留了吗?3当用数组作参数时,行参可以是数组(指针),实参可以是数组,既可以有四种形式:voidfun(inta[4]);fun(b);/*intb[4]voidfun(inta[4J);fun(p);/*int*p急[voidfun(int*a);fun(b);/*intb[4]*/voidfun(int*a);fun(p);/*int*p历年试题指针和一维数组:以下程序的输出结果是 main(){inta[]={l,2,3,4,5,6},*p=a;*(p+3)+=2;printf(u%d,”,*++p);printf(u%d/n,”,*(p+3));)a.1,5b.2,5 c,l,6 d.2,6设有“chars[]="program",*p=s;”,则以下叙述中正确的是a.数组s的内容与指针变量p中内容相同b,数组s的长度与strlen(p)的值相同p[5]的值等于s[5]的值sizeof(s)等于sizeof(*p)#include<stdio.h>charb[『'computer”;char*a=,,COMPUTERM;main(){inti=0;printfC4%c,%sM,*a,b+l);while(putchar(*(a+i)))i++;putchar(4\n,);printf(“%d”,i);while(-i)putchar(*(b+i));putchar(4\n,);print式“%s\n”,&b[3]);}执行以上程序后,输出的第二行是第三行是 main(){staticcharstr[]=,,abcbcal23123M;intcount[128],i;char*p=str;for(i=0;i<127;i++)count[i]=0;while(*p)count[*p++]++;for(i=0;i<127;i++)if(count[i])printf(u%c[%d]\n,,,(char)i,count[i]);)执行以上程序后,输出的第一行是 ,第四行是 〇函数insertい有三个参数:第一个参数是ー个指向数组的指针;第二个参数指明数组的大小;第三个参数是要插入数组中的ー个数。设数组中数据已按升序排列。该函数的功能是:首先采用折半査找的方法,找出要插入数据的位置;然后按升序将数据插入该数组中。主函数输出已插入数据后的数组的个元素值。#include<stdio.h>voidinsert(int*p,intsize,inta){intlow,high,mid,n;low=0;high=size-2;mid=(low+high)/2;while(low<mid){if(a<*(p+mid))high= elselow=mid=(low+high)/2;)printf(ulow=%dhigh=%d\n”,low,high);if(*(p+high)<a)high++;for(n= ;n>high;n—)*(p+n)=*(p+n-l);*(p+high)=a;)main(){inta[ll];intij;for(i=0;i<10;i++)a[i]=3*I;printf(uinputanumber!^^);scanf(u%d,,,&j);insert(a,llj);for(I=0;i<ll;I++)printf(u%4d,,,a[I]);)main(){staticinta[]={7,4,53J0};intm=a[O],k,*p=a;for(k=0;k<5;k++)m=(*(p+k)>m)?*(p+k):m;printf(um=%d\n,,,m);}程序的输出结果是 指针和二维数组:设有变量说明staticinta[2][3]={l,2,3,4,5,6};intm,*ptr=&a[0][0];执行语句"m=(*ptr)*(*(ptr+2))*(*(ptr+4));”后,m的值为a.15 b.48 c.24 d.60设有数组说明”inta[4][4];”,则不能等价表示数组元素a[3][3]的是 a.・(a[3]+3) b.*(*(a+3)+3)c.*&a[3][3] d.(*(*(a+3))+3)设有”inta[][4]={l,2,3,4,5,6,7,8,9,10},*p=*(a+l);则值为9的表达式是 a.p+=3,*p++ b.p+=4,*++pc.p+=4,*p++ d.p+=4,++*pinta[3][3]={{l},{3},{5});main(){inti,*p=&a[O][O];for(i=0;i<2;i++){if(i==O)a[i][i+l]=*P+l;elsep++;}printf(,,%d\n”,*p);}执行以上程序后,输出的结果是 下列程序的功能是:首先,根据输入二维数组的行数和列数,动态地为该ニ维数组分配存储空间;其次,向二维数组中输入数据;后依次输出该数组中的所有元素。#include<alloc.h>#include<conio.h>#include<stdio.h>main(){int*p;introw,column;inti,j,k=l;printf(unumberofrow:");scanf(“%d”,&row);printf(unumberofcolumn:");scanf(u%d”,&cohimn);p=(int*) if(p==NULL){printf(uNOTALLOCATEMEMORY!\N”);exit⑴;}for(i=0;i<row;i++)for(j=0;j<column;j++)p[]=k++;for(i=0;i<row;i++){for(j=0;j<column;j++)printf(u%4d,,,p[]);printf("\n”);}free(p);}设有说明staticinta[3][3]={{1}»{4,5},{7,8,9}},*pa=a[2];则・(pa-2)的值为.设A为m行!!列的二维数组,B为n行p列的二维数组,C为m行p列的二维数组。先输入m,n和p的值,再输入数组A和B,根据数组A,B的元素值,求出数组C的各个元素值。计算数组C的第i行第j列元素的计算公式为:Cij=SAikXBkjo其中i=0,l,2,...,m-l;j=0,l,2,...,p-l.k=O,l, n-1#include<stdio.h>#include<malloc.h>voidmatrixmul(float*pa,float*pb,float*pc,intm,intn9intp){floatsum;intij,k;for(i=0;i<m;i++)for(j=0;j<p;j++)for(k=0;k<n;k++)sum+= =sum;}main(){intij,m,n,p;float*pa,*pb,*pc;printf("输入数组A的行数和列数:");scanf(“%d%d”,&m,&n);printf("输入数组B的列数:");scanf(“%d”,&p);pa=(float*)malloc(m*n*sizeof(float));pb=(float*)malloc(n*p*sizeof(float));pc=(float*)malloc(m*p*sizeof(float));printf(“输入数组A:”);for(i=0;i<m;i++)for(j=0;j<n;j++)scanf(u%f\);printf(“输入数组B:”);... /・对应程序略・/matrixmul(pa9pb9pc9m9n9p);printf(“输出数组C:”);/・对应程序略・/数组指针:设有变量说明inta[3][4],(*p)[4]=a;则与表达式”*(a+1)+2“不等价的是.a.p[l][2] b.*(p+1)+2c.p[l]+2 d.a[l]+2如有如下定义inty[4][4]={1,2,3,4,5,6,7,8,9,10};int*pyl=y[l],(*py2)[4]=y;则不能正确引用值为7的数组元素的表达式是.a.*(y[l]+2) b.*(y+l)+2c.pyl[2] d.py2[l][2]下列程序输出的两个数分别是和main(){staticintx[3][3]={{l,2},{5,6},{7,8,9}},(*p)[3];P=x;printf(u%d\t%d\nv,(*(p+l))[l],p[0][0]);指针数组:下面的程序完成以下三个操作:(1)输入!0个字符串(每ー个字符串不多于9个字符),依次存放在a数组中,指针数组str中的每一个元素依次指向每一个字符串的开始位置(2)输出每ー个字符;(3)从输入的字符串中选出最小的字符串,并输出。include<string.h>include<stdio.h>main(){chara[100],*str[10],*sp;inti,k;sp=a;for(i=0;i<10;i++){printf(uinputastring(<9characters):");gets(sp);str[i]=;/*sp*/k= ; /*strlen(sp)*/ =k+l;/*sp+*/for(i=0;i<10;i++)puts(str[i]);

k=0;for(i=l;i<10;i++)if()k=i;puts(str[k]);)main(){inti,p[3][3]={l,2,3,4,5,6,7,8,9},*pl[3],(*p2)[3];for(i=0;i<3;i++)pl[i]=p[i];p2=p;for(i=0;i<3;i++)printf(“\n%d,%d”,*(*(pl+i)+l)+l,气・++p2+l)+1);)程序运行时输出的第一行是 第二行是 main(){inti,p[9]={l,2,3,4,5,6,7,8,9},*pl[3],**p2;for(i=0;i<3;i++)pl[i]=&p[6-3*i];p2=pl+2;printf(“%d,%d\n",*(++pl[i]+2)+l,*(*p2—+1)+2);}程序运行时输出的第一行是 一,第二行是串的赋值:设有变量说明“chara[6],*p=a;"\下列表达式中正确的赋值语句是a.a[6]="heHo'';b.a=“hello”;c.*p='h'; d.pゴhello”;设有变量说明acharsl[10],*s2=sl;w,下列表达式中正确的赋值语句是 a*s2二”computer”;b§2二”computer”;csiロ二”computer”;d sl[10]二”computer”;设有说明char*strl二”copy”,str2[10],*str3二”hijklmn”;char*str4,*str5二”abed”;下列不正确的字符串拷贝是 a,strcpy(str2,strl)b.strcpy(str3,strl)c.strcpy(str4,strl)d.strcpy(str5,strl)执行ー下程序:main(){int*p=NULL;printf(u%d\n,\p);}其输出结果为a数字0 b空c字符。d语法错,程序不能执行以下能将字符串"goodア正确地存放在字符串数组s中,或使指针s能指向这个字符串的是ーa.chars[4]={宴/o?o了(F,T};b.chars[5];s=’'good!”;s[5]="good!";d.char*s;s=''good!";语句能正确完成赋字符串的功能。a.chars[4];s[0]="string";b.char*s;gets(s);c.char*s[]二''string”;d.char*s;strcpy(s,"string");

传址调用:对函数factor(m,fac,n)求出并返回正整数m(m>2)的所有不同因子之和(m自身除外),假设m的因子个数不超过100个。求因子的算法是:将m分别除以2,3,4(iirt)sqrt(m);若相除得到两个互异因子,则小者依次存入数组fac左端,大者逐个存入fac的右端。当求出全部因子后,将所有因子按从小到大的顺序集中存放到fac的左端。例如,m=16,其所有因子为1,2,4,8;因子个数为4,其和为15。#include<stdio.h>#include<math.h>longfactor(intm9int*fac,int*n){intrightJeft,k=sqrt(m),i;longsum;*fac=l;*n=l;right=99;left=l;sum=l;i=2;while(i<=k){k=m/i;if(k*i==m){if(i!=k){*n+=2;sum+=i+k;

=i; =k;left++;right-;}else{*n+=l;sum+=i; =i;left++;})i++;)for(i=;i<=99;i++)=*(fac+i);returnsum;)main(){intnum;intm,fac[100],i;printf("inputainteger(>2)f,);scanf(“%d”,&m);printf(66\nsumoffactors=%ld\n”,factor(m,fac,&num));printf(unumberoffactors二%d\n”,num);printf("listoffactors'll");for(i=0;i<num;i++){printf(“%6d”,fac[I]);if((I+l)%5==0)printf(,ヽT);}printf(66\n,5);)对函数factor(m.,fac,n)求出并返回正整数m(m>2)的所有不同因子之和(m自身除外),假如m的因子个数不超过100个。求因子的算法是:将m分别除以2,3,4(int)sqrt(m);若相除得到两个互异因子,则大者依次存入数组fac左端,小者逐个存入fac的右端。当求出全部因子后,将所有因子按从大到小的顺序集中存放到fac的左端。例如,m=16,其所有因子为1,2,4,8;因子个数为4,其和为15。#include<stdio.h>#include<math.h>longfactor(intm,int*fac,int*n){intright,left,k=sqrt(m),i;longsum;*fac=l;*n=l;right=99;Ieft=l;sum=l;i=2;while(i<=k){k=m/i;if(k*i==m){if(i!=k){*n+=2;sum+=i+k; =k; =i;left++;right-;)else{*n+=l;sum+=i; =i;

right-;}}i++;}for(i=;i<=99;i++)=*(fac+i);returnsum;}main(){intnum;intm,fac[100],i;printf(uintputainteger(>2):");scanf(“%d”,&m);printf(u\nsumoffactors=%ld\n,\factor(m,fac,&num));printf(unumberoffactors二%d\n”,num);printf(

温馨提示

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

评论

0/150

提交评论