程序设计基础教程c语言课后答案_第1页
程序设计基础教程c语言课后答案_第2页
程序设计基础教程c语言课后答案_第3页
程序设计基础教程c语言课后答案_第4页
程序设计基础教程c语言课后答案_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

1、 z 习 题 解 答目 录 1.2 习题解答.3 选择题.3 填空题.3 编程题.4 2.2 习题解答.5 选择题.5 填空题.7 编程题.8 3.2 习题解答.11 选择题.11 填空题.12 编程题.12 4.2 习题解答.15 选择题.15 填空题.17 编程题.18 5.2 习题解答.29 选择题.29 填空题.31 编程题.33 6.2 习题解答.37 选择题.37 填空题.41 编程题.43 7.2 习题解答.67 选择题.67 填空题.68 编程题.68 2 1.2 习题解答 选择题 1、B 【分析】在一个C程序中必须有且只能有一个main函数,而且main函数可以在任何地方出现

2、. 2、C 【分析】C 语言中合法以的标识符组成为:字母,数字,下划线,且数字不能打头,亦不能为关键字。A中,-sub 不合法。B 中4d不合法。D 中void 为关键字。 3、 【分析】 4、C 【分析】转义字符中,第一个”输出“,第二输出,第三个b退格,把前一个去掉了,第四个输出,第五个t跳格,第六个”输出”,第七个n输出换行。5、C 【分析】本题将10进制17,分别按8、16进制输出。8的进制21=2*8+1*1=17(10, 16制11=1*16+1*1=17(10) 填空题 1、主 【分析】一个C源程序中至少包括一个主函数,其他函数没有限制。 2、双引号。 【分析】两种写法都是允许的

3、,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找.使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。 3、261,b1 【分析】将10进制的177,按8进制和16进制两种形式输出。 4、a3 b7 x8.5 y71.82 c1=A c2=a 【分析】scanf函数中,格式说明符以外的原样输入。 5、printf函数中,格式说明符以外的原样输出。%m.nf控制输出结果中共m位,小数3 占n位。 【分析】 编程题 1. #include "stdio.h&

4、quot; void main() float qianmi,yingli; /定义变量 scanf("qianmi=%f",&qianmi); /输入数据 printf("yingli=%f",qianmi*1.60934); /计算并输出数据 2. #include "stdio.h" void main() char x; printf("请输出一个小写小母n"); scanf("%c",&x); printf("输出字母的大写型式为:%c",x+32)

5、; 3、#include<stdio.h> void main() float c,f; printf("请输入一个摄氏温度:") ; scanf("%f",&c); f=32*c+9.0/5*c; 4 printf("华氏温度为:%5.2fn",f); 4. #include<stdio.h> void main() int a =3,b=4,c=5; float x=1.2,y=2.4,z=-3.6; double u=51274,n=128765; printf("a=%-3d,b=%-

6、3d,c=%dn",a,b,c); printf("x=%7.6f,y=%7.6f,z=%7.6fn",x,y,z); printf("x+y= %3.2f,y+z= %3.2f, x+z=%3.2fn",x+y,y+z,x+z); printf("u= %.0lf n= %.0lfn",u,n); printf("c1='a' or 97nc2='b' or 98n"); 2.2 习题解答 选择题 1、C 【分析】语言的运算符按运算对象的个数可以分为单目、双目和三目运算符

7、和多目运算符。 2、C 【分析】 %运算符要求参加运算的数必须是整数 3、A 【分析】 B.赋值运算的作用是用将常量赋给变量,而不能给表达形式 所以a*3=2 不对。 C. %运算符要求参加运算的数必须是整数,而x是float 类型所以x%(-3) 不对 。 D. y=float(i),由于i是 int 类型,向 float类型转换是自由转的,不需要强制转。 4、A . 【分析】 因为 k=7,x=12; x%=k,则x=12%7,此时x=5,而k%=5,即k=7%5此时K=2,所以(x%=k)-(k%=5)就等价于5-2=3。同理,x%=(k%=5)的值为0;x%=(k-k%5)的值为2;x

8、%=k-k%5的值也为2 5、A 5 【分析】首先通过n*100+0.5将原数扩大100,并通过+0.5判断是否进位。之后/100进行舍去小数点后第三位的运算。 6、B 【分析】分析 根据优先级别,先计算小括号里,y 与3相等成立所以表达式的值为1,再将1赋给x,而x的值就是表达式的值为1. 7、A 【分析】略 8、D 【分析】“a大于等于10”、“ a小于等于0”两者分别为关系运算,一个“或”字又表明为逻辑或运算,所以D对。 9、B 【分析】在逻辑表达式求解中,并不是所有的逻辑运算符都被执行,对&&运算符来说,只有前一个表达式不等于0时,才继续进行右边的运算。由于a>b

9、为0,所以左边的表达式为0,所以右边的+n将不被计算,所以n的值不变仍为2。10、B 【分析】241的二进制形式为11110001,15的二进制形式为00011111,进行按位&运算后为00010001;a的二进制形式为01100001,z的二进制形式为01111010,进行按位|运算后为011111011。00010001与011111011都为非0元素,所以再进行&&时结果一定为1。 11、A 【分析】b>>2表示向右移动两位,相当于除以两个2结果为8/2=4;同理,b>>1相当于除一个2,结果为6,4/6为0。12、B 【分析】3的二进制数

10、为00000011。10的二进制为00001010,a<<2的结果为00001100,b=1的值为0,所以00001100与0按位或之后结果为00001100。即10进进制的12。 13、D. 【分析】就运算符的优先级别而言,单目>双目,算术运算>关系运算>逻辑运算。 14、B 【分析】19的二制数为00010011,23的二进制数为00010100,两者进行按位与后结果为00010000十进制16,即为16进制的13。 15、C 【分析】0x39的二进制形式为00111001,0xf的二进制形式为00001111,两者进行异或运算,异或结算的规则,参加运算的两个

11、二进制位同号,则结果为假,异号则为真。结果为:00110110即为16进制的36。 16、A 6 【分析】进行按位或运算,要a的低8位为1,则要求b的低8位全为1,高8位要求不变,则要求高8位全为0,即b应该为:0000000011111111,即为8进制的0377。 17、A 【分析】由题得1>2不成立,所以x>y?+x:+y表达式的值为+y,则此时Y的值为3,而+x没有被执行,所以x的仍值为1,而Z的值与表达式的值相同所以选A。 18、C 【分析】赋值运算符的作和是将一个表达式或一个变量,常量赋给另一个变量,赋值号的左边只能是变量,不能是常量,所以A、B、D不对。 19、B 【

12、分析】逗号运算符是级别最纸的运算符,逗号表达式也是值是所有表达式中最右边的值。即a+b的值,由题从左向右算起,b+后b为6,则a+b为8.20、D 【分析】在不同种数据类型进行计算时的转换规则是:数据类型低的全部转换成运算过程中级别最高的。在int、long、unsigned和char四个类型中,long的类型级别最高,所以结果的类型为long. 填空题 1. -17.5 【分析】“/”要求两操作数如果一个为实数结果都为实数,如果都为整数结果也为整数,所以a/4.0=2.5,a/4=2.所以原式=2.5-2*10=-17.5。2. 5,32 【分析】x+表示将x的值拿来用,然后再+;而y*=x

13、+等价于y=y*x,即y=8*4=32,此计算结束之后x 的值才增加1,变为5。3. -40 【分析】赋值运算符的结合方向是从右向左的,所以先计算a*a=25,所以a+=a-=a*a等价于a+=(a-=25),而此时a仍为5.接下来计算a-=25得a=2-25=-20;则a+=(a-=25)等价于a+=-20,所以a=a-20=-20-20=-40。4. 16 【分析】x+=-x%-y等价于x+=(-x)%(-y),-放在变量的前面时,要先对变量进行变化,然后再用,所以原式即为x+=14%3,而14%3=2,即x+=2,而此时x=14,所以x=x+2=16。5. x>1&&

14、;x<10 |x<0&&x!=-1 【分析】略 6. 0 7 【分析】根据运算符的优先级别,算术运算>关系运算>逻辑运算可知,要先算a+b=7,接下来计算7>c即7>5成立为1,然后计算b=c,而4=5不成立,所以值为0,即最终表达式等价于1&&0,所以结果为0.7. 0 【分析】略,同第6题。 8. -17 【分析】条件运算符优先级别高于赋值运算符,所以先算(a<b)?a:b的值,由于13<25成立,所以(a<b)?a:b的值 为a 的值,并将a的值赋给y,此时,原式等价于(13<-17)?y:c,而

15、13<-17不成立,所以表达式的值为C的值,即为-17。 9. 18, 3,3 【分析】对逗号表达式的值,即为从左向右最后一个表达式的值 ,本题中表达式的值即为6*a的值即18。 10. 3.5 【分析】算术运算符中同一级别的运算符按从左向右的顺序进行,所以先算a%43=8,再计算8*(int)(x+y)=8*9=72,再计算72%3=0,再计算0/5=0.最后计算与X相加,所以最终结果为3.5。 编程题 1. 编写一个程序,要求输入圆的半径r,计算并输出该圆的周长和面积。 #define PI 3.14 #include "stdio.h" void main()

16、float r, S=0, L=0; printf("input r:n"); scanf("%f", &r); S= PI *r*r; /计算圆面积 L=2* PI *r; /计算圆周长 printf("S=%f,L=%fn", S,L); 2. 假设美元与人民币的汇率是1美元兑换6.4742元人民币,欧元与人民币的汇率是1欧元兑换9.2338元人民币,编程实现输入人民币的钱数,输出能兑换的美元及欧元金额。 # include "stdio.h" void main() float renminbi,me

17、iyuan,ouyuan; 8 printf("input renminbi:n"); scanf("%f", &renminbi); meiyuan = renminbi *6.4742; /计算美元金额 ouyuan = renminbi *9.2338; /计算欧元金额 printf("meiyuan =%f ouyuan =%fn",meiyuan, ouyuan); 3. 编写一个程序,从键盘上输入3个字符后,按各字符的ASCII码从小到大顺序输出这些字符。 /这道题关键是把输入3个字符后的回车过滤掉,不然回车就会成

18、为下一组的第一个字符。有两种方法: /第一种: #include <stdio.h> int main() char a,b,c,tmp; while(a=getchar()!=EOF) b=getchar(); c=getchar(); getchar(); /在录入c后用getchar()滤掉回车 if(a>b) tmp=a; a=b; b=tmp; if(a>c) tmp=a; a=c; c=tmp; if(b>c) tmp=b; b=c; c=tmp; printf("%c %c %cn",a,b,c); return 0; /第二种:

19、 #include <stdio.h> int main() char a,b,c,tmp; 9 while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF) /用"%*c"(空字符,不存储字符的字符)滤掉回车 if(a>b) tmp=a,a=b,b=tmp; /逗号表达式,简洁 if(a>c) tmp=a,a=c,c=tmp; if(b>c) tmp=b,b=c,c=tmp; printf("%c %c %cn",a,b,c); return 0; 输入数据有多

20、组,每组占一行,有三个字符组成,之间无空格。 例如输入 qwe asd zxc 输出 e q w a d s c x z 4. 编程实现输入一个无符号整数(unsigned类型),分别输出它的低四位和高四位。 #include <stdio.h> (待查) main() unsigned u=0xffff;/举例 unsigned char l,h; /scanf("%u",&u); l=u&0xff; /得到低8位. h=u>>8; /得到高8位 printf("u=%u,l=%u,h=%u",u,l,h); g

21、etchar(); 5. 根据当前银行的利率表,编程实现从键盘输入存款金额money,存期year和年利率rate,计算银行存款的本息sum(保留1位小数)。 #include <stdio.h> int main() int year; float money,rate,sum; printf("请输出金额,利率,存款时间n"); scanf("%f,%f,%d",&money,&rate,&year); sum=money*year*rate; printf("存款的本息sum=%.1f n",

22、sum); 10 3.2 习题解答 选择题 1D 【分析】在此要注意,else总是于之前面最近的且没有用过的if进行配对,所以在本题中,else与第二个if 配对,且整体做为第一个if语句的语句体。又因,10>20不成立,所以第一个if 根本不被执行,所以m的值没有任何变化。 2. A 【分析】else总是于之前面最近的且没有用过的if进行配对,所以在本题中, if (a>b) t=s+t; else if (a=b) t=5; else t=2*s; 相当于t=s+t;(a>b) t=5 (a=b); t=2*s(a<b); 3. C 【分析】while(E)的含义是

23、当E为真。为真即为不等于0,而A、B、D 都是表示非零。 4. D 【分析】i=0,+i 后,i 为1,i%2=1,所以执行j+=i;即j=1,i=1小于5所以还执行+i,此时 i为2,则i%2等于0,跳出本次判断。同理当i 等于4 ,6时同样跳出判断,而当i为3,5时,都要执行j+=i。 5. A 【分析】while (1)进行判断时,条件永远成立,所以执行循环体。输出一个“*”后,i+,i变为1,又1<3成立,所以结束循环。 6. D 【分析】当i=1时,执行s+=i 后s=1;执行循环体中i+后,i为2,而后还要执行一次for结构中的i+,则i为3.3小于6成立,则再执行s+=i;

24、 i+;则s为4, i为4, 而后还要执行一次for结构中的i+,则i为5,同样5小于6成立,则再执行s+=i; i+;则s为9, i为6, 而后还要执行一次for结构中的i+,则i为7,且7小于6已不再成立。所以最后输出9 7 7. B 【分析】在for(语句1;语句2;语句3)结构中,语句1为初值,语句2为循环体执行的条件,语句3为变量自增语句。本题中i为2,i=0不成立,所以循环体不被执行。 8. D 11 【分析】a=1,a<8成立 ,所以执行循环体b+=a;a+=2;后,a=3, b=3,再执行 for结构中的a+, 则a=4,b=3.以后同理。 9. B 【分析】当a=1时b

25、=1,执行循环体,b>=20不成立, b%3=1成立,则执行b+=3;continue;则b=4,然后跳出本次行循环,则此时a=2,b=4.以后同理进行判断。 10. A 【分析】对于双重循环,外层循环变化一次,内层变化一个循环。本题。当i=1时,j可以为3、2、1,同理当当i=2时,j可以为3、2、1;当i=3时,j可以为3、2、1;而语句if (i*j>3) break; 则表时,如果i*j>3时结束整个for循环。条件不成立时再执行m*=i*j; 填空题 1. hn*2 【分析】sn为第n次落地时共经过的米数,hn为第n次反弹的高度n>=2 ,hn*2才为第n次经

26、过的距离。 2. n!=0 j+ 【分析】由输出语句可知,定义的变量i,j 分别用于存放正数和负数的个数。 所以只要输入的数不是0,则进行判断。 3. 0 k/10 count+ 【分析】count 作为累计的和所以初值一定为0;而while循环的作用是将指定的数k的各各位上的字数字取出来。k%10负责实现取出K的个位。则前两位则需通过k/10来实现。if (t=10)成立即是需要的数字,则总数需要自增。所以count+. 4. 50 (i*1.0) 【分析】本题的累加问题中,累加50次,即i<=50,两个相除时如果都为整数则结果一定为整数,为此,需要将分母转化成FLOAT 类型。所以填

27、(i*1.0)。5. 2*i-1 printf("n"); i 【分析】略 编程题 1. 编写一个程序,计算并输出下列分段函数值: 22226,356010,2,3153,2,3,10xxxxyxxxxxxxxxxx+<=+<= 12 其中,x从键盘输入。 #include"stdio.h" int main() float x,y; printf("输入X"); scanf("%f",&x); printf("n"); if (x<0 &&x!=-3)

28、 y=x*x+2*x-6; else if (0<=x&&x<10&&x!=2&&x!=3) y=x*x-5*x+6; else y=x*x-x-15; printf("y=%f",y); 2. 编写一个程序,从键盘输入年和月,计算并输出该年的该月份共有多少天。 算法分析:要考虑大月有31天,小月有30天,闰年的二月有29天以及非闰年的二月有28天这几种情况。 源程序:#include <stdio.h> int main() int year,month,days; printf("Ente

29、r year and month:"); scanf("%d%d",&year,&month); switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: /*处理"大"月*/ days=31;break; case 4: case 6: case 9: case 11: /*处理"小"月*/ days=30;break; case 2: /*处理"平"月*/ if (year%4=0&&

30、;year%100!=0|year%400=0) days=29; /*如果是闰年*/ 13 else days=28; /*不是闰年*/ break; default: printf("Input error! n"); /*月份输入错误*/ days=0; if (days!=0) printf("%d,%d is %d daysn",year,month,days); return 0; 3. 编写一个程序,计算并输出下列级数之和: 231.2!3!nxxxxexn=+ 其中n与x从键盘输入。 #include"stdio.h"

31、 #include "math.h" main() int i,n; double s=1.0,s1=1.0,x; scanf("%d,%f",&n,&x); for(i=1;i<=n;i+) s1=s1*i; /*各项中的阶乘*/ s=s+pow(x,i)/s1; /*按公式求出*/ printf("s=%f", s); 4. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include"stdio.h" main() char c;int i=0,j=0,k=0,l

32、=0; while(c=getchar()!='n') if(c>=65&&c<=90|c>=97&&c<=122) i+; /i为字符数 else if(c>=48&&c<=57) j+; /j为数字数 else if(c=32) k+; /k为空格数 else l+; /l为其他字符 printf("i=%d,j=%d,k=%d,l=%d/n",i,j,k,l); 5. 编写一个程序,解决猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天

33、早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个;到第10天早上想再吃时,只剩一个桃子了。问猴子第一天共摘了多少桃子? 14 #include"stdio.h" main() int i=1,sum=0; for(;i<=10;i+) sum=2*sum+1; printf("sum=%dn",sum); 4.2 习题解答 选择题 1. D 【分析】 定义一维数组的语法格式为“类型标识符 数组名整型常量表达式 ;”,其中“整型常量表达式”是用来说明数组元素的个数,可以是整型常量、整型常量表达式或符号常量,但不能包含

34、变量。选项A用圆括号定义数组a,是错误的;而选项B和C中,用变量n来说明数组a长度,是错误的。 2. C 【分析】 一维数组的初始化的语法格式为“类型标识符 数组名整型常量表达式=常量,常量,.常量n ;”,所赋初值放在赋值号后的一对花括号中。选项A把初值放在一对圆括号内,是错误的;选项B花括号中没有初值,而且语句没有“;”,是错误的;选项D中初值没有用花括号括起来,是错误的。 3. B 【分析】 选项A定义数组art有5个元素,而花括号中只提供2个初值,分别赋值给art0和art1,其余元素自动赋值为0;选项B通过花括号的初值确定数组art有2个元素;选项C和D定义的数组art是等价的,表示

35、含有5个元素,其值分别为“89、-23、0、0、0”。 4. A 【分析】 C语言中,二维数组排列的顺序是“按行存放”的,即先存放第0行的元素,再存放第1行的元素,以此类推。 5. B 【分析】 C语言中,二维数组是“按行存放”的,元素aij前面存放了i行,共i*m个元素,在第i行的第j列前面有j个元素,因此元素aij前的元素个数为i*m+j。 6. D 【分析】 选项A定义了a是一个1行4列的二维数组,但初值1,2,3,4,5却是1行5列,是错误的;选项B在初始化语句中省略了第二维的长度,是错误的;选项C定义了b是一个2行3列的二维数组,但初值1,1,2,1,2,3却是3行,是错误的;选项D

36、省略了第一维的长度,第二维长度为3,因此选项D等价于“double y13=0;”。7. D 【分析】 字符串"ABCDEFGH"占9个字节,其中字符串结束标志'0'多占用了1个字节。选项A、B和C都只定义了8个元素的字符数组,是错误的。 15 8. D 【分析】 语句“char a="ABCDEF"”定义了一个字符数组,并字符个数确定数组的长度,而"ABCDEF"使以字符'0'为结束标志的一个字符序列,共7个字符,因此数组a长度为7;而语句“char b='A','B'

37、,'C','D','E','F'”则定义了长度为6的字符数组,因此a数组比b数组长度长。9. B 【分析】 格式说明符“%.4s”可以用来输出字符串中前4个字符,因此选项B正确。 10. B 【分析】 字符串输入函数gets(),其语法格式为“gets(字符数组名)”,选项A包含2个字符数组名,是错误的;选项D中gets函数的参数是字符串,也是不正确的; scanf函数使用%s格式说明符进行字符串输入,其输入项为数组名,选项C在数组名a和b前加“&”符号,是错误的。 11. D 【分析】 strcmp(s1,s2)将字符串

38、s1和s2自左向右按字符的ASCII码值逐对进行比较,直到出现不同的字符或遇到'0'为止,如果s1等于s2,则strcmp(s1,s2)等于0;如果s1大于s2,则strcmp(s1,s2)大于0;如果s1小于s2,则strcmp(s1,s2)小于0。12. C 【分析】 字符串复制函数strcpy(str1,str2)将字符串str2同串结束标志'0'复制到字符串str1中,函数返回str1的指针。字符串连接函数strcat(str1,str3) 将字符串str3连接到字符串str1之后。因此本题答案为选项C。 13. A 【分析】 结构体变量占内存的大小是该

39、结构体各成员所需内存量的总和。 14. D 【分析】 程序中定义了一个结构体数组cnum2,包含2个元素,并将初值1,3,2,7依次赋值给cnum0.x、cnum0.y、cnum1.x和cnum1.y。因此,表达式“cnum0.y/cnum0.x*cnum1.x”的值为6。 15. C 【分析】 将初值"John",17,"Paul",19,"Mary",18,"adam",16 分别赋值给、c0.age、、c1.age、、c2.age、、c3.age,因此选

40、项C能够打印出Mary。 16. C 【分析】程序中定义了一个共用体类型的变量u1,共用体各成员共同使用4字节内存空间,初值u1.c=A,所以u1.n=65,输出是以%c格式符输出的,因此本题答案为选项C。 17. D 【分析】变量a是一个结构体类型,所占内存的大小是该结构体各成员所需内存量的总和。整型变量c占4字节内存,共用体类型变量k占内存的大小是该共用体中最大的一个成员j所占用的内存量,为4字节,因此本题答案为选项D。 18. A 【分析】变量u是一个共用体类型变量,共用体类型变量u占内存的大小是该共用体中最大的一个成员c所占用的内存量共4个字节,共用体的所有成员公用一个存储空间,同一时

41、间只能存储一个成员,并且所引用的是最后一次存入成员的值。因此本题答案为4,34,12。 16 19. B 【分析】选项A定义枚举类型不能使用“=”,是错误的;选项C定义枚举类型时,花括号中的一些名字是程序设计者自己指定的,命名规则与标识符相同。无固定含义,只是一个符号。选项C中以数字作为标识符是错误的,选项D有双引号是错误的,因此本题答案为选项B。 20. B 【分析】选项A的正确定义语句为typedef char *STRING255; 选项C的正确定义语句为typedef char STRING; 选项D的正确定义语句为typedef char *STRING; 因此本题答案为选项B。 填

42、空题 1. 0 4 【分析】二维数组x35由3行5列组成,行列下标都从0开始,即元素从x00开始到x24,因此最小行下标为0,最大列下标为4。 2. ak!=y 【分析】while循环用于访问a数组中的每个元素,从最后一个元素到第一个,直到一个等于y的元素被找到为止,如果查找成功,输出下标值k,否则继续查找,直到数组元素全部查找一遍。因此while循环的条件为ak!=y。 3. &ai i%4=0 printf("n"); 【分析】scanf语句要求给数组a中的每个元素赋初值,因此为&ai;程序要求以每行4个数据的形式输出a数组,在for循环语句中加入条件判

43、断语句,如果一行输出4个元素(i%4=0)则打印输出一个回车换行符printf("n")。 4. j=2 j>=0 【分析】前一个嵌套的for循环输出数组a主对角线上的元素之和。后一个嵌套的for循环输出数组a次对角线上的元素之和。次对角线上的元素满足的特点是行下标和列下标的和为2,内层for循环第三条语句为j-,所以j的初值为2,条件为j>=0。 5. slen!= '0' 【分析】本程序是输出字符数组s中存放的字符串的长度,从s0开始,向后搜索,每搜索一个元素,len增1,直到遇到字符串结束标志0为止。重复过程结束。这时,len中所保存的就是

44、s中有效字符的个数。 6. str0 s 【分析】strcpy(s, str0)函数是将字符串str0复制到字符数组s中,先假设字符串str0中存放的是三个字符串中最小的,strcmp()函数是将两个字符串比较,总把最小的字符串放到s中。最后输出s。 17 7. 12 【分析】结构体变量占内存的大小是该结构体各成员所需内存量的总和。结构体类型struct date中共定义三个成员都为int类型,共占12个字节。 8. person1.birthday.year=1982 【分析】嵌套结构体类型定义变量,采用逐级访问的方式对变量赋值。式中的圆点“.”称为成员运算符。 9. 4 8 【分析】共用体

45、类型的所有成员公用一个存储空间,同一时间只能存储一个成员,并且所引用的是最后一次存入成员的值。则e.in.x=2*2=4; e.in.y=4+4=8; 10. 1 6 【分析】枚举类型变量的值是一些整数,从花括号的第一个名字开始,系统自动赋予从0开始的值。Red=0,yellow=1;若在定义类型时对枚举常量进行了初始化,则按照初始化的值计算,blue=4,green=5,white=6。 编程题 1. 编写一个程序,计算Fibonacci数列的前15个数,并将其存储到一维数组fib中,然后输出结果。Fibonacci数列的定义为: 1101121>=+=nnnFFFnnn 【问题分析】

46、 【程序代码】 #include <stdio.h> int main() int fib15=1,1; int i; for (i=2;i<15;i+) fibi=fibi-1+fibi-2; for (i=0;i<15;i+) printf("%5d",fibi); printf("n"); return 0; 2. 有一个已经排好序的数组,编写一个程序,实现输入一个数,并按原来排序次序将该数插入到数组中。 【程序代码】 18 #include <stdio.h> int main() const int N=10

47、; /定义一个包含11个元素的整型数组a,并初始化一组有序序列 int aN+1=20,25,31,36,41,46,67,68,78,98; int i,d; printf("请输入一个整数:n"); scanf("%d",&d); for (i=N-1;i>=0;i-) if (ai>d) ai+1=ai; else ai+1=d; break; printf("插入整数后的新序列:n"); for (i=0;i<N+1;i+) printf("%4d",ai); return 0;

48、3. 随机生成50个1200之间的整数,并存入数组a中,然后输出这些整数;同时找出数组a中的所有素数,存入数组b,并按每行5个元素的格式由大到小输出这些素数。 【程序代码】 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> int main() int a50,b25=0; int num=0,flag; int i,j,t; /以下产生50个1200之间的随机数存于数组a,并显示 srand(int)time(0); for (i=0;i<

49、50;i+) ai=(int)(1+199*rand()/RAND_MAX); printf("%5d",ai); printf("n"); /找出数组a中所有素数 for (i=0;i<50;i+) flag=1; for (j=2;j<sqrt(ai);j+) 19 if (ai%j=0) flag=0; break; if (flag=1) && (ai!=1) bnum=ai; num+; /对数组b进行排序 for (i=0;i<num;i+) for (j=0;j<num-i;j+) if (bj<

50、;bj+1) t=bj; bj=bj+1; bj+1=t; /输出素数 for (i=0;i<num;i+) printf("%5d",bi); if (i+1)%5=0) printf("n"); return 0; 4. 编写一个程序,实现在一个5行6列的矩阵中查找指定数据,并输出该数据及其在矩阵中的位置。 【程序代码】 #include <stdio.h> int main() int a56=23,56,78,90,12,45,13,14,16,17,18,19, 32,35,36,38,39,31,41,43,45,46,48,49, 51,52,53,55,57,58; int i,j,c,r; int d;/查找的数据 int flag=0;/是否找到标志 /输入要查找的数据 printf("请输入查找数据:&qu

温馨提示

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

评论

0/150

提交评论