C程序Chapter7练习
- 格式:doc
- 大小:43.00 KB
- 文档页数:4
C程序设计1-7章测试题(04级)姓名____一、选择题:(每题3分,共45分)1、C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符(a)。
A)必须为字母或下划线。
B)必须为下划线。
C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。
2、下列运符中优先级最高的是( b )A) ++ B) () C) ?: D)||3、C语言规定:在一个源程序中,main函数的位置( c )A)必须在最开始B)必须在系统调用的库函数的后面C)可以任意D)必须在最后4、一个C语言程序是由( b )A)一个主程序和若干子程序组成B)函数组成C)若干过程组成D)若干子程序组成5、代表换行的转义字符是 ( a )A)'\n' B)'\\' C)'\0' D)'\''6、下面一段程序是小写字母转换成大写字母的程序。
void main(){ char c1;c1='a';( ) ;printf("%c ",c1);}那么括号处应该填写( c )a) c1=c1+32 b)c1=c1-64 c) c1=c1-32 d) c1=c1+647、设有程序段int k=10;while(k=0) k=k-1;则下面描述中正确的是(c )a) while 循环执行10次b)循环是无限循环c)循环体语句一次也不执行d)循环体语句执行一次8、逻辑运算符两侧运算对象的数据类型( a )a)只能是0或1 b)只能是0或非0正数c)只能是整型或字符型数据d) 可以是任何类型的数据9、语句while(!E);中表达式!E等价于(a )a) E==0 b) E!=1 c)E!=0 d)E==110、以下对一维a的正确说明是(d)a) int a(10) ; b)int n=10,a[n]; c) int n; scanf(“%d”,&n); int a[n];d) int a[10];11、在c语言中,引用数组元素时,引用数组元素时,其数组下标的数组类型允许是(c)a) 整型常量b) 整型表达式c) 整型常量或整型表达式d) 任何类型的表达式12、以下能对一维数组a进行正确初始化的语句是(c )a) int a[10]=(0,0,0,0,0); b) int a[10]={}; c) int a[]={0}; d)int a[10]={10*1};13、以下对二维数组a的正确说明是( c )a) int a[3,4]; b) float a(3,4); c) double a[3][4]; d) float a(3)(4);14、若有说明:int a[10]; 则对a数组元素的正确应用是(d)a) a[10] b)a[3,5] c)a(5) d)a[0]15、以下能对二维数组a进行正确初始化的语句是( b )a) int a[2][]={{1,0,1},{5,2,3}} ; b) int a[][3]={{1,0,1},{5,2,3}} ;c) int a[2][4]={{1,0,1},{5,3},{6}} ; d) int a[][3]={{1,0,1},{},{5,3}} ;二、填空题:(共10个空,每空4分,共40分)1、输出单个字符#include <stdio.h>void main(){ char a,b,c;a='B';b='O';c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');}运行结果是(BOY )。
选择题1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。
A.位与运算B.逻辑与运算C.取指针内容D.取变量地址2.已知:int a, x;,则正确的赋值语句是( C )。
A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a="good"; 3.已知:int a, *p=&a;,则下列函数调用中错误的是( D )。
A.scanf("%d", &a); B.scanf("%d", p); C.printf("%d", a); D.scanf("%d", *p); 4.已知:char *p, *q;,选择正确的语句( C )。
A.p*=3; B.p/=q; C.p+=3; D.p+=q;5.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。
A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;一、选择题1.设有说明int (*ptr)[M];,其中的标识符ptr是( C )。
A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M列的二维数组的一行的指针D.具有M个指针元素的一维数组的指针2.已知:double *p[6];,它的含义是( C )。
A.p是指向double型变量的指针B.p是double型数组C.p是指针数组D.p是数组指针3.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。
A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0];4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。
C程序设计(第2版)第七章习题解答第七章动态内存分配习题一、基本概念与基础知识自测题7.1 填空题7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。
答案:(1)代码区,存放程序代码;(2)全局变量与静态变量区,存放全局变量或对象(包括静态);(3)局部变量区即栈(stack)区,存放局部变量;(4)自由存储区(free store),即动态存储区或堆(heap)区。
7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动态建立对象的初始化是通过(3)实现(4)。
答案:(1)命名对象(2)无名对象(3)初始化式(initializer)(4)显式初始化7.1.3 在用new运算符建立一个三维数组15*30*10时,使用了(1)个下标运算符,对应的用delete运算符注销这个三维数组时使用了(2)个下标运算符。
new返回的指针是指向(3)的指针。
答案:(1)3个(2)1个(3)30行10列的2位数组7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。
如果new返回的指针丢失,则所分配的自由存储区空间无法收回,称为(2)。
这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。
答案:(1)返回一个空指针(NULL)(2)内存泄漏(3)重新启动计算机后(4)并不依赖于建立它的作用域7.1.5 按语义的默认复制构造函数和默认复制赋值操作符实现的复制称为(1),假设类对象obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。
答案:(1)浅拷贝(2)同一个堆对象7.1.6 单链表的结点包含两个域:(1)和(2)。
使用链表的最大的优点是(3),即使是动态数组也做不到这一点。
答案:(1)数据域(2)指针域(3)用多少空间,开多少空间7.1.7 进入单链表必须通过单链表的(1),如果它丢失则(2),内存也(3),在单链表中进行的查找只能是(4)。
c语言教材第七章习题答案《C语言教材第七章习题答案》在学习C语言的过程中,掌握基本的语法和逻辑结构是非常重要的。
第七章的习题涉及到了一些较为复杂的概念和技巧,需要我们对C语言有更深入的理解和掌握。
1. 题目:编写一个程序,计算并输出1到100之间所有偶数的和。
答案:我们可以使用循环结构和条件判断来解决这个问题。
具体的代码如下: ```#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("1到100之间所有偶数的和为:%d\n", sum);return 0;}```这段代码使用了for循环来遍历1到100之间的所有数字,然后通过条件判断判断是否为偶数,如果是偶数则累加到sum中,最后输出sum的值。
2. 题目:编写一个程序,输出九九乘法表。
答案:九九乘法表是一个经典的练习题,通过嵌套循环可以很容易地实现。
具体的代码如下:```#include <stdio.h>int main() {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {printf("%d*%d=%d\t", j, i, i*j);}printf("\n");}return 0;}```这段代码使用了两层嵌套的for循环,外层循环控制行数,内层循环控制列数,通过printf语句输出乘法表中的每一项。
通过解答以上两道习题,我们不仅复习了C语言中的循环结构和条件判断,还锻炼了我们的编程思维和逻辑能力。
希望大家在学习C语言的过程中能够多多练习,不断提升自己的编程水平。
《C程序设计》第7章练习题4. 有下列程序main(){ int array[][3]={1,2,3,4,5,6,7,8,9};int k,m,n=0;for(k=0;k<3;k++)for(m=k+1;m<3;m++){ n=array[k][m];array[k][m]=array[m][k];array[m][k]=n;}for(m=0;m<3;m++)printf("%d",array[m][0]);}(1) 此程序的功能是对数组array表示的3阶方阵进行(30 )。
30 (A) 转置(B) 第2行调至第1行、第3行调至第2行、第1行调至第3行(C) 相邻元素交换(D) 第1行与第1列对调(2) 程序运行的输出结果是(31 )。
31 (A) 147 (B) 258 (C) 123 (D) 369 8. 选择下面程序运行的结果。
# includeint m[3][3]={{1},{2},{3}};int n[3][3]={1,2,3};main(){printf("%d\n",m[1][0]+n[0][0]);printf("%d\n",m[0][1]+n[1][0]);}第1条printf语句行输出的结果是(35 )。
35 (A) 0 (B) 1 (C) 2 (D) 3第2条printf语句行输出的结果是(36 )。
36 (A) 0 (B) 1 (C) 2 (D) 39. 选择下面程序运行的结果(设int占2个字节)# includemain(){struct date{int year,month,day;}today;union{long i;int k;char c;}mix;printf("date=%d\n",sizeof(struct date));printf("mix=%d\n",sizeof(mix));}第1条printf语句行输出的结果为(37 )。
Chapter7练习
选择
1 以下正确的函数定义形式是___
A)double fun(int x,int y)
B)double fun(int x;int y)
C)double fun(int x,int y);
D)double fun(int x,y);
2 如果要限制一个变量只能为本文件所使用,必须通过_____来实现。
A)外部变量说明B)静态内部变量
C)静态外部变量D)局部变量说明
3 以下正确的说法是_______
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用存储单元
D)形参是虚拟的,不占用存储单元
4以下不正确的说法是____________
A)实参可以是常量、变量或表达式
B)形参可以是常量、变量或表达式
C)实参可以为任意类型
D)形参应与其对应的实参类型一致
5若调用一个函数(类型为void),此函数中没有return语句,则正确的说法是____________ A)没有返回值
B)返回若干个系统默认值
C)能返回一个用户所希望的函数值
D)返回一个不确定的值
6以下正确的说法是____________
A)定义函数时,形参的类型说明可以放在函数体内
B)return后边的值不能为表达式
C)如果函数值的类型与返回值类型不一致,以函数值类型为准。
D)如果形参与实参的类型不一致,以实参类型为准
7 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是____________ A)地址传递
B)单向值传递
C)由实参传给形参,再由形参传回给实参
D)由用户指定传递方式
8 C语言规定,函数返回值的类型是由____________
A)return语句中的表达式类型所决定
B)调用该函数时的主调函数类型所决定
C)调用该函数时系统临时决定
D)在定义该函数时所指定的函数类型所决定
9 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是____________
A)float型
B)int型
C)long型
D)double型
10 下面函数调用语句含有实参的个数为____________
func((exp1,exp2),(exp3,exp4,exp5));
A)1 B)2 C)4 D)5
11以下错误的描述是____________
函数调用可以A)出现在执行语句中
B)出现在一个表达式中
C)作为一个函数的实参
D)作为一个函数的形参
12以下正确的描述是____________
A)函数的定义可以嵌套,函数的调用不可以嵌套
B)函数的定义不可以嵌套,函数的调用可以嵌套
C)函数的定义和函数的调用均不可以嵌套
D)函数的定义和函数的调用均可以嵌套
13若用数组名作为函数调用的实参,传递给形参的是____________
A)数组的首地址
B)数组第一个元素的值
C)数组中全部元素的值
D)数组元素的个数
14若使用一维数组名作函数实参,则以下正确的说法是____________
A)必须在主调函数中说明此数组的大小
B)实参数组类型与形参数组类型可以不匹配
C)在被调函数中,需要考虑形参数组的大小
D)实参数组名与形参数组名必须一致
15以下不正确的说法是____________
A)在不同函数中可以使用相同名字的变量
B)形参是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效
16凡是在函数中未指定存储类别的局部变量,其隐含的存储类别是____________ A)自动(auto)B)静态(static)
C)外部(extern)D)寄存器(register)
填空
1以下程序的运行结果是____________
main( )
{ void inc(void);
inc( );
inc( );
inc( );
}
void inc(void)
{ int x=0;
x+=1;
printf(“%d”,x);
}
2计算数组元素的平均值。
float average(int n,int array[])
{int i ;float sum=0;
for(i=0;i<n;___)
____________;
return(___);
}
main()
{int i;
float aver,score[10];
pr intf(“input 10 score:\n”);
for(i=0;i<10;i++)
scanf(“%f”,&score[i]);
aver=average(10,________);
printf(“average score is %.2f\n”,aver); }
写出运行结果
1.
main ( )
{ int a=4,x=5,b=8;
fun(b,6);
printf("%d,%d,%d\n",a,b,x);
}
fun (int a,int b)
{ int x=3;
printf("%d,%d,%d\n",a,b,x);
}
运行结果:
2.int abc(int u,int v);
main ( )
{int a=48,b=32,c;
c=abc(a,b);
printf("%d\n",c);
}
int abc(int u,int v)
{int w;
while (v)
{w=u%v;u=v;v=w;}
return u;
}
运行结果:
答案:
选择: 1. A 2. C 3. D 4. B 5. A 6. C 7. B 8. D 9. B 10. B 11. D 12. B 13. A 14. A 15. D 16. A
填空: 111
i++ sum+=array[i] sum/n score
运行结果1. 863 485
2. 16。