C语言各章习题集

更新时间:2024-04-18 01:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言习题集

第 1 章

C语言概述

一. 填空题

1. C程序是由 构成的,一个C程序中至少包含 。 是C程序的基本单位。 2. 任何C程序必须有且只有一个_______函数。

3. C程序注释是由 和 所界定的文字信息组成的。

二. 判断题

1. 2. 3. 4. 5.

一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。 main函数必须写在一个C程序的最前面。 一个C程序可以包含若干的函数。

可用Visual C++ 6.0编译、连接、运行、调试C程序。

C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。但是可以增加程序的可读性。

6. C程序的注释只能是一行。

7. C程序的注释不能是中文文字信息。

三. 简答题

1. 2. 3. 4.

简述C语言的特点。 写出C程序的基本结构。

简述使用Visual C++ 6.0编译和运行C程序的步骤。 简述C语言程序设计课程的学习方法。

四. 编程题

1. 编写C程序,输出如下信息:

**************************************************************** The only way to learn a new programming language is by writing programs in it. **************************************************************** 2. 编写C程序,输出如下信息:

C has proven to be a pleasant, expressive and versatile language for a wide variety of programs. It is easy to learn, and it wears well as on's experience with it grows. 3. 编写C程序,输入4个整数,输出其中最大者。

第 2 章

一. 填空题

程序的灵魂——算法

1. + = 程序。 是程序的灵魂。 2. 一个计算机程序应包括 和 的内容。

3. 算法是 。计算机算法的特性

是 、 、 、 、 。

4. 计算机算法可以用 , 和 等方法表示。 5. 三种基本程序结构是 , 和 。

6. 结构化程序设计的主要方法是 。

二. 简答题

1. 分别用ANSI流程图、N-S图、自然语言描述求解下面问题的步骤。 (1) 依次输入10个数,要求将其中最大的数打印出来。

(2) 有3个数a,b,c,要求按由大到小的顺序把它们打印出来。 (3) 求两个正整数m和n的最大公约数和最小公倍数。 (4) 有一函数:

输入x,输出y值。

(5) 求两个正整数m和n的最大公约数和最小公倍数。

2. 分别用ANSI流程图和N-S流程图表示求解下面问题的算法。 (1) 依次输入10个数,要求将其中最大的数打印出来。

(2) 有3个数a,b,c,要求按由大到小的顺序把它们打印出来。 (3) 判断一个数n能否同时被3和5整除。

?x(x?1)?y??2x?11(1?x?10)?3x?11(x?10)?

23581321,,,,,,?(4)有一个分数数列: 1235813求出这个数列前20项之和。

第 3 章

一. 选择题

数据类型、运算符与表达式

1. C语言的关键字是( )。

A. NULL B. file C. include D. typedef 2. 正确的自定义标识符是( )。

A. if B. a*b C. iF D. 8pq 3. 错误的转义字符是 ( )

A.'\\091' B. '\\\\' C. '\\0' D. '\\'' 4. 在C语言中,错误的常数是 ( )

A.1E+0.0 B.5 C.0xaf D.0L 5. 在C语言中,要求参加运算的数必须时整数的运算符是( )。

A./ B.* C. % D. = 6. 在C语言中,数字029是一个( )。

A.八进制数 B.十六进制数 C.十进制数 D.非法数 7. C语言中整数-8在内存中的存储形式为( )。

A.1111111111111000 B.100000000001000 C.000000000001000 D.1111111111110111 8. 对于char cx=? \\039?;语句,正确的是( )。

A.不合法 B.cx的值是?\\03?

C.cx的值为四个字符 D.cx的值为三个字符 9. 若int k=7,x=12; 则能使值为3的表达式是( )。

A. x%=(k%=5) B. x%=(k-k%5) C. x%=k-k%5 D. (x%=k)-(k%=5) 10. 为了计算s=10!(即10的阶乘),则s变量应定义为( )。

A.int B.unsigned C.long D.以上三种类型均可 11. 以下所列的C语言常量中,错误的是( )。

A.0xFF B.1.2e0.5 C.2L D.?\\72? 12. 假定x和y为double型,则表达式x=2, y=x+3/2的值是( )。

A.3.500000 B.3 C.2.000000 D.3.000000

13. 设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四

舍五入运算的表达式是( )。

A. n=(n*100+0.5)/100.0 B. m=n*100+0.5, n=m/100.0 C. n=n*100+0.5/100.0 D. n=(n/100+0.5)*100.0 14. 以下选项中不属于C语言的类型是( )。

A.signed short int B.unsigned long int C.unsigned int D.long short

15. 设以下变量均为int类型,则值不等于7的表达式是( )。

A.(x=y=6,x+y,x+1) B.(x=y=6,x+y,y+1) C.(x=6,x+1,y=6,x+y) D.(y=6,y+1,x=y,x+1)

16. 在16位C编译系统上,若定义long a;,则能给a赋40000的正确语句是( )。

A.a=20000+20000; B.a=4000*10; C.30000+10000; D.a=4000L*10L; 17. 对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中,( )是正确的。

A. 语法错误 B. f为5.0 C.f为0.0 D.f为2.0

x?y18. 与代数式u?v不等价的C语言表达式是( )。

A.x*y/u*v B.x*y/u/v C.x*y/(u*v) D.x/(u*v)*y

二. 填空题

1. 在C语言中(16位PC机),一个char数据在内存中所占字节数为 ,其数值范围

为 ;一个float数据在内存中所占字节数为 ,其数值范围为 。 2. C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须

为 。

3. 在C语言中,不同运算符之间运算次序存在 的区别,同一运算符之间运算次序存在

的规则。

4. 设x,i,j,k都是int型变量,表达式x=(i=4,j=16,k=32)计算后,x的值为 。 5. 设x=2.5,a=7,y=4.7, 则x+a%3*(int)(x+y)%2/4为 。

6. 设a=2,b=3,x=3.5,y=2.5,则(float)(a+b)/2+(int)x%(int)y为 。

1?a?x?ax???24a??的C语言表达式为 。 7. 数学式子

8. 定义:double x=3.5,y=3.2;则表达式(int)x*0.5的值是 ,表达式y+=x++的值

是 。

9. 定义:int m=5,n=3;则表达式m/=n+4的值是 ,表达式m=(m=1,n=2,n-m)的值

是 ,表达式m+=m-=(m=1)*(n=2)的值是 。 10. 若a是int变量,则执行表达式a=25/3%3后,a的值是 。

11. 数学表达式x?2x?3x?4x?5x?6x?7对应的C语言表达式

为: 。

12. 已知a,b,c是一个十进制数的百位,十位,个位,则该数的表达式是 。

65432三. 判断题

1. 2. 3. 4. 5. 6. 7. 8. 9.

在C程序中对用到的所有数据都必须指定其数据类型。 一个变量在内存中占据一定的存储单元。 一个实型变量的值肯定是精确的。

对几个变量在定义时赋初值可以写成:int a=b=c=3;

自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或表达式。 在C程序的表达式中,为了明确表达式的运算次序,常使用括号“()”。 %运算符要求运算数必须是整数。

若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数。 在C程序中,逗号运算符的优先级最低。

10. C语言不允许混合类型数据间进行运算。

四. 简答题

1. c语言中运算符的优先级和其结合性有和区别? 2. \与 'A' 有何区别?

5c?(F?32)93. 华氏温度F与摄氏温度c的转换公式为:,则float c,F;c=5/9*(F-32)是其对应的C

语言表达式吗?如果不是,为什么?

五. 程序阅读题

1. 写出以下程序运行的结果。

main ( ) {

char c1=?a?,c2=?b?,c3=?c?,c4=?\\101?,c5=?\\x41?; printf(“a%c b%c\\tc%c\\tabc\\n”,c1,c2,c3); printf(“\\t\\b%c %c”,c4,c5); }

2. 写出以下程序运行的结果。

main ( ) { int i,j,m,n; i=8; j=10; m=++i; n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n); }

六. 编程题

1. 输入三位十进制正整数m,将m的个位,十位,百位反序而成的三位数(如:123反序为321)输出。 2. 输入两个整数x,y,将其值互换后输出。

3. 利用ASCII表,输出笑脸及扑克牌符号、10个数字符号、26个大写字母。

第 4 章

一. 选择题

最简单的C程序设计

1. C语言的程序一行写不下时,可以( )。

A.用逗号换行 B.用分号换行 C.在任意一空格处换行 D.用回车符换行 2. putchar函数可以向终端输出一个( )。

A. 整型变量表达式值 B. 实型变量值

C. 字符串 D. 字符或字符型变量值 3. 执行下列程序段时输出结果是( )。

unsigned int a=65535; printf(“%d”,a); A.65535 B.-1 C.-32767 D.1 4. 执行下列程序段时输出结果是( )。

int x=13,y=5;

printf(“%d”,x%=(y/=2));

A.3 B.2 C.1 D.0 5. 下列程序的输出结果是( )。 main ( )

{ int x=023;

printf(“%d”,--x);

}

A.17 B.18 C.23 D.24 6. 执行下列程序段时输出结果是( )。 int x=5,y;

y=2+(x+=x++,x+8,++x); printf(“%d”,y);

A.13 B.14 C.15 D.16 7. 若运行时输入:12345678↙,则下列程序运行结果为( )。

main ( ) { int a,b;

scanf(“--=”,&a,&b); printf(“%d\\n”,a+b); }

A.46 B.579 C.5690 D.出错

8. 有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量 a的值为1,b的值为3,c的值为2,

则正确的数据输入方式是( )。

A.132↙ B.1,3,2↙

C.a=1 b=3 c=2↙ D.a=1,b=3,c=2↙

9. 若运行时输入:12345678↙,则下列程序运行结果为( )。

main ( ) { int a,b;

scanf(“--=”,&a,&b); printf(“%d\\n”,a+b); }

A.46 B.579 C.5690 D.出错

10. 已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值为3,

以下选项中正确的输入语句是( )。

A.scanf(“---”,&i,&j,&k); B.scanf(“%d_%d_%d”,&i,&j,&k);

C.scanf(“%d,%d,%d”,&i,&j,&k); D.scanf(“i=%d,j=%d,k=%d”,&i,&j,&k); 11. 若int x,y; double z;以下不合法的scanf函数调用语句是( )。

A. scanf(“%d%lx,%le”,&x,&y,&z); B. scanf(“-*%d%lf”,&x,&y,&z); C. scanf(“%x%*d%o”,&x,&y); D. scanf(“%x%o%6.2f”, &x,&y,&z);

12. 有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量 a的值为1,b的值为3,c的值为2,

则正确的数据输入方式是( )。

A.132↙ B.1,3,2↙

C.a=1 b=3 c=2↙ D.a=1,b=3,c=2↙

二. 填空题

1. C程序由若干个 文件组成,而此类文件可由若干个 和 以及

部分组成。

2. C语句可以分为 , , , 和 等5种类型。 3. 一个表达式要构成一个C语句,必须 。 4. 复合语句是用一对 界定的语句块。

5. printf函数和scanf函数的格式说明都使用 字符开始。 6. scanf处理输入数据时,遇到下列情况时该数据认为结束:(1) ,

(2) ,(3) 。

7. 已有int i,j; float x;为将-10赋给i,12赋给j,410.34赋给x;则对应以下scanf函数调用语

句的数据输入形式是 。

8. C语言本身不提供输入输出语句,其输入输出操作是由 来实现的。

9. 一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命

令: 。

三. 程序阅读题

1. 用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a',问在键盘上如何输入?

2. 3. 4. 5. 6. 7. 8. 在C语言中,函数可以嵌套定义。

函数是C程序的主体,任何C程序必须有且只有一个main函数。

c语言本身没有输入输出语句,其输入、输出是通过函数调用来完成的。 c程序可由若干个源程序文件组成。

实参变量对形参变量的数据传递是“值传递”,即单向传递。

在C语言中,函数中的任何变量都可以赋初值,每调用一次该函数,就赋一次初值。 c语言中函数定义不允许嵌套,但调用可嵌套。

四. 阅读程序

1. #include int a=10; int fun(void)

{ int b=0; static int c=2; b++; c++; return a+b+c; }

main()

{ int i;

for (i=0; i<4; i++) printf(\

}

2. #include int fun(int a,int b)

{ if (a%b==0) return b;

else return fun(b,a%b); }

main()

{ int a=20,b=24;

printf(\} 3.

#include

void fun(int n,char a,char b,char c) { if (n>0)

{

fun(n-1,a,c,b); printf(\}

} main() {

fun(3,'1','2','3'); }

五. 程序判断题

1. 下面add函数求两个参数的和;判断下面程序的正误,如果错误请改正过来。

void add(int a,int b) { int c ; c = a + b; return (c) ; }

2. 下面函数fun的功能是:统计字符串s中各元音字母(即A,E,I,O,U)的个数,注意:字母不分大,

小写;判断下面程序的正误,如果错误请改正过来。 fun (char s[ ], int num[5]) { int k; i=5;

for (k=0; k

switch ( s ) {

case ?a?: case ?A?: i=0; case ?e?: case ?E?: i=1; case ?i? : case ?I? : i=2; case ?o?: case ?O?: i=3; case ?u?: case ?U?: i=4; }

if (i >= 0) num[i]++; } }

3. 下面函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串;判

断下面程序的正误,如果错误请改正过来。 void fun (char s[ ]) { int i,j;

for (i=0,j=0; s[i]!=?\\0?; i++) if (s[i]>=?0? && s[i]<=?9?) s[j]=s[i]; s[j]=”\\0”; }

六. 程序填空

1. 下面程序是求100~200间的全部素数(每10个素数输出在一行上)。

int prime( int m) { int n;

for (n=2; n

main()

{ int m,n=0; /* n用来统计素数的个数*/

for (m=100; m<=200; m++)

if (prime(m) ) printf(“M%c”,m , _______________ ); return 0; }

2. 下面程序的功能是把十进制正整数转换成2到16进制中任一数制的程序。

如:输入 10 2 则输出 1010。 输入 10 8 则输出 12。

#include

void fun(int num, int base)

{ char s[]=\int p[20],n=0;

do { p[n++]=numose; } while ( ______________ );

for ( ______________ ; n>=0; --n) printf(\ ] ); printf(\ }

main()

{ int num,base;

scanf(\ fun(num,base); }

3. 下面函数的作用是通过递归的方法将字符串倒置,请填空使程序完整。

void fun(char s[ ],int l,int h) { if ( ) return ; else { char t ;

fun ( ) ; t = s[l] , s[l]=s[h] , s[h]=t ; } }

4. 设数组a中的n个整数已按从小到大的顺序排列,函数bin_search用折半法找出整数x是否在数组中,

找到则返回对应元素的下标,否则返回-1。

int bin_search(int a[],int x,int n) { int left,right,mid; left=0; right=n-1; while (left<=right) { mid=(left+right)/2;

if (______________ ) return mid;

else if (______________ ) right=mid-1; else ______________; }

______________ ; }

七. 程序编写

1. 编写一函数,由实参传来字符串,统计其中字母、数字、空格的个数,在主函数中输入串,并输出

统计结果。

2. 编一个函数sort,使10个整数按从大到小的顺序排列,在main函数中输入这10个数,并输出排好

序的数。

3. 写一个函数,使给定的一个二维数组(N×N)转置,即行列互换。(N是不大于10的数,由输入决

定)。

4. 用递归法将一个整数转换成字符串。例如,输入12345,应输出字符串“54321”。n的位数不确定,

可以是任意的整数。

5. 编写一个fun函数void fun(char s1[],char s2[]),将两个字符串s1和s2连接起来存放在s1中。

6. 编写一个fun函数:int fun(int a[], int n),删去一维数组中所有相同的数,使之只剩一个。数组中的数

已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 7 7 8 9 9 10 10 10,删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10

7. 设计一个程序,统计一个班(最多有35人)的学生成绩,要求能实现如下四个功能:(1)由键盘输

入每个学生的四门课程的成绩;(2)计算每个学生的平均分和总分,这个功能模块由自定义函数实现;(3)计算每个学生的总分与平均分。同样用自定义函数实现;(4)根据用户的要求输出某门课程不及格的学生。

第 9 章

一. 选择题

编译预处理

1. 以下叙述不正确的是( )。

A. 预处理命令行都必须以#开始

B. 在程序中凡是以#开始的语句行都是预处理命令行 C. C程序在执行过程中对预处理命令行进行处理 D. 预处理命令行可以出现在C程序中任意一行上 2. 以下叙述中正确的是( )。

A. 在程序的一行上可以出现多个有效的预处理命令行 B. 使用带参数的宏时,参数的类型应与宏定义时的一致 C. 宏替换不占用运行时间,只占用编译时间

D. C语言的编译预处理就是对源程序进行初步的语法检查 3. 以下有关宏替换的叙述不正确的是( )。

A. 宏替换不占用运行时间 B. 宏名无类型

C. 宏替换只是字符替换 D. 宏名必须用大写字母表示

4. 在“文件包含”预处理命令形式中,当#include后面的文件名用\(双引号)括起时,寻找被包含

文件的方式是( )。

A. 直接按系统设定的标准方式搜索目录

B. 先在源程序所在目录中搜索,再按系统设定的标准方式搜索

5. 6.

7.

8.

C. 仅仅搜索源程序所在目录 D. 仅仅搜索当前目录

在宏定义 #define PI 3.1415926 中,用宏名PI代替一个( )。 A.单精度数 B.双精度数 C.常量 D.字符串 以下程序的运行结果是( )。 A.9 B.10 C.12 D.18 #define ADD(x) x+x main ( )

{ int m=1,n=2,k=3,sum ;

sum = ADD(m+n)*k ; printf(“%d\\n”,sum) ; }

以下程序的运行结果是( )。 A.10 B.15 C.100 D.150 #define MIN(x,y) (x)>(y) ? (x) : (y) main ( )

{ int i=10, j=15 , k; k = 10*MIN(i,j); printf(“%d\\n”,k); }

在任何情况下计算平方数都不会引起二义性的宏定义是( )。

A. #define POWER(x) x*x B. #define POWER(x) (x)*(x) C. #define POWER(x) (x*x) D. #define POWER(x) ((x)*(x))

二. 判断题

1. 宏替换时先求出实参表达式的值,然后代入形参运算求值。 2. 宏替换不存在类型问题,它的参数也是无类型。

3. #include 和 #include \的搜寻方式相同。 4. 带参数的宏与函数类似,但不等价。

5. 凡是c源程序中行首以\标识的控制行都是预处理命令。 6. #include 命令中的文件名是不能包括路径的。 7. 可以使用条件编译命令来选择某部分程序是否被编译。

8. 在软件开发中,常用条件编译命令来形成程序的调试版本或正式版本。

三. 阅读程序

1. #define S x=y

#define P2(x,y) printf(\

main()

{ int x,y;

S=1; ++x || ++y; P2(x,y); S=1; ++x && ++y; P2(x,y); S=-1; ++x || ++y; P2(x,y); }

2. #define M(x,y,z) x*y+z

main()

{ int a=1,b=2, c=3;

printf(\}

四. 程序编写

1. 定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出已交

换后的两个值。说明:在程序主函数使用宏时只能用两个实参,如SWAP(a,B.,不能用三个实参。

1s?(a?b?c)area?s(s?a)(s?b)(s?c)22. 三角形的面积为,其中,a,b,c为三角形的三边。定

义两个带参数的宏,一个用来求s,另一个用来求area。写程序,在程序中用带实参的宏名来求面积area。

第 10 章

一. 选择题

指针

1. 变量的指针,其含义是指该变量的( )。

A.值 B.地址 C.名 D.一个标志

2. 已有定义int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是

( )。 A.k=*ptr1+*ptr2 B.ptr2=k C.ptr1=ptr2 D.k=*ptr1*(*ptr2) 3. 若有说明:int *p,m=5,n; 以下程序段正确的是( )。

A.p=&n; scanf(“%d”,&p); B.p = &n ; scanf(“%d”,*p);

C.scanf(“%d”,&n); *p=n ; D.p = &n ; *p = m ; 4. 若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是( )。

A.p1=&m; p2=&p1 ; B.p1=&m; p2=&n; *p1=*p2 ; C.p1=&m; p2=p1 ; D.p1=&m; *p1=*p2 ;

5. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是( )。

A.a, p, *&a B.&*a,&a,*p C.*&p,*p,&a D.&a,&*p,p 6. 下面程序段中,for循环的执行次数是( )。

A.9 B.7 C.6 D.5

char *s=”\\ta\\018bc” ;

for ( ; *s!=?\\0? ; s++) printf(“*”) ;

7. 下面能正确进行字符串赋值操作的是( )。

A.char s[5]={“ABCDE”}; B.char s[5]={?A?,?B?,?C?,?D?,?E?}; C.char *s ; s=”ABCDE” ; D.char *s; scanf(“%s”,s) ; 8. 下面程序段的运行结果是( )。

char *s=”abcde” ; s+=2 ; printf(“%d”,s);

A.cde B.字符?c? C.字符?c?的地址 D.不确定

9. p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是

( )。

A.c=*p1+*p2 B.p2=c C.p1=p2 D.c=*p1*(*p2) 10. 以下说明不正确的是( )。

A.char a[10]=”china” ; B.char a[10],*p=a; p=”china”; C.char *a; a=”china” ; D.char a[10],*p; p=a=”china”; 11. 若有定义:int a[5];则a数组中首元素的地址可以表示为( )。

A.&a B.a+1 C.a D.&a[1]

12. 已有函数max(a,b),为了让函数指针变量p指向max,正确的方法是( )。

A.p=max; B.p=max(a,b); C.*p=max; D.*p=max(a,b); 13. 对于类型相同的指针变量,不能进行哪种运算?

A. + B. - C. = D. == 14. 若有以下说明和语句,则p1-p2的值为多少?

int a[10], *p1, *p2; p1=a; p2=&a[5]; A. 5 B. 6 C. 10 D. 非法

15. main()函数可以带两个形参,一般分为argc和argv,其中argv可以定义为( )。

A. int argv; B. char * argv[]; C. char argv[]; D.char ** argv[]; 16. 若有定义:int (*p)[4];则标识符p( )。

A.是一个指向整型变量的指针 B.是一个指针数组名

C.是一个指针,它指向一个含有四个整型元素的一维数组 D.定义不合法

A. 0 B.1 C.TRUE D. FALSE 7. 若有以下程序段

int x=20; printf(“%d\\n”,~x) ;

则执行以上语句后的输出结果是( )。

A. 02 B. -20 C. -21 D. -11 8. 若有以下程序段

char x=3,y=6,z ; z = x^y<<2 ;

则执行以上语句后,z的值是( ) 。

A.00010100 B.00011011 C.0001100 D.00011000 9. 设位段的空间分配由右到左,则以下程序的运行结果是( )。

struct packed

{ unsigned a : 2 ; unsigned b : 3 ; unsigned c : 4 ; int i ;} data ; main ( )

{ data.a=8 ; data.b=2 ;

printf(“%d\\n”,data.a+data.b) ; }

A.语法错 B.2 C.5 D.10 10. 设有以下说明

struct packed

{ unsigned one:1 ; unsigned two:2 ; unsigned three:3 ; unsigned four:4 ; } data ;

则以下位段数据的引用中不能得到正确数值的是( )。

A.data.one=4 B.data.two=4 C.data.three=2 D.data.four=1

二. 填空题

1. 若有运算符<<,sizeof,^,&=,则按优先级由高到低排列为 。

2. 设有char a,b;若要通过a&b运算屏蔽掉a中的其它位,只保留第1和第7位(右起为第0位),则

b的二进制数是 。

3. 测试char型变量a第五位是否为1的表达式是 。

4. 把int型变量low中的低字节及变量high中的高字节放入变量s中的表达式

是 。 5. 以下函数:

unsigned getbits(unsigned x ,unsigned p, unsigned n) { x = ((x<<(p+1-n) & ~((unsigned)~0>>n) ; return (x) ; }

若调用此函数时x=0115032, p=7, n=4, 则函数返回值是 。 6. 若x=0123,则表达式(5+(int)(x))&(~2)的值是 。

三. 程序分析题

1. # define F(y) 15>>y

# define PRINT(a) printf(″﹪d″,a) main() { PRINT(F(2)); } 2. #include

main()

{ int i,j; i=j=20; i++; j--; printf(\3. int fun(unsigned x) { int b;

for (b=0; x!=0; x&=x-1) b++;

return b;

}

main() { printf(\4. #include main()

{ int a=40,b=60; a=a^b; b=a^b; a=a^b; printf(\5. #include void fun(int n)

{ unsigned m=0x8000; int i,j; for (i=0; i<16; i++) {

printf(\ if (i==7) printf(\ m>>=1; } }

main()

{ fun(97); } 6. #include main()

{ struct bit {unsigned b0:1,b1:1,b2:1,b3:1,b4:1,b5:1,b6:1,b7:1;} *p; char s[]=\ while (s[i]!=NULL) { p=(struct bit*)s[i];

sum=p->b0+p->b1+p->b2+p->b3+p->b4+p->b5+p->b6; printf(\ i++; } }

四. 编程题

1. 编写一个函数,对一个unsigned int 变量取出它的奇数位(即从右边起第1,,3,5,7,??,15

位)。

2. 编一函数用来实现左右循环移位。函数名为move,调用方法为move(value,n);其中value为要循环移

位的数,n为移位的位数。如果n<0表示左移,n>0表示右移,n=0表示不移位。 3. 编写一个函数,给出一个数的原码,得到该数的补码。

第 13 章

一. 选择题

文件

1. 将一个整数10002存到磁盘上,以ASCII码形式存储和以二进制形式存储,占用的字节数分别是

( )。 A. 2和2 B. 2和5 C. 5和2 D. 5和5 2. 若执行fopen函数时发生错误,则函数的返回值是( )。

A.地址值 B.0 C.1 D.EOF

3. 若要用fopen函数打开一个新的二进制文件,该文件既要能读也能写,则文件打开方式字符串应是

( )。

A.”ab+” B.”wb+” C.”rb+” D.”ab” 4. 利用fseek函数可实现的操作是( )。

A. 改变文件的位置指针 B.文件的顺序读写 C. 文件的随机读写 D.以上答案均正确

5. 函数ftell(fp)的作用是( )。

A.得到流式文件中的当前位置 B.移动流式文件的位置指针 C.初始化流式文件的位置 D.以上答案均正确

二. 填空题

1. C语言流式文件的两种形式是 和 。

2. C语言打开文件的函数是 ,关闭文件的函数是 。

3. 按指定格式输出数据到文件中的函数是 ,按指定格式从文件输入数据的函数

是 ,判断文件指针到文件末尾的函数是 。

4. 输出一个数据块到文件中的函数是 ,从文件中输入一个数据块的函数

是 ;输出一个字符串到文件中的函数是 ,从文件中输入一个字符串的函数是 。

5. feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 ,否则为 。 6. 在C语言中,文件的存取是以 为单位的,这种文件被称作 文件。

三. 程序填空题

1. 以下程序的功能是将文件file1.c的内容输出到屏幕上并复制到文件file2.c中。 #include main ( )

{ FILE ;

fp1=fopen(“file1.c”,”r”); fp2=fopen(“file2.c”,”w”); while (!feof(fp1)) putchar(getc(fp1));

while (!feof(fp1)) putc( ); fclose(fp1); fclose(fp2) ; }

2. 下面程序的功能是将由命令行给出的某源程序文件加行号显示出来(行号从1开始)。 #include

main(int argc,char *argv[]) { FILE *in;

char line[81]; int row;

if ( ) { printf(\exit(1); }

if ((in=fopen(argv[1],\

printf(\

row=0;

while ( fgets(line,81,in)!= ) { printf(\ }

; }

四. 程序编写

1. 统计一个文本文件中数字、空格、字母出现的次数,以及文件的字节数,并将结果输出,文本文件

名由命令行给出。

2. 有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩),

计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“Stud”中。 3. 编写一个程序并取名test.c,统计该文件中出现”if”,”while”,”for”的次数。

本文来源:https://www.bwwdw.com/article/8rip.html

Top