首页 C语言程序设计教程清华大学出版社陈明主编第5章答案

C语言程序设计教程清华大学出版社陈明主编第5章答案

举报
开通vip

C语言程序设计教程清华大学出版社陈明主编第5章答案第5章习题解答、选择题i以下叙述中错误的是。A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数解析:对于double类型数组,不能直接用数组名对数组进行整体输入或输出。所以选项A的说法是正确的。数组名代表数组所占内存区的首地址,是一个固定指针,其值不可改变,因此选项B也是正确的。在C语言一维数组定义时可以不指定...

C语言程序设计教程清华大学出版社陈明主编第5章答案
第5章习 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 解答、选择题i以下叙述中错误的是。A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 的是数组所占存储区的首地址,其值不可改变C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数解析:对于double类型数组,不能直接用数组名对数组进行整体输入或输出。所以选项A的说法是正确的。数组名代表数组所占内存区的首地址,是一个固定指针,其值不可改变,因此选项B也是正确的。在C语言一维数组定义时可以不指定数组长度,由赋初值的初值个数决定数组的长度。因此选项D也是正确的。C语言程序在执行时,不检查数组元素的下标是否越界,如果出现越界,可能会引起系统死机,因此选项C不正确。 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 :C2•有以下程序:/*文件路径名:ex5_1_2\main.c*/#includeintmain(void){chars[]="abcde";s+=2;printf("%d\n",s[0]);return0;}/*标准输入/出头文件*//*主 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 main()*//*定义字符数组*//*s自加2*//*输出s[0]*//*返回值0,返回操作系统*/执行后的结果是。A)输出字符a的ASCII码C)输出字符cB)输出字符c的ASCII码D)程序出错解析:数组s[]的首地址值s是不可改变的,故该程序编译时会出错。答案:D3•有以下程序:/*文件路径名:ex5_1_3\main.c*/#include/*标准输入/出头文件*/intmain(void)/*主函数main()*/{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;/*定义数组及变量*/printf("%d\n",*p+*q);/*输出*p+*q之值*/return0;/*返回值0,返回操作系统*/}程序运行后的输出结果是。16B)10C)8D)6解析:数组a各元素a[0]-a[9的值依次为1~10,语句“*p=&a[3]”把指针变量p初始化为&a[3],即*p的值为4,指针变量q初始化为“*q=p+2”,所以*q的值为6,从而*p+*q=l0。答案:B4.有以下程序:/*文件路径名:ex5_1_4\main.c*/#includevoidSort(inta[],intn){inti,j,t;for(i=0;iintmain(void){inti,t[][3]={9,8,7,6,5,4,3,2,1};/*for(i=0;i<3;i++)printf("%d",t[2-i][i]);printf("\n");return0;}程序的执行后的输出结果是。A)753B)357C)369D)751解析:定义二维数组时第一维的长度可以不指定,该程序中t[][3]通过赋初值等价于t[3][3],并且其数组按行进行赋值,通过for循环输出的分别是t[2][0]、t[1][1]和t[0][2]。答案:B若有语句"char*line[5];”,以下叙述中正确的是。定义line是一个数组,每个数组元素是一个基类型为char的指针变量定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组定义line是一个指针数组,语句中的*号称为取址运算符定义line是一个指向字符型函数的指针解析:在语句"char*line[5];”中,遵照运算符的优先级,[]的优先级高于*号,因此line先与[]结合,构成一个数组,数组的基类型为"char*”,所以line为指针数组,它的每个元素都是基类型为char的指针。所以选项A叙述正确。答案:A8•有以下程序:/*文件路径名:ex5_1_8\main.c*/#includeintmain(void){inta[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d",a[1][i]);printf("\n");return0;}/*标准输入/出头文件*//*主函数main()*//*定义数组及变量*//*p指向数组a的首元素*//*为p[i]赋值*//*输出a[1][i]*//*换行*//*返回值0,返回操作系统*/程序运行后的输出结果是。A)012B)123C)234D)345解析:p指向二维数组a的首元素,而二维数组是按行存放的。因此"for(i=0;i<9;i++)p[i]=i;”的结果是等价于a[3][3]={0,1,2,3,4,5,6,7,&,也就是a[3][3]={{10,1,2},{3,4,5},{16.7,8}}。因此a[1][i](i=0,1,2)的结果是3,4,5。答案:D若有定义语句“inta[2][3],*p[3];”,则以下语句中正确的是。A)p[0]=a;B)p[0]=a;C)p[0]=&a[1][2];D)p[1]=&a解析:因为*p[3]定义成指针数组,指针数组中的任何元素都是基类型为int的指针,只有选项B是正确的。答案:B设已有定义“floatx;”,则以下对指针变量p进行定义且赋初值的语句中正确的A)float*p=1024;int*p=(float)x;floatp=&x;D)float*p=&x;解析:指针的值是变量的地址而不能是数值常量,所以选项A错;选项B同样是将float类型的值赋给指针而不是地址,所以选项B也错。定义指针变量前面必须有星号(*),所以选项C不正确。答案:D若有定义“shortinta[]={10,20,30},*p=&a;”,当执行“p++;”后,下列说法错误的A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与a+l等价解析:“*p=&a”将数组a[]的首地址赋给指针p,通过对指针变量加上一个整数可以移动指针,移动的单位为存储单元,shortint型变量在存储器中占两个字节。答案:A有以下程序:/*文件路径名:e5_1_12\main.c*/#includeintmain(void){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf("%d\n",c);return0;}/*标准输入/输岀头文件*//*主函数main()*//*定义变量*//*为指针变量赋值*//*修改p2指向的变量的值*//*输岀c*//*返回值0,返回操作系统*/执行后的输出结果是。A)1B)2C)3D)4解析:指针pl指向变量a,指针p2指向变量b,指针p指向变量c,“*p=*p1*(*p2);”等价于“c=a*b”,故正确选项为C。答案:C己定义以下函数:f()函数返回值是。A)不确定的值C)形参p中存放的值解析:p中存放的是地址值,intf(int*p){return*p;}B)一个整数D)形参p的地址值*p间接引用了p指向的整数值。因此返回一个整数。答案:B己有定义“chara[]="xyz",b[]={'x','y','z'};”,以下叙述中正确的是A)数组a和b的长度相同B)a数组长度小于b数组长度C)a数组长度大于b数组长度D)上述说法都不对解析:对于定义“chara[]="xyz",b[]={'x','y','z'};”,由于字符串"xyz"串长为3,连同隐含的结束符'\0',占4个字节,所以a数组的长度为4。而b数组由单个字符赋初值,个数是3,因此b数组长度为3。答案:C有以下程序:/*文件路径名:ex5_1_15\main.c*/#includeintmain(void){charch[]="uvwxyz",*pc;pc=ch;printf("%c\n",*(pc+5));return0;}/*标准输入/输岀头文件*//*主函数main()*//*定义字符数组与字符指针*//*pc指向字符数组ch的首字符*//*输出*(pc+5)*//*返回值0,返回操作系统*/程序运行后的输出结果是。A)zB)0C)元素ch[5]地址D)字符y的地址解析:字符指针pc指向字符串数组ch的的首字符,*(pc+5)就是pc⑸的值。答案:A有以下程序:/*标准输入/输岀头文件*//*主函数main()*//*定义数组与指针*//*文件路径名:ex5_1_16\main.c*/#includeintmain(void){chars[]="159",*p;p=s;printf("%c",*p++);printf("%c\n",*p++);return0;}/*p指向s的首字符*//*输出*p++*//*输出*p++*//*返回值0,返回操作系统*/程序运行后的输出结果是D)59A)15B)16C)12解析:数组s中存放字符串"159",p指向s的首字符。因此语句"printf("%c",*p++);”输出的是字符'1',输出后p加1指向下一个字符'5',下一个“peintf(.1%c",*p++);”输出的是字符’5'。答案:A若要求从键盘读入含有空格字符的字符串,应使用函数。A)puts()B)gets()C)getchar()D)scanf()解析:函数puts()是从屏幕输出一个字符。getchar(从键盘读入一个字符。scanf(是格式化输入函数,空格字符被用于多个数据输入的分隔符,含有空格的字符串会被截断。gets(用于字符串的输入,并且以回车键为结束符。答案:B*18.对于长度为n的查找表进行顺序查找,在最坏情况下所需要的比较次数为A)log2nB)n/2C)nD)n+l解析:如果查找表中的第一个元素就是要查找元素,则只需做一次比较就查找成功;如果被查找的元素是查找表中的最后一个元素,或者被查找的元素根本就不在查找表中,则需要与查找表中所有的元素进行比较,可知对长度为n的线性表进行顺序查找,在最坏情况下需要比较n次。答案:C*19.冒泡排序在最坏情况下的比较次数是。A)n(n+l)/2B)nlogznC)n(n-1)/2D)n/2解析:如果查找表的长度为n,则在最坏情况下,冒泡排序需要经过n-1趟从前往后扫描,每趟扫描需要的比较次数依次是n-1,n-2,…,1,需要总比较次数为n(n-1)/2。答案:C二、填空题1.设有定义语句“inta[][3]={{0},{1},{2}};”,则数组元素a[1][2]的值为。解析:二维数组中当某行一对花括号内的初值个数小于该行中元素的个数时,系统将自动给该行后面的元素补初值0,由此可见数组a[1][2]=0。答案:02•以下程序中,LineMax()函数的功能是求3行4列二维数组每行元素中的最大值,请填空。/*文件路径名:ex5_2_2\main.c*/#include/*标准输入/输出头文件*/voidLineMax(intm,intn,inta[][4],int*bar){inti,j,x;for(i=0;iintmain(void){intx,y,z,max,*px=&x,*py=&y,*pzscanf("%d%d%d",&x,&y,&z);/*标准输入/输岀头文件*//*主函数main()*/&z,*pmax=&max;/*定义变量*//*输入x,y,z*//*如果*py更大*//*则将*py赋给*pmax*//*如果*pz更大*//*则将*pz赋给*pmax*//*输岀最大值*//*返回值0,返回操作系统*/解析:程序中定义了4个指针变量,px指向x,py指向y,pz指向乙pmax指向max,if语句将pmax指向的存储单元的值与*py与*pz两个数值比较,可知*px代表x的值,可知初始时假设x中的值最大,就让pmax指向X。答案:*pmax=*px或*pmax=x或max=*px或max=x5•以下程序的输出结果是。/*文件路径名:ex5_2_5\main.c*//*标准输入/输岀头文件*//*字符串头文件*//*主函数main()*//*输岀字符串的长度*//*返回值0,返回操作系统*/#include#includeintmain(void){printf("%d\n",strlen("IBM\nO12\1\\"));return0;}解析:转义符'\n'、’\1'和'\\'都会别只算一个字符,所以"IBM\n012\1\\"的字符数为9。答案:96•以下程序的输出结果是。/*文件路径名:e5_2_6\main.c*/#include#includeintmain(void){chara[]={'\1','\2','\3','\4','\0'};printf("%d,%d\n",sizeof(a),strlen(a));return0;}/*标准输入/输岀头文件*//*字符串头文件*//*主函数main()*//*定义字符数组*//*输岀字符串所占空间大小与长度*//*返回值0,返回操作系统*/解析:strlen()求字符串的实际长度,不包括'\0',sizeof(是求数组a所占的字节,包括'\0'。答案:5,4*7.对长度为10的查找表表进行冒泡排序,最坏情况下需要比较的次数为。解析:如果查找表的长度为10,则在最坏情况下,冒泡排序需要经过n-1趟从前往后扫描,每趟扫描需要的比较次数依次是9,8,…,1,需要总比较次数为36。答案:45三、编程题1.求一个4X4整型矩阵对角线元素之和。参考程序:/*文件路径名:ex5_3_1\main.c*//*包含库函数printf()所需要的信息*//*包含库函数system(所需要的信息*/#include#includeintSum(inta[4][4])/*返回二维数组a对角线元素之和*/{ints=0,i;for(i=0;i<4;i++){/*求对角线元素之和*/s=s+a[i][i];s=s+a[i][3-i];}/*定义变量*//*累加主对角线*//*累加副对角线*/returns;}/*返回对角线元素之和*/intmain(void){inta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};printf("对角线元素之和为%d\n",Sum(a));/*主函数main()*//*定义二维数组*//*输出二维数组a对角线元素之和*/system("PAUSE");return0;}/*调用库函数system(),输出系统提示信息*//*返回值0,返回操作系统*/2.将一个数组中的值按逆序重新存放,例如,原来的顺序为6,8,5,2,9。要求重排为9,2,5,8,6。参考程序:/*文件路径名:ex5_3_2\main.c*/#include#includevoidReverse(inta[],intn){inti,j,tem;for(i=0,j=n-1;i#include#include/*包含库函数printf()所需要的信息*//*包含库函数system(所需要的信息*//*包含字符串库函数的信息*/intmain(void)/*主函数main()*/{charstr[81];/*存储一行字符*/unsignedinti,j,n1=0,n2=0,n3=0,n4=0,n5=0;/*定义变量*/for(i=0;i<3;i++){/*输入并处理三行字符*/gets(str);for(j=0;j='A'&&str[j]<='Z'){/*大字字母*/n1++;}elseif(str[j]>='a'&&str[j]<='z'){/*小字字母*/n2++;}elseif(str[j]>='0'&&str[j]<='9'){/*数字*/n3++;}elseif(str[j]==''){/*空格*/n4++;}else{/*其它字符*/n5++;}/*输入一行字符str*//*对大写字母进行记数/*对小写字母进行记数/*对数字进行记数*//*对空格进行记数*//*对其它字符进行记数*/*/*//*输出大写字母个数*//*输出小写字母个数*//*输出数字个数*//*输出空格个数*//*输出其它字符个数*/system("PAUSE");return0;}/*文件路径名:ex5_3_4\main.c*/#include#includevoidStringCopy(chars1[],chars2[])/*将字符数组{inti=0;while((s1[i]=s2[i])!='\0')i++;}intmain(void){chars1[80],s2[]="thisisatest!";StringCopy(s1,s2);puts(s1);system("PAUSE");return0;}/*包含库函数printf()所需要的信息*//*包含库函数system(所需要的信息*/s2中全部字符复制到字符数组si中,'\0'也要复制过*//*定义变量*//*逐个复制字符*//*主函数main()*//*定义字符数组*//*将s2复制到si*//*输出si*//*调用库函数system(),输出系统提示信息*//*返回值0,返回操作系统*/5•编写一个程序将两个字符串连接起来,要求不用strcat(函数。参考程序:/*文件路径名:ex5_3_5\main.c*/#include#includechar*StrCat(charsi[],chars2[]){inti=0,j=0;while(si[i]!='\0')i++;while((si[i+j]=s2[j])!='\0')j++;/*包含库函数printf()所需要的信息*//*包含库函数system(所需要的信息*//*将s2中的字符串连接到si中字符串的后面*//*定义变量*//*使si[i]=='\0'*//*将s2字符串连接到si中字符串的后面*/}printf("含%u个大写字母\n",n1);printf("含%u个小写字母\n",n2);printf("含%u个数字\n",n3);printf("含%u个空格\n",n4);printf("含%u个其它字符\n",n5);/*调用库函数system(),输出系统提示信息*//*返回值0,返回操作系统*/4•编写一个程序,将字符数组s2中全部字符复制到字符数组si中,要求不使用strcpy()函数,在复制时,'\0'也要复制过,'\0'后面的字符不再复制。参考程序:returns1;}intmain(void){chars1[80]="This",s2[]="isatest!";StrCat(s1,s2);puts(s1);system("PAUSE");return0;}6.编写一个程序求字符串的长度,要求不使用参考程序:/*返回字符s1的首地址*//*主函数main()*//*定义字符数组*//*将s2连接到s1*//*输出s1*//*调用库函数system(),输出系统提示信息*//*返回值0,返回操作系统*/strlen()函数。/*文件路径名:ex5_3_6\main.c*/#include#includeunsignedintStrLen(chars[]){inti=0;while(s[i]!='\0')i++;returni;}intmain(void){chars[]="Thisisatest!";printf("\"%s\"的长度是%u\n",s,StrLen(s));system("PAUSE");return0;}/*包含库函数printf()所需要的信息*//*包含库函数system(所需要的信息*//*返回将s中的字符串的长度*//*定义变量*//*使s[i]=='\0',i的值即为s的长度*//*返回i*//*主函数main()*//*定义字符数组*//*输出结果*//*调用库函数system(),输出系统提示信息*//*返回值0,返回操作系统*/7.编写一个函数,对含n个元素的整型数组a求最大值与最小值,并通过形参传回调用函数,并要求编写测程序。参考程序:/*文件路径名:ex5_3_7\main.c*/#include/*包含库函数printf()所需要的信息*/#include/*包含库函数system(所需要的信息*/voidMaxMin(inta[],intn,int*pMax,int*pMin)/*求数组a求最大值与最小值,并通过形参传回调用函数*/{inti;/*定义变量*/*pMax=*pMin=a[0];for(i=1;i*pMax)*pMax=a[i];if(a[i]<*pMin)*pMin=a[i];}/*初始化*pMax,*pMin*//*a[i]更大,a[i]为当前的最大值*//*a[i]更小,a[i]为当前的最小值*/intmain(void)/*主函数main()*/{inta[]={1,7,0,5,80,-20},n=6,max,min;/*定义数组及变量*/MaxMin(a,n,&max,&min);/*求a的最大值及最小值*/printf("最大值为%d,最小值为%d\n",max,min);/*输出结果*/system("PAUSE");return0;}/*调用库函数system(),输出系统提示信息*//*返回值0,返回操作系统*/8.编写一个函数,求二维整型数组所有元素之和,并要求编写测试程序。参考程序:/*文件路径名:ex5_3_8\main.c*/#include#include#defineM3#defineN4intSquareSum(inta[M][N]){inti,j,s=0;for(i=0;i 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 做得更好]
本文档为【C语言程序设计教程清华大学出版社陈明主编第5章答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_113440
暂无简介~
格式:doc
大小:44KB
软件:Word
页数:18
分类:
上传时间:2018-07-18
浏览量:2