1、北京大学秋季学期C语言程序设计作业答案北京大学2015年秋季学期C语言程序设计作业答案 作业提交格式要求:请同学们把答案集中单独写在一个.doc文档中,作为附件上传(不要把答案直接填写在题目的空中)。特规定格式如下:一、 ABCDD AAAAA二、(1) BeiJing ShangHai(2) x=8,y=7(3) r=k:i+j=90 以上只是举例,不是正确的输出结果。请按上述规定书写和提交作业结果,不符合以上规定的作业将作为0分处理。鼓励独立完成作业,严惩抄袭。第一章作业一、将数213、12.75、79.375用十六进制表示答案:0xD5 、 0xC.C 、 0x4F.6二、填空1.在C语
2、言中,数值常量0x9f的十进制值是 。答案:1592.字母a的ASCII码为十进制数_。答案:97第二章作业(1)一、选择题:1、下列变量名中, 是非法的。A) MyCar B) 4a C) my_car D) a48答案:B2、下列变量名中, 是合法的。A) 56A B) _abc C) 48b D) while答案:B3、下列常量中, 是十六进制表示的int型常量。A) 78 B) 0x7a C) x56 D) 063答案:B4、假设所有变量均为整型,则表达式(a=2,b=5,b+,a+b)的值是 。A) 7 B) 8 C) 6 D)2答案:B5、已知c2为字符型,则执行语句c2=A+6-
3、3后,c2的值为A) C B) D C)不确定的值 D) 70答案:B6、设a为整型变量,b为字符型变量,c为double型变量,则a+b+c为( 型A) int B) float C) double D) char答案:C7、语言中不可用作标识符的字符有( )A 字母B 数字C %D下划线答案:C8、设int a;则表达式a=2,4,a+1的值是( )A.1B.2C.3D.4答案:C ) 。9.设a为整型变量,b为字符型变量,c为double型变量,则a*b+c为( )型A. intB. floatC. doubleD. char答案:C10. 若a是int型变量,则表达式(a=4*5,a*
4、2),a+6的值为( )A. 20 B.23 C. 26 D. 46答案:C第二章作业(2)一、选择题1、在scanf()函数的格式说明符中,长整型数的输入格式符是 A 。A. %ld B. %lf C. %d D. %x2、在printf()函数的格式说明符中,字符型数的输出格式说明符是 A 。A. %c B. %f C. %ld D. %s3、 已知ch是字符型变量,下面不正确的赋值语句是 A 。A) ch=a+b; B) ch=0; C) ch=7+9; D) ch=5+9;4、要使用putchar()函数必须在程序前加语句 A 。A. #include B. include stdio
5、.hC. include D. #include stdio.h5、若x为int型变量,则执行以下语句后x= A 。x=7;x+=x-=x+x;A. -14 B. -7 C.0 D.14二、判断题1、 C语言标准输入操作中,gets()函数一次只可以读取一个字符。(F )2、 C语言标准输出操作中,putchar()函数可以输出显示一个字符串。(F )3、 r与r是相同的; ( F )三、分析下列程序的输出结果。 1.#include void main()char c=p;printf(“%d,%cn”,c,c);printf(“%d,%cn”,a,a); 答案:112,p97,a2.#in
6、clude void main()int a;float d;printf(“Enter a and d: ”); scanf(“%d%f”,&a,&d);printf(“%5d,%8.2fn”,a,d); Enter a and d: 56 15.765 答案:3个空格56, 3个空格15.77第四章作业一、 选择题。1、下列运算符中优先级最高的是 B 。A. B. + C. & D.!=2、判断char型变量ch是否为大写字母的正确表达式是 B 。A. A=ch=A) & (ch=A)& (ch=Z) D. (A=ch)3、设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行
7、(m=ab) & (n=cd)后n的值为 B 。A. 1 B.2 C. 3 D. 44、已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 B 。if (xy)z=x;x=y;y=z;A. x=10,y=20,z=30 B. x=20,y=30,z=30C. x=20,y=30,z=10 D. x=20,y=30,z=205、设a=3,b=4,c=5,则表达式 !(a+b)+c-1&b+c/2 的值为( B )A. 0 B. 1 C. 4 D. 6.5二、 填空题。1、当a=3,b=2,c=1时,表达式f=abc的值是 0 。2、当a=5,b=4,c=2时,表达式ab!=
8、c的值是 1 。3、 15 != 8 + 7 | 4 9/4的结果是 1 。4、设y为int型变量,请写出描述“y是奇数”的表达式 (y % 2)=1 。5、整型变量 X 能被 100 整除但不能被 400 整除 (X%100=0) & (X%400!=0) 。三、 程序填空题。请在【】中填上正确内容。1、该程序实现输出x,y,z三个数中的最大者。main()int x=4,y=6,z=7;int 【1】;if (【2】) u=x;else u=y;if (【3】) v=u;else v=z;printf(“v=%d”,v);答案:u xy uv2、输入一个字符,如果它是一个大写字母,则把它变
9、成小写字母;如果它是一个小写字母,则把它变成大写字母;其他字符不变;main() char ch;scanf(“%c”,&ch);if (【1】) ch=ch+32;else if (ch=a & ch=A )&( ch=Z) ch=ch-32第五章作业一选择题。1、下面程序段的运行结果是 C 。int n=0;while (n+=2) ; printf(“%d”,n);A. 2 B. 3 C. 4 D. 有语法错误2、对for(表达式1; ;表达式3)可理解为 C 。A. for(表达式1;0 ;表达式3) B. for(表达式1;表达式1;表达式3)C. for(表达式1;1 ;表达式3)
10、 D. for(表达式1;表达式3;表达式3)3、以下正确的描述是 C 。A. continue语句的作用是结束整个循环的执行B. 在循环体内使用break语句或continue语句的作用相同C. 只能在循环体内和switch语句体内使用break语句D. 从多层循环嵌套中退出时,只能使用goto语句4.下述关于break语句的描述中,( C )是不正确的。A. break语句可用于循环体内,它将退出该重循环;B. break语句可用于开关语句中,它将退出开关语句;C. break语句可用于if体内,它将退出if语句;D. break语句在一个循环体内可以出现多次;5.执行以下程序时,从键盘输
11、入2473(表示回车),则下面的程序的运行结果是( C )#include main( ) int c ;while(c=getchar( )!= n)switch(c-2) case 0:case 1: putchar(c+4);case 2: putchar(c+4);break;case 3: putchar(c+3);default: putchar(c+2);break;A. 668966 B. 6688766 C. 668977 D. 66778777二判断题1、条件语句是可以实现多路分支的。( T)2、任何循环语句的循环体至少都可执行一次。( F)3、break语句可以出现在各种
12、不同循环语句的循环体中。( T)4、for循环是只有可以确定的循环次数时才可使用,否则不能用for循环。( F )5、While循环语句的循环体至少执行一次。( F )三填空题1.已知 for(j=1,s=0;j=9;j+=2) s=s+j; 执行循环后,s的值是 25 _ 。2. while循环是先判断表达式,如果为_真_,执行循环体,然后再判断表达式,直到表达式为假,退出循环 。四程序填空题1下面程序的功能是计算1-3+5-7+-99+101的值#include main() int i,t=1,s=0;for (i=1;i=101;i+=2)【1】; s=s+t; 【2】;printf(
13、“%dn”,s);答案:t=-i;s=-s;2下面程序的功能是打印100以内个数为6且能被3整除的所有数。#include main()int i,j;for (i=0; 【1】;i+)j=i*10+6;if (【2】) continue;printf(“%d”,j);答案:i10;if(j%3)!=0)第六章作业一、选择题1、在C语言中,引用数组元素时,其数组下标的数据类型允许是A.整型常量 B. 整型表达式C.整型常量或整型表达式 D. 任何类型的表达式2、以下能对一维数组a进行正确初始化的语句是 C 。A. int a10=(0,0,0,0) B. int a10=;C. int a=0
14、; D.int a10=10*1;3、若有说明:int a34;则对a数组元素的正确引用是 C 。 C 。A. a24 B. a1,3 C. a1+10 D. a(2)(1)4、已知 int w24=7,15,8,9,20,25,14,17;则 w01的值是 CA 8 B.9 C. 15 D. 255、若有说明 int a3=1,2,3,4,5,6,7;则a数组第一维的大小是 C 。A. 2 B无确定值 C. 3 D. 46、下面程序的运行结果是 D 。char c*5+=,a,b,0,c,0-;printf(“%s”,c);A. ab B. abc C. ab c D. ab7、判断字符串a
15、和b是否相等,应当使用 D 。A. if (a= =b) B. if (a=b) C. if (strcpy(a,b) D. if (strcmp(a,b)8、用数组名作为实参,传给形参的是( D )A.数组第0个元素的值B.数组全部元素的值C.数组元素个数D.数组首地址9、用double q35; 定义的数组 q 包含 D 个元素A. 3 B5 C. 8 D. 1510、已知 char c6=ABCDE, d6;要将c复制到d中,正确的做法是( D )A. d=c;B. c=d;C. strcmp(c,d);D. strcpy(d,c);二、判断题1、数组赋初值时,初始值表中的数据项的数目可
16、以大于或等于数组元素的个数。( F )2. 数组中的元素类型可以不同;( F )3. 字符串This大于字符串that;( F )4. 任何数组的下标都是从0开始;( T )5.符数组中的一个元素存放一个字符;( T )三、程序填空题。invstring(char a )函数的功能是使输入的一个字符串按逆序存放,在主函数中输入和输出字符串。请填空【?】。void invstring(char a ) int n,j; char c;n=0; 填空:while(an!= 【1】) n+; 【1】 0 for( j=0; j【2】; j+) 【2】 n/2c=aj; 【3】; 【4】; 【3】 a
17、j = an j - 1 【4】 an j - 1 = c main( ) char a80;gets(a);invstring(【5】); 【5】 a puts(a);puts(n);四、分析下面程序的结果。main ( ) int i,j,s1=0,s2=0 ,a33= 4,9,6,5,3,1,2,8,7;printf(a:n);for(i=0; i3; i+) for(j=0;j3;j+) printf(%3d,aij);printf(n);printf(n);for(i=0; i3; i+) s1=s1+aii;s2+=ai2-i;printf(s1=%d, s2=%dn,s1,s2)
18、;答案:a:4 9 65 3 12 8 7S1=14,s2=11第七章作业一、选择题1.在C语言中,下面对函数不正确的描述是( D )。A. 当用数组名作形参时,形参数组值的改变可以使实参数组之值相应改变。B. 允许函数递归调用。C. 函数形参的作用范围只是局限于所定义的函数内。D. 子函数必须位于主函数之前。2. 以下正确的函数形式是( D )。A. double fun(int x,int y) z=x+y; return z;B. fun(int x,y) int z; return z;C. fun(x,y) int x,y; double z; z=x+y; return z;D.
19、double fun( int x,int y) double z; z=x+y; return z; 3. C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( BA. 地址传递B. 单向值传递C. 双向值传递。即由实参传给形参,再由形参传回给实参D. 由用户指定传递方式4. 一个C语言程序是由( B )。A. 一个主程序和若干子程序组成B. 若干函数组成C. 若干过程组成D. 若干子程序组成5.用数组名作为实参,传给形参的是( B )A.数组第0个元素的值 )。B. 数组首地址C.数组元素个数D. 数组全部元素的值二、写出程序的输出结果1.void main(void)int
20、a=1,k;for(k=0;k3;k+) printf(%4d,f1(a) int f1(int x)static int z=3,y=0;y+;z+;return(x+y+z);答案:*6*8*102.void main()int i=0;while(+ i)if(i= =10) break;if(i%3!=1) continue;printf(“%dn”,i);答案:1第八章作业一、判断题。1、指针和一般变量一样都有两个值:一个是它在内存中的地址值,另一个是它所存放的数据值。2、指针存放的值就是它所指向的变量的地址值。3、指向int型变量的指针可以使用double型变量的地址值进行赋值。4
21、、定义指针的说明语句中,在指针名前边的*,与执行语句中在指针名前边的*具有相同功能。5、在给指针赋值时,要求指针与被赋值的地址值类型相同,级别一样。6、数组名是一种地址值,它可以用来给指针赋值,但要求类型相同和级别一致。7、任何两个指针进行比较运算是无意义的。8、指针运算实际是地址运算,指针加一就是实际的地址值加一。9、数组元素可以使用下标表示,也可以使用指针表示。10、指针数组的元素是类型相同指针的集合。答案:1-10 TTFFT TFFTT二、填空题。1、单目运算符&后跟变量名,表里是该变量的(地址),单目运算符*后跟指针名,表示该指针的(指向的对象的值)。2、指针用来存放某个变量的(内存地址)。3、已知:char *c=”good”;则printf(“%sn”,c)输出为(good),printf(“%sn”,c+1)输出为(ood)。4、若有定义:int a10,*p=a;则*(p+5)表示(a5)的值。5、int* p;在*p运算中,表示取_p指向的对象的内容_ 。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1