浙江大学C语言总复习题—基本数据类型和运算

合集下载

浙江大学C语言总复习题--综合

浙江大学C语言总复习题--综合

综合练习一、判断题1.在Trubo_C中运行一个C程序时,实际上是运行后缀为.EXE的可执行文件。

2.在C语言中整数可用十进制数、八进制数和二进制数三种数制表示。

3.在程序的运行过程中,整型常量的值是可以改变的。

4. C程序中,用/* 和 */界定的部分称之为注释,注释部分对程序的运行不起作用。

5.大括弧 { } 只能用来括复合语句。

6. do_while语句构成的循环不能用其它循环语句来代替。

7.不能用scanf 函数输入字符。

8.在 C 程序中,函数的定义不可以嵌套,但函数的调用可以嵌套。

9. 一个变量的作用域取决于变量定义语句在程序中出现的位置。

10.C 语言的一个编译预处理命令用 # 开始,最后加分号。

11. C语言源程序文件经过编译、连接之后生成一个后缀为.EXE的文件。

12. C语言中以 %o开头的数是八进制整数。

13.在程序的运行过程中,符号常量的值是可以改变的。

14.在 C 程序中,APH 和 aph 代表不同的变量。

15.一个复合语句在语法上被认为是一条语句。

16. 只能用while语句构成循环。

17.不能用printf函数输出字符。

18. C程序中各函数之间既允许直接递归调用也允许间接递归调用。

19. 在函数外部定义的变量称为全局变量。

20.宏定义的命令行可以看作是一条C 语句。

21. C语言源程序是可以用来直接运行的程序。

22. C语言中以 %x 开头的数是十六进制整数。

23. C程序中定义的变量,代表内存中的一个存储单元。

24.在 C 程序中,9ab是非法的用户标识符。

25. C语句必须用一个分号作为结束。

26. do_while语句构成的循环不能用break语句退出。

27. scanf 函数是 c 语言的标准输入函数。

28. C程序的main函数不能有参数。

29. 在函数内部定义的变量称为局部变量。

30.用#include包含的头文件的后缀必须是.h。

31. C 语言程序的三种基本结构是顺序结构、选择结构和循环结构。

大一期末c语言复习题库

大一期末c语言复习题库

大一期末c语言复习题库C语言作为计算机科学与技术专业学生的一门基础课程,对于理解计算机程序设计的原理和思想具有重要意义。

以下是为大一学生准备的C语言期末复习题库,涵盖了C语言的基本概念、数据类型、控制结构、数组、函数、指针、结构体、文件操作等重要知识点。

# 一、基本概念1. 解释C语言的特点。

2. 描述C语言的基本结构,包括预处理指令、函数、语句和注释。

3. 列举C语言中的基本数据类型,并解释它们的区别。

# 二、变量与数据类型1. 什么是变量?如何声明变量?2. 解释整型(int)、浮点型(float)、双精度型(double)和字符型(char)的区别。

3. 写出C语言中不同数据类型所占的存储空间大小。

# 三、运算符与表达式1. 列举C语言中的算术运算符,并给出示例。

2. 描述赋值运算符的用法。

3. 解释条件运算符(?:)的用法。

# 四、控制结构1. 描述if语句的用法,并给出一个例子。

2. 解释while循环和do-while循环的区别。

3. 写出for循环的一般形式,并解释其组成部分。

# 五、数组1. 什么是数组?数组有哪些类型?2. 如何声明和初始化一维数组和二维数组?3. 写出一个程序,实现冒泡排序算法。

# 六、函数1. 解释函数的定义和声明。

2. 描述函数参数的传递方式(值传递和引用传递)。

3. 写出一个自定义函数,实现求最大值的功能。

# 七、指针1. 解释指针的概念和用途。

2. 写出一个程序,使用指针交换两个变量的值。

3. 解释指针数组和数组指针的区别。

# 八、结构体1. 什么是结构体?如何定义结构体?2. 写出一个程序,使用结构体存储学生信息。

3. 解释结构体指针的用法。

# 九、文件操作1. 解释文件的概念和分类。

2. 描述文件的打开、关闭、读写操作。

3. 写出一个程序,实现将数据写入文件,并从文件中读取数据。

# 十、综合应用1. 编写一个程序,实现学生成绩管理系统,包括录入、查询、修改和删除功能。

大一c语言设计复习题加答案

大一c语言设计复习题加答案

大一c语言设计复习题加答案1. 简述C语言的基本数据类型有哪些?答:C语言的基本数据类型包括整型(int)、浮点型(float和double)、字符型(char)和布尔型(_Bool,C99标准中引入)。

2. 请解释C语言中的指针是什么?答:指针是一种特殊的变量,它存储的是另一个变量的内存地址。

通过指针,程序可以间接访问和操作内存中的数据。

3. C语言中数组和指针的关系是什么?答:在C语言中,数组名可以被看作指向数组首元素的指针。

因此,数组和指针之间有着密切的关系,可以通过指针来访问数组元素。

4. 描述C语言中函数的定义和调用过程。

答:函数定义包括返回类型、函数名、参数列表和函数体。

函数调用则是通过函数名和实际参数来请求函数执行,并传递参数值。

函数执行完毕后,返回指定类型的值给调用者。

5. 什么是结构体?在C语言中如何定义结构体?答:结构体是一种用户自定义的数据类型,它允许将多个不同类型的数据项组合成一个单一的数据结构。

在C语言中,可以通过`struct`关键字来定义结构体,后跟结构体名和一对花括号,其中包含一系列声明数据项的语句。

6. 请解释C语言中的预处理指令`#include`和`#define`的作用。

答:`#include`预处理指令用于包含一个源代码文件到另一个源代码文件中,而`#define`用于定义宏。

宏可以是一个简单的值,也可以是一个更复杂的表达式。

7. C语言中如何实现循环控制?答:C语言中循环控制主要通过`for`、`while`和`do-while`循环来实现。

这些循环结构允许代码块在满足特定条件时重复执行。

8. 请解释C语言中的文件操作。

答:C语言中的文件操作包括文件的打开、关闭、读取和写入。

这些操作通常通过`fopen`、`fclose`、`fread`和`fwrite`等函数来实现。

9. 描述C语言中的递归函数。

答:递归函数是一种自己调用自己的函数。

递归函数通常用于解决可以分解为相似子问题的问题,如树的遍历和分治算法。

浙江大学C程汇总题库(更新)

浙江大学C程汇总题库(更新)
输入输出示例:括号内为说明
输入
3 (repeat=3)
0 (计算0+1+2+...+100)
10 (计算10+11+12+...+100)
50 (计算50+51+52+...+100)
输出
sum = 5050
sum = 5005
sum = 3825
#include <stdio.h>
int main(void)
}
}
20035程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入一个正整数n,计算1-1/4+1/7-1/10+……的前n项之和,输出时保留3位小数。
输入输出示例:括号内是说明
输入
2 (repeat=2)
3
10
输出
sum = 0.893
输入输出示例:括号内是说明
输入
2 (repeat=2)
10 (x=10)
0 (x=0)
输出
f(10.00) =0.1
f(0.00) = 0.0
#include <stdio.h>
int main(void)
{
int repeat, ri;
double x, y;
scanf("%d", &repeat);
double x, y;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){

c语言期末考试题库大题及详解答案

c语言期末考试题库大题及详解答案

c语言期末考试题库大题及详解答案C语言期末考试题库大题及详解答案一、简答题1. 请简述C语言的基本数据类型及其特点。

答案:C语言的基本数据类型包括整型(int)、浮点型(float和double)、字符型(char)和枚举型(enum)。

整型用于存储整数,浮点型用于存储小数,字符型用于存储单个字符,枚举型用于定义一组命名的常量。

每种数据类型都有其特定的取值范围和占用内存大小。

2. 请解释C语言中的数组和指针的区别。

答案:数组是一种数据结构,用于存储固定数量的相同类型元素,可以通过下标访问元素。

指针是一个变量,它存储另一个变量的内存地址。

数组名可以作为指向数组第一个元素的指针使用,但数组本身是一个固定大小的内存块,而指针可以被赋值为不同的地址,具有动态性。

二、编程题1. 编写一个C语言程序,实现输入三个整数,找出其中的最大值并输出。

答案:```c#include <stdio.h>int main() {int num1, num2, num3, max;printf("请输入三个整数:");scanf("%d %d %d", &num1, &num2, &num3);max = (num1 > num2) ? ((num1 > num3) ? num1 : num3) : ((num2 > num3) ? num2 : num3);printf("最大值是:%d\n", max);return 0;}```2. 编写一个C语言程序,实现字符串的反转。

答案:```c#include <stdio.h>#include <string.h>int main() {char str[100];printf("请输入一个字符串:");fgets(str, sizeof(str), stdin); // 使用fgets以包含空格int len = strlen(str) - 1; // 减去换行符长度for (int i = len; i >= 0; --i) {printf("%c", str[i]);}printf("\n");return 0;}```三、综合题1. 请编写一个C语言程序,实现一个简单的计算器,能够进行加、减、乘、除四种基本运算。

c语言试题:数据类型、运算符与表达式 (1)

c语言试题:数据类型、运算符与表达式 (1)

3 数据类型、运算符与表达式一、单项选择题1、以下选项中,不正确的 C 语言浮点型常量是( C )。

A. 160.B. 0.12C. 2e4.2D. 0.0分析:e 后面的指数必须为整数。

2、以下选项中,( D )是不正确的 C 语言字符型常量。

A. 'a'B. '\x41'C. '\101'D. "a" 分析:在C 语言中,’a ’表示字符常量,”a ”表示字符串。

3、 在 C 语言中,字符型数据在计算机内存中,以字符的(C )形式存储。

A.原码B.反码C. ASCII 码D. BCD 码分析:将一个字符常量放入一个字符变量中,实际上并不是将字符本身放到内存单元中,而是将字符的对应的ASCII 码放到储存单元中。

4、若x 、i 、j 和k 都是int 型变量,则计算下面表达式后,x 的值是( C )。

x=(i=4,j=16,k=32)A. 4B. 16C.32D.52分析:(i=4,j=16,k=32)的值为最后一个表达式的值,即为32,所以x=32.5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B )。

A. 算术运算、赋值运算、关系运算B. 算术运算、关系运算、赋值运算C. 关系运算、赋值运算、算术运算D. 关系运算、算术运算、赋值运算分析:算术运算符包括加法运算“+”符减法运算“-”符乘法运算符“*”以及除法运算符“/”,赋值运算符包括“=、+=、-=、*=、/=、……”,关系运算符包括“<、<=、>、>=”。

6、若有代数式bc ae3 ,则不正确的C 语言表达式是( C )。

A.a/b/c*e*3 B. 3*a*e/b/c C.3*a*e/b*c D. a*e/c/b*3分析:C 选项表达的是3ace/b 。

7、表达式!x||a==b 等效于( D )。

A. !((x||a)==b)B. !(x||y)==bC. !(x||(a==b))D. (!x)||(a==b) 分析:由符优先级先后顺序在!x||a==b 中应先算“||”再算“!”,最后算“==”。

C语言数据类型和运算符及表达式复习题

数据类型、运算符和表达式复习题一.选择题1. 以下不合法的用户标识符是:()a) f2_G3 b) If c) 4d d) _82. 以下选项中合法的用户标识符是:()a) long b) _2Test c) 3Dmax d) A.dat3. 以下可用作用户标识符的是:()a) 12_a b) signed c) t-o d) _if4. 以下不是关键字的标识符是:()a) continue b) char c) If d) default5. C语言提供的合法的关键字是:()a) swicth b) cher c) Case d) void6. 以下选项中不合法的int整型常数是()a) 32768b) -56 c) 03 d) 0xAF7. 以下合法的长整型常量是()a) 2L b) 49627 c) 34566666 d) 213&8. 以下正确的实型常量是()a) 1.2E b) .579899 c) 1.2e0.6 d) 89. 以下选项中合法的实型常数是()a) 5E2.0 b) E-3 c) .2E0d) 1.3E10. 以下合法的八进制数是()a) 0135b) 068 c) 013.54 d) o711. 以下合法的十六进制数是()a) 0x b) 0x4de c) 0x1h d) ox7712. 以下选项中非法的数值常量是()a) 019b) 0L c) 0xff d) 1e113. 若变量已正确定义,以下合法的赋值表达式是()a) a=1/b=2 b) ++(a+b)c) a=a/(b=5)d) y=int(a)+b14. 若变量已正确定义,以下非法的表达式是()a) a/=b+c b) a%(4.0)c) a=1/2*(x=y=20,x*3) d) a=b=c15. 设x为int类型,其值为11,则表达式(x++*1/3)的值是:a) 3 b) 4 c) 11 d) 1216.设a,b均为double型,且a=5.5;b=2.5;则表达式(int)a+b/b的值是()a) 6.500000 b) 6 c) 5.500000 d) 6.000000 17.若a为int型,且其值为3,则执行完表达式:a+=a-=a*a后,a的值是()a) -3 b) 9 c) -12 d) 618.设k和x均为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)19. 若a,b,c 均被定义成整型并已赋大于1的值,能正确表示代数式c b a ⋅⋅1的C 语言表达式是( )a) 1/(float)a*b*c b) 1/(a*b*c)c) 1.0/a/b/c d) 1/a/b/(float)c20. 以下变量x,y,z 均为double 型且已正确赋值,不能正确表示代数式z y x⨯的C 语言表达式是( )a) x/y*z b) x*(1/(y*z))c) x/y*1/z d) x/y/z21. 不能正确表示代数式d c b a ⋅⋅的C 语言表达式是( ) a) a/(c*d)*b b) a*b/c/dc) a*b/c*d d) a*b/(c*d)22.若题中变量已正确定义并赋值,下面符合C 语法的表达式是( )a) a%=7.6 b) a++,a=7+b+cc) int(12.3)%4 d) a=c+d=a+723. 若t 已定义为double 型,则表达式:t=1,t++,t+5的值为( ) a) 7 b) 7.0 c) 2.0 d) 1.024. 已有定义:int a,b; float x,y;,以下正确的赋值语句是:( ) a) a=1,b=2, b) y=(x%2)/10; c) x*=y+8; d) a+b=x;25. 有以下程序:main(){ int y=1111;printf(“y=%6d\n”,y);printf(“y=%+06d\n”,y);}程序运行的结果是:()a) y= 1111 b) y= 1111c) y=1111 d) y= 1111y=001111 y=+01111 y=+01111 y=1111 26. 有以下程序:main(){ int y=456;printf(“*y=%7o*\n”,y);printf(“*y=%-7o*\n”,y);printf(“*y=%07o*\n”,y);}程序运行的结果是:()a) *y= 710*b) *y= 456**y=710 * *y=456 **y=0000710* *y=0000456*c) *y=710* d) *y=456**y=-710* *y=-456**y=0710* *y=0456*27. 有以下程序:main(){ float y=3.667;printf(“*%f*\n”,y);printf(“*%7.2f*\n”,y);printf(“*%8.0f*\n”,y);}程序运行的结果是:()a) *3.667000* b) *3.667000** 3.67* *3.667 ** 4* *4.000000*c) *3.667* d) *3.667000**3.667000* *3.67**3.667000* *4.000000*28. 已有定义:double a,b;,若要求按输入方式(此处*代表一个空格)**1.0**2.0<回车> 分别给a,b输入1,2,则能正确进行输入的语句是()a) scanf(“%f%f”,&a,&b);b) scanf(“%5.1lf%5.1lf”,&a,&b);c) scanf(“%lf%lf”,&a,&b);d) scanf(“%5e%5e”,&a,&b);29. 以下合法的定义语句是()a) short _auto_=100-1;b) double b=1+5e2.5;c) long do=1l;d) float 2_and=1e-3;30. 以下选项中不是C语句的是()a) ++t b) ; c) k=i=j; d) {a/=b=1;b=a%2;}31. 有定义语句:int a=5,b;,不能给b赋2的赋值语句是()a) b=a/2; b) b=b+2; c) b=2%a; d) b=5;b=2;32. 设x和y均为int型变量,语句组x+=y;y=x-y;x-=y;的功能是()a) 把x和y从小到大排列b) 把x和y从大到小排列c) 无确定结果d) 交换x和y中的值33. 有定义语句:long int a; int k;,能给a赋40000的正确语句是()a) a=20000+20000; b) a=4000*10;c) k=400;a=k*100; d) a=4000;a=a*10;34. 若有定义:int a=8,b=5,c;,执行语句:c=a/b+0.4;后,c的值是()a) 1.4 b) 1c) 2.0 d) 235. 有以下程序:main(){ int k=2,i=2,m;m=(k+=i*=k++);printf(“y=%d,%d\n”,m,i);}程序运行的结果是:()a) 8,6 b) 8,3 c) 6,4 d) 7,436. 有以下程序:main(){ int y=3,x=3,z=1;printf(“%d %d\n”,(++x,y++),z+2);}程序运行的结果是:()a) 3 4 b) 4 2c) 4 3 d) 3 337. 有以下程序:main(){ int i; long l ; float f ; double d ;i=f=l=d=20/3;printf(“%d %ld %3.1f %3.1f\n”,i,l,f,d);}程序运行的结果是:()a) 6 6 6.0 6.0 b) 6 6 6.7 6.7c) 6 6 6.0 6.7 d) 6 6 6.7 6.038. 有以下程序:main(){ unsigned a=32768; int b ;b=a ;printf(“b=%d\n”,b);}程序运行的结果是:()a) b=32768 b) b=32767 c) b=-32768d) b=-1 39.有以下语句printf(“%d,%d,%u\n”,016,16,-16);其输出结果是()a) 16,16,65520 b) 14,16,65520c) 16,16,-16 d) 14,16,-1640.若有定义语句:int b=0x17;printf(“%d”,b++);,其正确的输出结果是()a) 23 b) 24 c) 25 d) 2241.有以下程序:main(){ int x=0xffff;printf(“%d\n”,x--);}程序运行的结果是:()a) 32767 b) FFFEc) -1 d) -32768二.填空题1.已有定义:float f=13.8;,则表达式:(int)f%3的值是___1___.2. 已有定义:int x=3;, 则表达式:x=x+1.78的值是___4___.3. 已有定义:double x=3.5; 则表达式:x=(int)x+1的值是_4.000000__.4. 已有定义:int x=10,y=3,z;, 则表达式:z=(x%y,x/y) 的值是__3___.5. 设a,b,c为整型数,且a的值为2,b的值为3, c的值为4,表达式:a*=16+(b++)-(++c)的值为__28____.6. 已有定义:int x=0,y=0;,则计算表达式:(x+=2,y=x+3/2,y+5)后,表达式的值是_8__,变量x的值是_2__,变量y的值是__3__.7. 已有定义:int x=110,y=017;,则计算表达式:(x++,++y)后,按十进制表示,变量x的值是__111___,变量y的值是__16___。

C语言习题二数据类型及运算

C语言习题二数据类型及运算习题二数据类型及其运算1.已定义c为字符型变量,则下列语句中正确的是______。

A、c='97'B、c="97";C、c=97;D、c="a";解析:本题的考查点是字符型变量。

C语言中,字符型数据和整型数据之间可以通用。

一个字符数据既可以以字符形式输出,也可以以整数形式输出。

所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。

2.以下选项中可作为C语言合法整数的是______。

A、10110BB、0386C、0XffaD、x2a2解析:本题的考查点是C语言中的整型常数。

整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。

由此可知选项A错;选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的;选项D,数字前加“0x”表示十六进制数,所以D也不对。

故本题答案为C。

3. 以下选项中不能作为合法常量的是______。

A、1.234e04B、1.234e0.4C、1.234e+4D、1.234e0解析:本题考查的是常量表示法。

本题选项中的几个常量都属于指数形式的实型常量。

此种类型的常量要求字母e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。

故本题答案为B。

4.与十进制数200等值的十六进制数为______。

A、A8B、A4C、C8D、C4解析:本题考查的是进制之间的转换。

用十--十六进制转换法,除16,由下而上取余法。

故本题答案为C。

5. 若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是______。

A、sqrt(abs(n^x+e^x))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(fabs(pow(n,x)+exp(x)))D、sqrt(fabs(pow(x,n)+exp(x)))解析:本题考查的是基本函数应用。

c语言数据类型考试题目及答案

c语言数据类型考试题目及答案C语言数据类型考试题目及答案1. 以下哪个选项不是C语言中的基本数据类型?A. intB. floatC. charD. string答案:D2. 在C语言中,一个int类型变量通常占用多少字节?A. 1B. 2C. 4D. 8答案:C3. 假设变量a的类型为int,变量b的类型为float,执行以下代码后,变量a的值是多少?```cint a;float b = 10.5;a = (int)b;```A. 10B. 11C. 10.5D. 0答案:A4. 以下哪个关键字用于定义一个字符常量?A. charB. stringC. intD. float答案:A5. 在C语言中,以下哪个选项不是合法的变量名?A. _myVarB. my_varC. 2myVarD. myVar2答案:C6. 以下哪个数据类型用于存储单个字符?A. intB. floatC. charD. double答案:C7. 如果一个变量的类型为double,那么它的值可以被存储为:A. 整数B. 小数C. 整数和小数D. 以上都不是答案:C8. 在C语言中,以下哪个运算符用于比较两个值是否相等?B. !=C. <=D. >=答案:A9. 以下哪个选项是C语言中的逻辑运算符?A. &&(逻辑与)B. ||(逻辑或)C. &(按位与)D. 以上都是答案:D10. 在C语言中,以下哪个关键字用于定义一个静态变量?A. staticB. constC. externD. volatile答案:A11. 以下哪个选项是C语言中的循环结构?A. ifB. switchC. whileD. for答案:C12. 在C语言中,以下哪个关键字用于定义一个函数?A. functionB. defC. void答案:C13. 以下哪个选项不是C语言中的文件操作函数?A. fopenB. fcloseC. printfD. fread答案:C14. 在C语言中,以下哪个关键字用于定义一个指针?A. pointerB. ptrC. *D. ref答案:C15. 以下哪个选项是C语言中的数组?A. 一组具有相同类型的变量B. 一组具有不同类型的变量C. 一个变量D. 一个函数答案:A。

c语言基本数据类型及运算试卷答案

1 - 5 ACAAC6 - 10 AABCD11 - 15 DADAB填空题:1.答案:(1) %d (2)%Ld (3)%f (4)%e (5)%f(6)%e (7) %c (8) %d (9)%s2.答案:一一对应关系:格式串与输入项的个数要相同,顺序要一致,类型要匹配3.答案:(1)int n,d2,d0 (2) d2=n/100 (3) d0=n%10 (4)d2 * 100+d04.答案:①12.770000 ②A ③795.答案:1,0问答题1.解:字符型常量与字符串常量的书写方式不同,用单引号括起来的字符是字符常量,用双引号括起来的字符是字符串常量。

字符串常量与字符型常量的存储方式不同,C编译程序在存储字符串常量时,自动采用\0作为字符串常量的结束标志。

2.答案:(1)-1 (2)1(3)12 (4)103.解:正确程序如下。

#include <stdio.h>void main( ) /*修改*/{float f=7.12;char c='c'; /*修改*/printf("%d\n",(int)f%3); /*修改*/printf("%c",c);}4.答:错误的地方如下:(1)变量k的值溢出,不能得到正确结果。

(2)变量x和y未赋初值。

5.答:输出结果为:i=-1 j=-1编程题【分析与解答】(1)定义4个双精度变量a、b、c和ave,变量a、b、c分别存放读入的3个双精度数,ave存放它们的平均值。

(2)设计输入语句,以及在此之前用于提示输入的(printf)语句。

(3)设计求平均值的算法,把所求得平均值放入变量ave中。

(4)设计把变量ave中的数,从小数点后第二位数进行四舍五入的算法。

现举例说明:若ave中的数为123.4644,为了保留此值小数点后一位,可用表达式:(int)(123.4644*10)/10.0;依次推算,为了保留此值小数点后二位,可用表达式:(int)(123.4644*100)/100.0;其他依次类推。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第2章基本数据类型和运算学习和解题要点1.数据类型C 语言中的数据类型比别的语言丰富。

要学好这部分内容,首先要掌握C 语言的数据在内存中的表示。

整型数据:以二进制的形式表示(1) int 类型正数:如 123 (+123)用 16 位二进制(二个字节)表示原码最大正整数 215-1=214+213+23+22+21+20=32767负数:如–123原码反码(符号位不动,其它取反)补码(补码加已知补码求原负数符号位不动,其它取反加 1加最大负整数-215=32768 因为 -215 < -(215-1) 所以用 -215而不用 -(215-1)(2) unsigned (int) 类型称为无符号整数,它不是指不带“+ 或 -”号的整数,而是指内存表示这类数时没有符号位,16 位二进制都用来表示数,因此最大数 215+214+213+23+22+21+20=65535最小数 0(3) long (int) 类型用 32 位二进制(四个字节)表示,其他同 int 型(4) short 类型有的计算机(小型、中型、大型机)int 即是 long ,而short用16 位二进制(二个字节)表示。

因此C语言中,short一定是短整型,long一定是长整型,而int因不同的系统而不同。

PC 586 机int即short,所以一般不用short 。

(5) 在C语言中,整型常量有三种形式的写法:十进制整数(0 - 9)表示。

通常整数的写法。

八进制整数(0 - 7)表示。

在整数的前面加数字0。

十六进制整数(0 - f)表示。

在整数的前面加0x。

长整型常量表示方法:在整数的后面加L或 l。

字符型数据:以二进制的形式表示char 型用 8位二进制(一个字节)表示如…a‟,在程序中要用单引号表示,输出时无单引号,内存中表示为6+25+20=97 即ASCII 码 97实型数据:以二进制的形式表示(1) float 类型如 123.45 (+123.45)用 32 位二进制(四个字节)表示为 0.12345×103不同的系统,n的位数有不同,n长,精度高,但可表示的指数小,能表示的数的范围小。

反之,则能表示的数的范围大,但精度低。

float 类型又称为“浮点”类型,把实数的小数点都看成在第一位,而用指数位“浮动”小数点。

(2) double 类型与float同只不过用 64 位二进制(八个字节)表示。

因此精度高,称双精度。

2.变量的概念C语言中的变量可以理解成计算机内存的一个空间,它必须有一个名字(标识符),可放什么样的数据类型(如定义时前面加int 、float 、char 等),它是开辟在内存的一般数据区(又称静态数据区)还是开辟在内存的堆栈区(又称动态数据区),这可由程序中用static或auto(可缺省)来规定。

同时,一个变量有它的有效的使用范围,称之为作用域。

最后,每个变量都有地址,这在指针类型时要用到。

变量可以一边定义一边赋初值,在程序运行时可以使它发生变化,因此称之为变量。

3.运算符的注意事项(1)双目运算符 % 的两边一定是要整数,运算结果是整除后的余数,也是整数,注意2%5 得2而不是 0。

(2)双目运算符 / 的两边如果是整数,则结果也是整数,5/2 结果为 2而不是 2.5 ,即使是 float x; x=1/2; x 中也只有 0.0 , 要人为的写成 x=1/2.0 或 x=1.0/2 ,x中才是0.5 。

(3)单目运算符 ++ -- 放在运算对象的前面时,称为“先加(减) 1,后使用”,这一般不会搞错。

当放在运算对象的后面时,称为“先使用,后加(减) 1”,这时要注意什么时候“使用”。

如 i=3; (i++)+(i++)+(i++) 结果是9而不是12,这里,三个i相加是“使用”,使用后才三次加1,i成为6,“使用”是以整个表达式为准。

而 i=3; (++i)+(++i)+(++i) 结果是18而不是15,这里,三个i依次加1 成为6,然后再“使用”。

也是以整个表达式为准。

又如 i=1; if(i--) printf(“%d”,i); 输出是0而不是1。

这是因为if()中i-- 是整个表达式,先用i为1,用于“判断”成立,这算“使用”了,然后i减1成为0,输出时i 已为0。

同理 char c=‟A‟; switch(c++) { case …A‟: printf(“%c”,c);break;………},输出为B。

(4). 算术自反赋值运算符中,注意 = 赋值号右边是一个整体,如 c%=a-3 是c=c%(a-3)而不是 c=c%a-3。

(5). 关系运算符中,注意等于比较运算符“==”与赋值运算符“= ”容易疏忽,二者是绝然不同的,不然会引起很大的错误。

如:i=0; if(i==1) 判断得结果应该是不成立,若写成:if(i=1)则变成给i赋予1,赋值表达式的结果也是1,判断结果是成立的。

(6). 应该熟记运算符及其优先级汇总表,熟记运算符之间的运算次序及结合方向。

4.表达式注意的问题(1). 在算术表达式中应注意各类数值型数据间的混合运算问题,如下:double float float 型一定先转换成double型参加运算。

long运算对象不同时转换方向。

unsignedint char, short char, short型一定先转换成int型参加运算。

(2). C语言无“真假值”,判断成立则结果为1,不成立则结果为0。

而当表达式的值为非0则认为“真”,当表达式的值为0则认为“假”。

(3). 关系表达式中,数学上的 0<x<10不能写成 0<x<10 而应写成 0<x && x<10,不然会引起很大的错误。

如:当 x=20 时,数学上0<x<10是不符合的,但在C程序中认为成立。

这是因为C程序从左向右判别,0<x成立,则结果为1,1<10也成立。

(4).在“&&”连接的逻辑表达式中,当左边表达式的值为0,则C语言不再计算右边表达式,因为无论右边表达式的值为什么,整个逻辑表达式的值都为0。

同样,在“||”连接的逻辑表达式中,当左边表达式的值为非0,则C语言不再计算右边表达式,因为无论右边表达式的值为什么,整个逻辑表达式的值都为1 。

如:int a=b=m=n=1; (m=a!=b)&&(n=a!=b) a!=b不成立为0,m得0,n仍为1int a=b=m=n=0; (m=a==b)||(n=a==b) a==b成立为1,m得1,n仍为0(5). C语言中,赋值号“=”,逗号“,”都是运算符。

a=10是赋值表达式,a=10;是赋值语句,sum=0,i=0是逗号表达式,它是由二个赋值表达式用逗号运算符连起来的逗号表达式。

练习题一、单项选择题1.下列数据中属于字符串常量的是(A)。

A.”a” B. {ABC} C. ‟abc\0‟ D. ‟a‟2.下列数据中属于“字符串常量”的是(B)。

A.ABC B. “ABC” C. ‟abc‟ D. ‟a‟3. 在PC机中,‟\n‟在内存占用的字节数是(1)。

A. 1B. 2C. 3D. 44. 在PC机中,”a\xff”在内存占用的字节数是(c)。

// \0XX \xhh \xh 转译符A. 5B. 6C. 3D. 45.字符串”ABC”在内存占用的字节数是(b)。

A. 3B. 4C. 6D. 86.字符串”\”ABCD\””在内存占用的字节数是()。

A. 4B. 6C. 7D. 87. 在C语言中,合法的长整型常数是(A)。

A. 0LB. 4962710C. 0.054838743D. 2.1869e108.在C语言中,合法的短整型常数是(D)。

A. OLB. 0821C. 40000D. 0x2a9.下列数据中不属于“字符常量”的是(c)。

A. …\a‟B. …\160‟C. …070‟D. 07010.char型常量在内存中存放的是(A)。

A. ASCII代码值B. BCD代码值C. 内码值D. 十进制代码值11.设整型变量m,n,a,b,c,d均为0,执行( m= a==b )||(n=c==d)后,m,n的值是(C)。

A. 0,0B. 0,1C. 1,0D. 1,112.设整型变量m,n,a,b,c,d均为1,执行“(m= a>b )&&(n=a>b)”后,m,n的值是(B)。

A. 0,0B. 0,1C. 1,0D. 1,113.设int a为2,执行下列语句后,float b的值不为0.5的是(B)。

A. b=1.0/aB. b=(float)(1/a)C. b=1/(float)aD. b=1/(a*1.0) 14.设a为5,执行下列语句后,b的值不为2的是(C)。

A. b=a/2B. b=6-(--a)C. b=a%2D. b=a>3 ? 2:815.执行语句“x=(a=3,b = a--)”后,x,a,b的值依次为(C)。

A. 3,3,2B. 3,2,2C. 3,2,3D. 2,3,216. int b=0,x=1; 执行语句“if(x++) b=x+1;”后,x,b的值依次为(A)。

A. 2,3B. 2,0C. 3,0D. 3,217.设有语句int a=3;,则执行了语句a+=a-=9;后,变量a的值是(D)。

A. 3B. 0C. 9D. -1218.设有语句int a=3;,则执行了语句a+=a-=a*=a;后,变量a的值是(B)。

A. 3B. 0C. 9D. -1219. int a=4,b=3,c=-2,d=2; 逻辑表达式a>0 && b && c<0 && d>0的值是(A)。

A. 1B. 0C. -1D. 出错20.在以下一组运算符中,优先级最高的运算符是(C)。

A. <=B. =C. %D. &&21.设整型变量i的值为3,则计算表达式i-- -i后表达式的值为(A)。

//A=*P++ +*PA. 0B. 1C. 2D. 表达式出错22.设整型变量i,j=3; 则计算表达式i=j++ +j后i,j的值为(D)。

A. 4,4B. 6,6C. 4,6D. 6,423.设整型变量a,b,c均为2,表达式a+++b+++c++的结果是(A)。

A. 6B. 9C. 8D. 表达式出错24.设整型变量i值为2,表达式(++i)+(++i)+(++i)的结果是(C)。

// VSA. 6B. 12C. 15D. 表达式出错25.设整型变量i,j值均为3,执行了“j=i++,j++,++i”后,i,j的值是(B)。

相关文档
最新文档