C语言习题集(平时练习含答案)

更新时间:2023-10-25 21:18:01 阅读量: 综合文库 文档下载

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

C语言习题集

第一章 C语言概述

复习要点:

1. 程序的构成,main函数和其他函数。 2.语句,注释

3.运行C程序的步骤和方法

习题:

1.C程序是由 函数 构成的,一个C程序中至少包含 一个main函数 。 2. 函数 是C程序的基本单位。(最小单位是表达式) 3.C程序有且只有一个 main函数 。 4.C程序从 main函数 开始执行。

5.C程序注释符是由 /* 和 */ 组成,且不能嵌套使用。

6.C程序的语句是以 ; 结束。

7.C程序一条语句可分多行写,需要以 为连接符。(可以直接换行)

8.C程序可以用 { 和 } 将多条语句括起来,形成复合语句。

9.上机运行一个C程序必须经过 源代码输入 ,编译 , 连接 , 运行 4个步骤。

10.C程序的源文件扩展名是 。c 。 11.以下叙述中正确的是( C)

A)C语言程序将从源程序中第一个函数开始执行

B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C)C语言规定必须用main作为主函数名,main必须小写,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以命名任意一个函数作为主函数 12.以下叙述中错误的是( D )

A)C语言源程序经编译后生成后缀为.obj的目标程序

B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件 C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中 D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 13.以下不是语句的是( A)

A) a=10 B)a=b+c;c=20;C) ; D){a=b;b++;} 14.运行以下程序 main()

{

int a=10; /* 定义一个变量 a

a=20; */

printf(“%d”,A); 此程序应该改写为:printf(“%d”,a) }

输出的结果是 B 。 A) 10 B)20

1

15.牢记VC++6.0的出错提示

英文提示 中文实际意义 missing ; , ( { 等 表示缺少 ; ,( {

'T' : undeclared identifier T没有定义(T要先定义然后才能使用)

'sqrt' undefined; sqrt如果是函数名则表示它的头文件没有包含 'T' : redefinition T重复定义(可能是多次定义了T) Cannot open include file 头文件的拼写或路径的不对

第二章 数据类型,运算符与表达式

复习要点:

1. C的数据类型(整型,字符型,浮点型)及其定义方法。 2. C运算符的种类、运算优先级和结合性。 3. 不同类型数据间的转换与运算。

4. C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。

习题:

1.C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须为 大小写字母和下划线 。

2.字符常量使用一对 单引号 界定单个字符,而字符串常量使用一对 双引号 来界定若干个字符的序列。

3.浮点数有 十进制小数形式;(2)指数形式 两种表示形式。 4. C语言%(取余的操作符)要求两个操作数是 整 型。

5.关系运算的值是 整 型。

6.Sizeof(int)的意义 返回int型变量在内存中占的字节数 。 7.假设所有变量均为整型:a=b=5;i=++a;j=b++;则i等于 6 j等于 5 。

8.假设所有变量均为整型:a=3;b=5;a>b&&++a;a

9. 假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+B)的值为 9 。 提示:a=2,b=5,a++,b++,i=a,j=b,a+b的值

10. a=(2,5,2+5) 则a的值为 7 。 11.表达式:(int)(7.2/2)的值是 3 。

12.C语言中,不同运算符之间运算次序存在 先后 的区别,同一运算符之间运算次序存在 结合性 的规则。

13.32与八进制数 40 相等,75与十六进制数 4b 相等

14.已知x=2.5,a=7,y=4.7则x+a%3*(int)(x+y)%2/4的值是 2.5 15. 下列关于C语言用户标识符的叙述中正确的是( C ) A) 用户标识符中可以出现下划线和字母,可以和关键字同名 B) 用户标识符中不可以出现中划线,但可以出现下划线

C) 用户标识符中可以出现下划线,但不可以放在用户标识符的开头

2

D) 用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 16.有以下程序 #include main()

{ char c1,c2; c1='A'+'8'-'4'; c2='A'+'8'-'5';

printf(\

}已知字母A的ASCII码为65,程序运行输出后的结果是( A ) A)E,68

B)D,69

C)E,D

D)输出无定值

17.以下各组标识符中,合法的用户标识符是( D ) A)B01 table_1 0_t k% B)Fast_ void pbl book C)xy_ longdouble *p CHAR

D)sj Int _xy w_y23

18.在C语言中,字符型数据在内存中以( D)形式存放。

A)原码 B)BCD码 C)反码 D)ASCII码

19.已知字符’A’的ASCⅡ代码值是65,字符变量c1的值是’A’,c2的值是’D’。执行语句printf(\后,输出结果是C A)A,B B)A,68 C)65,66 D)65,68 20.1MB等于(D)

A)1000字节 B)1024字节 C)1000*1000字节 D)1024*1024字节 21. 与十六进制数200等值得十进制数为(B )

A)256 B)512 C)1024 D)2048

22.设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( B )

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 23.以下叙述中错误的是(D )

A)C程序中的#include和#define行均不是C语句 B)除逗号运算符外,赋值运算符的优先级最低 C)C程序中,j++;是具有赋值功能的语句

D)C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算 24.以下关于long、int和short类型数据占用内存大小的叙述中正确的是(D ) A)均占4个字节 B)根据数据的大小来决定所占内存的字节数 C)由用户自己定义 D)由C语言编译系统决定 25.已知x=10,y=20,则表达式y+=5+x的值为( C ) A) 25 B) -10 C) 35 D) 10 26.以下常量正确的是( B ) A)0X7a, 078, 6a, 57L, B)10., -.5e3, 1e0, 0.0012e-101

C)‘ ’, ‘\\”’, ‘\\0127’, ‘\\xff’ D) 56, -.3, .e2, 1.2e2.1 ,”xy”

27.有以下定义语句,编译时会出现编译错误的是C

3

A) char a=’a’; B)char a=’\\n’; C) char a=’aa’; D)char a=’\\x2d’;

第三章 顺序结构

复习要点:

1. 赋值

2. 输入与输出函数的调用,正确输入数据并正确设计输出格式。 3. 常见的编程题

习题:

1.已知x=1,y=2,则表达式y*=5+x的值为 12 。

2.putchar(getchar( ));从键盘上输入A。则最终的输出是 A 。 3.printf函数和scanf函数的格式说明都使用 % 字符开始。

4. printf(“%-m . nf ”, A);其中-m表示 长度为m,左对齐 , n表示 小数位长度为n。

5.已知a=17则printf(“%o,%#o”,a,A);输出的结果是 。(#输出0八进制标志) 6.已知a=17则printf(“%*d,%d”,-5,a) ;输出的结果是 17 0 。;*表示跳过改项目,%d没有对应会输出0

7.scanf处理输入数据时,遇到下列情况时该数据认为结束: 空格 , Tab , 回车 。

8.一般地,调用标准字符或格式输入输出库函数时,程序开头应有包含头文件的预编译命令: stdio。h 。

9.下列符合语法的赋值语句是(cd )

A)a=7+b=8; B)++a=7; C)a=b,b++,a+7; D)a+=2*b,c=++b; 10.关于赋值过程中类型转换叙述错误的是(d )

A)实数赋值给整数变量时,将小数位不会四舍五入,会直接截断 B)整数赋值给实数变量时,整数位不变,小数位补0

C)整型变量赋值给short 时,则只保留2个低字节

D)Double变量赋值给float变量, 则只保留前面的7位有效数字 E)长度相同的有符号整型变量和无符号整型变量可以直接赋值 11.putchar ( )函数可以向终端输出一个。d

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

C)字符串 D)字符或字符型变量值 12.有以下程序 main()

{ printf(\

程序运行后的输出结果是(A )

A)0 B)1 C)-1 D)NULL没定义,出错 13.执行下列程序片段时输出结果是( a )。 unsigned int a=65535;

printf(“%d”,A);

A)65535 B)-1 C)-32767 D)1 14.执行下列程序片段时输出结果是( B )。

4

float x=-1023.012

printf(“\\n%8.3f,”,x); printf(“.3f”,x);

A)1023.012, -1023.012 B)-1023.012,-1023.012 C)1023.012,-1023.012 D)1023.012, 1023.012

15.对于下述语句,若将10赋给变量k1和k3,将20赋给变量k2和k4,则应按( D ) 方式输入数据。

int k1,k2,k3,k4;

scanf(“%d%d”,&k1,&k2);

scanf(“%d,%d”,&k3,&k4);

A)1020↙ B)10 20↙ C)10,20 ↙ D) 10 20↙ 10 20↙ 10 20↙ 10,20↙ 10,20↙ 16.若运行时输入:12345678↙,则下列程序运行结果为( d )。 main ( )

{ int a,b;

scanf(“--=”,&a,&b); 可以在后面加&c就对了a printf(“%d\\n”,a+b);

}//按照教育部考试中心教材标准

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

17.有定义语句:int x, y; scanf(\若想让x值为11,下面四组键盘输入正确的是( D ) A)11 12<回车> B)11, 12<回车>

C)a=11,b=12<回车> D)x=11,y=12<回车>

18.阅读以下程序

#include main ( )

{ int case ; float printF;

printf(“请输入2个数:”); scanf(“%d %f”,&case,&printF); printf(“%d %f\\n”,case,printF); }

该程序在编译时产生错误,其出错原因是A

A) 定义语句出错,case是关键字,不能用作用户自定义标识符 B) 定义语句出错,printF不能用作用户自定义标识符 C) 定义语句无错,scanf不能作为输入函数使用 D) 定义语句无错,printf不能输出case的值 19. 有以下程序

#include main ( )

{ int a=1,b=0;

printf(“%d,”,b=a+B); printf(“%d\\n”,a=2+B); }

程序运行后的输出结果是D

5

值为12, y

{ return (a+b);}

并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误是( A ) A)double myadd(double a,b); B)double myadd(double,double);

C)double myadd(double b,double a);

D)double myadd(double x,double y); 11..C语言规定,非地址类变量做实参时,它和对应的形参之间的数据传递方式是( B )。 A)地址传递 B)值传递 C)有实参传给形参,再由形参传给实参 D)由用户指定传递方式

12.以下正确的描述是( B )。

A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套

13.若用数组名作为函数调用的实参,传递给形参的是。A\\ A)数组的首地址 B)数组中第一个元素的值 C)数组中的全部元素的值 D)数组元素的个数 14.以下程序执行的结果( C) Void F(int X,int *Y) {

X=5; *Y=5; }

main() {

Void F(int ,int *y); int a=0, b=0;

F(a,&b);

printf(\}

A)0,0 B)5,5 C)0,5 D)5,0

13.如果在一个函数中的复合语句中定义了一个变量,则该变量。A A)只在该复合语句中有定义 B)在该函数中有定义 C)在本程序范围内有定义 D)为非法变量

16

14.以下程序执行的结果( C) int X=0; void F() {

int X=1;

printf(\}; main() {

{

int X=2;

printf(\} F();

printf(\}

A)0,0,0 B)1,2,0 C)2,1,0 D)1,0,2 15.以下程序执行后x的值是( C ) #include void F() {

static int x=0; /* x=10*/ x++;

printf(\}; main() { }

int i;

for(i=0;i<10;i++)F(); /*i=10*/

C)10 D)9

A)0 B)1

第八章 指针

复习要点:

1. 地址与指针变量的概念,地址运算符。

2. 一维、二维数组和字符串的以及指向变量、数组、字符串、函数、结构体的指针变量的定义。通过指针引用以上各类型数据。 3. 用指针作函数参数。

4. 返回地址值的函数。

1.指针型变量,该变量的值是( B ).

A)数值 B)地址 C)字符 D)任意类型

17

2.若有语句int a[10],n,*p下面不能代表地址的选项是( C ). A)&a[2] B) &n C) *p D) a等价于&a[0] 3.若有说明;int *p,m=5,n;以下正确的程序段的是( D ). A)p=&n; B)p=&n; scanf(\ scanf(\ C)scanf(\ D)p=&n;

*p=&n; *p=m; 4.下面程序段的运行结果是( C )

char *s=\ 等价于char a[]=\ s+=2; 等价于s=s+2

printf(\ 想输出字符C,则改为printf(“%c”,*s);

A)cde B)字符'c' C)字符'c'的地址 D)无确定的输出结果

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

A)c=*p1+*p2; B)p2=c C)p1=p2 D)c=*p1; 6.若有说明语句

char a[]=\ char *p=\

则以下不正确的叙述是( D )

A)a+1表示的是字符t的地址

B)p指向另外的字符串时,字符串的长度不受限制 C)p变量中存放的地址值可以改变 D)a中只能存放10个字符

7.下面程序的运行结果是( B ) char *s1=\

char *s2=\

printf(\

A)正数 B)负数 C)零 D)不确定的值

8.若有以下定义,则对a数组元素的正确引用是( CD ) int a[5],*p=a; A)*&a[5] B)a+2 C)*(p+3) D)*(a+2) 9.若有以下定义,则p+5表示( A ).

int a[10],*p=a;

A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值

10.若有定义:int *p[3];则以下叙述中正确的是B

A)定义了一个基类型为int的指针变量p,该变量具有三个指针

B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C)定义了一个名为*p的整型数组,该数组含有三个int类型元素

D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 11.已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!='\\0'){ p1++;p2++; } } 函数的功能是A

A)将p1所指字符串复制到p2所指内存空间

18

B)将p1所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较

D)检查p1和p2两个指针所指字符串中是否有'\\0'

12.以下程序的功能是将字符串s。例如,输入字符串:abc123edf456gh,中的数字字符放入d数组中,最后输出d中的字符串执行程序后输出:123456。请填空。 main()

{ char s[80], d[80]; int i,j; gets(s);

for(i=j=0;s[i]!='\\0';i++)

if( ) { d[j]=s[i]; j++; } d[j]='\\0'; puts(D);}

13. 编程实现:输入字符串:abc123aedf456agh,将其中字符a删除。

第九章 结构体

复习要点:

1. 结构体的定义和成员的引用。

2. 通过结构体构成链表,单向链表的建立,结构点的输出、删除与插入。 1.在说明一个结构体变量时系统分配给它的存储空间是( ) A)该结构体中第一个成员所需的存储空间

B)该结构体中最后一个成员所需的存储空间

C)该结构体中占用最大存储空间的成员所需的存储空间

D)该结构体中所有成员所需存储空间的总和。

2.以下对结构体变量stu1中成员age的非法引用是( ) #include struct student {

int age; int num;

}stu1,*p; p=&stu1;

A)stu1.age B)student . age C)p->age D) age 3.有如下定义: Struct date

{ int year,month,day; }; Struct worklist {

Char name[20]; Char sex;

Struct date birthday; }person;

19

对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( ) 。 A year=1978 B birthday.year=1978 C person.birthday.year=1958 D person.year=1958 4.写出下列程序的输出结果: #include struct info {int k; char *s; }t;

void f(struct info f) {t.k=1997; t.s=\}

void main() {

t.k=2000; t.s=\f(t);

printf(“%d,%s\\n”,t .k, t.s);

}

5.若有以下的说明和语句,则表达式p->a的值是 struct we {int a; int *b;

}*p;

int x0[]={11,12},x1[]={31,32};

struct we x[2]={100,x0,300,x1}; p=x;

6. 读懂以下语句的含义(有以下结构体说明和变量定义,实现链表的元素 删除和插入)。 struct node { int data; struct node *next; }

想要删除的节点指针q后面的节点

If(q->next) q->next=(q->next)->next; 在节点指针q后面添加节点r r.next=q->next; q->next=&r;

7.读懂以下程序(用于在结构体数组中查找分数最高和最低的同学姓名和成绩。) #include void main() {

20

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

Top