基础知识
1. 每个C程序都必须有且仅有一个________ 函数。
2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、 链接 、加载 和执行。
3. 软件是程序,以及______、使用和维护所需要的所有文档。
4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。
5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类 。6. C语言是由________组成的。
7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和 函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作 ,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动 化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程 序,统称为_________。
11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻 译可以直接识别和执行的程序设计语言。
12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对象,也可以用标号和符号来代替地址、常量和变量。
13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。
15. 函数体即为包含在{ }内的部分。它分为________和为完成功能任务由若干个C语句 组成的执行部分。
16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。
18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”, 将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。
19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20. 第一个系统体现结构化程序设计思想的教学工具语言是_______语言。 解答: 1. main()
2. 编译
3. 开发
4. 指令序列
5. 高级语言 6. 函数
7. 自定义函数
8. 函数首部 9. 翻译
10. 应用软件
11. 二进制代码
12. 助记符 13. #
14. main函数
15. 声明部分
16. ;(或分号)
17. 模块化
18. 翻译
19. 执行速度
20. PASCAL
常量、变量和表达式
1. 以16位计算机为例,若定义long int a; 则变量a占______个字节的内存空间。
2. 以16位计算机为例,若定义double a; 则变量a占______ 个字节的内存空间。
3. 以16位计算机为例,若定义long double; 则变量a占 ______ 个字节的内存空间。
4. 在______ 位机,int型占4个字节。
5. C语言的数据类型有:基本数据类型、构造数据类型、枚举类型、______、空类型。 6. 在C语言中,基本数据类型有:______ 。 7. 整型常量046转换为十进制数等于______ 。 8. 整型常量054转换为十进制数等于______ 。
9. 整型常量0x125转换为十进制数等于 ______。
10. 整型常量0x7C转换为十进制数等于 ______。
11. 整型常量39转换为八进制等于 ______。
12. 实数473.468写成规范化指数形式,则应为 ______。
13. 实数0.0453写成规范化指数形式,则应为 ______。
14. 将0x123转换为二进制等于 ______。
15. 字符’A’表示成十六进制等于 ______。
16. 在C语言中,称代表常量的标识符为 ______。
17. C语言中是用编译预处理命令______ 来定义符号常量
18. 在C语言中,以反斜杠符(\\)开头,后跟字符的字符序列,称之为 ______ 主
要用来表示控制及不可见的字符或者一些图形符号
19. 语句printf(\"\\106\")执行的结果输出是 ______。
20. 语句printf(“b”)执行的结果输出是______。
21. 语句printf(“\\\\b”)执行的结果输出是 ______。
22. 语句printf(\"\\102\")执行的结果输出是 ______。
23. 若有char ch1; ch1='a'+4; 则语句printf(\"%c\的输出结果为 ______。
24. 字符串常量“Hello, everyone!”占据的内存空间为______ 个字节
25. 字符串常量“Hello,Bob!”占据的内存空间为 ______ 个字节
,
26. 十进制整型常量由0~9个数据组成,但不能以______ 开始,没有小数部分
27. 十六进制常量由0~9和______ 组成
28. unsigned long类型常量通常以______ 为后缀
29. 实型常量通常有小数形式和______ 两种表达方式
30. C语言中是用编译预处理命令______ 来包含其他源文件
31. 为了表示字符串的结束,系统自动在字符串的最后加一个______ ,但不被输出
32. C语言中,其值可被改变的量称为变量,它具有三个基本要素:变量名、______ 和变量值
33. C语言规定,变量的标识符只能由字母、数字和下划线组成,且不能以______ 开 头。
34. 在16位机中,sizeof(“hello\\n”)等于 ______。
35. 在16位机中,printf(“\\“hello\\””)等于 ______。
36. 字符变量在内存中占用______ 个字节的存储空间。
37. 若有定义int x=27, y=6; 则表达式 x/y的值为 ______。
38. 若有定义int x=47, y=8; 则表达式 x%y的值为 ______。
39. 若有定义char ch1='A',ch2,ch3; 执行ch2=ch1++; ch3=++ch1; printf(\"ch1=%c, ch2=% c\则输出为 ______。
40. 若有定义char ch1='A',ch2,ch3; 执行ch2=ch1++; ch3=++ch1; printf(\"ch2=%c, ch3=% c\则输出为 ______。
41. 若有定义int i=5, j, k; 执行j=i--; k=--i; printf(\"i=%d, j=%d\\n\则输 出为 ______。
42. 表达式 (int)(13.7+25.6)/4%5 的值是 ______。
43. 表达式 3.6-5/2+1.2+5%3 的值是______。
44. 表达式54%10/2+4.0*(8/5) 的值是 ______。
45. 若定义int x; double b=5.45; 执行x=b后,则x的值为______。
46. 若定义int y; char c='A'; 执行y=c后,则y的值为 ______。
47. 若定义 int a=8; float b=2.5; 则a/(int)(b)的值为 ______。
48. 若a=5,则执行a*=7-3语句后,a的值是 ______。
49. 若int a=1,b=0,c=4,d=2; 则表达式(a>b ? a:b)&&(c-d)的值为______。
50. 已知a = 0 ,表达式 a = 1?b = 1:b = 0; 执行后,b的值是 ______。
51. 若定义int m=7,n=12; 则表达式n%=m-m%5的值是 ______。
52. 若定义int a=8; float b=4.5;执行a*=a/=a-b后,a的值为 ______。
53. int a=2; !a++的值为 ______。
54. int a=0; !++a的值为 ______。
55. int a=7;float b=4.5;则printf(“%d”,a*=a/=a-b)的值为 ______。
56. int k=7;float a=2.5,b=4.7;则表达式a+k%3*(int)(a+b)%2/4的值为 ______。
57. #define MM(a,b) (a-b)?a:b int a=2,b=6;printf(“%d\\n”,MM(a,b))的值为 ______。
58. 在32位机中,int a=4,b=7; printf(“%0x”,a-b)的值为:______。
59. int x,y,z; x=y=2;z=3;y=x++-1;printf(“%d,%d”,x,y)的值为: ______。
60. int i=2,j; printf(“%d”,j=i<1)的值为:______
解答: 1. 4 2. 4 3. 10 4. 32
5. 指针类型
6. int、float、double、char 7. 38 8. 44
9. 293
10. 124
11. 047
12. 4.734680e+002
13. 4.530000e-002
14. 100100011
15. \\x41/41H
16. 符号常量
17. #define
18. 转义字符常量 19. F 20. b
21. \\b
22. B 23. e
24. 16
25. 11 26. 0
27. A~F
28. U
29. 指数形式
30. #include
31. “\\0”
32. 变量类型
33. 数字 34. 7
35. “hello” 36. 1 37. 4 38. 7
39. ch1=C, ch2=A
40. ch2=A, ch3=C
41. i=3, j=5 42. 4
43. 4.800000
44. 6.000000 45. 5
46. 65 47. 4
48. 20 49. 1
50. 1 51. 2 52. 4 53. 0 54. 0 55. 4
56. 2.500000 57. 2
58. fffffffd
59. 3,1 60. 0
顺序结构
1. C语言的语句可分为5类,它们是:控制语句、____________、函数语句、符合语句和空 语句。
2. 常用于字符输入的函数为:________________ 。
3. 常用于字符输出的函数为:________________。
4. 常用于字符串输入的函数为:________________。
5. 常用于字符串输出的函数为:________________。
6. 格式输入函数的一般形式为:________________ 。
7. 格式输出函数的一般形式为:________________ 。
8. printf和scanf是标准的库函数,它们的函数原型在头文件________________中。
9. 有char ch,则从键盘给ch赋值的格式输入语句为:________________。
10. 如果要输出字符串常量“HelloWord!”,则格式输出语句为:________________。
11. 设有定义:long x=-123456L;,请写出能够正确输出变量x值的语句________________ 。
12. 若有int a,b; ,想通过scanf(\"%d%d\输入语句给a赋于1,给b赋于2,则从键盘
输入数据的形式是________________。
13. 若有int i,j; scanf(\"i=%d,j=%d\";&i,&j); ,要求给i赋10,给j赋20,则应该从键盘 输入_______。
14. 已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k
的值为3,请写出正确的输入语句________________ 。
15. 有int m,n,p; scanf(\"m=%dn=%dp=%d\ printf(\"%d%d%d\\n\若想 从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是_____
___________。
16. 有 int a; float b, c; scanf(\"%2d%3f%4f\ printf(\"\\na=%d, b=%f, c= %f\\n\
,若运行时从键盘上输入9876543210<回车>,则程序的输出结果是___________________
__。
17. 有 int m=0256,n=256; 则 printf(\"%o %o\\n\的输出结果是__________________ ___ 。
18. 有int x=102,y=012; , 则printf(“%2d,%2d\\n”,x,y); 的输出结果是______________ _______ 。
19. 有定义和语句:int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); , 则 printf(\"%d %d %3.1f %3.1f\\n\的输出结果是_____________________ 。
20. 若有定义和语句:int m=0xabc,n=0xabc; m-=n; 则printf(\"%o\\n\的输出结果是___ __________。
21. 若有int m=32,n=032; ,则printf(\"%d,%x\\n\执行后输出结果是______________ _____ 。
22. 若有 int a=1234; ,则 printf(\"%2d\\n\ 的输出结果是_____________________ 。
23. 若变量已正确说明为float类型,要通过语句scanf(“%f %f %f ”,&a,&b,&c);给a赋于1 0.0,b赋予22.0,c赋予33.0,不正确的输入形式是_____________________ 。 A) 10 <回车>22<回车>33<回车> B) 10.0,22.0,33.0<回车> C) 10.0<回车> 22.0 33.0<回车> D) 10 22<回车> 33<回车>
24. 若有 int x=3,y=1; 则printf(\"%d %d\\n\的输出结果是__________________ ___ 。
25. 若有定义和语句:double d; float f; long l; int i; i=f=l=d=20/3; 则 printf(\"%
d %ld %f %f \\n\的输出结果是(小数点后只写一位) _____________________。
26. 以下说法中正确的是 _____________________。 A) #define和printf都是C语句 B) #define是C语句,而printf不是 C) printf是C语句,但#define不是 D) #define和printf都不是C语句
27. 若有 int k=17; ,则 printf(\"%d,%o,%x \\n\的输出结果是_________________ ____ 。
28. 以下叙述中正确的是_____________________ 。 A) 输入项可以是一个实型常量,如:scanf(\"%f\ B) 只有格式控制,没有输入项,也能正确输入数据到内存,例如:scakf(\"a=%d,b=%d\"); C) 当输入数据时,必须指明变量地址,例如:scanf(\"%f\
29. 若有定义和语句:int u=010,v=0x10,w=10;则printf(\"%d,%d,%d\\n\输出结果是 _____________________。
30. 若有int a=1,b=4,c=2; float x=10.5, y=4.0, z; z=(a+b)/c+sqrt((double)y)*1.2/c+ x; ,则printf(\"%f\\n\的输出结果是_____________________ 。
31. 若有int a=2,c=5; ,则printf(\"a=%%d,b=%%d\\n\的输出结果是________________ _____ 。
32. 有char c; int n=100; float f=10; double x; x=f*=n/=(c=50); 则printf(\"%d %f\\ n\的输出结果是_____________________。
33. 有int i=0,j=0,k=0; scanf(\"%d%*d%d\ printf(\"%d%d%d\\n\若 从键盘输入:10 20 30<回车>。输出结果是_____________________。
34. 若有int a,b,c; a=25; b=025; c=0x25;,则printf(\"%d %d %d\\n\的输出结果 是___________。
35. 有以下语句段 int n1=10,n2=20; printf(“________________”,n1,n2);
要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20
36. 若有语句int i=-19,j=i%4; 则printf(\"%d\\n\的输出结果是_____________________ 。
37. 有int a=0; a+=(a=8); 则printf(\"%d\\n\的输出结果是_____________________。
38. 有int a=1, b=2; a=a+b; b=a-b; a=a-b;则printf(“%d,%d\\n”, a, b );的输出结果是 ______________。
39. 有unsigned short a=65536; int b;,则printf(“%d\\n”,b=a);的输出结果是________ ______。
40. 语句printf(\"\\10289\\n\");的数据结果为:__________________ 。
解答:
1. 表达式语句
2. getchar( )
3. putchar( )
4. gets( )
5. puts( )
6. scanf(“格式控制字符串”,地址表列);
7. printf(“格式控制字符串”,输出表列);
8. stdio.h
9. scanf (“%c”,&ch);
10. printf (“%s”,HelloWord!); 或者:printf (“HelloWord!”);
11. printf(“x=%1d\\n”,x);
12. 1 2 或者 1 2
13. i=10,j=20
14. scanf(“%d,%d,%d”,&i,&j,&k);
15. m=123n=456p=789
16. a=98, b=765.000000, c=4321.000000
17. 256 400
18. 102,10
19. 1 65 1.5 6.5 20. 0
21. 32,1a
22. 1234
23. B
24. 3 3
25. 6 6 6.0 6.0
26. D
27. 17,21,11
28. C
29. 8,16,10
30. 13.700000
31. a=%d,b=%d
32. 2 20.000000
33. 10300
34. 25 21 37
35. n1=%d\\nn2=%d
36. -3
37. 16
38. 2,1 39. 0
40. B89
选择结构
一.填空
1. 在if, while, case, do, else 等关键字中,用于选择结构的有( ).
2. 已知 a = 1; 那么 if ( a = 2) printf(\"%d\的输出结 果是( ).
3. 已知 char a = 'A'; 那么 if ( a > 65) printf(\"%s\, \"smaller\"); 的输出结果是( ).
4. 表示“x≥ y≥ z”的C语言表达式是 ( )。
5. 在C语言中,用于实现选择结构的语句有( )语句和( ) 语句 。
6. 判断两个浮点型变量x和y是否相等一般用:if( <1e-6 )„ 。
7. 设有程序段: t=6;a=7;b=8; if(a=b) t=a;,这段程序执行后,t的结果是( ) 。
8. 设a=1,b=2,c=3,d=4,则表达式:a>b?a:c>d?a:d的结果为( ) 。
9. 表达式98 && 8 && 31 && (98 - 'a')的值为( )。
10. 若int a = 3; 则表达式 (a > 2)&& ! ('D'> 69) 的值为( )。
解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
循环结构
1. C语言中提供了三种循环控制语句,它们是:( )、do-while语句、( ) 。
2. break语句在C程序中只能出现在两种场合:一是用于( )语句中,二是用于 ( )语句中。
3. 以下程序段中的语句printf(“***”)要执行5次,请在空白处填入合适的数 。 for( i=1;i<=( );i=i+2 ) printf(“***”);
4. 定义int k=10;执行语句 while(k<20) k += 1 ; 后,k的值为( )。
5. 在循环控制结构中break语句的作用是( )。
6. 在循环控制结构中continue语句的作用是:( )。
7. 若已知int a[5][5]; 并在运行过程中a数组已经赋值;要打印次对角线元素,在空白处 填入合适的值/表达式; for (i = 0; i<5; i++)
for (j = ( ); j >=0; j--) printf(\"%5d\
8. 执行完语句sum = 0; for (i = 0; i < 10; i++) { if (i % 5 = = 0) sum += i; sum = ( ) 。
9. 在使用while 语句中需要注意,为了防止“死循环”的发生,在循环体中一定要有( )语句。
10. do-while 语句中,判断循环条件在( ),执行循环体在 ( ) 。(填“先”“后
”)
解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
函数
1. 函数中的形参和调用时的实参都是数组名时,传递方式为( ) ;形参实参都是 变量时,传递方式为( )。
2. 一个函数在它的函数体内调用它自身称为( ) 调用。
3. 函数体包括函数的说明部分和( )。
4. 定义在一个程序块(函数)中的变量,称为( )变量,它的作用范围只是定义 它的程序块。
5. 在函数原型声明中,必须声明函数参数的类型,但可以省略( )。
6. C语言源程序中主函数名由系统规定为( ),程序员是不能改变的。
7. 已知函数首部定义为:int stat(int a , float *p) 则此函数的两个参数类型分别是( ) 、( )。
8. 在c语言中,进行函数调用是,实参和实参之间有严格的规定,主要有三种要求分别是: ( ) 相等,( )一致,并( )对应。
9. 若自定义的函数要求返回一个值,则应在该函数中有一条( )语句。
10. 若函数头部定义为 int foo(), 则该函数中return 语句返回的数据类型是( )。
11. 若函数头部定义为 struct stu * foo(), 则该函数中return 语句返回的数据类型是( )。
12. 若函数头部定义为 int * foo(), 则该函数中return 语句返回的数据类型是( ) 。
13. 若函数头部定义为 float foo(), 则该函数中return 语句返回的数据类型是( )。
14. 若函数头部定义为 char foo(), 则该函数中return 语句返回的数据类型是( ) 。
15. 若函数头部定义为 char * foo(), 则该函数中return 语句返回的数据类型是( )。
16. 若函数头部定义为 void foo(int a[]),在主程序中有如下语句: int a[5] = {1};„ foo(a[5]); 这句函数调用的语句是 ( )。 (填“ 正确”“错误”)
17. 若函数头部定义为 void foo(int *a),在主程序中有如下语句: int array[5] = {1};„ foo(array); 这样的语句是( ) 。 (填“正 确”“错误”)
18. 若函数头部定位为 void foo (char * str), 在主程序中有如下语句: char array[5] = \"good\";„ foo(array); 这样的语句是( )。 (填 “正确”“错误”)
19. 若一个函数中的主要语句是这样的, int a = 3; if (a > 3) return -1; return 0; 那么这个函数的返回值是( ) 。
20. 若函数头部定义为void foo (int * a), 主程序中定义 int array[10], 现在要将arra
y 数据传进数组进行处理,正确函数调用语句是( ) 。 解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
12. 13. 14. 15. 16. 17. 18. 19. 20.
数组
一.填空
1. 数组是由固定数目的( )的变量按一定顺序排列而构成的。
2. 设有数组定义:char array[]=“China”;则数组所占的存储空间为( )个字节 。
3. 一个二维字符数组a[10][20]能够存储( )个字符串。
4. 假定在一维数组b[10]中,元素b[5]的指针为p,则p+4所指向的元素为( )。
5. 一维数组的下标从( )开始。
6. 设有数组a[10];则首地址可以写成 ( )。
7. 设有数组int a[10], 数组元素a[5]用指针表示的形式是( )。
8. 设有数组int a[10][15], 数组元素a[5][3]用指针表示的形式是( )。
9. 定义3行4列的整型二维数组a的语句是( )。
10. 定义 int b[ ]={5,6,7,8}, y, *p=b; 执行 y=*p++ 以后, y 的值为( )。
11. 按下面的语句定义数组a 后,a [2][0] 的值为( )。 int a[3][2]={2,4,6,8,10};
12. 假设要把“student!”存入一个字符数组,则该数组长度应该至少为( ) 。
13. 在C语言中,如果采用语句 int a[2][3] = {1,2,3,4,5} 完成一个二维数组的定义和初 始化,那么a[0][1] 的值为( )。
14. 在C语言中,如果采用语句 int a[2][3] = {1,2,3,4,5} 完成一个二维数组的定义和初
始化,再定义 int *b = a[0],那么 *(b+2) 的值为 ( ).
15. 若int a[ ][3]={1,2,3,4,5,6,7,8,9};则*(*a+1)的值是( )。
16. 按下面的语句定义数组b后,b[2][1]的值为( )。 int b[][2]={2,1,4,3,5,6}。
17. 设int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,则*p+4=( )。
18. 定义2行3列5层的整型三维维数组a的语句是( )。
19. 若有int a[3]={10,12,30};则*(a+2)+3= ( )。
20. 若有int a[3]={10,12,30};则a+1是( )的地址。
21. 假设int型变量占两个字节的存储单元,若有定义:int x[10]={0,2,4}; 则数组x在内存
中所占字节数为 ( )。
22. 若有定义int a[][3]={1,2,3,4,5,6,7};,则a数组第一维的大小是( )。
23. 数组 int a[3][3];共定义了( )个数组元素。
24. C语言中,二维数组的存放方式为按( )存放。(填“行”或“列”)
25. 定义int a[10]={11,12,13,14,15}, *p=&a[5]; 假设&a[0]和&a[1]的值分别是0x2000和0 x2004,则p的值是( )。
26. 定义int a[10]={11,12,13,14,15}, *p=&a[3]; 假设&a[0]和&a[1]的值分别是0x2000和0 x2004,则表达式a[0]+*p的值是( )。
27. 对一维数组初始化时,若有int a[10]={0,1,2,3,4},则a[5]的值是( )。
28. 已知:int a[][3]={1,3,5,7,9,11}; 此时数组元素a[1][2]的值为( )。
29. 定义char a[7]= \"abcdef\"; char b[4]= \"ABC\执行语句strcpy(a,b);printf(\"%s\输出结果是( )。
30. 定义int a[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句printf(\"%d\输出 结果是( )。
31. 已知 int a[5] = { 2, 3, 4, 5, 6 }; int *p = a+2; 则表达式 *p*a[3] 的值是( )。
32. 定义char a[7]= \"123456\"; char b[4]= \"ABC\执行语句strcpy(a,b); printf(\"%c\6]),输出结果是( )。
33. 对整形数组int a[5]={1,2,3}; 则执行语句a[2]=a[2]+a[1]*(*(a+3)); a[2]的值为( )
34. 定义char a[5]={65,66,67},*p=a; 则执行语句printf(\"%s\输出结果为( )。
35. 对于定义 struct TData{ int a[2]; char c; }; struct TData slist*3+=,,,1,2-,’A’-,,,3,4-,’B’---; slist[1].a[0]的值为( )。
36. 已知:int a[][3]={1,3,5,7,9,11}; 则*(a[1]+1)的值为( )。
37. 已知:int a[2][3]={1,3,5,7,9,11,13},*p; p=&a[1]; p=p+2; 则*p的值为( )。
38. 定义char a[7]= \"123\"; char b[4]= \"ABC\执行语句strcat(a,b); printf(\"%s\输 出结果是( )。
39. 对整形数组int a[5]={3,3,3}; 则执行语句a[2]=a[1]>0?(a[4]+1):(a[2]+2); a[2]的值 为( );
40. 定义 int a[ ]={5,6,7,8}, *p=a; 执行 *(p++); 以后, a[0]的值为( )。
解答: 1. 同类型 2. 6 3. 10
4. b[9]
5. 0 6. a
7. *(a+5)
8. *(*(a+5)+3)
9. int a[3][4] 10. 5
11. 10 12. 9 13. 2 14. 3 15. 2 16. 6 17. 4
18. int a[2][3][5]
19. 33
20. a[1]
21. 20 22. 3 23. 9
24. 行
25. 0x2014
26. 25
27. 0
28. 11
29. ABC 30. 8
31. 20 32. 6 33. 3
34. BC 35. 4 36. 5
37. 13
38. 123ABC 39. 1 40. 5
结构体
1. 引用结构体变量成员的一般形式是:结构体变量名__________。
2. 定义枚举类型的关键字是__________。
3. 设char 、int、float分别占1、2、4个字节,假设有如下定义: struct student { char name[10]; int nl; float ave; }qq; 则变量qq在内存中所占的字节数是__________。
4. 设char 、int、float分别占1、2、4个字节,假设有如下定义:
union student
{ char name[10]; int nl; float ave; }qq;
则变量qq在内存中所占的字节数是__________。
5. 设char 、int、float分别占1、2、4个字节,假设有如下定义: union stu { char a; int b; float c; }; struct { float c; union stu x; } y; 那么变量y占用的存储空间分别为__________个字节。
6. 设有定义 struct date { int day ; char month ; int year ; } dd , *pd = &dd ;
请写出:使用指针变量pd引用结构体成员 dd .day 的另一种描述形式__________。
7. 结构体变量各成员占用的内存单元起始地址__________。(填“相同”或“不同”)
8. 共用体变量各成员占用的内存单元起始地址__________。(填“相同”或“不同”)
9. 设char 、int、float分别占1、2、4个字节,假设有如下定义: union stud_type { char name[5]; int num; float score; }]; union stud_type stu[10]]; 则程序运行时,系统将为stu分配__________个字节的内存空间。
10. 设char 、int、float分别占1、2、4个字节,假设有如下定义: struct stud_type { char name[5];
int num; float score; }; struct stud_type stu[10]; 则程序运行时,系统将为stu分配__________个字节的内存空间。
11. 设char、float和double型数据占用的内存空间字节数分别是1、4和8,则变量stu1在内
存中占用的字节数是__________。 struct stud_type { char name[10]; float score[5]; double average; }stu1;
12. 写出一个单链表结点的结构体类型定义:结点名为worker,分量num为整型,分量next为
指向下一结点的指针________________________________________。
13. 写出一个货品信息的结构体类型定义:结点名为goods_type,第一个分量货品号num为整
型,第二个分量货品名name为长度为20 的字符型数组,第三个货品库存量amount为整型。__
______________________________________。
14. 在C语言中,可以给某个已有的数据类型重新命名。将int型重新命名为INTEGER,应该表
示为______________________________。
15. 在C语言中,给某个已有的数据类型重新命名的形式为:__________ 类型名 新名称。
16. 结构体变量成员的引用方式是使用__________运算符。
17. 结构体指针变量成员的引用方式是使用__________运算符。
18. 设struct student{ int no;char name[12];float score[3]; } sl,* p = &sl;用指针 法给sl的成员no赋值1234的语句是____________________。
19. typedef的功能是____________________。
20. 设char 、int分别占1、2个字节,假设有如下定义: union student { int n;char a[100]; } b; 则sizeof(b)的值是__________。
解答:
1. •成员名
2. enum 3. 16 4. 10 5. 8
6. pd->day 或(*pd).day 7. 不同
8. 相同 9. 50
10. 110
11. 38
12. struct worker { int num; struct worker *next; };
13. struct goods_type { int num; char name[20];int amount;};
14. typedef int INTEGER;
15. typedef 16. •
17. ->
18. p->no=1234或(*p).no=1234
19. 给某个已有的数据类型重新命名
20. 100
指针
1. 假定在一维数组b[10]中,元素b[5]的指针为p,则p+4所指向的元素为__________。
2. 指针变量是一种专门存放__________的变量。
3. 函数中的形参和调用时的实参都是变量时,传递方式为值传递;形参和实参都是数组名
时,传递方式为__________。
4. 设有数组a[10];则数组元素a[3]的地址可以写成__________。
5. 定义int b[10]; 若元素b[5]的指针为p1,元素b[9]的指针为p2,则p2- p1的值为______ ____。
6. int *p, a; 则语句 p=&a; 中的运算符&是__________符号。
7. 设int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,则*p+4= __________。
8. 定义int a[10]={11,12,13,14,15}, *p=&a[5]; 假设&a[0]和&a[1]的值分别是2000和200 2,则p的值是__________。
9. 对变量的访问方式有直接访问和间接访问两种。其中,将变量a的地址存放在另外一个变
量p中,访问时先从p中取出变量a的地址,再按照a的地址访问a的值,该方式称为__________ 访问。
10. int *p 的含义是____________________。
11. 定义int a[10]={11,12,13,14,15}, *p=&a[5]; 则表达式a[0]+*p的值是__________。
12. 定义int a[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句printf(\"%d\输出 结果是__________。
13. 定义int m=5,n=9,t,*p=&m,*q=&n;顺序执行语句t=*p;*p=*q;*q=t;此时m的值是 _______ ___。
14. 已知 int a[5] = { 2, 3, 4, 5, 6 }; int *p = a+2; 则表达式 *p*a[3] 的值是_____ _____。
15. 假定在一维数组array[10]中,元素array[5]的指针为p,则p-4所指向的元素为
__________。
16. 数组名代表的是____________________。
17. 若int a[3][3]={1,2,3,4,5,6,7,8,9};则*(*(a+2)+1)的值是__________。
18. 若int a[ ][3]={1,2,3,4,5,6,7,8,9};则*(*a+1)的值是__________。
19. 若有int a[3]={10,12,30};则a+1是数组元素__________的地址。
20. 函数调用时参数有值传递和__________传递两种参数传递方式。 解答: 1. b[9]
2. 地址
3. 地址传递
4. &a[3]或a+3 5. 4
6. 取地址 7. 4
8. 2010
9. 间接
10. 定义指针变量p,p指向整型变量。
11. 11 12. 8 13. 9
14. 20
15. array[1]
16. 数组元素的首地址
17. 8 18. 2
19. a[1]
20. 地址
二.阅读程序写结果
选择结构
1. #include int x,y,t; x=7;y=9; if(x 3. 4. case 3: a++;b++; } printf(\"\\na=%d,b=%d\\n\} #include char ch1 = 'E'; if(ch1 >= 'A') ch1++; else ch1+=32; printf(\"ch1 = %c\\n\} #include x=5;y=3; if(x>y) { t=x;x=y;y=t;} printf(\"%d,%d\\n\" , x,y ); } 5. #include int a,b,c,m; printf(\"Enter three integers:\"); scanf(\"%d%d%d\ if(a<=b) m=a; else m=b; if(c 输入:21 22 23<回车> 6. #include ch3++; } 7. #include float x,y; scanf(\"%f\ switch((int)x/10) { case 0: y=1.0; printf(\"y=%f\\n\ case 1: y=2*x+1; printf(\"y=%f\\n\ case 2: y=3*x*x+2; printf(\"y=%f\\n\ default: printf(\"No definition.\\n\"); } return 0; } 输入:15.3<回车> 8. #include case 'A': switch(ch2) { case 'B': printf(\"Good!\\n\");break; case 'A': printf(\"Better!\\n\");break; } case 'B': printf(\"Best!\\n\"); break; } return 0; } 9. #include 10. #include else printf(“$$”); printf(“*”); } 11. #include 12. #include int a=1,b=0; switch(a) { case 1: switch (b) { case 0: printf(\"**0**\"); break; case 1:printf(\"**1**\");break; } case 2: printf(\"**2**\");break; } } 13. #include 14. #include int a=0,b=1,c=0,d=20; if(a) d=d-10; else if (!b) if(!c) d=15; else d=25; printf(\"d=%d\\n\ return 0; } 15. #include { int a=1; switch(a){ case 0: printf(\"**0**\");break; case 1:printf(\"**1**\");break; case 2:printf(\"**2**\");break; } return 0; } 16. #include scanf(\"%d\ y = x>12 ? x + 10 : x - 12; printf(\"%d\\n\ return 0; } 输入:12<回车> 17. #include float x, y; char op; double r; scanf(\"%c%f%f\ switch(op) { case '+': r = x + y; break; case '-': r = x - y; break; case '*': r = x * y; break; case '/': r = x / y; break; } printf(\"%.1f\ return 0; } 输入:3.5<回车> 18. #include \"stdio.h\" void main( ) { int a=7; if(a>9 || a<10) a=a/3; else a=a%3; printf(\"a=%d\ } 19. #include int a=20; switch(a%3) { case 0: printf(\"0\"); case 1: printf(\"1\"); case 2: printf(\"2\"); default: printf(\"3\"); } printf(\"4\"); } 20. #include int a=2,b=5,c=8,t; if ( a < b ) { t = a; a = b; b = t; } if ( b < c ) { t = b; b = c; c = t; } if ( a < b ) { t = a; a = b; b = t; } printf( \"%d,%d\\n\ } 解答: 1. 运行结果: 9,7 2. a=1,b=3 3. ch1= F 4. 3,5 5. m=21 6. ch3=D 7. y=31.600000 8. Good! Best! 9. A B C 10. *** 11. q=35 12. **0****2** 13. *& 14. d=20 15. **1** 16. 0 17. 0.6 18. a=2 19. 234 20. 8,1 循环结构 1. #include 2. #include int i; for(i=1;i 4. #include 5. #include 6. #include { int i,j,k; for(i=1;i<=4;i++) { for (j=1;j<5-i;j++) printf(\" \"); for(k=1;k<=i;k++) printf(\"*\"); printf(\"\\n\"); } return 0; } 7. #include 8. #include 9. #include } printf(\"sum=%d\ } 输入:1<回车> 10. #include 11. #include 12. #include continue; case '1': printf(\"number\\n\"); } } } 输入:01<回车> 13. #include 14. #include 15. #include 16. #include 17. #include \"stdio.h\" void main( ) { int i,j,t; for(i=1,j=10;i<3;i++,j--) t=i+j; t++; printf(\"%d,%d\ } 18. #include \"stdio.h\" void main() { int i=10,j; do { j = i%2; printf( \"%d\ i--; } while ( i> 4 ); } 19. #include \"stdio.h\" void main() { int i=7,j; while ( i> 2) { j = i%2; printf( \"%d\ i--; } printf( \"%d\ } 20. #include int i,j,t=0; for(i=3;i>0;i--) for(j=0;j<4;j++) t+=j; printf(\"t=%d\ } 解答: 1. 4321 2. 1 4 9 16 3. i=6,s=9 4. 1 2 3 4 5 5. sum=18 6. * ** *** **** 7. ## #### ###### ######## 8. m=25,n=30 9. sum=15 10. **! *!! !!! 11. a=6 12. another number number 13. i=3, s=14 14. abcDEF 15. 4,10 16. i=10,j=11 17. 8,12 18. 010101 19. 101012 20. t=18 函数 1. #include int x=3,n=3; long p; p=fun(x,n); printf(\"p=%ld\\n\ return 0; } long fun(int x,int n) { int i; long p=1; for(i=0;i char ch; while((ch=getchar())!='\\n') { if(isDigit(ch)) putchar(ch); } printf(\"\\n\"); return 0; } int isDigit(char ch) { if(ch>='0' && ch<='9') return 1; else return 0; } 输入:Abc1d23eF45g<回车> 3. #include for(i=3;i<=n/2;i=i+2) if(n%i==0) printf(\"\\n\"); } 输入:15<回车> 4. #include printf(\"%5d\ int a=5; int main() { int a=1,b=2; a=a+b; print(); printf(\"%d %d\\n\ return 0; } void print() { int b=3; printf(\"%d %d\\n\ } 5. #include int fun1(int x) { x++; fun2(x); return x; } void fun2(int x) { x++; } 6. #include int fun1(int a,int b,int c); int main() { int a=11,b=21,c=31; fun1(a,b,c); printf(\"%d %d %d\\n\ return 0; } int fun1(int a,int b,int c) { a=a+10; b=b+10; c=c+10; return c; } 7. #include fun(7); printf(\"\\n\"); return 0; } void fun(int x) { if(x/2>1) fun(x/2); printf(\"%5d\ } 8. #include int i,a[5]={1,2,3}; fun(a); for(i=0;i<5;i++) printf(\"%5d\ printf(\"\\n\"); return 0; } void fun(int a[]) { int i; for(i=0;i<5;i++) a[i]+=5; } 9. #include int w = 5 ; fun ( w ) ; printf ( \"\\n\" ) ; } void fun ( int k ) { if ( k>0 ) fun ( k-1 ) ; printf ( \"%d\" , k ) ; } 10. #include int a=1; void main( ) { int a=2; f1(); { int a=3; printf(\"a2=%d\\n\ } printf(\"a3=%d\\n\ } void f1(void) { printf(\"a1=%d\\n\ } 11. #include a=20; b=10; *c=a+b; } void main() { int a=10,b=20,c=30,d=40; f(a,b,&c); printf(\"%d,%d,%d\\n\ } 12. #include int a=2,b=3; printf(\"a=%d,b=%d\\n\ swap(a,b); printf(\"a=%d,b=%d\\n\ } void swap(int a,int b) { int c; c=a; a=b; b=c; } 13. #include void fun(int a,int b,int c); void main() { int x=10,y=20,z=30; fun(x,y,z); printf(\"%d,%d,%d\\n\ } void fun(int a,int b,int c) { a=456;b=567;c=678; } 14. #include int i;float s=0.0; for(i=1;i int i;float a=0.0; for(i=1;i<3;i++) a=a+f(i); printf(\"a=%.4f\\n\ } 15. #include int a=2,i; for(i=0;i<3;i++) printf(\"%d\ } int f(int a) { int b=0,c=3; b++; c++; return(a+b+c); } 16. #include int i,x; for(i=0;i<=2;i++) x=fun(); printf(\"%d\\n\ } int fun() { int x=3; x++; return x; } 17. #include float add(float x,float y); void main( ) { float a,b,c; a=1.0; b=2.0; printf(\"%f\\n\ } float add(float x,float y) { float z; z=x+y; return(z); } 18. #include void fun(int x, int cp, int dp) { cp=x++; dp=++x; } void main(void) c=add(a,b); { int a,c=80, d=-20; a=30; fun(a,c,d); printf(\"%d,%d\\n\ } 19. #include int i=2,p; p=f(i,i+1); printf(\"%d\\n\ } int f(int a,int b) { int c; if(a>b) c=1; else if (a==b) c=0; else c=-1; return (c); } 20. #include if(n= =1) return 1; else return fun(n-1)+3; } void main() { int i,j=0; for(i=1;i<4;i++) j=j+fun(i); printf(\"j=%d\\n\ } 21. #include int t; if(x void main() { int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c); printf(\"%d,%d,%d\ } 22. #include int age(int n) { int c; if(n==1) c=10; else c=age(n-1)+2; return(c); } void main() { printf(\"%d\ } 23. #include printf(\"Hello, world!\\n\"); } void three_hellos(void) { int counter; for (counter =1;counter <= 3;counter++) hello_world(); } void main(void) { three_hellos(); } 24. #include int x,i=1,k=3; x=f(i,k); printf(\"x=%d \\n\ } int f(int a,int b) { int M=0; while(b!=0) { M=M+a; b--; } return M; } 25. #include int i,s = 0; for(i = m;i < n;i++) s += b[i]; return s; } int main() { int x,a[ ] = {1,2,3,4,5,6,7,8,9}, *p = a; x = f(p,3,7); printf(\"x=%d\\n\ return 0; } 26. #include int x = 7; printf(\"i = %d; j = %d; x = %d\\n\ } int main() { int i = 2, x = 5, j = 7; fun(j, 6); printf(\"i = %d; j = %d; x = %d\\n\ return 0; } 27. #include 28. #include void add(int x, int y, int z) { z = x + y; x = x * x; y = y * y; printf(\"(2) x = %d y = %d z = %d\\n\ } 29. int main() { int x = 2, y = 3, z = 0; printf(\"(1) x = %d y = %d z = %d\\n\ add(x, y, z); printf(\"(3) x = %d y = %d z = %d\\n\ return 0; } #include x1 = x; x = y; y = x1; } int main() { int x3 = 10, x4 = 20; sub(x3, x4); sub(x2, x1); printf(\" %d, %d, %d, %d\\n\ return 0; } 30. #include int x; void cube() { x = x * x * x; } int main() { x = 5; cube(); printf(\" %d\\n\ return 0; } 31. #include int t; if(i < j) { invert(s, i + 1,j - 1); t = *(s + i); *(s + i) = *(s + j); *(s + j) = t; } } void main( ) { int a[6] = {10, 6, 23, -90, 0, 3}, i; invert(a, 0, 5); for(i = 0; i < 6; i++) printf(\"%d, \ printf(\"\\n\"); } 32. int func(int a[][3]) { int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++){ a[i][j]=i+j; if(i==j) sum = sum+a[i][j]; } return sum; } int main() { int a[3][3]={1,3,5,7,9,11,13,15,17}; int sum; sum=func(a); printf(\"sum=%d\ return 0; } 33. # include for(i=2; i>0; i--) fun( ); } void fun() { i*=2; printf(\"i=%d\\n\ } 34. #include 35. return fun(n-1)*n; } void main() { int i,j=0; for(i=1;i<=3;i++) j+=fun(i); printf(\"j=%d\\n\} #include int t; if (a > b) t = a/b; else t = a%22; return t; } void main() { int a=33, b=22,c; c=funa(a,b); printf(\"c=%d\\n\ } 36. # include for(i=2; i>0; i--) fun(i); } void fun(int i) { i*=2; printf(\"+%d+\ } 37. # include int x=879; fun(x); } void fun(int n) { int a,b,c,t; a = n % 10; b = (n/10) % 10; b; b = t; } if ( b < c ) { t = b; b = c; c = t; } if ( a < b ) { t = a; a = b; b = t; } printf( \"%d\ } 38. #include c = (n/100) % 10; if ( a < b ) { t = a; a = int funa(int a, int b) { int t; if (a > b) { t = a; a = b; b = t; } return t; } void main() { int a=33, b=22,c; c=funa(a,b); printf(\"c=%d\\n\ } 39. #include printf(\"%d%d\\n\ } 40. #include if(n==1) printf(\"*\\n\"); else { printf(\"-\"); fun(n-1); } } void main() { int i,j=0; for(i=1;i<4;i++) fun(i); printf(\"XiaoXin!\"); } 解答: 1. p=27 2. 运行结果:12345 3. 3 5 4. 5 3 3 2 5. 2 6. 11 21 31 7. 3 7 8. 6 7 8 5 5 9. 012345 10. a1=1 a2=3 a3=2 11. 10,20,30 12. a=2,b=3 a=2,b=3 13. 10,20,30 14. a=1.0000 15. 567 16. 4 17. 3.000000 18. 80,-20 19. -1 20. j=12 21. 4,3,5 22. 18 23. Hello, world! Hello, world! Hello, world! 24. x=3; 25. x=22 26. i = 7; j = 6; x = 7 i = 2; j = 7; x = 5 27. 7 28. (1) x = 2 y = 3 z = 0 (2) x = 4 y = 9 z = 5 (3) x = 2 y = 3 z = 0 29. 10, 20, 40, 40 30. 125 31. 3,0,-90,23,6,10 32. sum=6 33. i=20 i=40 34. j=9 35. c=1 36. +4++2+ 37. 8 38. c=33 39. 389 40. * -* --* XiaoXin! 数组 1. #include } 2. #include 3. #include 4. #include 5. #include int i, a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a, 10); printf(\"The array has been reverted.\\n\"); for(i=0;i<10;i++) printf(\"%d,\ printf(\"\\n\"); } void inv(int x[], int n) { int t,i,j,m=(n-1)/2; for(i=0;i<=m;i++) { j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; } } 6. #include 7. #include 8. #include { b[i]=a[i-1]+a[i]; sum=sum+b[i]; } for(i=1;i<10;i++) if(i%3==0) sum=sum+b[i]; printf(\"sum=%3d\ } 9. #include 11. #include 12. #include 13. #include 14. #include 15. #include for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]+=a[i][2]; while(i>0) { i--; printf(\"%d,\ } } 16. #include 17. #include 18. #include