版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家开放大学《C语言程序设计》章节测试参考答案第一章C语言概述自测练习一:C语言字符集自测练习1.在C语言字符集中,包含有全部262.在C(√)3.在C语言程序中,ABC和abc自测练习二:C语言字符集自测练习1.在C2.在C3.C语言中使用的字符常量,其起止标记符是(a.双引号b.尖括号c.单引号d.中括号4.C语言中使用的字符串常量,其起止标记符是(a.双引号b.中括号c.尖括号d.单引号自测练习三:C语句分类自测练习1.在C语言中,一条简单语句的结束符是(a.分号b.空格c.冒号d.逗号2.在C语言中,每条复合语句的开始标记字符为(1/a.<b.[c.(d.{3.不符合C语言规定的复合语句是(a.{x=0;}b.{}c.{;}d.{y=10}4.C语言中的选择类语句有两条,它们是(a.else和caseb.if和switchc.if和elsed.switch和case自测练习四:函数分类与使用自测练习1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为(b.mainc.MAINd.function2.C语言程序中的基本功能模块为(a.标识符b.函数c.表达式d.语句3.一个函数定义所包含的两个部分是(a.函数头和函数体b.函数原型和函数体c.函数名和参数表2/d.函数头和函数尾4.一个程序文件开始使用的每条预处理命令,其首字符必须是(a.#b.@c.%d.$5.在一个程序文件中,若要使用#include命令包含一个系统头文件,则此头文件所使用的起止定界符为一对(a.双引号b.花括号c.尖括号d.单引号6.7.8.若要在程序文件中使用数学函数,则需要引入的系统头文件为math.h9.若要在程序文件中使用标准输入和输出函数,则需要引入的系统头文件为stdio.h自测练习五:C语言程序的层次结构自测练习1.在C语言程序中,单行或行尾注释使用的标记符为(a.//b.**c./*d.*/2.在C语言程序中,多行注释使用的结束标记符为().a./*b.**c.*/d.//3.3/4.自测练习六:标准输出函数printf()的使用自测练习1.用于输出表达式值的标准输出函数是(a.print()b.scanf()c.output()d.printf()2.在printf()函数调用的格式字符串中,每个格式符的先导字符为(a.#b.@c.$d.%3.在printf()%d据类型为(b.charc.floatd.double4.在printf()函数调用的格式字符串中,若使用格式符为“据类型为(d.double5.在printf()函数调用的格式字符串中,若使用格式符为“%5d出的数据占用的字符位置个数为(a.5b.4c.6d.34/6.在利用printf()7.printf("%d-%d=-”语句所使用的格式字符串中,包含有3个8.在执行“printf("s=%s\n","abc");”语句时,输出结果为9.printf("s=%c\n","abc");”语句中,格式符的使用同后面的输出数据相适合。(×)10.在执行“printf("%d-%d=%d",x,y,x-”语句时,其输出的前两个数据值之自测练习七:标准输入函数scanf()的使用自测练习1.程序运行中需要从键盘上输入多于一个数据时,若不特别规定分隔符,则输入的各数据之间所使用的分隔符为(a.空格或回车b.空格或逗号c.逗号或回车d.逗号或分号2.用于从键盘上为变量输入值的标准输入函数是(a.print()b.scanf()c.printf()3.在scanf()函数调用的格式字符串中,每个格式符的先导字符为(a.%b.#c.@d.$4.在scanf()函数调用的格式字符串中,若使用格式字符串为“%d,%d输入的两个数据之间的分隔符为(a.$b.#c.@5/d.%5.在利用scanf()6.scanf("%d%d",&x,&y);2个格式符。(√)7.在执行“scanf("%d%d",&x,&y);”语句时,需要从键盘上输入2自测练习八:C语言程序的上机操作过程自测练习1.C语言源程序文件的扩展名为(a.exeb.objc.cd.cpp2.每个C语言程序文件的编译错误的类型有(a.2种b.3种c.1种d.4种3.每个C程序文件在编译时可能出现有警告性错误,其对应的标识符号为(a.errb.errorc.warnd.warning4.一个C5.一个C6.在C第一章综合练习一、单项选择题1.C语言中的循环类语句有3条,它们是(A.for,if,whileB.for,while,do6/C.while,do,switchD.for,break,do2.C语言中的跳转类语句有四条,它们是goto,return和(A.break,constB.static,continueC.break,continueD.while,extern3.当不需要函数返回任何值时,则所使用的返回类型为(A.intB.unionC.voidD.43A.表达式B.语句C.函数体D.参数表5.在一个程序文件的开始,若需要使用一个包含命令包含一个头文件时,则命令标识符为(A.#cludeB.#constC.#includeD.#defile6.在#include预处理命令中,不可以包含(A.系统头文件B.程序文件C.用户头文件D.目标文件7.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f7/输出的数据占用的字符位置个数为(A.5B.6C.4D.28.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f输出的数据中,其小数部分占用的字符位置个数为(A.5B.6C.4D.29.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f输出的数据中,其整数部分占用的字符位置个数为(A.6B.4C.3D.210.在scanf()函数调用的格式字符串中,若使用格式符为“数据类型为(A.charB.intC.floatD.double.在scanf()函数调用的格式字符串中,若使用格式符为“%Lf的数据类型为(A.charB.intC.floatD.double8/12.每个C程序文件在编译时可能出现有严重性错误,其对应的标识符号为(A.warningB.errorC.warnD.err13A.objB.exeC.dswD.dsp二、判断题1C(×)2C3#include4.使用#include5.注释语句的内容只会出现在源程序文件中,不会出现在编译后而生成的目标67.源程序文件被编译成目标文件后,其目标文件中也存在有对应的注释内容。(×)8910.在执行“printf("%5d",x);”语句时,其输出的x的值所占用的显示宽度将大于等于512.在执行“printf("%6d",x);”语句时,其输出的x的值所占用的显示宽度将小于69/13.在执行“printf("%8.2f",x);”语句时,其输出的x的值所占用的显示宽度将大于等于814.在“scanf("%d%d",&x,&y);”语句中,x和y15.在“scanf("%s",x);”语句中,x16.在“scanf("%d-17C18.在C语言程序上机操作的过程中,需要对每个用户头文件进行单独的编译19.在C语言程序上机操作的过程中,不能够对用户头文件进行单独的编译操第二章基本数据类型和表达式自测练习一:数据类型自测练习1.char类型的长度为(a.1b.3c.4d.22.常数120的数据类型为(a.双精度型b.短整型c.长整型d.整型3.一个无符号字符类型的值域范围是(a.127到255b.0到255c.1到255d.128到+127/4.广义整数类型包括短整型、标准整型和长整型35.短整型、标准整型和长整型的长度分别为2、4和8自测练习二:常量自测练习1.数值常量0x62的表示方式为(a.八进制b.十进制c.二进制d.十六进制2.在C语言中,表示换行符的转义字符为(a.\rb.\fc.\md.\n3.字符串"It\'s\'"中包含的字符个数为(a.8b.7c.6d.54.执行“printf("%c",'B'+2);”语句后得到的输出结果为(a.Db.Bc.Cd.A5.常数3.266.常数3.26f7.8.常数3.26自测练习三:变量自测练习1.要定义a和b为两个整型变量,则使用的定义语句为(a:b;/ab;a,b;a;b;自测练习四:运算符和表达式自测练习1.运算符优先级最高的是(a./b.||c.++d.%2.下列数值中最小值是(a.28/8b.28%8c.35/3d.35%33.已知x的初值为15,则下列各表达式中的最小值为(a.x*=2b.x+=10c.x/=2d.x%=204.若x=5,,则计算y*=++x表达式后,y的值为(a.40b.60c.50d.555.设x和y均为逻辑值,则x&&y为真的条件是(a.其中一个为假。b.它们均为假c.它们均为真d.其中一个为真/6.x<=10的相反表达式为(a.x>=10b.x!=10c.x>0d.x>107.表达式(float)25/4的值为68.表达式x=x+y表示成复合赋值表达式为9.增量表达式++y表示成赋值表达式为y=y+110.表达式sizeof(25)的值等于4逻辑表达式(x>3&&x<10)的相反表达式为(x<=3||自测练习五:一些系统函数的使用自测练习1.函数pow(4,3)的值为(a.64.0b.27c.12.0d.562.假定x=4.6,则函数floor(x)的值为(a.5.0b.4.0c.4.6d.4.53.正弦函数sin48在C语言的表示为(a.sin(48*3.14159)b.sin(48)c.sin(48/180.0)d.sin(48*3.14159/180)4.在C语言中,求一个实数的绝对值的数学函数为fabs(x)5.已知x=25,则abs(x)的值为256.在C/第二章综合练习一、单项选择题(112题每题3分,1316题每题4分,共48分)1.int类型的长度为(A.1B.2C.4D.82.常数4.25的数据类型为(A.整型B.单精度型C.双精度型D.长双精度型3.一个有符号字符类型的值域范围是(A.128到+127B.0到255C.127到255D.1到2554.字符串"Its\40\n"的长度为(A.5B.6C.7D.85.实数340.25对应的规格化浮点数为(A.340.25B.34.025e1C.3.4025e2D.0.34025e36.要利用const保留字定义整型常量ABC的值为10A.constintABC10;B.constintABC,10;/C.constintABC;10;D.constintABC=10;7.要利用#define命令定义ABC常量的值为100,则对应的命令格式为(A.#defineABC=100B.#defineABC==100C.#defineABC100D.#defineABC;1008.下列数值中最大值是(A.28/8B.35/3C.28%8D.35%49.在下面运算符中,优先级最高的是(A.!B.&&C.||D.!=10.设有语句序列为“inta=12;a+=a*a;a的值为(A.12B.144C.156D.288.在C语言中,用于比较大小的关系运算符的总数为(A.3B.4C.5D.612.x>0&&y<=5的相反表达式为(A.x<=0||y>5B.x>0||y<=5/C.x<=0&&y>5D.x<0&&y!=513.假定x是一个逻辑量,则(x&&!x)和(x||!x)的值分别为(A.1和1B.0和0C.0和1D.1和014.假定x=4.6,则函数ceil(x)的值为(A.4.0B.4.6C.4.5D.5.015.表达式floor(2.3457*100+0.5)/100的值为(A.2.35B.2C.2.34D.2.3457二、判断题(每题4分,共52分)16.常数3.26e417.18.19.定义符号常量只有一种方法,就是采用预处理命令#define20.使用const21.在一条变量定义语句中,定义的变量和赋给它的初值之间只能使用等号(=)。(√)22.假定x=5,则表达式2+x++的值为723.表达式(int)14.6%5的值为024.表达式x=x+1表示成增量表达式为x++25.假定x=5a=(x?10:20);”语句后a的值为10/26.逻辑表达式(a>b||b==5)的相反表达式为(a>b&&b==5)27.在C语言中,求一个整数的绝对值的数学函数为abs(x)28.在C语言中,退出程序运行的系统函数为exit()第三章流程控制语句自测练习一:if条件语句自测练习1.若x的值为5if(x>10)x++;elsex;”语句后,x的值为(a.4b.6c.3d.52.若x的值为10if(x)x++;elsex”语句后,x的值为(a.9b.11c.10d.03.在if语句中,可以带有else4.在if语句中,每个else关键字与它前面同层次并且最接近的if关键字相配套。(×)5.执行下面程序的输出结果为#include<stdio.h>voidmain(){inta=25,b=18;if(a>b)printf("%s\n","a>b");if(a==b)printf("%s\n","a==b");if(a<b)printf("%s\n","a}答案:a>b/6.执行下面程序的输出结果为#includestdio.h>#include<stdio.h>voidmain(){inta=18,b=4,c=0;if(a/b){c+=a/b;c+=a%b;}if(a%b){a=a/b;b=a%b;}printf("%d",a+b+c);}答案:a>b自测练习二:switch开关语句自测练习1.在switch语句的每个casebreakswitch语句容易被改写成语句(a.ifb.whilec.dod.for2.每个C语言程序文件的编译错误的类型有(2.在switch语句中,每个保留字case后面的表达式必须是(a.函数调用b.变量种c.一般表达式d.常量3.执行下面程序的输出结果为#include<stdio.h>voidmain(){intx=5,y=0;switch(2*x3){case4:y+=x;break;case7:y+=2*x+1;break;/case10:y+=3*x;break;}printf("y=%d\n",y);}答案:y=114.执行下面程序的输出结果为#include<stdio.h>voidmain(){intx=9,y=0;switch(x%3){case0:y+=x;case1:y+=2*x+1;case2:y+=3*x;break;default:y+=x1;}printf("y=%d\n",y);}答案:y=55自测练习三:for循环语句自测练习1.当处理问题时的循环次数是确定的,则采用的最合适的循环方式为(a.whileb.switchc.whiled.for2.C的开始使用保留字(a.caseb.continuec.staticd.const/3.已知'A'~'Z'的ASCII码为65~90,当执行“intx='C'+5;”语句后x的值为(a.70b.73c.72d.714.5.在一条变量定义语句中,当同时定义多个变量时,各变量之间只能使用逗号分6.在一条变量定义语句中,定义的变量和赋给它的初值之间不需要使用等号(=)。(×)自测练习四:while循环语句自测练习1.每次先进行循环条件的判断,然后再执行循环体的语句为(a.for和whileb.for和doc.switch和breakd.while和do2.若n的值为5s的值为0while(n>0)--;sa.13b.14c.15d.123.当循环次数确定时,while循环语句能够转换为for4.while5.执行下面程序的输出结果为#include<stdio.h>voidmain(){intn=10,y=0;while(n>5)y+=n;printf("y=%d\n",y);}/答案:y=406.执行下面程序的输出结果为。#include<stdio.h>voidmain(){inti=1,p=1,s=1;while(s<40){i++;p=p*i;s=s+p;}printf("s=%d\n",s);}答案:s=153自测练习五:do循环语句自测练习1.流程控制类语句包括的3类语句为(a.选择、循环、跳转b.选择、循环、输入c.选择、输入、输出d.循环、选择、函数2.若i的值为0,则执行“doi++;while(i*i<10);”语句的过程中,循环体被执行的次数为(a.2b.3c.5d.43.dowhile4.dowhile5.执行下面程序的输出结果为#include<stdio.h>voidmain(){intx=16,s=0;do{s+=x;x=3;}while(x>0);printf("s=%d\n",s);}/答案:s=516.______。#include<stdio.h>voidmain(){intx,y;doscanf("%d%d",&x,&y);while(x<=0||y<=0);printf("%d\n",x*x+y*y);}答案:正整数自测练习六:跳转类语句自测练习1.若要结束所在函数的执行过程,返回到调用该函数所在位置,则使用的语句为(a.gotob.continuec.returnd.break2.要结束所在循环语句中循环体的一次执行,则在其中使用的语句为(a.gotob.returnc.breakd.continue3.break4.return5.continue6.执行下面程序的输出结果为#include<stdio.h>voidmain(){inti,s=0;for(i=1;i<10;i++){s+=i*(i+1);/if(s>40)break;}printf("s=%d\n",s);}答案:s=707.执行下面程序的输出结果为#include<stdio.h>voidmain(){inti=0,s=0;do{i+=2;if(i%3==0)continue;s+=i*(i+1);}while(s<60);printf("s=%d\n",s);}答案:s=98第三章综合练习一、单项选择题1.若x的值为15if(x>10)x++;elsex;”语句后,x的值为(a.16b.10c.15d.142.若x的值为10if(!x)x++;elsex”语句后,x的值为(a.0b.10c.9/d.113.若x的值为10,则执行“switch(x%3){case0:x++;case1:x++;case2:x++;}”语句后,x的值为(a.13b.10c.12d.114.若x的值为10switch(x%3){case0:x++;break;case1:x++;default:x++;}”语句后,x的值为(a.9b.10c.12d.115.若n的值为10for(i=1;i<n;i++)S;”语句的过程中,表达式i=1共被执行的次数为(a.1b.1c.nd.n+16.若n的值为10for(i=0;;i++)if(i>n/3)break;ia.6b.3c.4d.57.若n的值为10,则执行“for(i=1;i<n;i++)S;”语句的过程中,表达式共被执行的次数为(a.nb.n+1c.1d.n1/8.若n的值为10,则执行“for(i=0;i<n;i++)for(j=i;j<n;j++)S;”语句后,内层循环体S语句的执行总次数为(a.n*nb.n(n+1)/2c.(n+1)/2d.n(n1)/29.若n的值为10while(n-->0)s+=n;”语句的过程中,循环体被执行的次数为(a.9b.11c.8d.1010.若n的值为5s的值为0while(n-->0)s+=n;sa.15b.12c.10d.14在下列的语句中,必须以分号作为结束的语句是(a.whileb.forc.dod.switch12.若n的值为5,s的值为0,则执行“dos+=n;while(n>0);”语句后,s的值为(a.14b.12c.15d.13/13.要结束任一种循环语句或switcha.gotob.breakc.continued.return二、判断题14.在if语句中,必须带有else15.在for循环语句的头部,for后面括号内共有316.for循环语句不能够被转换为while17.while18.while19.dowhile20.dowhile21.dowhile22.break语句可以使用在switch23.return24.continue三、程序填空题25.#include<stdio.h>voidmain(){inta=5,b=8,c=6,d=15,x,y;if(a>=b)x=a;elsex=b;if(c>=d)y=c;elsey=d;if(x>=y)printf("%d\n",x);elseprintf("%d\n",y);}答案:1526.#include<stdio.h>voidmain(){intx=5,y=8,z=12;/if(x>y&&x>z)printf("%d\n",x);elseif(y>x&&y>z)printf("%d\n",y);elseprintf("%d\n",z);}答案:1227.#include<stdio.h>voidmain(){inta=5,b=8,c;if(3*a>2*b)c=2*a+3*b;elseif(a==b)c=a*a+b*b;elsec=a*b+3;printf("c=%d\n",c);}答案:c=4329.#include<stdio.h>voidmain(){intx=5,y=0;switch(2*x3){case4:y+=x;case7:y+=2*x+1;case10:y+=3*x;}printf("y=%d\n",y);}答案:y=2629.#include<stdio.h>voidmain(){charch;inta,b,c;scanf("%c",&ch);/scanf("%d%d",&a,&b);switch(ch){case'+':c=a+b;break;case-':c=ab;break;case'*':c=a*b;break;case'/':c=a/b;break;default:printf("Error!\n");}printf("%d%c%d=%d\n",a,ch,b,c);}答案:35=1530.#include<stdio.h>voidmain(){inti,s=0;for(i=16;i>0;i=2)if(i%3==0||i%4==0)s+=i;printf("s=%d\n",s);}答案:s=4631.#include<stdio.h>voidmain(){inti,x,y,s=0;scanf("%d%d",&x,&y);if(x>y){i=x;x=y;y=i;}for(i=x;i<=y;i++)if(i%2==1)s+=i*i;printf("s=%d\n",s);}答案:奇数32.#include<stdio.h>/constintN=100;voidmain(){inta,b;for(a=2;a<=N;a++){for(b=2;b*b<=a;b++)if(a%b==0)break;if(b*b>a)printf("%d",a);}}答案:素数(质数)33.#include<stdio.h>voidmain(){inti=0,s=0;while(s<50){i+=2;s+=i*i;}printf("s=%d\n",s);}答案:s=5634.#include<stdio.h>voidmain(){intx,p=2;scanf("%d",&x);while(x>=p)if(x%p==0){printf("%d=%d*%d\n",x,p,x/p);break;}elsep++;}答案:35=5735.#include<stdio.h>voidmain(){intx,y,a,p=1;scanf("%d%d",&x,&y);/if(x<y){a=x;x=y;y=a;}if(x%y==0){printf("%d\n",y);return;}a=2;while(y>=a)if(x%a==0&&y%a==0){x=x/a;y=y/a;p*=a;}elsea++;printf("%d\n",p);}答案:公约数36.#include<stdio.h>voidmain(){intx=36,y=48,z;do{z=x%y;x=y;y=z;}while(y>0);printf("x=%d\n",x);}答案:x=1237.#include<stdio.h>voidmain(){intx,i=0,s=0;scanf("%d",&x);do{i+=2;s+=i*i;}while(s<x);printf("n=%d\n",i2);}答案:最大38.#include<stdio.h>voidmain(){intx=37,k=2;do{if(x%k==0)break;k++;}while(k*k<=x);if(k*k>x)printf("Yes!\n");elseprintf("No!\n");/}答案:Yes!第四章数组的概念自测练习一:数组的概念自测练习1.在一个数组中,数组元素a[i]前面的元素个数为(a.2*ib.i+1c.id.i12.假定一维数组的定义为“chara[8];(a.8b.32c.64d.163.4.自测练习二:一维数组的定义和使用自测练习1.假定有一个定义语句为“inta[10]={3,4,2,8,6};a[3]的值为(a.6b.8c.4d.22.在下面字符数组的定义语句中,有语法错误的是(a.chara[]="x+y=55.";b.chara[15]={'1','2'};c.chara[10]='5';d.chara[20]="abcdefg";/3.4.doublea[M];1~M自测练习三:二维数组的定义和使用自测练习1.inta[3][4]={{3,4},{2,8,6}};a[2][1]a.8b.6c.4d.02.假定二维数组的定义语句为“int*a[3][5];节数为(a.120b.60c.30d.153.4.doublea[M][N];范围在0~N1自测练习四:使用typedef语句定义数组类型自测练习1.使用“typedefintInteger;”语句把标识符Integer定义为一个(a.整数变量b.整数类型c.数组类型d.数组变量2使用“typedefint”语句把标识符ABC定义为(a.符号常量b.字符数组c.整型数组类型d.简单变量/3.执行“typedefint”语句后,在使用int定义整型变量的地方都可以使用整数类型标识符intType4.使用“typedefcharBB[10][50];”语句定义标识符BB为含有10行50列共500自测练习五:数组的应用自测练习1.执行下面程序的输出结果为#include<stdio.h>voidmain(){inta[8]={3,8,6,5,9,2,8,5};inti,s=0;for(i=0;i<8;i++)s+=a[i];printf("s=%d\n",s);}答案:s=462.执行下面程序的输出结果为#include<stdio.h>voidmain(){inta[8]={12,15,20,8,25,30,28,36};inti,c[3]={0};for(i=0;i<8;i++){if(a[i]%2==0)c[0]++;if(a[i]%3==0)c[1]++;if(a[i]%4==0)c[2]++;}printf("%d%d%d\n",c[0],c[1],c[2]);}答案:6453.执行下面程序的输出结果为#include<stdio.h>voidmain(){/inta[3][3]={{13,18,16},{15,19,12},{8,15,22}};inti,j,x=a[0][0];for(i=0;i<3;i++)for(j=0;j<3;j++)if(a[i][j]<x)x=a[i][j];printf("x=%d\n",x);}答案:x=84.执行下面程序的输出结果为#include<stdio.h>voidmain(){inta[3][3]={{12,18,10},{8,6,14},{5,10,19}};inti,j,s[3]={0};for(i=0;i<3;i++)for(j=0;j<3;j++)s[a[i][j]%3]+=a[i][j];for(i=0;i<3;i++)printf("%d",s[i]);}答案:363927自测练习六:字符串的定义与应用自测练习1.利用一维字符数组存储一个字符串时,在其末尾自动存储的一个字符是(a.'\n'b.'\0'c.空格d.回车2.一个二维字符数组a[M][N]能够存储的字符串个数至多为(a.Mb.1c.1d.N/3.若需要把一个字符串赋给字符数组,则选用的函数是(a.strlenb.strcatc.strcpyd.strcmp4.在C5.对于一个长度为n的字符串,存储它的字符数组的长度至少为n6.有一个语句为“chars2[4]="abcd";s27.执行下面程序的输出结果为#include<<stdio.h>#include<string.h>voidmain(){intc1,c2;chara[20]="String1234\n";charb[10]="str";c1=strlen(a);strcat(b,"245\0");intc2=strlen(b);printf("%d%d\n",c1,c2);}答案:1168.执行下面程序后,假定从键盘上输入的两个字符串数据为123和,则输出结果为#include<stdio.h>#include<string.h>voidmain(){chara[20],b[20];scanf("%s%s",a,b);if(strcmp(a,b)>=0)printf("%s%s\n",a,b);elseprintf("%s%s\n",b,a);/}答案:456123第四章综合练习一、单项选择题1.假定有一个元素类型为int的数组a[10],它所占用的存储空间的字节数为a.20(b.80c.10d.402.假定一维数组的定义为“char*a[8];a.16(b.8c.32d.643.假定有一个定义语句为“inta[10]={3,4,2,8,6};a[5]的值为(a.6b.2c.0d.84.在下面的一维数组定义语句中,有语法错误的是(a[];a[5];a[10]={0};a[]={1,2,3};5.inta[3][5];a.12/b.8c.10d.156.假定有一个定义语句为“inta[3][4]={{3,4},{2,8,6}};a[1][2]的值为(a.4b.6c.8d.27.对于一个长度为n的字符串,保存它至少需要占用的存储字节数为(a.n+2b.n+1c.nd.n18.对于一个二维字符数组a[M][N],存储每个字符串的长度至多为(a.Mb.Nc.1d.N19.若需要比较两个字符串的大小,则选用的函数是(a.strcmpb.strlenc.strcatd.strcpy二、判断题10.12.在一维数组的定义语句中,给数组赋初值的部分是用一对花括号括起来的数/13.14.15.假定二维数组的定义语句为“doublea[M][N];值范围在1~N16.typedefcharBB[10];BB为含有10个元素的一维字符17.typedefcharBB[10][50];BB为含有10行50列共50018.一个二维字符数组a[10][20]中存储每个字符串的最大长度为19三、程序填空题19.#include<stdio.h>voidmain(){inta[8]={10,8,6,15,9,21,8,16};inti,x=a[0];for(i=1;i<8;i++)if(a[i]>x)x=a[i];printf("x=%d\n",x);}答案:x=2120.#include<stdio.h>voidmain(){inta[8]={12,15,20,8,5,9,16,10};inti,s[3]={0};for(i=0;i<8;i++)s[a[i]%3]+=a[i];printf("%d%d%d\n",s[0],s[1],s[2]);}答案:36263321.#include<stdio.h>voidmain(){/inta[3][3]={{3,8,6},{5,9,2},{8,5,12}};inti,j,b[3]={0};for(i=0;i<3;i++)for(j=0;j<3;j++)b[j]+=a[i][j];for(j=0;j<3;j++)printf("%d",b[j]);}答案:16222022.#include<stdio.h>voidmain(){inta[3][4]={{60,75,83,52},{76,94,88,35},{80,74,46,90}};inti,j,x=a[0][0],y=-1;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>x){y=x;x=a[i][j];}elseif(a[i][j]>y)y=a[i][j];printf("%d%d\n",x,y);}答案:949023.#include<stdio.h>#include<string.h>voidmain(){chara[10],b[10],c[10];intc1,c2,c3;scanf("%s%s%s",a,b,c);c1=strlen(a);c2=strlen(b);c3=strlen(c);if(c1>c2&&c1>c3)printf("%s",a);elseif(c2>c1&&c2>c3)printf("%s",b);elseprintf("%s",c);}/答案:xucong24.#include<stdio.h>voidmain(){chara[]="abcdbfbgacd";inti=0,i1=0,i2=0,i3=0;for(i=0;a[i]!='\0';i++){switch(a[i]){case'a':i1++;break;case'b':i2++;break;case'c':i3++;break;}}printf("%d%d%d%d\n",i1,i2,i3,i);}答案:21125.#include<stdio.h>voidmain(){chara[]="12342345342356";inti,c[7]={0};for(i=0;a[i]!='\0';i++)c[a[i]-48]++;//48为数字字符0的ASCII码for(i=1;i<7;i++)printf("%d",c[i]);}答案:4第五章指针的概念自测练习一:指针的概念自测练习1.一个指针类型的简单变量占用内存中的字节数为(a.16/b.4c.2d.82.在定义指针变量的语句中,在指针变量名的前面标记的字符为(a.$b.*c.#d.&3.4.假定一个数据对象为x,则x的地址表示为*x自测练习二:指针变量的定义和使用自测练习1.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大(。a.4个字节b.8个字节c.1个字节d.2个字节2.假定变量m定义为“intm=7;p=&m;*p=m;&p=*m;*p=&m;3.假定一个数据对象为int*类型,则指向该对象的指针类型为(*******p,**pp;,p和pp/自测练习三:指针运算自测练习1.假定p是一个指向数据对象的指针,则通过p表示该数据对象为(a.*pb.p&c.p*d.&p2.若p指向x,则与x的等价表示为(a.*xb.*pc.pd.&x3.假定p所指对象的值为25p+1所指对象的值为42*++p的值为42。(√)4.假定p所指对象的值为25,p1所指对象的值为42,则执行*p运算后,p所指对象的值为42自测练习四:指针与数组的关系自测练习1.假定a为一个数组名,则下面表达式中错误的是(a.*(a+1)b.*ac.*a++d.a[i]2.已知“inta[10],x,*pa=a;a[3]元素的值赋给x,则不正确的语句为(a.x=pa[3];b.x=a[3];c.x=*pa+3;d.x=*(a+3);3.已知“chara[3][5];a[2][3]的地址比该数组的首地址大(a.52个字节/b.26个字节c.13个字节d.48个字节4.一个二维数组元素为a[i][j],它的指针访问方式不正确的是(a.(*(a+i))[j]b.*(a[i]+j)c.*a[i]+jd.*(*(a+i)+j)5.1.假定a是一个一维数组,则表达式所对应的元素为a[i]6.1.假定a是一个一维数组,则表达式所对应的元素为a[i]7.假定a是一个一维数组,则进行8.已知“inta[3][5];int(*p)[5]=a;自测练习五:变量存储空间的动态分配自测练习1.对于每个进行动态存储分配的函数,其返回值类型为(a.void*b.charc.char*d.void2.已知“int*p=calloc(24,sizeof(int));p所指向的动态内存空间中,能够存储整型元素的个数为(a.12b.58c.24d.63.stdio.h。(×)4.进行动态存储分配的malloc()/自测练习六:使用指针和动态存储分配的程序举例自测练习1.执行下面程序的输出结果为#include<stdio.h>#includevoidmain(){int*p=malloc(sizeof(int));*p=20;*p+=30;printf("%d\n",*p);}答案:502.执行下面程序的输出结果为#include<stdio.h>#include<stdlib.h>voidmain(){int*p=calloc(6,sizeof(int));int*t;*p=1;for(t=p+1;t<p+6;t++)*t=*(t1)+3;printf("%d\n",*(p+5));}答案:16第五章综合练习一、单项选择题1.一个指针指向一个数据对象,它保存着该数据对象的地址,若数据对象为DataType类型,则该指针的类型为(a.DataType&b.DataType*/c.DataType**d.DataType2.NULL是一个符号常量,通常作为空指针值,它的取值为(a.1b.0c.1d.'\n'3.若要把一个整型指针pa.(int)*pb.(char*)*)pd.(char*)p4.若要定义整型指针p并初始指向x,则所使用的定义语句为(*p=&x;p=&*p=x;*p=&x;5.假定p所指对象的值为25p+1所指对象的值为42*p++a.43b.26c.25d.426.假定p是一个指针变量,则该变量的地址表示为(a.&&pb.&pc.**pd.*p7.已知“char*s="Helloworld!";p指向s所指向的同一个字符串,则p应定义为(a.char*p(s);/b.char*p=&s;c.char*p;p=*s;d.char*p=s;8.假定a为一个数组名,则下面表达式中错误的是(a.(*a)++b.*a++c.a+id.*a+i9.已知“charb[10]=”12345”,*p=b;*(p+2)的值为(a.'4'b.'3'c.'2'd.'5'10.已知“inta[6][5];a[2][4]的地址比该数组的首地址大(a.56个字节b.14个字节c.28个字节d.96个字节要使p指向二维整型数组a[10][20],p应定义为((*p)[20]=a;*p=a;**p=a;*p[20]=a;12.执行“int*p=malloc(sizeof(double)*2);”语句后得到的动态存储空间的字节数为(a.16b.4c.8d.32/13.利用动态存储分配创建具有10a.char*p=calloc(5,4);b.char*p=malloc(10);c.char*p=malloc(10,1);d.char*p=calloc(10);二、判断题14.15.在定义指针变量的语句“int*p,pp;”中,p和pp16.typedefint*inPointer;inPointer定义为int*17.假定a是一个一维数组,则a+i的值与&a[i]18.已知“inta[10],*p=a;19.假定a是一个二维数组,则表达式*(a[j]+i)所对应的元素为a[i][j]20.假定a是一个二维数组,则数组名a的值和a[0]21.进行动态存储分配的22.用于释放动态存储空间的函数为23.假定aa+i所指对象的地址比a地址大4*i三、程序填空题24.执行下面程序的输出结果为答案:8025.#include<stdio.h>voidmain(){inta[8];ints1=0,s2=0,*p;请输入8个整数:");for(p=a;p<a+8;p++)scanf("%d",p);for(p=a;p<a+8;p++){if(*p%2)s1+=*p;elses2+=*p;}printf("%d%d\n",s1,s2);/}答案:偶数26.#include<stdio.h>voidmain(){chara[5][10]={"12345","asde45","wer45t","zxc12","89uy78"};char*p;inti,c=0,k=0;for(i=0;i<5;i++){p=&a[i][0];while(*p!='\0'){if(*p>='0'&&*p<='9')k++;c++;p++;}}printf("%d%d\n",k,c);}答案:152827.#include<stdio.h>#include<stdlib.h>voidmain(){inti,n,*a;doscanf("%d",&n);while(n<2);a=calloc(n,sizeof(int));for(i=0;i<n;i++)if(i%2)a[i]=2*n+i;elsea[i]=2*ni;for(i=0;i<n;i++)printf("%d\n",a[i]);}答案:13628.#include<stdio.h>#include<stdlib.h>/voidmain(){inti=0,j,n=10,*a;a=calloc(10,sizeof(int));while(i<n){a[i]=rand()%30+10;//每次得到一个随机整数for(j=0;j<i;j++)if(a[i]==a[j])break;if(i==j)i++;}for(i=0;i<n;i++)printf("%d\n",a[i]);}答案:相同(相等)第六章函数的定义自测练习一:函数的定义自测练习1.下面正确的函数原型语句是()a.voidint(doublea);Function(voida);c.voidFunction(int);Function(a);2.函数调用中所含实参的个数为(a.3b.4c.5d.23.在程序的一个文件中定义的函数,若要在另一个文件中调用,则必须在这另一个文件中给出该函数的(a.参数表/b.函数名c.返回类型d.原型语句4.在一个函数定义中,参数表中的参数类型可以为void5.6.自测练习二:函数的调用自测练习1.假定一个函数的原型为intff(intx),一个整型变量为,则下面函数调用表达式不正确的是(a.ff(a+10)b.ff(3)c.ff(*a)d.ff(a)2.若用数组名作为函数调用的实参,传递给形参的是(a.数组元素的个数b.数组中全部元素的值c.数组的首地址d.数组中第一个元素的值3.假定一个函数原型为intf1(inta[][N],intn),与数组参数等价的表示为(****a[N](*a)[N]4.5.6.当使用xk4(2,4)调用此函数时,返回值为intxk4(intx,intn){//n为大于等于0的整数inti,p=1,s=1;for(i=1;i<=n;i++){p*=x;/s+=i*p;}returns;}答案:997.假定以1.0作为结束键盘输入的标志,此函数的功能是求出并返回从键盘上输入的一批实数的doublexk7(){doublex,y=0;intn=0;printf("请输入一批实数,直到1.0为止!\n");do{scanf("%Lf",&x);if(x==1.0)break;n++;y+=x;}while(1);if(n==0)returny;elsereturny/n;}答案:平均值8.此函数的功能是把十进制正整数x转换为()进制数输出出来__________。voidxk10(intx){chara[10];inti=0,rem;do{rem=x%16;x=x/16;if(rem<10)a[i]=48+rem;//'0'字符的ASCII码为48elsea[i]=55+rem;//'A'字符的ASCII码为65i++;}while(x!=0);while(i>0)printf("%c",a[i]);/}答案:十六9.此程序运行后,得到的输出结果为#include<stdio.h>intwr9(int*a,intn){inti,s=0;for(i=0;i<n;i++)s+=a[i];returns;}voidmain(){inta[]={5,10,8,7,20,15};printf("%d%d\n",wr9(a,4),wr9(a+2,3));}答案:3035自测练习三:变量的作用域自测练习1.在C44种作用域的是(a.全局b.语句c.文件d.局部2.函数定义参数表中的每个形参变量,其作用域范围为所在的整个(a.参数表b.程序c.函数d.文件3.在函数外定义的变量,若不带有作用域关键字,则它具有(a.局部作用域b.文件作用域/c.全局作用域d.函数作用域4.15.(√)6.对于不加static0自测练习四:分析变量作用域的程序举例自测练习1.在此程序中,具有全局文件作用域的变量是#include<stdio.h>intx1=5;staticintx2=10;constintn=25;voidmain(){while(x1+x2<n){x1+=2;x2++;}printf("%d%d\n",x1,x2);}答案:x12.此程序运行后,得到的输出结果为#include<stdio.h>intfn3(inta,intb){intc=a;a=b;b=c;return2*a+b+1;}voidmain(){intx=5,y=8;intz=fn3(x,y);printf("%d\n",x+2*y+z);}答案:43/3.此程序运行后,得到的输出结果为#include<stdio.h>intfn3(inta,int*b){a*=2;*b+=5;returna+*b2;}voidmain(){inta=5,b=10;intc=fn3(a+1,&b)+a+b;printf("%d\n",c);}答案:454.此程序运行后,得到的输出结果为#include<stdio.h>voidfn1(intx){inty=2;staticintz=2;y+=x;z+=x;printf("%d",x+y+z);}voidmain(){fn1(3);fn1(4);}答案:1319自测练习五:递归函数和函数指针自测练习1.在函数体中把出现调用自身函数的情况称为(a.间接递归调用b.非递归调用/c.直接递归调用d.末尾递归调用2.在函数定义的参数表中,也可以使用函数参数,假定一个函数参数原型为int,则等价的函数指针说明为(*ff(int)(*ff)(int)*ff3.在函数定义中,存在着调用自身函数的函数调用表达式,则称此函数为递归函4.在递归函数的每次递归调用中,对于参数表中的每个形参,得到的值都相同。(×)5.在C自测练习六:利用函数编写应用程序举例自测练习1.这是一个递归函数,其功能是求出并返回数组a[n]中n个元素之积,请在横线处填。intff1(inta[],intn){if(n==1)returna[0];elsereturna[n1]*;}答案:ff1(a,n1)2.这是一个含有递归函数的程序,此程序运行后,得到的输出结果为。#include<stdio.h>intff1(inta[],intn){if(n==1){a[0]=1;returna[0];}else{a[n1);returna[n-1];}}voidmain(){inta[5];/ff1(a,5);printf("%d\n",a[4]);}答案:163.m和n在横线处填写合适内容。intff2(intm,intn,intb){//初始调用时传送给b的值必须为2if(m<b||n<b)returnm*n;elseif(m%b==0&&n%b==0)returnb*ff2(m/b,n/b,b);elsereturn;}答案:ff2(m,n,++b)第六章综合练习一、单项选择题1.在下面的函数声明语句中存在着语法错误的是(a.AA(int,int)b.AA(inta;intb)c.AA(inta,int)d.AA(inta,intb)2.添加的关键字为(a.autob.defaultc.staticd.extern3.externchar*f1(char*x){returnx;}/关键字为(b.externc.chard.char*4.intff(int*a[10],则下面函数调用表达式不正确的是(a.ff(a+3)b.ff(&a[0])c.ff(a)d.ff(a[0])5.假定一个函数原型语句为“intf1(inta[],intn);(***&a6.假定一个函数的参数说明为constintaa.a=10b.printf("%d",a)x=ad.a==07.在函数体中定义的变量具有(a.函数作用域b.局部作用域c.全局作用域d.文件作用域8.在函数外定义的变量,若带有作用域关键字static,则它具有(a.文件作用域/b.全局作用域c.局部作用域d.函数作用域9.在函数体中定义一个静态变量时,选用的存储属性关键字为(a.externb.autoc.registerd.static10.voidff(inta[],(*ff)(int*a,int)b.void(*ff)(int*a,int)c.*ff(int[],int)d.void*ff(int*a,int)二、判断题12.13.14.对于标识为static属性的变量,若没有对它进行初始化,则默认的初值为0。(√)15.在函数体中定义一个变量时,若不选用任何存储属性关键字进行标识,则它17.在C18.在C三、程序填空题18.voidxk9(intx){chara[10];inti=0,rem;do{rem=x%8;x=x/8;/a[i]=48+rem;i++;//'0'字符的ASCII码为48}while(x!=0);while(i>0)printf("%c",a[i]);printf("\n");}答案:八19.intwr1(inta[],intn,intx){inti;for(i=0;i<n;i++)if(a[i]==x)return1;return0;}答案:查找(顺序查找)20.voidwr4(inta[],intb[],intn){inti;b[0]=b[1]=0;for(i=0;i<n;i++)if(a[i]%2==0)b[0]++;elseb[1]++;}答案:奇数21.#include<stdio.h>intwr11(inta[],intn,intk){inti,c=0;for(i=0;i<n;i++)if(a[i]>=k)c++;returnc;}voidmain(){inta[9]={9,5,7,12,4,8,15,10,15};/intc=wr11(a,9,8);printf("%d\n",c);}答案:622.#include<stdio.h>intc=15;voidmain(){inta=10,b=20;{intb=a+15;printf("%d",a+b+c);}printf("%d\n",a+b+c);}答案:504523.#include<stdio.h>voidfn2(int*a,int*b){intx=*a;*a=*b;*b=x;}voidmain(){intx=15,y=26;fn2(&x,&y);printf("%d%d\n",x,y);}答案:261524.#include<stdio.h>intfn1(){intx=0;staticinty=0;x++;y++;returnx+y;}/voidmain(){intx1=fn1();intx2=fn1();printf("%d%d\n",x1,x2);}答案:2325.intff3(intm,intn,intb){if(m<b||n<b)return1;elseif(m%b==0&&n%b==0)returnb*ff3(m/b,n/b,b);elsereturn}答案:ff3(m,n,++b)四、程序设计题26.编写一个函数,求出一维整型数组a[n]中所有元素的平方之和。intfun1(inta[],intn);答案:intfun1(inta[],intn){inti,s=0;for(i=0;i<n;i++)s+=a[i]*a[i];returns;}27.函数,分别求出一维整型数组a[n]中所有奇数元素的个数和所有偶数元素的个数,假定分别用c1和c2所指的对象保存。voidfun2(inta[],intn,int*c1,int*c2);答案:voidfun2(inta[],intn,int*c1,int*c2){inti;*c1=*c2=0;/for(i=0;i<n;i++)if(a[i]%2!=0)(*c1)++;else(*c2)++;}28.编写一个非递归函数过程,求出两个自然数m和n的最大公约数。intfun5(intm,intn);答案:intfun5(intm,intn){intr;while(1){if(n==0)returnm;r=m%n;m=n;n=r;}}第七章结构类型的定义自测练习一:结构类型的定义自测练习1.在结构类型的定义中,使用的关键字是(a.staticb.enumc.structd.union2.在结构类型的定义中,不同数据成员的定义项之间采用的分隔符是(a.冒号b.分号c.句点d.逗号/3.假定一个结构类型的定义为“structB{inta[5];char*b;};(a.28b.20c.24d.214.在C语言中,一个结构类型的长度等于所含的所有数据成员类型的长度之和。(√)5.6.自测练习二:结构变量的定义和成员访问自测练习1.structBook{chartitle[20];doubleprice;}bk;句定义为(a.structBook*d=NULL;b.structBookc=&bk;c.structBooka=bk;d.structBook*b=&bk;2.structBook{chartitle[20];doubleprice;};定义为(a.structBooka,*x=&a;b.structBook*x=malloc(sizeof(structBook));c.structBooka={"C++Programming",27.0};d.structBook*x=calloc(sizeof(structBook));3.假定要访问一个结构变量x中的数据成员,则表示方法为(a.x(a)b.x>ac.x:ad.x.a4.假定要访问一个结构指针p所指对象中的b/为(a.x>ab.x:ac.x(a)d.x.a5.使用结构类型时,只需要使用类型标识符,不需要使用关键字struct6.在结构成员访问运算符中,点运算符7.自测练习四:结构与链表自测练习1.假定一个链表中结点的结构类型为“structAA{intdata,structAA*next;};next数据成员的类型为(a.structAAb.structAA*c.AA*2.假定一个链表的表头指针为,结点中包含有data和next域,则向该链表的表头插入一个地址为p的结点时,应执行的操作为p>next=f和(a.>next=p提示:答案为C。向表头指针为f的一个链表中插入表头结点p时,应通过p>next=f操作使原表头结点成为p的后继结点,再通过f=p操作使表头指针f指向新插入的表头结点(即pb.>nextc.f=pd.>next3.4.在一个链表中,表尾结点指针域的值为空(NULL)5.6.structstrNode{charname[15];structstrNode*next;};数能够遍历以f为表头指针的单链表,请在横线处填写合适内容。voidxb1(structstrNode*f){while(f!=NULL){/printf("%s",f->name);f=}printf("\n");}答案:f>next7.此程序运行后,得到的输出结果为#include#includestructintNode{intvalue;structintNode*next;};voidmain(void){structintNodex={32,NULL},y={45,&x},*r;for(r=&y;r!=NULL;r=r>next)printf("%d",r>value);printf("\n");}答案:45328.structstrNode{charname[15];structstrNode*next;};数能够建立并返回以f为表头指针的单链表,请在横线处填写合适内容。structstrNode*xb2(){structstrNode*f=NULL,*r;chara[15];输入每个字符串,用1\"作为结束标志\n");do{sca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《我国企业海外并购的财务风险及防范研究》
- 互联网营销宣传合同范本
- 花卉产业链金融创新
- 合作经营医药店铺合同范本
- 2024年度癸卯年合作经营铝合金生产加工企业合同
- 演员解约合同范本
- 2024年度物业代理合同
- 2024年度版权许可使用合同for音乐作品
- 二零二四年度大规模集成电路设计合同
- 2024版物联网技术研发及转让合同
- 2023年福建农商银行招聘考试真题
- 幼儿园大班美术课件:《我的手套真暖和》
- QBT 2460-1999 聚碳酸酯(PC)饮用水罐
- 软件开发项目验收方案
- 大学生生涯发展展示 (修改版)
- JT-T 1495-2024 公路水运危险性较大工程专项施工方案编制审查规程
- 康复治疗技术的职业规划课件
- 冬至知识选择题问答
- 2023年人教版中考物理专题复习-九年级全册简答题专题答案及解析
- 交换机CPU使用率过高的原因分析及探讨
- 易制毒化学品安全管理岗位责任分工制度
评论
0/150
提交评论