首页 《C语言程序设计教程》补充习题

《C语言程序设计教程》补充习题

举报
开通vip

《C语言程序设计教程》补充习题《C语言程序设计教程》补充习题 第1章C语言概述 一、选择题 1.机器语言属于( )。 A.低级语言 B.高级语言 C.面向问题的语言 D.汇编语言 2.下列语言中不属于面向问题的语言是( )。 A.高级语言 B.低级语言 C.C语言 D.BASIC语言 3.高级语言编写的程序称为( )。 A.高级程序 B.源程序 C.目的程序 D.目标程序 4.用C语言编写的源文件经过编译,若没有产生编译错误,则系统将( )。 A.生成可执行目标文件 B.生成目标文件 C.输出运行结果...

《C语言程序设计教程》补充习题
《C语言程序设计教程》补充习 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 第1章C语言概述 一、选择题 1.机器语言属于( )。 A.低级语言 B.高级语言 C.面向问题的语言 D.汇编语言 2.下列语言中不属于面向问题的语言是( )。 A.高级语言 B.低级语言 C.C语言 D.BASIC语言 3.高级语言编写的程序称为( )。 A.高级程序 B.源程序 C.目的程序 D.目标程序 4.用C语言编写的源文件经过编译,若没有产生编译错误,则系统将( )。 A.生成可执行目标文件 B.生成目标文件 C.输出运行结果 D.自动保存源文件 5.在Turbo C/C++3.0集成环境下执行菜单命令“运行”,若运行结束且没有系统提示信息, 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 ( )。 A.源程序有语法错误 B.源程序正确无误 C.源程序有运行错误 D.源程序无编译、运行错误,但仅此无法确定其正确性 6.下列不正确的转义字符是( )。 A.\\ B.\' C.074 D.\0 7.下列正确的转义字符是( )。 A.\777 B.\821 C.\xhh D.\xff 8.下列正确的标识符是( )。 A.3a B.a=2 C.A-3 D.a_3 9.下列不正确的标识符是( )。 A._al B.a[i] C.a2_i D.in 10.下列说法中正确的是( )。 A.由于C源程序是高级语言程序,因此一定要在TC软件中输入 B.由于C源程序是字符流组成,因此可以作为文本文件在任何文本编辑的软件中输入 C.由于C程序是高级语言程序,因此输入后即可执行 D.由于C程序是高级语言程序,因此它由命令组成 11.下列说法中正确的是( )。 1 A.C语言程序由主函数和0个或多个函数组成 B.C语言程序由主程序和子程序组成 C.C语言程序由子程序组成 D.C语言程序由过程组成 12.下列说法中错误的是( )。 A.主函数可以分为两个部分:主函数说明部分和主函数体 B.主函数可以调用任何非主函数的其他函数 C.任何非主函数可以调用其他任何非主函数 D.程序可以从任何非主函数开始执行 二、填空题 1.汇编语言属于面向语言,高级语言属于面向语言。 2.在C语言程序中允许出现的字符集是。 3.转义字符是由符号开始的单个字符或若干个字符组成的。 4.C语言的程序中有特殊含义的 英语 关于好奇心的名言警句英语高中英语词汇下载高中英语词汇 下载英语衡水体下载小学英语关于形容词和副词的题 单词 英语单词 下载七年级上册英语单词表下载英语单词表下载深圳小学英语单词表 下载高中英语单词 下载 称为。 5.标识符一般由组成,以开头。 6.C语言中,标识符的定义规则是。 7.C语言的语句主要分为语句、语句、语句、语句、语句、语句、 语句和语句等8类。 8.C程序是由函数构成的。其中有并且只能有个主函数。C语言程序的执行总是由函数开始,并且在函数中结束。 9.C语言程序的注释可以出现在程序中的任何地方,它总是以符号作为开始标记,以符号作为结束标记。 10.用高级语言编写的程序称为程序,它可以通过程序,翻译一句执行一句的方式执行;也可以通过程序,一次翻译产生程序,然后执行。 第2章基本数据类型及其运算 一、选择题 1.下列数据中属于字符串常量的是()。 A."aaa" B.(ABC) C.'abc\0' D.'a' 2.PC机中,'\t'在内存占用的字节数是()。 A.1 B.2 C.3 D.4 3.在PC机中,"a\xff" 在内存占用的字节数是()。 A.5 B.6 C.3 D.4 4.字符串"ABC"在内存占用的字节数是()。 A.3 B.4 C.6 D.8 5.字符串" \'ABCD\' "在内存占用的字节数是()。 A.4 B.6 C.7 D.8 6.在C语言中,合法的长整型常数是()。 A.0L B.4962710 C.0.054838743 D.2.1869e10 7.在C语言中,合法的短整型常数的末尾加( )。 A.L B.x C.l D.s 8.下列数据中不属于字符常量的是( )。 A.'\xff' B.'\160' C.'070' D.070 9.char型常量在内存中存放的是( )。 A.ASCII代码值 B.BCD代码值 C.内码值 D.十进制代码值 10.若int类型数据字长为2个字节,其最大值为( )。 A. 231 B. 215-1 C. 232-1 D. 232 11.常数的书写格式决定了常数的类型和值,03322是( )。 A.16进制int类型常数 B.8进制int类型常数 C.10进制int类型常数 D.10进制long类型常数 12."1.0e2"是( )。 A.实型常数100 B.值为100的整型常数 C.非法标识符 D.合法标识符 13.要为字符型变量a赋初值,下列语句中哪一个是正确的( )。 A. char a='3'; B. char a="3"; C. char a=%; D. char a=*; 14.下列说明语句中可以实现为float类型变量x,y,z赋同一初值3.14的是( )。 A. float x,y,z=3.14; B. float x,y,z=3*3.14; C. float x=3.14,y=3.14,z=3.14; D. float x=y=z=3.14; 15.语句float pi=3.1415926535;将( )。 A. 导致编译错误 B. 说明pi为初值3.1415926535的单精度实型变量 C. 导致运行时的溢出错误 D. 说明pi为初值3.141593的单精度实型变量 16.算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为( )。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 17.关系运算符中优先级最低的运算符是( )。 A.“>=”和“<=” B.“>”和“<” C.“==”和“!=” D.“<=”和“<” 18.逻辑运算符中,运算优先级按从高到低依次为( )。 A.&&,!,|| B.||,&&,! C.&&,||,! D.!,&&,|| 19.C程序在作逻辑运算时,如何判断操作数的真、假( )。 A.0为假非0为真 B.只有1为真 C.-1为假1为真 D.0为真非0为假 20.表达式x&&1等效于( )。 A.x==0 B.x==1 C.x!=0 D.x!=1 21.表达式x==0&&y!=0||x!=0&&y==0等效于( )。 A.x*y==0&&x+y!=0 B.x*y==0&&(x+y==0) C.x==0||y==0 D.x*y=0||x+y=0 22.表达式!x||a==b等效于( )。 A.!((x||a)==b) B.!(x||y)==b C.!(x||(a==b)) D.(!x)||(a==b) 23.设整型变量m,n,a,b,c,d均为0,执行(m=a==b)||(n=c==d)后,m,n的值是( )。 A.0,0 B.0,1 C.1,0 D.1,1 24.设整型变量m,n,a,b,c,d均为1,执行(m=a>b)&&(n=c>d)后, m,n的值是( )。 A.0,0 B.0,1 C.1,0 D.1,1 25.设a为2,执行下列语句后,b的值不为0.5的是( )。 A.b=1.0/a B.b=(float)(1/a) C.b=1/(float)a D.b=1/(a*1.0) 26.设a为5,执行下列语句后,b的值不为2的是( )。 A.b= a/2 B.b=6-(--a) C.b= a%2 D.b= a>3?2:2 27.执行语句“x=(a=3,b=a--)”后,x,a,b的值依次为( )。 A.3,3,2 B.3,2,2 C.3,2,3 D.2,3,2 28.int b=0,x=1;执行语句if(x++) b=x+1; 后,x,b的值依次为( )。 A.2,3 B.2,0 C.3,0 D.3,2 29.设有语句int a=3;,则执行了语句a+=a-=a*a; 后,变量a的值是( )。 A.3 B.0 C.9 D.-12 30.设有语句int a=3;,则执行了语句a+=a-=a*=a; 后,变量a的值是( )。 A.3 B.0 C.9 D.-12 31.设有语句int a=4, b=3, c= -2, d=2;则逻辑表达式a>0&&b&&c<0&&d>0的值是( )。 A.1 B.0 C.-1 D.出错 32.在以下一组运算符中,优先级最高的运算符是( )。 A.<= B.= C.% D.&& 33.设整型变量i值为2,表达式(++i)+(++i)+(++i)的值是( )。 A.6 B.12 C.15 D.表达式出错 34.设整型变量i,j的值均为3,执行了j=i++;j++;++i;后,i,j的值分别是( )。 A.3,3 B.5,4 C.4,5 D.6,6 35.若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是( )。 A.1 B.2 C.2.0 D.2.5 36.sizeof (double)的结果值是( )。 A.8 B.4 C.2 D.出错 37.表达式1?(!1?3:2 ):(0?1:0)的值是( )。 A.3 B.2 C.1 D.0 38.设a=1,b=2,c=3,d=4,则表达式:a10 && a<15 D.!(a<=10) && !(a>=15) 40.执行语句int a=0; if(a=1) a+=10; 后,a的值是( )。 A.0 B.11 C.10 D.出错 41.下列表达式中符合C语言语法的赋值表达式是( )。 A.a=7+b+c=a+7 B.a=7+b++=a+7 C.a=(7+b,b++,a+7) D.a=7+b,c=a+7 42.设f是实型变量,下列表达式中不是逗号表达式的是( )。 A.f= 3.2, 1.0 B.f>0, f<10 C.f=2.0, f>0 D.f=(3.2, 1.0) 43.下列表达式中,不正确的表达式是( )。 A.a=1,b=1 B.y=int(x) C.a+b=5 D.i++ 44.int n; float f=13.8; 执行n=((int)f)%3 后, n的值是( )。 A.1 B.4 C.4.333333 D.4.6 45.设a,b和c都是int型变量,则执行语句a=3;b=4;c=5;后,下面的表达式中值为0的是( )。 A.'a'&&'b' B.a<=b C.a||b+c&&b-c D.!( (a10; A.不定值 B.10 C.1 D.0 47.设x,y,z,t均为int型变量,则执行以下语句后,t的值为( )。 x=y=z=1;t=++x‖++y&&++z; A.不定值 B.2 C.1 D.0 48.设a是char型变量,其字符值为'1',则把其值变成整数1的表达式是( )。 A.(int)a B.int(a) C.a= a-48 D.a / (int)a 49.设a是int型变量,其值为3,则把其值变成字符'3' 的表达式是( )。 A.(char)a B.a=3 C.a= a-48 D.a= a+48 50.设ch是char型变量,其值为'a',则下面表达式的值是( )。 ch=(ch>='A'&& ch<='Z')? (ch+32):ch A.'A' B.'a' C.'Z' D.'z' 二、填空题 1.在内存中存储"W"要占用个字节,存储'W'要占用个字节。 2.C语言中的逻辑值“真”是用表示的,逻辑值“假”是用表示的。 3.逻辑表达式值为“真”是用表示的,逻辑表达式值为“假”是用表示的。 4.符号常量的定义方法是。 5.说明变量时,若省略存储类型符,系统默认其为存储类别,该存储类别的类型符为。 6.无符号基本整型的数据类型符为,双精度实型数据类型符为,字符型数据类型符为。 7.定义变量的完整语句格式是。 8.设有下列运算符:<<、+、++、&&、<=,则其中优先级最高的是,优先级最低的是。 9.设二进制数A是00101101,若想通过异或运算A∧B使A的高4位取反,低4位不变,则二进制数B应是。 10.设a=3;b=2;c=1;,则a>b的值为。 11.若已知a=10;b=20;,则表达式!ac, 'y'!=c+2, -a-5*b<=d+1, b==(a=2)的值分别为、、、。 13.设x和y均为int型变量,且x=1;y=2;,则表达式1.0+x/y的值为。 14.若已知short int s=10; int i=25; float f=0.5;,则表达式f+s*i的值为。 15.设float x=2.5,y=4.7; int a=7;,表达式x+a%3*(int)(x+y)%2/4 的值为。 16.int x=17;y=5; 执行语句x+=--x%--y后x的值为。 17.int x=17;y=5; 执行语句x%=x--/--y后x的值为。 18.ch是字符变量,判断ch是英文字母的逻辑表达式为。 19.判断int类型变量n是否为两位整数的逻辑表达式为。 20.判断变量a、b的值均不为0的逻辑表达式为。 21.判断变量a、b是否绝对值相等而符号相反的逻辑表达式为。 22.变量a、b中必有且只有一个为0的逻辑表达式为。 23.m是值为两位数的整型变量,判断其个位数是奇数而十位数是偶数的逻辑表达式为。 24.执行语句a=5+(c=6);后,表达式、a、c的值依次为、、。 25.执行语句a=(b=10)%(c=6);后,表达式、a、b、c的值依次为、、、。 26.执行语句x=a=3,6*a;后,表达式、x、a的值依次为、、。 27.求解逗号表达式(a=15,a*4),a+5,表达式、a的值依次为、。 28.求变量a、b中最大值的条件表达式为。 29.执行语句a=13;b=25;c= -17;后,条件表达式((y=(a='a'&&s<='z')?s-32:s;后,字符变量s的值为。 31.int a=7;b=6;c=5;,表达式(a+b)>(c*c)&&b==c||c>b 的值为。 32.int a=3;b=5;c=7;,表达式a>c||c>b!=0&&c==b+a 的值为。 33.设整型变量x,y,z均为5: ①执行x- = y - z;后,x= , ②执行x %= y+z;后,x= , ③执行x=(y>z)? x+2:x-2,3,2后,x= 。 34.正确表达关系式(20>2 四、程序设计与分析题 1.输入一个整数,并输出该数的机内码,用十六进制数表示。 2.输入一个整数,将其低八位全置为1,高八位保留原样,并以十六进制输出该数。 3.输入一个字符串,删除字符串中的所有非汉字,并输出该字符串。 4.输入一个球半径值,求球的表面积和体积。 5.写出下面程序的运行结果。 #include main() {double a; a=123456789.123456789; printf("\n%f,%e",a,a); } 6.写出下面程序的运行结果。 #include void main() {int a=2,b=2,x,y; x=--a+2; y=b--+2; printf("x=%d y=%d a=%d b=%d\n",x,y,a,b); } 7.分析下面程序的运行结果。 #include void main() {int x=4,y; y=--x+--x+x++; printf("x=%d y=%d\n",x,y); } 8.分析下面程序的运行结果。 #include void main() {int a=2,b=3,c=4,d; float e; d=-a*b/c+1.5+'a'; e=-a*b/c+1.5+'a'; printf("\nd=%d ",d); printf("\ne=%f",e); } 9.分析下面程序的运行结果。#include void main() {int i=2,j; j=i+++i+++i++; printf("\ni=%d ",i); printf("\nj=%d",j); } 10.分析下面程序的运行结果。#include void main() {int i=2,j; j=(++i)+(++ i)+(++i); printf("\ni=%d",i); printf("\nj=%d",j); } 11.分析下面程序的运行结果。#include void main() {int i=0; printf("\n%d,%d",i,i++); } 12.分析下面程序的运行结果。#include void main() {int i=8; printf("%d\n",++i); printf("%d\n",--i); printf("%d\n",i++); printf("%d\n",i--); printf("%d\n",-i++); printf("%d\n",-i--); } 13.分析下面程序的运行结果。#include void main() {int a,b,c; scanf("%d%d%d",&a,&b,&c); a=b!=c; // 第5行 printf("a=%d,b=%d,c=%d\n",a,b,c); a==(b=c++*3); // 第7行 printf("a=%d,b=%d,c=%d\n",a,b,c); a=b>c>2; // 第9行 printf("a=%d,b=%d,c=%d\n",a,b,c); } 14.根据下列条件,写出C的逻辑表达式。 (1)条件“长度分别为a、b、c的三条线段能够组成三角形”。 (2)条件“|x|是一个两位数”。 (3)条件“y年是闰年”。 (4)条件“x、y 落在圆心在(0,0)半径为1的圆外、中心点在(0,0)边长为2的矩形内”。 15.分析下面程序的运行结果。 #include "stdio.h" void main() {int x,y,z,m; x=y=z=-1 ; m=++x&&++y|| ++z; printf("m=%d x=%d y=%d z=%d", m,x,y,z); } 16.分析下面程序的运行结果。 #include "stdio.h" void main() {int a,b,c,x=10,y=9; a=(--x==y++)?--x:--y; b=x++; c=y; printf("a=%d,b=%d,c=%d",a,b,c); } 17.分析下面程序的运行结果。 #include "stdio.h" void main() {int a=3,b=4,c; c=a>b?++a:++b; printf("a=%d,b=%d,c=%d\n",a,b,c); c=a-b?a-3?b:b-a:a; printf("a=%d,b=%d,c=%d\n",a,b,c); } 18.使用条件表达式。 (1)求三个变量a、b、c中的最大值。 (2)字符变量ch若为小写字母则改为大写字母,其余字符不变。 (3)输出整型变量x的绝对值。 19.分析以下程序的输出结果。 #include void main() {short x,y; x=5; y=x<<2; printf("%hd, %hd\n",x,y); x=-12; y=x<<2; printf("%hd, %hd\n",x,y); } 第3章基本控制结构 一、选择题 1.C程序的分支结构可以分为( )种。 A.1 B.2 C.3 D.无数 2.下列格式符中,哪一个可以用于以八进制形式输出整数( )。 A.%d B.%8d C.%o D.%ld 3.下列格式符中,哪一个可以用于以十六进制形式输出整数( )。 A.%16d B.%8d C.%o D.%x 4.a是int型变量,c是字符型变量,下列输入语句中哪一个是错误的( )。 A.scanf("%d,%c",&a,&c); B.scanf("%d%c",a,c); C.scanf("%d%c",&a,&c); D.scanf("d=%d,c=%c",&a,&c); 5.设字符变量ch='A',int型变量k=25,则执行语句printf("%3d,%d3\n",ch,k);后,屏幕输出( )。 A.65,253 B.65 253 C.65,25 D.A 25 6.设int a=1234,b=12,c=34;,则执行语句printf("|%3d%3d%-3d|\n", a,b,c); 后,屏幕的输出是( )。 A.|1234 1234 | B.|123 1234| C.|1234 12-34 | D.|234 1234| 7.使用scanf("x=%f,y=%f ",&x,&y); 要使x, y均为1.25, 正确的输入是( )。 A.1.25, 1.25 B.1.25 1.25 C.x=1.25, y=1.25 D.x=1.25 y=1.25 8.要使double x; long a; 获得数据,正确的输入语句是( )。 A.scanf("%d, %f ",&a,&x); B.scanf("%f, %1d",&x,&a); C.scanf("%ld, %1f ",&a,&x); D.scanf("%1d, %1f",a, x); 9.要使double x; long a; 的数据能正确的输出,输出语句应是( )。 A.printf("%d, %f",a, x); B.printf("%d, %1f",a, x); C.scanf("%1d, %1f",&a, &x); D.printf("%1d, %lf",a, x); 10.设int a=255,b=8;,则执行语句printf("%x,%o\n", a, b);后,屏幕输出的是( )。 A.255, 8 B.ff, 10 C.0xff, 010 D.输出格式错 11.设int i=010,j=10;,则执行语句printf("%d,%d\n",++i, j--);后,屏幕的输出的是( )。 A.11,10 B.9,10 C.010,9 D.10,9 12.设a、b为字符型变量,执行scanf("a=%c,b=%c",&a, &b);后,要使a为'A', b为'B',从键盘上的正确输入应是( )。 A.'A' 'B' B.'A','B' C.A=A,B=B D.a=A,b=B 13.假定所有变量均已正确定义,下列程序段运行后y的值是( )。 int a=0,y=10; if(a=0) y--;else if(a>0) y++; else y+=y; A.20 B.11 C.9 D.0 14.假定所有变量均已正确定义,下列程序段运行后x的值是( )。 int a=b=c=0;x=35; if(!a) x--; else if(b); if(c) x=3; else x=4; A.34 B.4 C.35 D.3 15.下列各语句序列中,能够且仅输出整型变量a、b中最大值的是( )。 A.if(a>b) printf("%d\n",a); printf("%d\n",b); B.printf("%d\n",b); if(a>b) printf("%d\n",a); C.if(a>b) printf("%d\n",a); else printf("%d\n",b); D.if(as)t=u; t=s; B.t=s; if(u>s)t=u; C.if(u>s)t=s; else t=u; D.t=u; if(u>s)t=s; 17.下列各语句中,能够输出整型变量a、b中最大值的是( )。 A.printf("%d\n",(a>b)?a,b); B.(a>b)? printf("%d",b):printf("%d",a); C.printf("%d",if(a>b)a else b); D.printf("%d\n",(a>b)?a:b); 18.下列语句应将小写字母转换为大写字母,其中正确的是( )。 A.if(ch>='a'&ch<='z') ch=ch-32; B.if(ch>='a'&&ch<='z')ch=ch+32; C.ch=(ch>='a'&&ch<='z')?ch-32:’’; D.ch=(ch>'a'&&ch<'z')?ch-32:ch; 19.int a=1, x=1; 循环语句while(a<10) x++; a++; 的循环执行了( )。 A.无限次 B.不确定次 C.10次 D.9次 20.下列语句中,错误的是( )。 A.while(x=y) 5; B.do x++ while(x==10); C.while(0) ; D.do 2;while(a==b); 21.循环语句for(x=0, y=0; (y! =123)| | (x<4); x++); 的循环体执行了( )。 A.无限次 B.不确定次 C.4次 D.3次 22.循环语句for(i=0, x=1; i=10 && x>0; i++); 的循环体执行了( )。 A.无限次 B.不确定次 C.10次 D.9次 23.i、j 已定义为int类型,则以下程序段中内循环体的执行次数是( )。for(i=5;i;i--) for(j=0;j<4;j++){…} A.20 B.24 C.25 D.30 24.C语言while语句中,用于条件的表达式是( )。 A.关系表达式 B.逻辑表达式 C.算术表达式 D.任意表达式 25.下面的while循环,执行次数是( )。 i=4; while(--i) printf("%d",i); A.3次 B.4次 C.0次 D.无数次 26.下列程序段执行后s的值为( )。 int i=1, s=0; while(i++) if(!(i%3)) break ; else s+=i ; A.2 B.3 C.6 D.以上均不是 27.下列程序的输出结果是( )。 #include void main( ) {int x=3, y=6, z=0; while(x++!=(y-=1)){ z++; if(y100 ) break;} 执行以上程序段后,s的值是( )。 A.1到101的和 B.1到100的和 C.1到99的和 D.以上均不是 29.假定i和j为int型变量,则执行以下语句后i的值为( )。 int i=1,j; switch (i++) {case 1: for (j=0;j<9;j++) if (i==1) break; case 2: for (j=1;j<10;j++) if (i==2) break; case 3: printf (“i=%d\n”,i ); } A.0 B.1 C.2 D.3 30.假定a和b为int型变量,则执行以下语句后b的值为( )。 a=1;b=10; do { b-=a;a++;} while (b--<0); A.9 B.8 C.-1 D.-3 31.设x和y均为int型变量,则执行下面的循环后,x,y的值分别为( )。 for (y=1,x=1;y<=50;y++) {if (x>=10 ) break; if (x%2==1) {x+=5;continue; } x-=3; } A.10,6 B.2,51 C.2,50 D.3,50 32.求整数1至10的和并存入变量s,下列语句中错误的是( )。 A.s=0;for(i=1;i<=10;i++) s+=i; B.s=0;i=1;for(;i<=10;i++) s=s+i; C.for(i=1,s=0;i<=10;s+=i,i=i+1) D.for(i=1;s=0;i<=10;i++) s=s+i; 33.若sizeof(int)为2,计算1至10的乘积,下列语句序列中正确的是( )。 A.int i,jc=1; for(i=2;i<=10;i++) jc*=i; B.int i;float jc; for(jc=1,i=2;i<=10;i++,jc*=i); C.int i; float jc=1; for(i=2;i<=10;jc*=i,i=i+1); D.float jc; for(jc=1;i=2;i<=10;i++) jc*=i; 34.下列语句中,哪一个可以输出26个大写英文字母( )。 A.for(a='A';a<='Z';printf("%c",++a)); B.for(a='A';a<'Z';a++)printf("%c",a); C.for(a='A';a<='Z';printf("%c",a++)); D.for(a='A';a<'Z';printf("%c",++a)); 35.在C语言中,下列说法中正确的是( )。 A.不能使用“do语句while(条件);”的循环 B.“do语句while(条件);”的循环必须使用“break”语句退出循环 C.“do语句while(条件);”的循环中,当条件为非0时将结束循环 D.“do语句while(条件);”的循环中,当条件为0时将结束循环 二、填空题 1.结构化程序设计规定的三种基本结构是结构、结构和结构。 2.若有定义语句int a=25,b=14,c=19; 以下语句的执行结果是。 if(a++<=25 && b--<=2 && c++) printf("***a=%d,b=%d,c=%d\n", a, b, c); else printf("***a=%d,b=%d,c=%d\n", a, b, c); 3.以下两条if语句可合并成一条if语句。 if(a<=b) x=1; else y=2; if(a>b) printf("***y=%d\n",y); else prinft("***x=%d\n",x); 4.下列程序的功能是输入一个正整数,判断是否能被3或7整除,若能整除,输出 “YES”,若不能整除,输出“NO”。请为程序填空。 void main() { int k; scanf ("%d", &k); if printf("YES\n"); else printf ("NO\n"); } 5.三种循环语句是价的。 6.当循环体中的switch语句内有break语句,则只跳出语句。同样,当switch语句中有循环语句,内有break语句,则只跳出语句。 7.循环体中的continue 语句是。 8.若int k=10, 循环语句while (k=0) k=k-1; 执行次。 9.若int k=2, 循环语句while (k!=0) { printf("%d",k); k--; } 执行次。 10.若int i=10,s=0;,执行语句while(s+=i--,--i);后s、i的值分别为。 11.程序段int s,i; for(i=1;i<=100;s+=i,i++); 能否计算1~100的和? ,原 因。 12.若int类型变量字长为2,程序段int i,jc=1; for(i=2;i<10;i++)jc*=i; 能否计算1~10的阶乘? ,原因是。 13.设i, j, k均为int型变量,则执行完下面的for循环后,k的值为。 for(i=0,j=10; i<=j; i++,j--) k=i+j; 14.下列程序的功能是输入一个正整数,判断是否是素数,若为素数输出1,否则输出0,请为程序填空。 void main( ) {int i, x, y=1; scanf("%d", &x); for(i=2; i<=x/2; i++) if { y=0; break; } printf("%d\n",y); } 15.输入若干个字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。 #include void main( ) {char ch; int s1=0,s2=0; while( !='\n') { if(ch>='0'&&ch<='9') s1++; if(ch>='a'&&ch<='z' || ch>='A'&&ch<='Z') s2++; } } 三、程序分析题 1.阅读程序,写出运行结果。 void main () {int a=10,b=4,c=3; if(a0; y--) if(y%3==0) { printf("%d", --y); continue;} } 5.阅读下列程序,写出程序运行的输出结果。void main ( ) {int i=5; do { switch (i%2) { case 4: i--; break; case 6: i--; continue; } i--; i--; printf("i=%d ", i); } while(i>0); } 6.阅读下列程序,写出程序运行的输出结果。#include void main( ) {int k=0; char c='A'; do { switch (c++) { case 'A': k++; break; case 'B': k--; case 'C': k+=2; break; case 'D': k=k%2; break; case 'E': k=k*10; break; default: k=k/3; } k++; } while(c<'G'); printf("k=%d\n", k); } 7.阅读下列程序,当输入为:ab*AB%cd#CD$ 时,写出程序运行的输出结果。void main ( ) {char c; while((c=getchar( ))!='$') {if('A'<=c && c<'Z') putchar(c); else if('a'<=c && c<='z') putchar(c-32); } } 8.阅读下列程序,输入数据:2,4 写出程序运行的输出结果。 #include void main( ) {int i,s=1,t=1,a,n; scanf("%d,%d",&a,&n); for(i=1;i void main( ) {int i,j,n; for(i=0;i<4;i++) {for(j=1;j<=i;j++) printf(" "); n=7-2*i; for(j=1;j<=n;j++) printf("%1d",n); printf("\n"); } } 第4章数组 一、选择题 1.在C语言中,在int num[5]={10,20,30,40,50}中,num[3]的值是( )。 A.20 B.50 C.40 D.10 2.若int a[10];,则下列( )可以正确引用a数组的元素。 A.a [10] B.a[3+1] C.a(5) D.a[11] 3.若int num[10];,要将10赋值到数组num的第4个元素,正确的方法是( )。 A.num[3]=10; B.Num[3]=10; C.num[4]=10; D.Num[4]=10; 4.在C语言中,若要定义一个数组用于保存5个参赛者,参加4个不同项目的比赛成绩,是应是( )。 A.score[6][5] B.score[4][3] C.score[5][4] D.score[5] 5.执行下面的C代码段后,屏幕输出结果是( ) 。 char str1[15] = "She is a girl"; char str2[15] = "He is a boy"; strcpy(str1,str2); printf("%s\n",str1); A.She is a girl B.He is a boy C.She is a girl He is a boy D.He is a boy She is a girl 6.以下对二维数组a进行初始化,不正确的是( )。 A.int a[] [3]={1,2,3,4,5,6}; B.int a[] [3]={{1,2,3},{4,5,6}}; C.int a[2] [3]={{1,2,3},{4,5,6}}; D.int a[] []={{1,2,3},{4,5,6}}; 7.下列描述中不正确的是( )。 A.字符型数组中可以存放字符串 B.可以对字符型数组进行整体输入、输出 C.可以对整型数组进行整体输入、输出 D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 8.以下程序的输出结果是( )。 #include #include void main( ) {char b[30]; strcpy (&b[0],"AB"); strcpy (&b[1],"CDE"); strcpy (&b[2],"FGH"); printf ("%s\n",b); } A.CFGH B.ACFGH C.ABCDEFGH D.FGH 9.假定int类型变量占用2个字节,若有定义:int x[8]={1,2,3};,则数组x在内存中所占字节数是( ) 。 A.3 B.6 C.10 D.16 10.若char x[ ]="abcd"; char y[ ]={'a','b','c','d'}; 则正确的叙述为( )。 A.数组x和数组y长度相等 B.数组x的长度小于数组y的长度 C.数组x的长度大于数组y的长度 D.以上都不对 11.以下程序执行后的输出结果是( )。 #include void main() {int i,test ,p[17],head; for(i=0;i<16;i++) p[i]=i+1; p[16]=0; test=0; while(test!=p[test]) {for(i=1;i<3;i++) {head=test; test=p[test]; } p[head]=p[test]; test=p[head]; } p rintf("\n%5d",test); } A.1,2,3 B.2,3,4 C.10 D.4 12.有以下程序 #include void main() { int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j; for(i=0;i<4;i++) { for(j=0;j<=i;j++) printf("%4c",' '); for(j=_____;j<4;j++) printf("%4d",num[i][j]); printf("\n"); } } 若要按以下形式输出数组右上半三角 1 2 3 4 6 7 8 11 12 16 则在程序下划线处应填入的是( )。 A.i-1 B.i C.i+1 D.4-i 13.若有定义语句:int b;char c[10];,则下列正确的输入语句是( )。 A.scanf("%d%s",&b,&c); B.scanf("%d%s",&b,c); C.scanf("%d%s",b,c); D.scanf("%d%s",b,&c); 14.若定义:int a[100];,则下列数组元素的引用中,非法的是( )。 A.a[0] B.a[1] C.a[99] D.a[100] 15.有以下程序 main() { char a[7]="a0\0a0\0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); } 程序运行后的输出结果是( )。 A.2 2 B.7 6 C.7 2 D.6 2 16.有以下程序 #define N 20 fun(int a[],int n,int m) { int i,j; for(i=m;i>=n;i--) a[i+1]=a[i]; } main() { int i,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]); } 程序运行后的输出结果是( )。 A.10234 B.12344 C.12334 D.12234 17.有以下程序 main() { char str[][10]={"abcd","rste","rbsa","uxhk","xvy","rlby","ccvn"}; int n=0,i; for(i=0;i<7;i++) if(str[i][0]==′r′)n++; printf("%d\n",n); } 程序执行后的输出结果是( )。 A.0 B.1 C.2 D.3 18.有以下程序 #include void main() { i nt p[8]={ 1, 2, 3, 4, 5, 6, 7, 8},i=0,j=1; w hile(i++<=7) if(p[i]%2) j*=p[i]; p rintf("%d\n",j); } 程序运行后的输出结果是( )。 A.42 B.40320 C.105 D.384 19.有以下程序 main() {int i,s=0,t[]={1,2,3,4,5,6,7,8,9}; for(i=0;i<9;i+=2) s+=t[i]; printf("%d\n",s); } 程序执行后的输出结果是( )。 A.45 B.20 C.25 D.36 20.以下程序运行后的输出结果是( )。 #include "string.h" 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]); printf("\n"); } A.abcbcc B.2 C.3 D.无数 二、填空题 1.不管数组是几维的,程序内存都是按维存放的。 2.用来引用特定数组元素的数值称为。 3.数组长度和数组的最大下标之间相差。 4.对一个二维数组进行初始化时,可以省略第维的长度。 5.以下程序运行后的结果为。 #include void 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\n",s); } 6.下面程序的作用是把3×3的矩阵转置,请补足程序。 main() {int a[3][3]={{1,3,5},{2,4,6},{3,6,9}}; int i,j,t; for(i=0;i<3;i++) {for(j=0; (1) ;j++) {t=a[i][j]; (2) ; a[j][i]=t; } } for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%3d",a[i][j]); printf("\n"); } } 7.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串abc123edf456gh,执行程序后输出123456,请填空。 #include #include void main( ) { char s[80],d[80]; int i,j; gets(s); for(i=j=0;s[i]!= '\0';i++) if( (1) ) {d[j]=s[i];j++;} d[j]= '\0'; puts(d); } 8.以下程序运行后输出的结果是。 { int i,a[]={1,1,1,1,1}; for(i=1;i<=4;i++) {a[i]=a[i-1]*2+1; printf("%d",a[i]); } } 第5章函数 一、选择题 1.在一个C程序中( )。 A.main函数必须出现在所有函数之前 B.main函数可以在任何地方出现 C.main函数必须出现在所有函数之后 D.main函数必须出现在固定位置 2.以下函数值的类型是( )。 fun ( float x ) { float y; y= 3*x-4; return y; } A.int B.不确定 C.void D.float 3.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。 A.地址传递 B.单向值传递 C.由实参传给形参,再由形参传回实参 D.传递方式由用户指定 4.以下对函数知识的描述不正确的是( )。 A.C语言模块化设计的要求是通过函数实现 B.主调函数调用被调函数之前,一定要做函数声明 C.main是主函数,在一个C程序中只能有一个并且必须有这个叫做main的函数 D.函数不能嵌套定义,但可以嵌套调用 5.以下叙述中正确的是( )。 A.构成C程序的基本单位是函数 B.可以在一个函数中定义另一个函数 C.任何函数的函数体都不能为空 D.所有被调用的函数一定要在调用之前进行定义 6.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。 A.void B.int C.float D.double 7.有以下程序 int f(int n) if (n==1) return 1; else return f(n-1)+1; } main() { int i,j=0; for(i=1;i<3;i++) j+=f(i); printf("%d\n",j); } 程序运行后的输出结果是( )。 A.4 B.1 C.3 D.2 8.有以下程序 int f(int a) { return a%2; } main() { int s[8]={1,3,5,2,4,6},i,d=0; for (i=0;f(s[i]);i++) d+=s[i]; printf("%d\n",d); } 程序运行后的输出结果是( )。 A.9 B.11 C.19 D.21 9.在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则( )。 A.称为函数的直接递归调用 B.称为函数的间接递归调用 C.称为函数的循环调用 D.C语言中不允许这样的递归调用 10.以下叙述中正确的是( )。 A.形参可以使用的存储类型说明符与局部变量完全相同 B.全局变量说明为static存储类型,其作用域将被扩大 C.任何存储类型的变量在未赋初值时,其值都是不确定的 D.局部变量说明为static存储类型,其生存期将得到延长 11.以下叙述中不正确的是( )。 A.全局变量的作用域一定比局部变量的作用域范围大 B.静态(static)类别变量的生存期贯穿于整个程序的运行期间 C.函数的形参都属于局部变量 D.未在定义语句中赋初值的static变量初值是0值 12.以下程序运行后,输出结果是( )。 i nt d=1; void fun(int p) { int d=5;d+=p++; printf("%d",d); } void main() { int a=3; fun(a); d+=a++; printf("%d\n",d); } A.84 B.99 C.95 D.44 13.程序中定义了以下函数: float add(float a,float b) { int c; c=a+b; return c; } 若主调函数的定义在add函数的前面,则在主调函数前应对add函数做声明,下面错误的声明格式是( )。 A.float add(float a,b) B.float add(float a,float b) C.float add(float, float) D.float add(float x,float y) 14.有以下程序 float fun(int x,int y) { return(x+y); } main() { int a=2,b=5,c=8; printf("%f\n",fun( (int)fun(a+c,b),a-c)); } 程序运行后的输出结果是( )。 A.6.000000 B.9.000000 C.7.000000 D.8.000000 15.以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。程序运行后的输出结果是( )。 void reverse(int a[],int n) { int i,t; for(i=0;i<=n;i++){t=a[i];a[i]=a[n-i];a[n-i]=t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,9); for(i=6;i<10;i++) s+=b[i]; printf("%d\n",s); } A.34 B.11 C.10 D.33 16.有以下函数 int fun(char *a,char *b) { while((*a!='\0')&&(*b!='\0')&&(*a==*b)) { a++;b++; } return(*a-*b); } 该函数的功能是( )。 A.计算a和b所指字符串的长度之差 B.将b所指字符串连接到a所指字符串中 C.将b所指字符串连接到a所指字符串后面 D.比较a和b所指字符串的大小 17.有以下函数定义: void fun(int n,double x) {……} 若以下选项中的变量都已经正确定义并赋值,则对函数fun的正确调用语句是( )。 A.fun(int y,double m); B.k=fun(10,12.5); C.fun(x,n); D.void fun(n,x); 18.以下函数调用后,返回结果是( )。 void fun (int b) { int a=0; a+=b; } A.无返回值 B.1 C.0 D.有语法错 19.有如下函数调用语句:fuc(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是( ) A.3 B.4 C.5 D.有语法错 20.返回值为void的函数,其含义是( )。 A.调用函数之后,被调用的函数没有返回值 B.调用函数之后,被调用的函数不返回 C.调用函数之后,被调用的函数的返回值为任意的类型 D.以上三种说法都是错误的 二、填空题 1.简述传值:。 2.形参其实就是变量,实参是表达式,可以是、、、,。形参和实参结合,必须满足三个条件:、和。 3.空函数是指。 4.函数是由系统调用的。 5.定义函数时函数名后面括号中的参数为,函数调用时函数名后面括号内的参数是。 6.函数可以嵌套调用,但是不能嵌套。 7.程序的执行总是从函数开始,最后由函数中结束。 8.一个C程序由个源程序文件组成。 9.若没有定义函数的类型,该函数的类型是,如果在函数中没有使用return 语句,则返回的是值。 10.如果函数值的类型为,表示函数没有返回值。 第6章编译预处理 一、选择题 1.下列程序执行后的输出结果是( )。 #define MA(x) x * ( x - 1 ) void main(void) {int a = 1 , b = 2; printf("%d \n", MA( 1 + a + b )); } A.6 B.8 C.10 D.12 2.以下程序中,for循环体执行的次数是( )。 #define N 2 #define M 1+ N #define K M+1*M/2 void main(void) {int i; for( i = 1;i < K; i++) {……} …… } A.4 B.5 C.3 D.6 3.下列程序执行后的输出结果是( )。 #define F(x) x*x main() {int i; i=F(4+4)/F(2+2); printf("%d \n",i); } A.4 B.16 C.28 D.24 4.宏展开是在( )阶段完成的。 A.程序运行时 B.编辑程序时 C.编译阶段 D.编译之前 5.以下程序运行的结果是( )。 main() {#ifdef YES printf("Hello C!"); #else printf("Bye bye!"); #endif } A.编译出错 B.Hello C C.Bye bye! D.Hello C Bye bye! 6.以下文件包含命令中错误的是( )。 A.#include B.#include < math.h > C.#include "file1.c" D.#include 'math.h' 7.以下程序的输出结果是( )。 #define M(x,y,z) x * y + z void main(void) {int a=1,b=2, c=3; printf("%d\n", M(a+b,b+c, c+a)); } A.19 B.12 C.18 D.15 8.以下叙述中正确的是( )。 A.预处理命令行必须位于源文件的开头 B.在源文件的一行上可以有多条预处理命令 C.宏名必须用大写字母表示 D.宏替换不占用程序的运行时间 9.以下程序输出结果为( )。 #define S (x) x+x void main(void) {int a; a=S(2*2); printf("%d",a); } A.2 B.16 C.8 D.报错 10.以下说法错误的是( )。 A.预处理命令是在编译之前完成的工作 B.文件包含命令可以用来处理多文件程序 C.#if后边必须是常量表达式 D.#define STU NO 10,是定义一个宏名为STU NO,宏体为10的宏定义 二、填空题 1.在预处理宏定义时,不做检查,只有在编译已被宏展开后的源程序时才报错。 2.宏名的作用域是从宏定义开始到本文件结束或者到命令的位置结束。 3.宏展开时,只是将宏名用做简单替换,而并不关心语法。 4.预处理命令都是以符号做为命令的开头。 5. 一般情况下,源程序中所有的行都参加编译。如果希望对其中一部分内容只在满足一定条件时才进行编译,这就是。 第7章指针 一、选择题 1.指针是一种( )。 A.标识符 B.变量 C.内存地址 D.运算符 2.显示指针变量p中的值,可以使用以下哪个命令( )。 A.printf("%d",p); B.printf("%d",*p); C.printf("%p",*p); D.printf("%p",p); 3.为指针变量p输入整型变量i的地址,以下正确的是( )。 A.scanf("%p",&p); B.*p=i; C.p=&i; D.*p=&i; 4.若有定义int *p,*q,i;下面操作不正确的是( )。 A.p=*q+i; B.*p=--i; C.i=p-q; D.p=--q+i; 5.若有定义int a[]={0,1,2,3,4},i=2,*p=a;以下能正确表示数组元素的是( )。 A.p+i B.p[5] C.a+i D.*(a+i) 6.以下不能进行++和--运算的是( )。 A.指针 B.数组名 C.int D.long 7.若有定义int *p;float *q;以下强制类型转换不正确的是( )。 A.p=(int *)q; B.q=(float *)p; C.p=(int)*q; D.*q=(float)*p; 8.若有定义int a[]={1,2,0};那么a[a[a[0]]]的值是( )。 A.0 B.1 C.2 D.3 9.若有说明 #define M 20 int n=10; 下面定义不正确的是( )。 A.float s[M]; B.float s[M*10]; C.float s[M+n]; D.float s[M+10]; 10.若有定义int a[3][2]={1,2,3,4,5,6};下面能正确访问元素4的是( )。 A.a[2][2] B.*(a+3) C.*(*a+3) D.*(a[2]+1) 11.若有定义char s[10],*p=s;那么下面表达式正确是( )。 A.s=p+s; B.p=s+10; C.s[2]=p[4]; D.p=s[0]; 12.若有定义int (*p)[m];则p是( )。 A.m个元素的整型数组 B.指向m个元素的整型数组的指针 C.m个整型指针的数组 D.指向m个整型指针数组的指针 13.定义整型指针变量p和q,下面正确的命令是( )。 A.int *p,q=NULL; B.int *p,q=NULL, NULL; C.int *p, *q=NULL, NULL; D.int *p, *q=NULL; 14.若有定义int *p,i,j;下面操作不正确的是( )。 A.p=&i+j; B.*p=i+j; C.p=&i; D.p=&i++; 15.下面定义不正确的是( )。 A.float s[2][]={1}; B.float s[][2]={1}; C.float s[2][2]={1}; D.float s[2][2]={{1},{1}}; 16.若有定义int a[]={1,2,3},b[3]={1,2,3};则表达式a==b的结果是( )。 A.不能比较 B.结果为真 C.结果为假 D.结果不确定 17.若有定义int a[][3]={1,2,3,4,5,6};下面能正确访问元素5的是( )。 A.a[4] B.a[0]+4 C.**a+4 D.*(&a[0][0]+4) 18.若有定义int x[5][6],*p=x;下面不表示数组元素x[0][2]的是( )。 A.p[0][2] B.*x+2 C.*(*x+2) D.x[0][2] 二、填空题 1.数组是类型相同的数据序列,通过来指定要访问的元素。 2.二级指针是存放一级指针的。 3.空指针名称是,表示没有指针的一种状态。 4.函数名和名可以作为指针常量。 5.数组下标可以是非负的。 6.二维数组作为函数参数,维必须给出大小。 7.如果子程序要修改主程序的变量,可以使用类型的参数。 8.初始化指针变量的工作可有可无,若无则变量值是。 9.不同类型的指针变量的赋值必须。 10.二维数组有两个,分别用一对括起。 11.函数指针是函数的,通过它可以访问该函数。 12.void是空类型,表示没有数据的类型,void *表示。 13.数组指针是指。 14.函数的返回值和可以是指针。 15.数组作为函数返回类型,实际上不是返回数组值,而是返回。 16.数组的下标必须在定义的空间之内,若超界C语言编译器。 17.二维数组名是的指针常量。 18.整型与实型类型是兼容的,整型和实型指针类型。 三、程序分析题 1.阅读程序,写出运行结果。 #include main() { static int arr[]={4,5,6}; int j; for(j=0;j<3;j++) { printf("%d",*(arr+j)); } } 2.阅读程序,写出运行结果。 #include main() { static int arr[]={4,5,6}; int j, *ptr=arr; for(j=0;j<3;j++) { printf("%d",*ptr++); } } 四、程序填空题 1.函数fun(int a[],int n,inty)的功能是替换数组a中值为y的元素,n为数组长度。例如,假设数组a中的元素为:1 2 4 1 1 3 1 5,y为8,则替换后,数组a中的元素为8 2 4 8 8 3 8 5。请填空,完成题目要求。 fun(int a[],int n,int y) { int i; for(i=0;i (1) ;i++) if(a[i]==y) (2) ; } 2.函数fun()的功能是把字符数组a中的字符串按反序存放,例如,字符串“abcd”的输出结果为“dcba”。 #include void fun(char a[]) { char t; int i,j; for(i=0,j=strlen(a)-1;i void jh(int a[],int n) { int t,max,min,end,q; end=n; max=min=0; for(q=1;qa[max]) max=q; if(a[q] void fun(int b[ ],int n) { int x,i; /********found*******/ x=b[1]; for(i=0;itemp 4.共用体是由( )的成员组成。 A.必须有相同类型 B.必须包含有指针成员 C.允许在内存占有不同大小的空间 D.必须在内存中占有相同大小的空间 5.定义结构体类型时,下列叙述正确的是( )。 A.系统会按成员大小分配每个空间 B.系统会按最大成员大小分配空间 C.系统不会分配空间 D.以上说法均不正确 6.若有定义 union {long i; char m[3]; } r; 请问执行r.i=0x12345678;后r.m[0]= ( )。 A.0x12 B.0x34 C.0x56 D.0x78 7.若有定义 struct s1 {int x; }; struct s2 {int x; float y; struct s1 *p2; } r,*p1=&r; 下面正确的是( )。 A.*p1.p2.x=3 B.p1.p2.x=3 C.p1->(*p2).x D.p1->x=3; 8.已知结构体类型变量x的初始化值为{"20",30,40,35.5},合适的结构体定义是( )。 A.struct s {int no; int x,y,z;}; B.struct s {char no[2]; int x,y,z;}; C.struct s {int no; float x,y,z;}; D.struct s {char no[2]; float x,y,z;}; 9.若程序中有定义 struct abc {int x; char y; }; abc s1,s2; 则会发生的情况是( )。 A.编译时会有错误 B.链接时会有错误 C.运行时会有错误 D.程序没有错误 10.关于结构体类型的成员类型,下列说法正确的是( )。 A.成员类型必须是基本数据类型 B.每个成员类型必须为同一种 C.成员不可以定义为自身类型的指针 D.以上说法均不正确 11.若有定义 union s {int w,x,y,z; char c[6]; }; 请问执行sizeof(union s)=( )? A.2 B.6 C.8 D.14 12.若有定义 typedef struct { int x; } A[10]; A a; 下面正确的是( )。 A.a.x=30; B.a[0].x=30; C.a.A[0].x=30; D.A[0].x=20; 13.若有定义 struct s { int x; char y[6]; } s1; 请问正确的赋值是( )。 A.s1.y="abc"; B.s1->y="abc"; C.strcpy(s1.y, "abc"); D.s1.strcpy(y, "abc"); 14.以下枚举类型名的定义中正确的是( )。 A.emum a={one,two,three}; B.enum a={one=1,two,three}; C.enum a={one=1;two;three}; D.enum a={one;two;three;}; 15.若有结构体变量定义如下: struct student {int num; char name[20]; char sex; }; struct student stu; struct student *p; p=&stu; 则下面关于结构体成员引用不正确的是( )。 A.stu.num B.p->num C.(*p).num D.*p.num 二、填空题 1.结构体类型是一种自定义的组合类型,其每个元素称为。 2.定义结构体类型的变量必须先,并且在类型名前加保留字。 3.使用结构体中成员变量必须先写上结构体变量名,中间以分隔。 4.结构体指针是结构体变量的内存地址,保存该指针的变量称为。 5.链表是以结构体类型表示链中元素,以表示链的一种线性数据结构。 6.动态链表是通过动态分配函数分配堆空间建立的,使用完后需要。 7.共用体类型以union保留字开始,其每个成员分配的空间为方式。 8.位域类型以开始,其每个成员定义后要指出分配的位数。 9.结构体类型的定义需要以保留字开始,其保留字为。 10.定义结构体类型的成员允许嵌套,但不允许递归定义,即。 11.结构体变量可以作为函数的参数和返回值类型,以方式传递参数。 12.结构体数组是以为基类型的数组,下标运算可以访问每个结构体元素。 13.链表的第一元由称为链头的指针指向,最后元则指向。 14.链表与数组相比,比较适合的操作包括和。 15.枚举类型以enum开始,它是一种简单类型,其变量取值于后面的列表。 16.枚举类型可以像整数一样比较大小和加减运算,其第一个列表元素的值默认 为。 三、程序分析题 1.以下程序运行后,y和z的值是多少。 #include union {unsigned int x; struct {unsigned char y; unsigned char z; } a2; } a1; main() {a1.x=0x5678; printf("a1.a2.y=0x%x a1.a2.z=0x%x",a1.a2.y,a1.a2.z); } 四、程序改错题 1.下列定义无法正确使用,请指出定义中的错误并改正。 struct husband {char name[10]; int age; struct wife spouse; } x; struct wife {char name[10]; int age; struct husband spouse; } y; 第9章文件 一、选择题 1.下列有关C语言文件的叙述,正确的是( )。 A.文件由ASCII码字符系列组成,C语言只能读/写文本文件 B.文件由二进制数据序列组成,C语言只能读/写二进制文件 C.文件由记录序列组成,可按数据的存储形式分为二进制文件和文本文件 D.文件由数据流形式组成,按数据的存储形式分为二进制文件和文本文件 2.下列有关C语言中文件的叙述,错误的是( )。 A.C语言中的文本文件以ASCII码形式存储数据 B.C语言中对二进制位的访问速度比文本文件快 C.C语言中随机读/写方式不适用于文本文件 D.C语言中随机读/写方式不适用于二进制文件 3.C语言中 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 输入文件是指( )。 A.键盘 B.显示器 C.打印机 D.硬盘 4.C语言中用于关闭文件的库函数是( )。 A.fopen() B.fclose() C.fseek() D.rewind() 5.假设fp为文件指针并已指向了某个文件,在没有遇到文件结束标志时,函数feof(fp)的返回值为( )。 A.0 B.1 C.-1 D.一个非0的值 6.在函数fopen()中使用“a+”方式打开了一个已经存在的文件时,以下叙述正确的是( )。 A.文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做追加和读操作 B.文件打开时,原有文件内容不被删除,位置指针移动到文件首,可做重写和读操作 C.文件打开时,原有文件内容被删除,只可做写操作 D.以上三种说法都不正确 7.以下程序的运行结果是( )。 #include void main() {int i,n; FILE *fp; if ((fp=fopen("temp","w+"))==NULL) {printf("Can not create file.\n"); return; } for (i=1;i<=10;i++) fprintf(fp, "%3d",i); for (i=0;i<5;i++) {fseek(fp,i*6L,SEEK_SET); fscanf(fp, "%d",&n); printf("%3d",n); } printf("\n"); fclose(fp); } A.1 3 5 7 9 B.2 4 6 8 10 C.3 5 7 9 11 D.1 2 3 4 5 8.下面各选项中能正确实现文件打开操作的是( )。 A.fp=fopen(c:mydir\info.dat, "r"); B.fp=fopen(c:\mydir\info.dat, "r"); C.fp=fopen("c:\mydir\info.dat", "r"); D.fp=fopen("c:\\mydir\\info.dat", "r"); 9.在C语言中,把文件缓冲区中的数据写入文件的过程称为( )。 A.输入 B.输出 C.修改 D.删除 10.当顺利地执行了文件的关闭命令之后,函数fclose()的返回值是( )。 A.-1 B.1 C.0 D.非零 11.有以下程序: #include main() {FILE *fp; int i,k=4,n=5; fp=fopen("d1.dat","w"); for (i=1;i<4;i++) fprintf(fp, "%d",i); fclose(fp); fp=fopen("d1.dat","r"); fscanf(fp, "%d%d",&k,&n); printf("%d %d\n",k,n); fclose(fp); } 程序执行后的输出结果是( )。 A.1 2 B.123 5 C.1 23 D.4 5 12.下面4个结论中正确的是( )。 A.在C语言中如果要对文件操作,必须先打开文件 B.在C语言中如果要对文件操作,必须先关闭文件 C.在C语言中对文件的操作实际上没有统一的规定 D.在C语言中如果要对文件操作,即使不打开文件也可以对其进行读/写 13.在C语言中系统定义的标准输出文件是指( )。 A.文本文件 B.二进制文件 C.键盘 D.显示器 14.若将文件fp的读/写位置指针移动到距离文件头200个字节的位置,正确的操作是( )。 A.fseek(fp,200,0) B.fseek(fp,200,1) C.fseek(fp,200,2) D.ftell(200) 15.已知stu是一个数组,那么语句fread(&stu,3,6,fp);的功能是( )。 A.从fp所指的数据文件中读取6次3个字节的数据,然后存入数组stu中 B.从fp所指的数据文件中读取3次6个字节的数据,然后存入数组stu中 C.从数组stu中读取3次6个字节的数据,然后保存到fp所指的文件中 D.从数组stu中读取6次3个字节的数据,然后保存到fp所指的文件中 16.下列这段程序的功能是( )。 #include main() {FILE *fout, *fin; char c, infile[10], outfile[10]; printf("Enter the input file name:\n"); scanf("%s",infile); printf("Enter the output file name:\n"); scanf("%s",outfile); if ((fin=fopen(infile, "r"))==NULL) {printf("can not open the source file.\n"); } if ((fout=fopen(outfile, "w"))==NULL) {printf("can not open the destination.\n"); } while((c=fgetc(fin))!=EOF) fputc(c,fout); fclose(fin); fclose(fout); } A.分别将两个磁盘文件首尾合并,形成一个新的文件 B.分别显示两个文本文件的内容 C.将一个已知的源文件重命名为另一个新文件 D.把一个文件复制为另一个文件 二、填空题 1.C语言中的文件被看作是一个个的字符(或字节)按照一定的顺序组成的,因此文件又被称为。 2.C语言中文件的分类有不同的标准。从用户的角度来看,文件可以分为 和;从文件的读/写方式来看,文件可以分为和;从文件的编码方式来看,文件可以分为和。 3.在MS-DOS方式下,用来显示一个被指定的文本文件的内容使用命令,用来显示一个或多个被指定文件的目录清单情况用命令。 4.在C语言定义的多个标准设备文件中,代表标准输入文件,代表标准输出文件,代表错误输出文件,代表标准辅助设备,代表标准打印机。 5.专门负责把文件的读/写位置指针重新指回文件首的函数是,能够把文件的读/写指针调整到文件中的任意位置的函数是,能够获取当前文件的读/写位置字节数的函数是。 6.C语言系统为每个正在使用的文件在内存中开辟了一个。 7.C语言对文件操作的一般顺序是、和。 8.在Turbo C中,能在程序中调用一条MS-DOS的内部命令,或者是调用一个可执行文件的库函数是,实现文件删除操作的库函数是,对文件进行重命名的函数是。 三、程序分析题 1.C盘下有一个非空的文本文件“test.txt”,其内容如下:“Hello,everyone!”请问下述程序执行后的输出结果。 #include main() {FILE *fp; char str[40]; fp=fopen("C:\\test.txt","r"); fgets(str,5,fp); printf("%s\n",str); fclose(fp); } 2.已知三个不同的文本文件file1、file2和file3,它们各自的内容如下: 文件名文件内容 file1 AAA# file2 BBB# file3 CCC# 假设下面这段源程序对应的文件名为“myprog.c”,经编译和连接后生成的可执行文件名为“myprog.exe”。当在MS-DOS方式下执行下述命令: myprog file1 file2 file3 则写出屏幕显示的结果。 #include void f(FILE *fp0) {char c; while((c=fgetc(fp0))!='#') putchar(c+32); } main(int argc, char *argv[]) {FILE *fp; int i=1; while (--argc>0) {fp=fopen(argv[i++],"r"); f(fp); fclose(fp); } } 3.有如下程序,写出执行后的输出结果。 #include main() {FILE *fp; int i,a[4]={10,20,30,40},b; fp=fopen("abc.dat","wb"); for (i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp); fclose(fp); fp=fopen("abc.dat","rb"); fseek(fp,-2L*sizeof(int),SEEK_END); /*(使文件位置指针从文件尾向前移动2*sizeof(int)个字节)*/ fread(&b,sizeof(int),1,fp); printf("%d\n",b); fclose(fp); } 四、程序填空题 1.从键盘上输入某个文本文件的文件名,要求把该文件的内容显示在屏幕上,请将该程序补充完整。 #include main() {FILE *fp; char c,filename[20]; printf("Input file name: "); scanf("%s",filename); if ((fp=fopen(filename, "r"))==NULL) {printf("Can not open the file %s\n",filename); } while (!feof(fp)) { (1) ; putchar(c); } } 2.下面程序的功能是从键盘上输入一个字符串,把该字符串中的小写字母转化为大写字母,然后输出到文件“eng.txt”文件中,请根据题目要求将程序补充完整。 #include main() {FILE *fp; char str[100]; int i=0; if ((fp=fopen("eng.txt", (1) ))==NULL) {printf("Can not open the file.\n"); } printf("Please input a string.\n"); gets(str); while(str[i]) {if (str[i]>= 'a'&& str[i]<= 'z') (2) ; fputc(str[i],fp); i++; } fclose(fp); fp=fopen("eng.txt", (3) ); fgets(str, (4) ,fp); printf("%s\n",str); fclose(fp); } 3.以下程序用来统计C盘根目录下文本文件“file.txt”中字符的个数,请将程序补充完整。 #include main() {FILE *fp; int count=0; if ((fp=fopen("C:\\file.txt","r"))==NULL) {printf("Can not open the file.\n"); } while(fgetc(fp)!=EOF) (1) ; fclose(fp); printf("num=%d\n",count); } 4.下面的程序将磁盘中一个文件复制到另一个文件中,两个文件名在命令行中给出(假设文件名无误),请将程序补充完整。 #include main(int argc, char * argv[]) {FILE *fp1,*fp2; if (argc< (1) ) {printf("argument error.\n"); } fp1=fopen(argv[1], "r"); fp2=fopen(argv[2], "w"); while( (2) ) fputc(fgetc(fp1),fp2); fclose(fp2); fclose(fp1); } 41
本文档为【《C语言程序设计教程》补充习题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_014457
暂无简介~
格式:doc
大小:187KB
软件:Word
页数:124
分类:工学
上传时间:2019-05-29
浏览量:65