鞠茸冯侈糠桨阂彻诺谎碎嘶矾
第1讲 了解计算机的工作原理 课后测验:了解计算机的工作原理
1、 通常所说的主机是指:
答案: CPU、内存和外存
2、 所谓“裸机”是指:
答案: 不装备任何软件的计算机
3、 CPU包含
答案: 运算器和控制器
4、 在计算机系统中,一个字节的二进制位数为
答案: 8
5、 在计算机中,一个字长的二进制位数是
答案: 随CPU的型号而定
6、 软件与程序的区别是∶
答案: 软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的一部分。
7、 计算机软件可以分为:
答案: 系统软件和应用软件
8、 应用软件是指∶
答案: 专门为某一应用目的而编制的软件
9、 切断计算机电源后,下列存储器中的信息会丢失的是:
答案: RAM
10、 课程学习过程中需要使用到编程工具CodeBlocks,它属于______。
答案: 应用软件
11、 计算机由运算器、_、存储器、输入设备、输出设备五部分组成。
答案: 控制器
12、 计算机中执行各种算术和逻辑运算操作的部件是_。
答案: 运算器
13、 计算机中控制执行指令,协调各部件运行,为各部件提供控制信号的部件是______。
答案: 控制器
14、 显示器和打印机都属于计算机体系结构中______部件的范畴。
答案: 输出设备
15、 计算机的指令包括_和操作数两部分。
答案: 操作码
第2讲 信息在计算机中的表示 课后测验:信息在计算机中的表示
1、 用8位无符号二进制数能表示的最大十进制数为
答案: 255
2、 十进制数127转换成二进制数是
答案: 01111111
3、 下列数值最大的是
答案: 101
4、 若[x]原=10000011,则[x]补=
答案: 11111101
5、 如果X为负数,由[X]补求[-X]补是将
答案: [X]补连同符号位一起各位变反,末位加1
6、 ASCII码(含扩展)可以用一个字节表示,则可以表示的ASCII码值个数为
答案: 256
7、 英文小写字母d的ASCII码为100,英文大写字母D的ASCII码为
答案: 68
8、 在计算机系统中,存储一个汉字的国标码所需要的字节数为
答案: 2
9、 已知某数X的原码为10110100B,它的反码是
答案: 11001011B
10、 用8位二进制描述数据,计算(-83)补+(-80)补的结果是
答案: 溢出
第3讲 编程的理论基础 课后测验:编程的理论基础
1、 下列计算机语言中,CPU能直接识别的是
答案: 机器语言
2、 可移植性最好的计算机语言是∶
答案: 高级语言
3、 要把高级语言编写的源程序转换为目标程序,需要使用
答案: 编译程序和解释程序
4、 计算机语言有许多种,其中与硬件直接相关的是
答案: 机器语言
5、 计算机算法指的是
答案: 解决问题的有限运算序列
6、 计算机算法必须具备输入、输出和( )等5个特性。
答案: 可行性、确定性和有穷性
7、 结构化程序设计所规定的三种基本控制结构是( )。
答案: 顺序、选择、循环
8、 下面选项中不属于面向对象程序设计特征的是( )。
答案: 类比性
9、 结构化程序设计的主要特征是
答案: 数据和处理数据的过程分离
10、 面向对象程序设计将数据与( )放在一起,作为一个互相依存、不可分割的整体来处理。
答案: 对数据的操作
第4讲 编写第一个C程序 课后测验:编写第一个C程序
1、 以下叙述中正确的是
答案: C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
2、 以下叙述中正确的是( )。
答案: C程序中注释部分可以出现在程序中任意合适的地方
3、 C程序是由 ( )组成的。
答案: 函数
4、 一个C程序的基本结构是( )。
答案: 一个主函数和若干个非主函数
5、 用C语言编写的源程序文件( )。
答案: 经过编译连接,正确后可以执行
6、 以下四个程序中,完全正确的是( )。
答案: #include int main(){ /programming/ printf(“programming!”); return 0;}
7、 C程序编译时,程序中的注释部分( )。
答案: 不参加编译,也不会出现在目标程序中
8、 以下叙述中错误的是( )。
答案: C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
9、 编写C++程序一般需经过的几个步骤依次是( )
答案: 编辑、编译、连接、调试
10、 在C语言中,main函数默认返回一个( )类型的值。
答案: int
11、 以下不属于C语言语法允许使用的字符集合的是( )
答案: 汉字
12、 以下属于C语言语法保留字的是( )
答案: return
13、 以下属于合法的C语言标识符的是( )
答案: Main
14、 C语言源程序文件的后缀名为( )
答案: .c
15、 以下说法正确的是( )
答案: 大型C程序可以包含多个源程序文件,并且每个源程序文件可以单独编译。
第5讲 将简单数据引入C程序中 课后测验:将简单数据引入C程序中
1、 ( )是C语言的数据类型说明保留字。
答案: signed
2、 类型修饰符unsigned不能修饰( )。
答案: float
3、 下列选项中,均是合法的C语言整型常量的是( )。
答案: 160-0xffff0011
4、 下列选项中,均是合法的C语言实型常量的是( )。
答案: -.6012e-4-8e5
5、 设char a=’\70′;则变量a( )。
答案: 包含1个字符
6、 ( )是非法的C语言转义字符。
答案: ‘\0xf’
7、 以下选项中( )不是C语言常量。
答案: e-2
8、 以下不是C语言支持的存储类别的是( )。
答案: dynamic
9、 以下叙述中错误的是( )。
答案: C语言的标识符允许使用保留字。
10、 在以下各组标识符中,合法的C语言标识符是( )。
答案: B01Int
11、 下面关于符号常量的说法正确的是()
答案: 符号常量是以标识符形式出现的常量,一经定义,它所代表的常量值在其作用域内不能改变。
12、 已定义ch为字符型变量,以下赋值表达式中错误的是( )。
答案: ch=”
第6讲 数值数据的运算与处理 课后测验:数值数据的运算和处理
1、 在C语言中,要求参加运算的数必须是整数的运算符是( )。
答案: %
2、 表达式0x13 ^ 0x17的值是( )
答案: 0x04
3、 表达式3.6-5/2+1.2+5%2的值是( )。
答案: 3.8
4、 在位运算中,操作数每右移一位,其结果相当于( )。
答案: 操作数除以2
5、 若有定义char c1=92,c2=92;则以下表达式中值为零的是( )。
答案: c1^c2
6、 设x,y,u,v均为浮点型,与数学公式 不等价的C语言表达式是( )。
答案: xy/u*v
7、 若变量a、b已经正确定义并赋值,符合C语言语法的表达式是( )。
答案: aa+b
8、 以下不能正确计算数学公式 值的C语言表达式是( )。
答案: 1/3sin(1/2)sin(1/2)
9、 若有定义int x=2,y=3;则x & y的值是( )。
答案: 2
第7讲 逻辑数据的运算与处理 课后测验:逻辑数据的运算和处理
1、 关于C程序关系运算、逻辑运算后得到的逻辑值的表述中,正确的是( )。
答案: 假为0,真为1
2、 下列运算符中,优先级从高到低依次为( )。
答案: ! && ||
3、 设int i=10;表达式30-i<=i<=9的值是( )。
答案: 1
4、 表达式!x等效于( )。
答案: x==0
5、 已有定义int x=3,y=4,z=5;则表达式!(x+y)+z-1 && y+z/2的值是( )。
答案: 1
6、 以下运算符优先级最低的是( )。
答案: ||
7、 若x和y为整型数,以下表达式中不能正确表示数学关系 的是( )。
答案: !(x-y)<-10 || !(y-x)>10
第8讲 赋值和类型转换 课后测验:赋值与类型转换
1、 下列运算符中,优先级最高的是( )。
答案: ( )
2、 设int a=0,b=0,m=0,n=0;则执行(m=a==b)||(n=b==a)后m和n的值是( )。
答案: 1,0
3、 若有int i=5,j=4,k=6;float f;执行语句f=(i<j&&j<k)?i:(j<k)?j:k;后f的值为( )。=”” =”” a:4.0=”” b:5.0=”” c:6.0=”” d:7.0=”” 答案:=”” <span=””>4.0</j&&j<k)?i:(j<k)?j:k;后f的值为(>
4、 以下选项中非法的表达式是( )。
答案: x+1=x+1
5、 设 int m1=5,m2=3;表达式m1>m2 ? (m1=1):(m2=-1)运算后,m1和m2的值分别是()。
答案: 1和3
6、 以下叙述中错误的是( )。
答案: 表达式a!=b等价于a=a!b
7、 假设某表达式中包含int、long、unsigned、char类型的数据,则表达式最后的运算结果是( )类型。
答案: long
8、 若int k=7,x=12;则值为3的表达式是( )。
答案: (x%=k)-(k%=5)
9、 对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中,( )是正确的。
答案: f为5.0
10、 设变量n为float类型,m为int型,则以下( )表达式能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算。
答案: m=n*100+0.5,n=m/100.0
11、 假定有变量定义:int k=6,x=12;则能使x、k值为5、6的表达式是( )。
答案: x%=k+k%5
12、 若变量a为int类型,且其值为3,则执行表达式a+=a-=a*a后,a的值是( )。
答案: -12
13、 sizeof(char)的值是( )。
答案: 1
14、 若变量已正确定义并赋值,下面符合C语言语法的表达式是( )。
答案: a=b=c+2
15、 判断年份y是否为闰年的表达式为()
答案: (y%4==0&&y%100!=0)||(y%400==0)
16、 判断整型变量n是否是负的偶数的C语言表达式为( )
答案: n<0 &&n%2==0
17、 已知x、y分别为a、b、c中的最大值和最小值,下面表达式能求出a、b、c中中间值的是( )
答案: (a+b+c)-(x+y)
18、 若int x=0123,则表达式(5+(int)(x))&(~2)的值是__。
答案: 88
19、 表达式((4|1)&3)的值是__。
答案: 1
20、 表达式10<<3+1的值是_____。
答案: 160
21、 已知A=7.5,B=2,C=3.6,表达式A>B && C>A || AB的值是_____。
答案: 0
22、 设int a=-3,b=7,c=-1;则执行(a==0)&&(a=a%b-3
第9讲 编写程序语句 课后测验:编写程序语句
1、 以下叙述中错误的是( )。
答案: 空语句出现在任何位置都不会影响程序运行
2、 C语言的语句类型不包括()
答案: 预处理命令
3、 以下不是C语言简单语句的是( )
答案: 跳转语句
4、 下面是C语言合法的复合语句的是( )
答案: { double v1,r=5; v1=43.14rrr/3; { double v2,h=12; v2=3.14rr*h; } printf(“%lf,%lf”,v1,v2);}
5、 以下关于C语言注释的说法正确的是()
答案: //注释表示从//开始直到本行末尾的所有字符均是注释内容。
6、 关于C语言语句书写格式的说法错误的是()
答案: C语言程序必须一行一个语句。
7、 使用getchar和putchar函数进行单个字符输入输出时,必须使用预处理命令”#include”包括()文件。
答案: stdio.h
8、 以下关于使用C语言实现输入输出的说法错误的是()
答案: C语言自身具备输入输出语句,可以直接实现输入输出功能。
9、 要使用putchar函数实现向显示器输出字符’A’,则可以使用()。
答案: putchar(65)
10、 有以下程序段: char c1=’1′,c2=’2′;c1=getchar(); c2=getchar();putchar(c1); putchar(c2);运行时从键盘上输入:a↙ 后,以下叙述中正确的是( )。
答案: 变量c1被赋予字符a,c2被赋予回车符
第10讲 编程实现简单数据的输出 课后测验:编程实现简单数据的输出
1、 以下叙述中正确的是( )。
答案: 使用printf函数时,必须在之前包含头文件stdio.h
2、 下面程序段执行后的输出结果是()。注:└┘符号代表空格int a=123;printf(“[%4d],[%-4d],[%04d]”,a,a,a);
答案: [└┘123],[123└┘],[0123]
3、 设有int a=123;执行语句printf(“%d”,5,a);的输出结果是()。
答案: └┘└┘123
4、 下面程序段执行后的输出结果是( )。 float x=-1023.012;printf(“%8.3f,”,x);printf(“%10.3f”,x);
答案: –1023.012, └┘-1023.012
5、 下面程序段执行后的输出结果是( )。 int x=13,y=5;printf(“%d”,x%=(y/=2));
答案: 1
6、 下面程序段执行后的输出结果是( )。 int x=’f’;printf(“%c”,’A’+(x-‘a’+1));
答案: G
7、 设int a=1234;执行语句printf(“%2d”,a);后的输出结果是( )。
答案: 1234
8、 设int a=7,b=8;执行语句printf(“%d,%d”,(a+b,a),(b,a+b));后的输出结果是( )。
答案: 7,15
9、 执行语句printf(“a\bre’hi’y\\bou”);后的输出结果是( )。
答案: re’hi’you
10、 下面程序段执行后的输出结果是( )。 int x=102,y=012;printf(“%2d,%2d”,x,y);
答案: 102,10
11、 下面程序段执行后的输出结果是( )。 int m=0256,n=256;printf(“%o└┘%o”,m,n);
答案: 256└┘400
12、 下面程序段执行后的输出结果是( )。 int a; char c=10; float f=100.0; double x;a=f/=c*=(x=6.5);printf(“%d└┘%d└┘%3.1f└┘%3.1f”,a,c,f,x);
答案: 1└┘65└┘1.5└┘6.5
13、 设 char c1=’A’,执行语句printf(“%%”,c1);的输出结果是()。
答案: %
14、 下面程序段执行后的输出结果是( )。 char a=’1′,b=’2′;printf(“%c,”,b++); printf(“%d”,b-a);
答案: 2,2
第11讲 编程实现简单数据的输入 课后测验:编程实现简单数据的输入
1、 以下叙述中错误的是( )。
答案: 调用scanf函数时,如果输入项个数比给定的格式说明符多,将会出现编译错误。
2、 关于scanf函数的格式控制字符串,()是错误的说法。
答案: type类型字符可以描述应输入的信息类型,可以支持整数的任意进制输入。
3、 已知如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( )。 int a1,a2; char c1,c2;scanf(“%d%d”,&a1,&a2);scanf(“%c%c”,&c1,&c2);
答案: 10└┘20AB↙
4、 有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2,正确的数据输入方式是( )。
答案: a=1,b=3,c=2↙
5、 若定义x为double型变量,则能正确输入x值的语句是( )。
答案: scanf(“%lf”,&x);
6、 下面程序段运行时从键盘上输入:12345678↙,其输出结果是( )。 int a , b ;scanf(“%2d%*2d%3d”,&a,&b);printf(“%d”,a+b);
答案: 579
第12讲 编程实现选择分支 课后测验:编程实现选择分支
1、 C语言对嵌套if语句的规定是else总是与( )配对。
答案: 之前最近的尚未配对的if
2、 关于goto语句的说法错误的是()
答案: goto语句可以跳转到程序中的任意位置,不受函数界限限制。
3、 “if(表达式) ”中的“表达式”( )。
答案: 逻辑表达式、关系表达式和算术表达式都可以
4、 对于下面程序,( )是正确的判断。#include int main(){ int x,y; scanf(“%d%d”,&x,&y); if (x>y) x=y;y=x; else x++;y++; printf(“%d,%d”,x,y); return 0;}
答案: 有语法错误,不能通过编译
5、 对于下面程序段,( )是正确的判断。 int x=0,y=0,z=0;if (x=y+z) printf(““);else printf(“###”);
答案: 输出:###
6、 若int i=10;执行下面程序段后,变量i的值是( )。 switch (i) { case 9: i+=1 ; case 10: i+=1 ; case 11: i+=1 ; default: i+=1 ;}
答案: 13
7、 若int i=1;执行下面程序段后,变量i的值是( )。 switch (i) { case ‘1’: i+=1 ; case ‘2’: i+=1 ; case ‘3’: i+=1 ; default : i+=1 ;}
答案: 2
8、 若有定义:float w; int a,b;则合法的switch语句是( )。
答案: switch (b) { case 1:printf(““); default:printf(“”); case 1+2:printf(“*”); }
9、 无条件转移语句的一般形式是:goto语句标号;其中的语句标号可以是( )。
答案: 标识符
10、 关于if语句的说法正确的是()。
答案: if语句完全可以实现条件运算符的功能。
11、 关于switch语句的说法正确的是()。
答案: switch语句中default分支是可选的。
12、 switch语句语法中的case分支必须是常量表达式且互不相同,值不能为()类型。
答案: 浮点型
13、 switch语句可以用if语句完全代替。
答案: 正确
14、 switch语句的case表达式中可以包括变量。
答案: 错误
15、 条件表达式可以取代if语句。
答案: 错误
16、 switch语句中case分支和default分支的个数都是任意的。
答案: 错误
17、 switch中多个case分支可以执行相同的程序段。
答案: 正确
18、 内层break语句可以终止嵌套的switch,使最外层的switch结束。
答案: 错误
19、 switch语句的case分支可以使用复合语句、多个语句序列。
答案: 正确
20、 switch语句的表达式与case表达式的类型必须一致。
答案: 错误
第13讲 编程实现嵌套的选择分支 课后测验:编程实现嵌套的选择分支
1、 若a=1,b=3,c=5,d=4,则执行下面程序段后x的值是( )。 if (a<b) if=”” (c<d)=”” x=”1″ ;=”” else=”” (a<c)=”” (b<d)=”” ;else=”” =”” a:1=”” b:2=”” c:3=”” d:4=”” 答案:=”” <span=””>2</b)>
2、 执行语句序列 int x; scanf(“%d”,&x);if(x>250) printf(“X”); if(x<250) printf(“Y”); else printf(“X”); 时,不可能出现的情况是()。
答案: 显示:XY
3、 与y=(x>0 ? 1: x<0 ? -1:0);的功能相同的if语句是( )。
答案: if (x>0) y=1; else if (x<0) y=-1; else y=0;
4、 下面程序段表示以下( )式子。 if(a<b) {=”” if(c=”=d)” x=”1;}else” =”” a:<img=”” src=”http://nos.netease.com/edu-image/AFF26B92DFAE64744552184BFD405A38-1444706367996?imageView&thumbnail=520×520&quality=100″></b)>
B:
C:
D:
答案:
5、 下面程序执行后的输出结果是( )。#include int main(){ int x=1,y=0,a=0,b=0; switch(x) { case 1: switch (y) { case 0 : a++ ; break ; case 1 : b++ ; break ; } case 2: a++; b++; break ; case 3: a++ ; b++ ; } printf(“a=%d,b=%d”,a,b); return 0;}
答案: a=2,b=1
6、 #include int main(){ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%d”,x); return 0;}的运行结果是( )。
答案: -4
第14讲 编程实现循环 课后测验:编程实现循环
1、 有以下程序段: int k=2;while (k=0) { printf(“%d”,k) ; k– ; }则下面描述中正确的是( )。
答案: 循环体语句一次也不执行
2、 下面程序段执行后的输出结果是( )。int a=1,b=2,c=3,t; while (a<b<c){ t=”a;a=b;b=t;c–;” }=”” printf(“%d,%d,%d”,a,b,c);=”” =”” a:1,2,0=”” b:2,1,0=”” c:1,2,1=”” d:2,1,1=”” 答案:=”” <span=””>1,2,1</b<c){>
3、 下面程序段执行后的输出结果是( )。#include int main(){ int x=0,y=5,z=3; while(z–>0&&++x<5) y=y-1; printf(“%d,%d,%d”,x,y,z); return 0;}
答案: 3,2,-1
4、 下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择( )填入到 中。#include int main(){ int m=0,n=0; char c; while (( )!=”) { if (c>=’A’ && c<=’Z’) m++ ; if (c>=’a’ && c<=’z’) n++ ; } return 0;}
答案: c=getchar()
5、 语句while (!E){……}; 中的表达式!E等价于( )。
答案: E==0
6、 以下程序段( )。 x=-1;do{ x=x*x;}while (!x);
答案: 循环执行1次
7、 以下叙述正确的是( )。
答案: 用do-while语句构成的循环,在while后的表达式为零时结束循环
8、 有以下程序段: int n=0,p;do { scanf(“%d”,&p); n++; } while (p!=12345 && n<3);此处do—while循环的结束条件是( )。
答案: p的值等于12345或者n的值大于等于3
9、 已知:int i=5,下列do-while循环语句的循环次数为( )。do{ printf(“%d”,i–); i–;}while(i!=0);
答案: 无限
10、 下面程序段( )。x=3;do { y=x–; if(!y) { printf(“%d”,x); continue; }printf(”#”);}while(x>=1 && x<=2);
答案: 将输出###
11、 下面程序执行后的输出结果是( )。#include int main(){ char c=’A’; int k=0; do{ switch(c++){ case’A’:k++; break; case ‘B’:k–; case ‘C’:k+=2; break; case ‘D’:k%=2; continue; case ‘E’:k*=10; break; default:k/=3; } k++; }while (c<‘G’); printf(“k=%d”,k); return 0;}
答案: k=4
12、 下面for循环语句( )。 int i,k;for (i=0,k=-1; k=1 ; i++,k++ ) printf(“***”);
答案: 是无限循环
13、 下面程序执行后的输出结果是( )。#include int main(){ int x=9; for(;x>0;x–){ if(x%3==0){ printf(“%d”,–x); continue; }} return 0;}
答案: 852
14、 下面程序段的循环次数是( )。 for (i=2; i==0; ) printf(“%d”,i–);
答案: 0次
15、 下面程序执行后的输出结果是( )。#include int main(){ int i,sum=0; for(i=1;i<6;i++) sum+=i; printf(“%d”,sum); return 0;}
答案: 15
16、 若有以下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0) s=a;for(b=1;b<=c;b++) s=s+1;则与上述程序段功能等价的赋值语句是( )。
答案: s=a+c;
17、 下面程序执行后的输出结果是( )。#include int main(){ int a=0,i; for(i=1;i<5;i++) switch(i) { case 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5; } printf(“%d”,a); return 0;}
答案: 31
18、 若变量已正确定义,不能完成求5!的程序段是( )。
答案: for(i=1;i<=5;i++){ p=1; p*=i;}
19、 下面程序段中,( )与其他三个程序段的作用不同。
答案: int k,s=0;for (k=1;k<=100;s+=++k);printf(“%d”,s);
20、 以下不是死循环的程序段是( )。
答案: int k=0;do { ++k ; } while (k>=0);
21、 以下是死循环的程序段是( )。
答案: for (i=1;;) if (++i<10) continue ;
22、 do-while允许从外部转到循环体内。
答案: 错误
23、 do-while循环中,根据情况可以省略while。
答案: 错误
24、 for循环中三个表达式可以任意省略,while、do-while的表达式也是如此。
答案: 正确
25、 continue语句只能用于三个循环语句中。
答案: 正确
26、 for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来。
答案: 正确
27、 写出下面程序执行后的运行结果。#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return 0;}#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return 0;}#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return 0;}#include int main(){ int i,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d”,i,k); return
答案: i=6,k=4
28、 下面程序运行时从键盘上输入:420↙,写出程序的运行结果。#include int main(){ char c; while ((c=getchar())!=”) switch(c-‘0’) { case 0: case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; } return 0;}
答案: 5523
29、 写出下面程序执行后的运行结果。#include int main(){ int k=1,n=263 ; do { k*=n%10 ; n/=10 ; } while (n) ; printf(“%d”,k); return 0;}
答案: 36
30、 写出下面程序执行后的运行结果。#include int main(){ int i=5 ; do { switch (i%10) { case 4: i– ; break ; case 6: i– ; continue ; } i– ; i– ; printf(“%d”,i); } while (i>0); return 0;}
答案: 31-1
31、 写出下面程序执行后的运行结果。#include int main(){ int x,i ; for (i=1 ; i<=100 ; i++) { x=i; if (++x%2==0) if (++x%3==0) if (++x%7==0) printf(“%d,”,x); } return 0;}
答案: 28,70,
32、 写出下面程序执行后的运行结果。#include int main(){ int i; for(i=0; i<5; i++) switch(i%2) { case 0: printf(“1”); break; case 1: printf(“0”); break; } return 0;}
答案: 10101
33、 下面程序按公式 求和并输出结果。请填空使程序完整、正确。#include int main(){ int k ; double s=0; for (k=1 ; k<=100 ; k++) s+=k ; for (k=1 ; k<=50 ; k++) s+=______; for (k=1 ; k<=10 ; k++) s+=1.0/k; printf(“sum=%f”,s); return 0; }
答案: k*k
第15讲 循环的终止、加快和嵌套 课后测验:循环的终止、加快和嵌套
1、 下面关于循环语句的描述中,( )是错误的。
答案: 循环体内必须同时出现break语句和continue语句
2、 C语言的跳转语句中,对于break和continue说法正确的是( )
答案: continue语句只应用于循环体中
3、 下面程序段运行时从键盘上输入:2473↙,其输出结果是( )。#include int main(){ int c; while ((c=getchar())!=”) 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 ; } printf(“”); return 0;}
答案: 668977
4、 下面程序段中while循环的循环次数是( )。 int i=0;while (i<10) { if (i<1) continue; if (i==5) break; i++;}
答案: 死循环,不能确定次数
5、 下面程序执行后的输出结果是( )。#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}#include int main(){ int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; }; printf(“%d”,s); return 0;}
答案: 死循环
6、 下面程序执行后的输出结果是( )。#include int main(){ int k=0,m=0,i,j; for (i=0; i<2; i++) { for (j=0; j<3; j++) k++ ; k-=j ; } m = i+j ; printf(“k=%d,m=%d”,k,m); return 0;}
答案: k=0,m=5
第16讲 编程实现枚举算法 课后测验:编程实现枚举算法
1、 下面程序的功能是计算两个整数的( )。#include int main(){ int m,n,w; scanf(“%d,%d”,&m,&n); while (n) { w=m; m=n; n=w%n; } printf(“%d”,m); return 0; }
答案: 最大公约数
2、 下面程序的功能是计算s=1+12+123+1234+12345+……+123456789,下划线处应填写( )。#include int main(){ int t=0,s=0,i; for( i=1; i<=9; i++) { t=______; s=s+t; } printf(“s=%d”,s); return 0;}
答案: 10t+i
3、 一个三位整数(100~999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),下面程序的功能是找出所有的这种数,下划线处应填写()。#include int main() { int n, a, b, c; /n、a、b和c分别为三位数及其个位、十位和百位/ scanf(“%d”,&n); for(c=1;c<=9;c++) for (b=0;b<=9;b++) for( 1 ;a++) { n= 2 ; if(aaa+bbb+ccc== 3 ) printf(“%d”,n); } return 0; }
答案: 1 a=0;a<9 2 c100+b10+a 3 n
4、 下面程序段的功能是计算1000!的末尾有多少个零。请填空使程序完整、正确。提示:只要偶数乘5就会产生0,因为1000!中有一半是偶数,所以求1000!的末尾有多少个零,其方法就是统计1000!中有多少5的因子。例如10有1个5的因子,25有2个5的因子,100有2个5的因子等。#include int main(){ int i,k,m; for (k=0,i=5; i<=1000; i+=5) { m = i ; while (___) { k++; m=m/5 ; } } return 0;}#include int main(){ int i,k,m; for (k=0,i=5; i<=1000; i+=5) { m = i ; while (1 ) { k++; m=m/5 ; } } return 0;}
答案: m%5==0
5、 写出下面程序执行后的运行结果。#include int main(){ int i=0,a=0; while(i<40) { for(;;) { if((i%10)==0) break; else i–; } i+=11; a+=i; } printf(“%d”,a); return 0;}
答案: 104
第17讲 调用函数-返回与参数传递 课后测验: 调用函数-返回与参数传递
1、 以下关于函数的叙述中正确的是( )。
答案: 每个函数都可以被单独编译
2、 对于函数,正确的说法是( )。
答案: 必须包含函数体
3、 以下叙述中正确的是( )。
答案: 函数的定义不可以嵌套,但函数的调用可以嵌套
4、 以下叙述中正确的是( )。
答案: C语言所有函数本质上都是外部函数
5、 以下函数定义正确的是( )。
答案: double f(int x,int y){ double z ; z = x+y ; return z ; }
6、 若调用一个函数int f(),且此函数中没有return语句,则正确的说法是( )。
答案: 该函数返回一个不确定的值
7、 若定义函数:fun(int a,float b) { return a+b;}则该函数的返回类型是( )。
答案: int
8、 C语言规定,函数返回值的类型是由( )决定的。
答案: 在定义函数时所指定的函数类型
9、 对于函数返回类型,不正确的说法是( )。
答案: 可以是数组类型
10、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。
答案: 函数调用可以作为一个函数的形参
11、 基本类型变量做实参时,它和对应的形参之间的数据传递方式是( )。
答案: 值传递
12、 以下叙述中错误的是( )。
答案: 形参可以是常量、变量或表达式
13、 以下函数调用语句中,含有的实参个数是( )。 Fcalc(exp1,(exp3,exp4,exp5));
答案: 2
14、 在函数调用时,以下叙述中正确的是( )。
答案: 实际参数和形式参数可以同名
15、 下面程序执行后的输出结果是( )。#include void F(int x) { return (3xx); }int main(){ printf(“%d”,F(3+5)); return 0;}
答案: 编译出错
16、 设函数f的定义形式为: void f(char ch, float x ) { …… }则以下对函数f的调用语句中,正确的是( )。
答案: f(32,32);
17、 C语言函数返回类型的默认定义类型是____(使用类型标识符描述)。
答案: int
18、 可以将被调函数中获得的值返回给主调函数的语句是____(使用C语言保留字描述)。
答案: return
19、 函数fun的功能是计算 double fun(double x,int n){ int i; double y=1; for(i=1;i<=n;i++) y=y*x; return y;}主函数中已经正确定义m,a,b变量并赋值,调用fun函数计算
: 的调用语句为 ______(注意保持原算式的各操作数和运算符顺序,不添加非必需的运算符)。
答案: m=fun(a,4)+fun(b,4)-fun(a+b,3);
20、 若函数定义为: int data() { float x=9.9; return(x);}则函数返回的值是____。
答案: 9
第18讲 调用函数-原型与声明 课后测验:调用函数-原型与声明
1、 若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是( )。
答案: int main(){…… x=fun(2,10); ……}float fun(int a,int b){……}
2、 若程序中定义了以下函数:double f(double a,double b) { return (a+b); }并将其放在调用语句之后,则在调用之前应该对该函数进行函数原型说明,以下选项中错误的说明是( )。
答案: double f(double a,b);
3、 关于函数原型声明,以下叙述中错误的是( )。
答案: 标准库函数不需要函数原型声明
4、 在C语言中,计算 正确的是( )。
答案: pow(x,y)
5、 有以下程序:#include void f(int n);int main(){ void f(int n); f(5); return 0;}void f(int n){ printf(“%d”,n);}以下叙述中错误的是( )。
答案: 对于以上程序,编译时系统会提示出错信息:“提示对f函数重复说明”。
第19讲 调用函数-调用形式 课后测验:调用函数-调用形式
1、 下列哪个类型函数不适合声明为内联函数( )。
答案: 函数体语句较多
2、 在( )情况下适宜采用inline定义内联函数。
答案: 需要加快程序的执行速度
3、 在函数调用过程中,如果函数A调用了函数 B,函数B又调用了函数A,则( )。
答案: 称为函数的间接递归调用
4、 下面程序执行后的输出结果是( )。#include char f(char x , char y){ if(x>y) return y; else return x;}int main(){ char a=’9′,b=’8′,c=’7′,d=’6′; printf(“%c”,f(f(a,b),f(c,d))); return 0;}
答案: 6
5、 有以下程序段:int fun1(double a) { return a*=a;}int fun2(double x,double y){ double a=0,b=0; a=fun1(x); b=fun1(y); return (int)(a+b);}且double w;执行语句w=fun2(1.1,2.0);后变量w的值是( )。
答案: 5.0
6、 下面程序执行后的输出结果是( )。#include void fun(int x, int y, int z){ z=xx+yy; }int main(){ int a=31; fun(5,2,a); printf(“%d”,a); return 0;}
答案: 31
7、 下面程序执行后的输出结果是( )。#include long fib(int n){ if(n>2) return (fib(n-1)+fib(n-2)); else return(2);}int main(){ printf(“%d”,fib(3)); return 0;}
答案: 4
8、 下面程序执行后的输出结果是( )。#include int f(int n){ if (n==1) return 1; return f(n-1)+1;}int main(){ int i,j=0; for(i=1;i<3;i++) j+=f(i); printf(“%d”,j); return 0;}
答案: 3
9、 设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不正确的是( )。
答案: int m = max(22,59,70);
10、 对于以下递归函数f,调用f(4)的返回值是____。int f(int n) { if (n) return f(n-1)+n; else return n;}
答案: 10
第20讲 设计函数-函数间的数据传递(1) 课后测验:设计函数-函数间的数据传递(1)
1、 以下叙述中错误的是( )。
答案: 在函数内的复合语句中定义的变量在本函数范围内有定义
2、 在某源程序文件中,若全局变量与局部变量同名,则( )。
答案: 允许
3、 如果在一个函数的复合语句中定义了一个变量,则该变量( )。
答案: 只在该复合语句中有效
4、 下面程序执行后的输出结果是( )。#include int a=3;int main(){ int s=0; { int a=5; s+=a++; } s+=a++; printf(“%d”,s); return 0;}
答案: 8
5、 以下叙述中错误的是( )。
答案: 函数中的局部变量都是动态存储
6、 以下叙述中错误的是( )。
答案: 函数中的静态变量在函数每次调用时,都会重新设置初值
7、 若函数中局部变量的值经函数调用后仍然保留,则该局部变量定义为( )。
答案: 静态变量
8、 若变量定义时未初始化,则其值不确定的是( )。
答案: 局部变量
9、 以下叙述中正确的是( )。
答案: 局部变量说明为static存储类型,其生存期将得到延长
10、 全局变量的存储类型可以定义为( )。
答案: extern或static
11、 以下只有在使用时才为该类型变量分配内存的存储类型是( )。
答案: auto和 register
12、 下面程序执行后的输出结果是( )。#include int f(){ static int i=0; int s=1; s+=i; i++; return s;}int main(){ int i,a=0; for(i=0;i<5;i++) a+=f(); printf(“%d”,a); return 0;}
答案: 15
13、 下面程序执行后的输出结果是( )。#include int a=2;int f(int n){ static int a=3; int t=0; if(n%2) { static int a=4; t+=a++; } else { static int a=5; t += a++; } return t+a++;}int main(){ int s=a, i; for(i=0; i<3; i++) s+=f(i); printf(“%d”, s); return 0;}
答案: 29
14、 凡在函数中未指定存储类别的局部变量,其默认的存储类别为( )。
答案: auto
15、 被调用函数执行结束时,此函数中定义的( )类型的变量不被释放。
答案: static
第21讲 设计函数-函数间的数据传递(2) 课后测验:设计函数-函数间的数据传递(2)
1、 自动型局部变量分配在( )。
答案: 内存的堆栈区中
2、 用于存放程序执行的机器指令的内存段是( )。
答案: 代码段
3、 程序在内存中的布局不包括( )。
答案: 寄存器
4、 C程序中所有已经赋初值的全局变量和静态变量被存放在内存的()
答案: 已初始化的数据段
5、 C语言中基本类型的常量保存在内存的( )
答案: 代码段
6、 C程序中所有未赋初值的全局变量和静态变量被存放在内存的( )
答案: 未初始化的数据段
7、 C程序中所有局部的非静态变量、临时变量以及函数形参被存放在内存的( )
答案: 栈
8、 C程序中动态分配的存储空间位于内存的( )
答案: 堆
9、 C源程序经过编译和连接后,成为二进制形式的可执行文件,称为程序映像。
答案: 正确
10、 进程即为运行程序时,由操作系统载入到计算机内存中的可执行文件。
答案: 正确
第22讲 设计函数-接口与实现分离 课后测验:设计函数-接口与实现分离
1、 对象初始化指创建对象时给它提供初始值。
答案: 正确
2、 C语言规定给对象设置的初始值可以是变量。
答案: 错误
3、 C语言规定未初始化的全局对象和静态局部对象其初值由0填充。
答案: 正确
4、 C语言规定未初始化的局部对象其初始值对于数值型来说为0。
答案: 错误
5、 C语言允许对对象进行多次定义,但需保证多次定义一致。
答案: 错误
6、 C语言中对一个对象进行多次声明是合法的,但要保证多次声明一致。
答案: 正确
7、 在一个项目的多个源程序文件中,只需要出现一次对所调用函数的声明即可支持项目全部源程序文件对该函数进行调用。
答案: 错误
8、 对象的存储空间可以通过对象声明获得。
答案: 错误
9、 可以在对象声明时对其进行初始化。
答案: 错误
10、 C语言支持将对象的定义和声明分离,以适应多文件的程序结构。
答案: 正确
第23讲 编写规模化程序 课后测验:编写规模化程序
1、 C语言支持在一个函数定义前加上( )修饰,将函数设置成内部函数。
答案: static
2、 如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,则说明这个函数为( )。
答案: 内部函数
3、 支持在另一个文件中调用的函数其类型是( )。
答案: 外部函数
4、 C语言编译器编译时的基本单位是( )。
答案: 源文件
5、 C语言连接器的工作不包括( )。
答案: 检查在多个目标代码或库函数中是否存在内部函数和局部变量的重复定义
6、 C语言的头文件中不包括( )。
答案: 函数定义
7、 C语言编译器的功能一般不包括( )。
答案: 规范代码风格
第24讲 编程任务的自动化工具 课后测验:编程任务的自动化工具
1、 以下叙述中错误的是( )。
答案: C程序在执行过程中对预处理命令行进行处理
2、 以下叙述中正确的是( )。
答案: 宏替换不占用运行时间,只占用编译时间
3、 以下有关宏替换的叙述中错误的是( )。
答案: 宏名必须用大写字母表示
4、 设#define L(x) 23.14x,则L(x)是( )。
答案: 带参数的宏名
5、 设#define P(x) x/x执行语句printf(“%d”,P(4+6));后的输出结果是( )。
答案: 11
6、 若有宏定义#define MOD(x,y) x%y ,下面程序段的结果是( )。int z,a=15; float b=100;z=MOD(b,a);printf(“%d”,z++);
答案: 语法错误
7、 在任何情况下计算平方都不会引起二义性的宏定义是( )。
答案: #define POWER(x) ((x)*(x))
8、 下面程序执行后的输出结果是( )。#include #define ADD(x) x+xint main(){ int m=1,n=2,k=3,sum ; sum = ADD(m+n)*k ; printf(“%d”,sum); return 0;}
答案: 10
9、 下面程序执行后的输出结果是( )。#include #define X 5#define Y X+1#define Z Y*X/2int main(){ int a=Y; printf(“%d “,Z); printf(“%d”,–a); return 0;}
答案: 7 5
10、 下面程序执行后的输出结果是( )。#include #define DOUBLE(r) r*rint main(){ int x=1,y=2,t; t = DOUBLE(x+y); printf(“%d”,t);return 0;}
答案: 5
11、 定义宏将两个float类型变量的数据交换,下列写法中最好的是( )。
答案: #define jh(a,b) {float t;t=a;a=b;b=t;}
12、 若有宏定义:#define N 3#define Y(n) ((N+1)n)则表达式2(N+Y(5+1))的值是( )。
答案: 48
13、 已知宏定义#define p(x,y,z) x=yz;则宏替换p(a,x+5,y-3.1)应为( )。
答案: a=x+5y-3.1;
14、 下面程序执行后的输出结果是( )。#include #define MA(x) x*(x-1)int main(){ int a=1,b=2; printf(“%d”,MA(1+a+b)); return 0;}
答案: 8
15、 下面程序执行后的输出结果是( )。#include #define f(x) (x*x)int main(){ int i1, i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(“%d,%d”,i1,i2);return 0;}
答案: 4, 3
16、 下面程序执行后的输出结果是( )。#include #define MAX(x,y) (x)>(y) ? (x):(y)int main(){ int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(“%d”,t); return 0;}
答案: 7
17、 下面程序执行后的输出结果是( )。#include #define R 0.5#define AREA(x) Rxxint main(){ int a=1, b=2; printf(“%5.1f”, AREA(a+b)); return 0;}
答案: 4.5
18、 C语言中的预定义宏__DATE__指定程序编译的日期格式为( )。
答案: Mmm dd yyyy
19、 写出下面程序执行后的运行结果。#include #define N 2#define M N+1#define NUM 2*M+1int main(){ int i; for(i=1;i<=NUM;i++) printf(“%d”,i); return 0;}
答案: 123456
20、 写出下面程序执行后的运行结果。#include #define SQR(X) X*Xint main(){ int a=16, k=2, m=1; a/=SQR(k+m)/SQR(k+m); printf(“%d”,a); return 0;}
答案: 2
21、 写出下面程序执行后的运行结果。#include #define F(X,Y) (X)*(Y)int main(){ int a=3, b=4; printf(“%d”, F(a++, b++)); return 0;}
答案: 12
22、 写出下面程序执行后的运行结果。#include #include #define ROUND(x,m) ((int)((x)*pow(10,m)+0.5)/pow(10,m))int main(){ printf(“%f,%f”, ROUND(12.3456,1),ROUND(12.3456,2)); return 0;}
答案: 12.300000,12.350000
23、 头文件CH09K006.h的内容是:#define N 5#define M1 N3写出下面程序执行后的运行结果。#include #include “CH09K006.h”#define M2 N2int main(){ int i; i=M1+M2; printf(“%d”,i); return 0;}
答案: 25
第25讲 编程任务的接口与版本控制 课后测验:编程任务的接口与版本控制
1、 在“文件包含”预处理命令形式中,当#include后面的文件名用” “(双引号)括起时,寻找被包含文件的方式是( )。
答案: 先在源程序所在目录中搜索,再按系统设定的标准方式搜索
2、 在“文件包含”预处理命令形式中,当#include后面的文件名用< >(尖括号)括起时,寻找被包含文件的方式是( )。
答案: 直接按系统设定的标准方式搜索目录
3、 关于文件包含命令说法错误的是( )。
答案: 一个文件包含命令可以包括多个头文件。
4、 下面叙述中正确的是( )。
答案: define和if都不能定义为用户标识符
5、 以下叙述中正确的是( )。
答案: 用#include包含的头文件的后缀必须是“.h”
6、 下面叙述中正确的是( )。
答案: 可以使用#undef命令来终止宏定义的作用域
7、 在C语言标准库头文件中,包含了许多系统函数的原型声明,因此只要程序中使用了这些函数,则应包含这些头文件,以便编译系统能对这些函数调用进行检查。
答案: 正确
8、 #include命令可以包含一个含有函数定义的C语言源程序文件。
答案: 正确
9、 用#include预处理命令能够提高程序运行效率。
答案: 错误
10、 #include “C:\USER\F1.H”是正确的包含命令,表示文件F1.H存放在C盘的USER目录下。
答案: 正确
11、 可以使用条件编译命令来选择某部分程序是否被编译。
答案: 正确
12、 在软件开发中,常用条件编译命令来形成程序的调试或正式版本。
答案: 正确
13、 写出下面程序执行后的运行结果。#include int main(){ int b=5,y=3;#define b 2#define f(x) b*x printf(“%d:”,f(y+1));#undef b printf(“%d:”,f(y+1));#define b 3 printf(“%d”,f(y+1)); return 0;}
答案: 7:16:10
14、 写出下面程序执行后的运行结果。#include #define DEBUGint main(){ int a=20 , b=10 , c; c=a/b;#ifdef DEBUG printf(“%d/%d=”,a,b);#endif printf(“%d”,c); return 0;}
答案: 20/10=2
15、 写出下面程序执行后的运行结果。#include int main(){ int a=20 , b=10 , c; c=a/b;#ifdef DEBUG printf(“%d/%d=”,a,b);#endif printf(“%d”,c); return 0;}
答案: 2
第27讲 批量数据的表示与处理 课后测验:批量数据的表示与处理
1、 在C语言中,一维数组的定义方式为: 类型说明符 数组名( )。
答案: [整型常量]或[整型表达式]
2、 以下关于数组的描述正确的是( )。
答案: 数组的大小是固定的,所有数组元素的类型必须相同
3、 执行下面的程序段后,变量k中的值为( )。 int k=3, s[2]; s[0]=k; k=s[1]*10;
答案: 不定值
4、 以下能正确定义一维数组a的选项是( )。
答案: char a[]={0,1,2,3,4,5};
5、 以下能正确定义一维数组a的选项是( )。
答案: #define SIZE 10int a[SIZE];
6、 若有定义:int a[10];则正确引用数组a元素的是( )。
答案: a[3]
7、 以下叙述中错误的是( )。
答案: 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
8、 若有说明:int a[3][4;则数组a中各元素( )。
答案: 不能得到确定的初值
9、 以下正确的二维数组定义是( )。
答案: int a[][3]={1,2,3,4,5,6};
10、 以下对二维数组a进行初始化正确的是( )。
答案: int a[][3]={{1,2,3},{4,5,6}} ;
11、 若有定义:int a[3][4];则正确引用数组a元素的是( )。
答案: a[0][0]
12、 若定义了int b[][3]={1,2,3,4,5,6,7};则b数组第一维的长度是( )。
答案: 3
13、 若有定义:int a[3][4]={0};以下叙述中正确的是( )。
答案: 数组a中每个元素均可得到初值0
14、 若有定义:int a[][4]={0,0};以下叙述中错误的是( )。
答案: 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
15、 若二维数组a有m列,则计算元素a[i][j]在数组中相对位置的公式为( )。
答案: i*m+j
16、 设char x[]=”12345″,y[]={‘1′,’2′,’3′,’4′,’5′,’\0’};以下叙述中正确的是( )。
答案: x数组的长度等于y数组的长度
17、 假定一个int型变量占用4个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是( )。
答案: 40
18、 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后a[1][2]的值为____。
答案: 0
19、 若有定义:double x[3][5];则x数组中行下标的上限为____。
答案: 2
第28讲 批量数据的遍历与访问 课后测验:批量数据的遍历与访问
1、 以下程序的输出结果是( )。 int main() { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf(“%d%d%d%d”,a[0][3],a[1][2],a[2][1],a[3][0]); return 0;}
答案: 0650
2、 以下程序的输出结果是( )。 int main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++){ printf(“%d “,m[k][i]); } return 0; }
答案: 3 6 9
3、 下面程序段执行后的输出结果是( )。int k,a[3][3]={1,2,3,4,5,6,7,8,9};for (k=0;k<3;k++) printf(“%d”,a[k][2-k]);
答案: 3 5 7
4、 下面程序执行后的输出结果是( )。#include int main(){ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf(“%d”,s); return 0;}
答案: 18
5、 下列程序的主要功能是输入10个整数存入数组a,再输入一个整数x,在数组a中查找x。找到则输出x在10个整数中的序号(从1开始);找不到则输出0。程序缺少的是 ( )。 int main() { int i,a[10],x,flag=0; for(i=0;i<10;i++) scanf(“%d”,&a[i]); scanf(“%d”,&x); for(i=0;i<10;i++) if _ { flag=i+1; break; } printf(“%d”, flag); return 0; }
答案: x==a[i]
6、 写出下面程序执行后的运行结果。#include int main(){ int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf(“%d:”,n[i]); } return 0;}
答案: 1:3:7:15:
7、 下面程序运行时从键盘上输入:1└┘2└┘3└┘-4↙,写出程序的运行结果。(└┘代表空格,↙代表回车)#include int main(){ int i,k=0,s=0,a[10]; while (1) { scanf(“%d”,&a[k]); if (a[k]<=0) break ; s=s+a[k++]; } for(i=0;i<k;i++) printf(“%d”,a[i]);=”” printf(“%d”,s);=”” return=”” 0;}=”” 答案:=”” <span=””>1236</k;i++)>
8、 写出下面程序执行后的运行结果。#include int main(){ int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for (j=2;j>=i;j–) if(x[j+1]>x[j]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k;} for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j+1]>x[j]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k;} for (i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k;} for (i=0;i<8;i++) printf(“%d”,x[i]); return 0;}
答案: 75310246
9、 写出下面程序执行后的运行结果。#include int main(){ int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; int i=0,j=0,s=0; while(i++<4) { if(i==2||i==4) continue; j=0; do { s+=a[i][j]; j++; } while(j<4); } printf(“%d”,s); return 0;}
答案: 92
10、 .写出下面程序执行后的运行结果。#include int main(){ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(“%d”,t); return 0;}
答案: 4
11、 写出下面程序执行后的运行结果。#include int main(){ int i,j,a[4][4]; for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=1+i-j; for(i=0;i<4;i++) { for(j=0;j<4;j++) if(a[i][j]>0) printf(“%3d”,a[i][j]); putchar(”); } return 0;}
答案: 1
2 1
3 2 1
4 3 2 1
12、 写出下面程序执行后的运行结果。#include int main(){ int a[4][3]={{1,2,3},{-2,0,2},{1,0,1},{-1,2,-3} }; int b[3][2]={{-1,3},{-2,2},{2,1}}; int c[4][2],i,j,k,s; for(i=0;i<4;i++) { for(k=0;k<2;k++) { s=0; for (j=0;j<3;j++) s+=a[i][j]*b[j][k]; c[i][k]=s; printf(“%4d”,s); } printf(“”); }return 0;}
答案: 1 10
6 -4
1 4
-9 -2
13、 下面程序的功能是将十进制整数n转换成base进制。请填空使程序完整、正确。#include int main(){ int i=0,base,n,j,num[20] ; scanf(“%d”,&n); scanf(“%d”,&base); do { i++ ; num[i]=__; n=n/base; } while (n!=0); for (j=i ;j>=1 ;j–) printf(“%d”,num[j]); return 0;}
答案: n%base
14、 下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数。请填空使程序完整、正确。#include int main(){ int a[10],max,min,i,j,k; for (i=0; i<10; i++) scanf(“%d”,&a[i]); max=min=a[0], j=k=0; for (i=0; i<10; i++) { if (a[i]<min) {=”” min=”a[i];” _____________;}=”” if=”” (a[i]=””>max) { max=a[i]; k=i;} } a[j]=max , a[k]=min; for (i=0; i<10; i++) printf(“%d”,a[i]); return 0;}
答案: j=i</min)>
15、 下面程序的功能是向数组输入数据,逆序置换后输出。逆序置换是指数组的首元素和末元素置换,第二个元素和倒数第二个元素置换,………。请填空使程序完整、正确。#include #define N 8int main(){ int i,j,t,a[N]; for(i=0;i<n;i++) scanf(“%d”,&a[i]);=”” i=”0;j=N-1;” while(i<j)=”” {=”” t=”a[i],” _________=”” ,=”” a[j]=”t” ;=”” i++=”” ,j–;=”” }=”” for(i=”0;i<N;i++)” printf(“%5d”,a[i]);=”” return=”” 0;}=”” 答案:=”” <span=””>a[i]=a[j]</n;i++)>
16、 写出下面程序执行后的运行结果。#include int main(){ int a[6][6],i,j ; for (i=1; i<6 ; i++) for (j=1; j<6 ; j++) a[i][j]=(i/j)*(j/i) ; for (i=1; i<6 ; i++) { for (j=1; j<6 ; j++) printf(“%2d”,a[i][j]); printf(“”); } return 0;}
答案: 1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
第29讲 函数之间实现批量数据传递 课后测验:函数之间实现批量数据传递
1、 若用数组名作为函数调用的实参,传递给形参的是( )。
答案: 数组的首地址
2、 设主调用函数为如下程序段,则函数f中对形参数组定义错误的是( )。int a[3][4];f(a);
答案: f(int array[3][])
3、 下面程序执行后的输出结果是( )。#include int f(int b[],int m,int n){ int i,s=0; for(i=m;i<n;i++) s=”s+b[i-1];” return=”” s;}int=”” main(){=”” int=”” x,a[]=”{1,2,3,4,5,6,7,8,9};” x=”f(a,3,7);” printf(“%d”,x);=”” 0;}=”” =”” a:10=”” b:18=”” c:8=”” d:15=”” 答案:=”” <span=””>18</n;i++)>
4、 下面程序执行后的输出结果是( )。#include #define N 20 void fun(int a[],int n,int m) { int i; for(i=m;i>=n;i–) a[i+1]=a[i]; } int main() { int i; int a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9); for(i=0;i<5;i++) printf(“%d”,a[i]); return 0;}
答案: 12334
5、 下面程序执行后的输出结果是( )。#include void f(int a[],int i,int j){ int t; if (i<j) {=”” t=”a[i];” a[i]=”a[j];a[j]=t;” f(a,i+1,j-1);=”” }}int=”” main(){=”” int=”” i,aa[5]=”{1,2,3,4,5};” f(aa,0,4);=”” for(i=”0;i<5;i++)” printf(“%d”,aa[i]);=”” return=”” 0;}=”” =”” a:54321=”” b:52341=”” c:12345=”” d:12543=”” 答案:=”” <span=””>54321</j)>
6、 设函数fun的定义形式为:void fun(char ch[], float x) { …… },则以下对函数fun的调用语句中,正确的是( )。
答案: fun(“abc”,3.0);
7、 写出下面程序执行后的运行结果。#include float f(float a,float b){ static float x; float y; x=(y=a>b ? a:b)>x ? y : x; return x;}int main(){ float a[5]={2.5,-1.5,7.5,4.5,6.5}; int i; for(i=0;i<4;i++) printf(“%.1f “,f(a[i],a[i+1])); return 0;}
答案: 2.5 7.5 7.5 7.5
第30讲 构建大数和高精度类型 课后测验:构建大数和高精度类型
1、 程序填空,使下面程序实现输出N!(N<=10000)的最低三位。#include int main(){ int N,M=1; scanf(“%d”,&N); for (int i=1;i<=N;i++){ M=M*i; M=____; } printf(“%03d”,M); return 0;}
答案: M%1000
2、 程序填空,使下面程序实现输出N!(N<=10000)的十进制位数。#include #include int main (){ int i, n; double sum; sum = 0.0; scanf(“%d”, &n); for (i = 2; i <= n; i++) { sum +=___; } printf (“%d”, (int)ceil(sum)); return 0;}
答案: log10(i)
3、 下面的程序实现计算整数n的_。#includeint main(){ int n,j,i,t,p; int FACT[10000]; while(scanf(“%d”,&n)!=EOF){ t=p=0; FACT[0]=1; for(j=1;j<=n;j++){ for(i=0;i<=t;i++){ FACT[i]=FACT[i]*j+p; p=FACT[i]/100000; FACT[i]%=100000; } if(p){ t++; FACT[t]=p; p=0; } } printf(“%d”,FACT[t]); for(i=t-1;i>=0;i–) printf(“%05d”,FACT[i]); printf(“”); } return 0;}
答案: 阶乘
第31讲 文字信息的表示与处理 课后测验:文字信息的表示与处理
1、 下面是对字符数组s进行初始化,其中不正确的是( )。
答案: char s[5]=”abcde”;
2、 字符数组s不能作为字符串使用的是( )。
答案: char s[5]={‘h’,’a’,’p’,’p’,’y’};
3、 下面有关字符数组的描述中错误的是( )。
答案: 可以在赋值语句中通过赋值运算对字符数组整体赋值
4、 下面程序段执行后的输出结果是( )。char c[5]={‘a’,’b’,’\0′,’c’,’\0′};printf(“%s”,c);
答案: ab
5、 有两个字符数组a、b,则以下( )是正确的输入语句。
答案: scanf(“%s%s”,a,b);
6、 下面程序段执行后的输出结果是( )。char a[7]=”abcdef”;char b[4]=”ABC”;strcpy(a,b);printf(“%c”,a[5]);
答案: f
7、 下面程序段执行后的输出结果是( )。char c[]=”\t\b\\0will”;printf(“%d”,strlen(c));
答案: 3
8、 判断字符串a是否大于b,应当使用( )。
答案: if (strcmp(a,b)>0)
9、 表达式strcmp(“3.14″,”3.278”)的值是( )。
答案: 非零整数
10、 有以下程序:#include #include int main(){ char p[]={‘a’,’b’,’c’}, q[10]={‘a’,’b’,’c’}; printf(“%d %d”, strlen(p), strlen(q)); return 0;}以下叙述中正确的是( )。
答案: 由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
11、 下面程序运行时从键盘上输入:123 456 789↙,其输出结果是( )。#include int main(){ char s[100]; int c, i; scanf(“%c”,&c); scanf(“%d”,&i); scanf(“%s”,s); printf(“%c,%d,%s”,c,i,s); return 0;}
答案: 1,23,456
12、 下面程序运行时从键盘上输入:ABC↙,其输出结果是( )。#include #include int main(){ char ss[10]=”12345″; gets(ss); strcat(ss, “6789”); printf(“%s”,ss); return 0;}
答案: ABC6789
13、 下面程序执行后的输出结果是( )。#include #include int main(){ char arr[2][4]; strcpy(arr[0],”you”); strcpy(arr[1],”me”); arr[0][3]=’&’; printf(“%s”,arr); return 0;}
答案: you&me
14、 下面程序执行后的输出结果是( )。#include int main(){ char str[]=” SSWLIA” , c; int k; for (k=2;(c=str[k])!=’\0′;k++) { switch (c) { case ‘I’: ++k; break ; case ‘L’: continue; default : putchar(c); continue ; } putchar(‘‘); } return 0;}
答案: SW
15、 下面程序执行后的输出结果是( )。#include int main(){ char w[][10]={“ABCD”,”EFGH”,”IJKL”,”MNOP”} , k; for(k=1;k<3;k++) printf(“%s”,w[k]); return 0;}
答案: EFGHIJKL
16、 下面程序运行时从键盘上输入:AabD↙,写出程序的运行结果。#include int main(){ char s[80]; int i=0; gets(s); while (s[i]!=’\0′) { if (s[i]<=’z’ && s[i]>=’a’) s[i]=’z’+’a’-s[i] ; i++; } puts(s); return 0;}
答案: AzyD
17、 写出下面程序执行后的运行结果。#include int main(){ int i=0; char c,s[]=”SABC”; while(c=s[i]) { switch(c) { case ‘A’: i++; break; case ‘B’: ++i; default : putchar(c);i++; } putchar(‘‘); } return 0;}
答案: SB
18、 写出下面程序执行后的运行结果。#include int main(){ int i,c; char s[2][5]={“1980″,”9876”}; for (i=3; i>=0 ; i–) { c=s[0][i]+s[1][i]-2*’0′; s[0][i] = c % 10 ; } for (i=0; i<=1 ; i++) puts(s[i]); return 0;}
答案: 9876
19、 写出下面程序执行后的运行结果。#include #include int main(){ char ch[]=”abc”,x[3][4]; int i; for(i=0;i<3;i++) strcpy(x[i],ch); for(i=0;i<3;i++) printf(“%s”,&x[i][i]); return 0;}
答案: abcbcc
20、 写出下面程序执行后的运行结果。#include #include void f(char p[][10],int N){ char t[20]; int i,j; for(i=0;i<n-1;i++) for(j=”i+1;j<N;j++)” if(strcmp(p[i],p[j])<0)=”” {=”” strcpy(t,p[i]);=”” strcpy(p[i],p[j]);=”” strcpy(p[j],t);=”” }}int=”” main(){=”” char=”” p[][10]=”{“abc”,”aabdfg”,”abbd”,”dcdbe”,”cd”};” f(p,5);=”” printf(“%d”,strlen(p[0]));=”” return=”” 0;}=”” 答案:=”” <span=””>5</n-1;i++)>
21、 输入hello↙,写出下面程序的运行结果。#include #include int main(){ char s[80],t[200]; int i,sl ; gets(s); sl = strlen(s); for(i=0 ;iollehhello
22、 运行下面程序输入abcbcbded↙和bc↙,写出程序的输出结果。#include int main(){ char substr[80],str[80]; int i,j,k,num=0; gets(str); gets(substr); for(i = 0; str[i]; i++) for(j=i,k=0;substr[k]==str[j];k++,j++) if (substr[k+1]==’\0′) { num++; break; } printf(“num=%d”, num); return 0;}
答案: num=2
23、 运行程序输入adebdwe↙和d↙,写出输出结果。#include #include int main(){ char c , t[50]; int len,j,k; gets(t); c=getchar(); len = strlen(t); for (k=0; k<len; k++)=”” if=”” (t[k]=”=c)” {j=”k;” break;}=”” else=”” j=”-1;” printf(“%d”,j);=”” return=”” 0;}=”” 答案:=”” <span=””>1</len;>
24、 运行程序输入hello↙和world↙,写出输出结果。#include int main(){ char a[100], b[100]; int i=0,j=0 ; gets(a); gets(b); while (a[i]!=’\0′) i++ ; while (b[j]!=’\0′) { a[i]=b[j] ; i++ ; j++ ; } a[i]=’\0′; printf(“%s”,a); return 0;}
答案: helloworld
第32讲 实现排序算法 课后测验:实现排序算法
1、 一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。
答案: 正确
2、 冒泡排序法是一种稳定的排序算法。
答案: 正确
3、 选择排序法是一种稳定的排序算法。
答案: 错误
4、 插入排序的基本思想是每步将一个待排序的记录按其排序码值的大小,插到前面已经排好的文件中的适当位置,直到全部插入完为止。
答案: 正确
5、 选择排序的基本思想是每步从待排序的记录中选出排序码最小的记录,顺序存放在已排序的记录序列的后面,直到全部排完。
答案: 正确
6、 冒泡排序和快速排序属于交换类排序算法,其基本思想是:两两比较待排序记录的排序码,并交换不满足顺序要求的那些偶对,直到满足条件为止。
答案: 正确
7、 插入排序是将两个或两个以上的有序子表合并成一个新的有序表。
答案: 错误
8、 快速排序用到了分治法的算法思想,将原问题分解为若干个规模更小但结构与原问题相似的子问题,递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
答案: 正确
9、 选择合适的排序方法应综合考虑下列因素:①待排序的记录数目n;②记录的大小(规模);③关键字的结构及其初始状态;④对稳定性的要求;⑤语言工具的条件;⑥存储结构;⑦时间和辅助空间复杂度等。
答案: 正确
10、 一般情况下,快速排序算法的时间性能比冒泡排序算法的时间性能要好。
答案: 正确
11、 写出下面程序执行后的运行结果。#include void sort(int a[],int s, int N){ int i,j,t; for(i=s;i<n-1;i++) for(j=”i+1;j<N;j++)” if(a[i]<a[j])=”” {=”” t=”a[i]” ,=”” a[i]=”a[j]” a[j]=”t” ;=”” }}int=”” main(){=”” int=”” aa[10]=”{1,2,3,4,5,6,7,8,9,10},i;” sort(aa,3,8);=”” for(i=”0;i<10;i++)” printf(“%d=”” “,aa[i]);=”” return=”” 0;}=”” 答案:=”” <span=””>1 2 3 8 7 6 5 4 9 10</n-1;i++)>
12、 写出下面程序执行后的运行结果。#include void reverse(int a[],int n){ int i,t; for(i=0;i<n;i++) {=”” t=”a[i];” a[i]=”a[n-1-i];” a[n-1-i]=”t;}}int” main(){=”” int=”” b[10]=”{1,2,3,4,5,6,7,8,9,10};” i,s=”0;” reverse(b,8);=”” for(i=”6;i<10;i++)” s+=”b[i];” printf(“%d”,s);=”” return=”” 0;}=”” 答案:=”” <span=””>34</n;i++)>
13、 运行下面程序,输入10└┘9└┘8└┘7└┘6└┘5└┘4└┘3└┘2└┘1↙写出下面程序执行后的运行结果。#include void Sort(int A[],int low,int high){ if(low<high){ int=”” temp,t=”A[low];” l=”low,h=high;” while(l<h){=”” while(a[l]<t)=”” l++;=”” while(a[h]=””>=t) h–; if(h>l){ temp=A[l]; A[l]=A[h]; A[h]=temp; } } Sort(A,low,l-1); Sort(A,l+1,high); }}int main(){ int A[10]; for (int i=0;i<10;i++) scanf(“%d”,&A[i]); Sort(A,3,8); for (int i=0;i<10;i++) printf(“%d “,A[i]); return 0;}
答案: 10 9 8 2 3 4 5 6 7 1</high){>
14、 写出程序的运行结果。#include int main(){ int c[10],i=0,j=0,k=0 ; int a[3]={5,9,10} ; int b[5]={12,24,26,37,48} ; while (i<3 && j<5) if (a[i]>b[j]) { c[k]=b[j] ; k++ ; j++ ; } else { c[k]=a[i] ; k++ ; i++ ; } while (i<3) { c[k]=a[i] ; i++ ; k++ ; } while (j<5) { c[k]=b[j] ; j++ ; k++ ; } for (i=0; i<k; i++)=”” printf(“%d=”” “,c[i]);=”” return=”” 0;}=”” 答案:=”” <span=””>5 9 10 12 24 26 37 48</k;>
15、 读程序写出运行结果。#include int main(){ int a[10]={191,3,6,4,11,7,25,13,89,10} ; int i,j,k ; for (i=1; i<10; i++) { k = a[i] ; j = i-1; while (j>=0 && k>a[j] ) { a[j+1]=a[j] ; j–; } a[j+1]= k ; } for (i=0; i<10; i++) printf(“%d “,a[i]); return 0;}
答案: 191 89 25 13 11 10 7 6 4 3
16、 运行程序,输入4,写出程序的输出结果。#include int search(int a[10],int m){ int x1=0,x2=9,mid; while (x1<=x2) { mid=(x1+x2)/2; if (m<a[mid]) x2=”mid-1;” else=”” if=”” (m=””>a[mid]) x1=mid+1; else return (mid); } return (-1);}int main(){ int A[10]={1,2,3,4,5,6,7,8,9,10}, b; scanf(“%d”,&b); printf(“%d”,search(A,b)); return 0;}
答案: 3</a[mid])>
第33讲 用空间换取时间编程方法 课后测验:用空间换取时间编程方法
1、 下面程序尝试使用空间换取时间的策略实现第1至100项中任意菲波那切数列的求解,请填空完善程序。# include # define N 100int fab[N]={-1,-1,-1,-1,……};//将数组fab全部初始化为-1int Fab(int n){ if (_____){ if ((n==1)||(n==2)) fab[n]=1; else fab[n]=Fab(n-1)+Fab(n-2); } return fab[n];}int main(){ int n; scanf(“%d”,&n); printf(“%d”,Fab(n)); return 0; }
答案: fab[n]==-1
2、 算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小。
答案: 正确
3、 对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。
答案: 正确
4、 当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。
答案: 正确
5、 进行a,b两个变量值交换时使用{ a=a+b;b=a-b;a=a-b;}比使用{ int c; c=a; a=b;b=a;}获得了更好的空间性能,但是具有比其差的时间性能。
答案: 正确
6、 有时可以通过使用带参数的宏定义来替换掉相应的函数定义,从而获得更好的时间性能。
答案: 正确
第34讲 探究指针的本质与使用 课后测验: 探究指针的本质与使用
1、 变量的指针,其含义是指该变量的( )。
答案: 地址
2、 下面对于指针的描述不正确的是( )。
答案: 指针指向不同基类型的变量长度不同
3、 若有定义int p,m=5,n;以下程序段正确的是( )。
答案: p=&n;*p=m;
4、 假如指针p已经指向整型变量x,则(p)++相当于( )。
答案: x++
5、 若程序中已包含头文件stdio.h,以下选项中正确运用指针变量的程序段是( )。
答案: long *L;L=’\0′;
第35讲 指针运用的风险控制 课后测验:指针运用的风险控制
1、 若有int p,a=4;和p=&a;下面( )均代表地址。
答案: &a,&p,p
2、 若变量已正确定义并且指针p已经指向变量x,则&x相当于( )。
答案: x
3、 若定义了int m,n=0,p1=&m;则下列( )表达式与m=n等价。
答案: p1=&n
4、 对于基类型相同的两个指针变量之间,不能进行的运算是( )。
答案: +
5、 有四组对指针变量进行操作的语句,以下判断正确的选项是( ) (1) int p,q; q=p; int a,p,q; p=q=&a; (2) int a,p,q; q=&a; p=q; int a=20,p; p=a; (3) int a=b=0,p; p=&a; b=p; int a=20,p,q=&a; p=q; (4) int a=20,p,q=&a; p=q; int p,q; q=&p;
答案: 以上结论都不正确
6、 执行以下程序后,a的值为( )。int main() { int a,b,k=4,m=6,p1=&k,p2=&m; a=p1==&m; b=(-p1)/(p2)+7; printf(“a=%d”,a); printf(“b=%d”,b); return 0; }
答案: 0
7、 已有定义int k=2;int ptr1,ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值是( )。
答案: ptr2=k
8、 有如下函数和变量定义int a=25;执行语句print_value(&a);后的输出结果是( )。void print_value(int x){ printf(“%d”,++x); }
答案: 26
9、 若有定义int a=3,b,p=&a;则下列语句中( )使b不为3。
答案: b=*a;
10、 若有定义int n=0,p=&n,q=&p;则以下选项中,正确的赋值语句是( )。
答案: p=5;
11、 下面程序执行后的输出结果是( )。#include int main(){ int x[5]={2,4,6,8,10}, *p,pp; p=x , pp=&p; printf(“%d”,*(p++)); printf(“%3d”,pp); return 0;}
答案: 2 4
12、 下列关于指针的操作中,错误的是( )。
答案: 两个同类型的指针可以相加
13、 运行下面程序,输入www.nwpu.edu.cn和5,写出输出结果。#include int main(){ char a[100],b[100],p,q; int m; gets(a); scanf(“%d”,&m); p=a;q=b; for(p=p+m-1;p!=’\0′;p++,q++) q=p; q=’\0′; printf(“%s”,b); return 0;}
答案: nwpu.edu.cn
第36讲 数组元素的简洁表示 课后测验:数组元素的简洁表示
1、 若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是( )。
答案: s++
2、 若有定义int a[5],p=a;则对a数组元素的正确引用是( )。
答案: *(a+2)
3、 若有定义int a[5],p=a;则对a数组元素地址的正确引用是( )。
答案: &a[0]
4、 若要对a进行合法的自减运算,则之前应有下面( )的说明。
答案: int b[10];int *a=b+1;
5、 若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},p1;则数值不为3的表达式是( )。
答案: p1=x+2,*(p1++)
6、 设int x[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0},p=x,k;且0≤k<10, 则对数组元素x[k]的错误引用是( )。
答案: p+k
7、 设double *p[6];则( )。
答案: p是指针数组,其元素是指向double型变量的指针
8、 若有定义int x[6]={2,4,6,8,5,7},p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是( )。
答案: for(i=0;i<6;i++) printf(“%2d”,(p)++);
9、 下面程序执行后的输出结果是( )。#include void sum(int *a) { a[0]=a[1];}int main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i>=0;i–) sum(&aa[i]); printf(“%d”,aa[0]); return 0;}
答案: 4
10、 下面程序执行后的输出结果是( )。#include int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}, p=&a[3], q=p+2; printf(“%d”, p+q); return 0;}
答案: 10
11、 若有定义int a[2][3];则对a数组的第i行,第j列元素值的正确引用是( )。
答案: ((a+i)+j)
12、 若有定义int a[2][3];则对a数组的第i行第j列元素地址的正确引用是( )。
答案: a[i]+j
13、 若有定义 int a[4][6]; 则能正确表示a数组中任一元素a[i][j](i、j均在有效范围内)地址的表达式( )。
答案: &a[0][0]+6*i+j
14、 若有定义int t[3][2];能正确表示t数组元素地址的表达式是( )。
答案: t[2]
15、 若有定义int a[4][5];下列( )表达式是错误的。
答案: ++a
16、 下面程序执行后的输出结果是( )。#include int main(){ int a[3][3], *p,i;p=&a[0][0];for(i=0; i<9; i++) p[i]=i+1;printf(“%d”,a[1][2]);return 0;}
答案: 6
17、 定义如下一维数组:int a[5],*p;则下面描述错误的是( )
答案: 表达式a=a+1是合法的
18、 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
答案: ((a+i))
19、 有如下程序段:int p,a[6]={-1,0,1,2,3,4}; p=a+3; 执行该程序段后,p的值为 ( )
答案: 2
20、 若有定义int a[3][4],p=&a[0][0];则对a数组的第i行,第j列元素值的正确引用是( )。
答案: (p+4i+j)
21、 在C语言中,数组名是一个地址_____(常量/变量),不能对它进行赋值运算。
答案: 常量
22、 若有定义int w[10]={23,54,10,33,47,98,72,80,61},p=w;则不移动指针p,且通过指针p引用值为98的数组元素的表达式是_____。
答案: (以下答案任选其一都对)p[5];
(p+5)
23、 若有定义int a[2][3]={2,4,6,8,10,12};则(&a[0][0]+22+1)的值是_____
答案: 12
24、 若有定义int a[2][3]={1,2,3,4,5,6};*(a[1]+2)的值是_____。
答案: 6
上方为免费预览版答案,如需购买完整答案,请点击下方红字
为了方便下次阅读,建议在浏览器添加书签收藏本网页
添加书签方法:
1.电脑按键盘的Ctrl键+D键即可收藏本网页
2.手机浏览器可以添加书签收藏本网页
我们的公众号
打开手机微信,扫一扫下方二维码,关注微信公众号:萌面人APP
本公众号可查看各种网课答案,还可免费查看大学教材答案
居庇端草庙樊缄碗尉路纪换薪