0.1274

五煦查题

快速找到你需要的那道考题与答案

尔雅高级语言程序设计_13章节答案(学习通2023题目答案)

51 min read

尔雅高级语言程序设计_13章节答案(学习通2023题目答案)

第一章 C语言与程序设计概述

测试

1、尔雅C语言是高级一种( )。
A、程序机器语言
B、设计汇编语言
C、章节高级语言
D、答案低级语言

2、学习一个C程序的通题执行是从( )
A、本程序的目答main函数开始,到main函数结束
B、尔雅本程序文件的高级第一个函数开始,到本程序文件的程序最后一个函数结束。
C、设计本程序的章节第一个函数开始,到本程序main函数结束。答案
D、本程序的main函数开始,到本程序文件的最后一个函数结束。

3、以下叙述不正确的是( )
A、一个C源程序必须包含一个main函数。
B、一个C源程序可由一个或多个函数组成。
C、C程序的基本组成单位是函数。
D、在C程序中,注释说明只能位于一条语句的后面

4、一个C语言程序是由( )。
A、一个主程序和若干个子程序组成
B、函数组成
C、若干过程组成
D、若干子程序组成

5、下列不是C语言的特点的是( )
A、语言简洁、紧凑,使用方便
B、数据类型丰富,可移植性好。
C、能实现汇编语言的大部分功能
D、有较强的网络操作功能。

6、下列叙述错误的是( )
A、C程序中的每条语句都用一个分号作为结束符
B、C程序中的每条命令都用一个分号作为结束符
C、C程序中的变量必须先定义,后使用
D、C语言以小写字母作为基本书写形式,并且C语言要区分字母的大小写

7、C语言规定:在一个源程序中,main函数的位置( )
A、必须在程序的开头
B、必须在系统调用的库函数的后面
C、可以在程序的任意位置
D、必须在程序的最

8、以下有4组用户标识符(各组间用户标识符以空格隔开),其中合法的一组是( )
A、For -sub wisHes now
B、f2_G3IF 4d DO Gjd
C、for ppap for_you love
D、BesT Size Orc Y_z_y

9、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是( )
A、有零个或多个输入
B、有零个或多个输出
C、有穷性
D、可行性

10、下列叙述正确的是( )
A、C语言源程序可以直接在DOS环境中运行
B、编译C语言源程序得到的目标程序可以直接在DOS环境中运行
C、C语言源程序经过编译、连接得到的可执行程序可以直接在DOS环境中运行
D、Turbo C系统不提供编泽和连接C程序的功能

11、C语言规定, 标识符只能是字母(A~Z,a~z)、数字(0~9)和下划线(_ )组成的字符串,并且其第一个字符必须是字母或下划线。

12、C语言生成目标代码质量较低,但程序执行效率高。

13、C语言数据结构丰富,具有现代语言的各种数据结构。C的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型和共用体类型等。能够用来实现非常复杂的数据结构。如线性表、链表、堆栈、队列、树、图等。

14、用一些简洁的英文字母、有一定含义的符号串来替代一个特定指令的二进制串。这种语言称为高级语言。

15、花括号、小括号、用作界定符的单引号和双引号等都必须成对出现。

16、汇编语言属于面向( )的语言, 高级语言属于面向 ( )的语言。

17、用高级语言编写的程序称为( )程序,它可以通过解释程序翻译一句执行一句的方式执行,也可以通过编译程序一次翻译产生( )程序,然后执行。

18、各类计算机语言的发展历程大致为:先有( )语言,再有汇编语言,最后出现中级语言和( )语言。

19、C语言的字符集就是ASCII字符集。’A’的ASCII值是( )

20、结构化设计中的三种基本结构是( )结构、( )结构和循环结构。

第三章 基本数据类型和表达式

测试

1、以下不属于c语言的数据基本类型的是()
A、字符串类型
B、基本整型
C、双精度浮点型
D、单精度浮点型

2、以下标识符错误的是()
A、Class
B、T_Mac
C、23_LBJ
D、KB_24

3、对于逗号运算”<表达式1>,<表达式2>,…,<表达式n>”的运算结果是()
A、表达式1的运算结果
B、表达式n的运算结果
C、所有表达式运算结果的乘积
D、所有表达式运算结果的和

4、以下不属于C语言中的关键字的是()
A、auto
B、max
C、union
D、int

5、’\n’在C语言中的含义是()
A、空格
B、换行符
C、制表符
D、回车符

6、a = 0.333333 则a的定义应该为()
A、int
B、long
C、double
D、char

7、0123是八进制数,换算成十进制数后答案是()
A、83
B、85
C、87
D、89

8、0x10111010是几进制数()
A、二进制
B、八进制
C、十进制
D、十六进制

9、以下属于按位运算的运算符是()
A、&
B、!
C、+
D、%

10、若有 char c1, c2, s = 'b' ; 连续执行下面语句后,c1,c2和s的输出值是( )。 c1 = s++ ; c2=++s ; printf("%c,%c,%c",c1,c2,s);
A、b,c,d
B、b,d,d
C、d,e,f
D、b,d,b

11、每个字符串尾有一个字符串结束符,表示字符串的终止。下面哪个是字符串的结束符( )。
A、'\0'
B、"\0"
C、"0"
D、'0'

12、能正确表示逻辑关系:a≥10或a≤0的C语言表达式()。
A、a>=10 or a<=0
B、a>=0|a<=10
C、a>=10 && a<=0
D、a>=10||a<=0

13、以下不能正确进行字符串赋初值的语句是(  )。
A、char str[ ]= "good!";
B、char str[5]= "good!";
C、char *str="good!";
D、char str[5]={ 'g','o','o','d'};3

14、判断字符串s1与s2是否相等,应当使用的语句是( )。
A、if(s1==s2)
B、if(s1=s2)
C、if(s1[]==s2[])
D、if(strcmp(s1,s2)==0)

15、若有以下定义 struct date { int y; int m; int d; }day={ 2009,6,30}; 能得到2009的表达式是( )。
A、date->y
B、date.y
C、day->y
D、day.y

16、下面哪一个不是正确的用户标识符。( )
A、X_2
B、x_2
C、2_x
D、_2x

17、与语句while(!s )中的条件等价的是( )。
A、s==0
B、s!=0
C、s==1
D、s=0

18、设有定义语句char s[ ]="abcDE";,则s[5]的值是( )。
A、未知字符
B、'0'
C、'\0'
D、'E'

19、设int a = 3, b = 4, x; x = a ^ b;则x=()
A、3
B、4
C、1
D、7

20、设int x = 3; 执行m = (++x,x++)后,m=()
A、3
B、4
C、5
D、7

21、设int a = 3,b; 则表达式a == (b=3*4);的值是()
A、0
B、1
C、3
D、4

22、设a=-2;b=2;则a>b的值是()
A、-2
B、2
C、0
D、1

23、设有定义int x;float y;以下表达式为浮点型的是()
A、(int)y+x
B、(int)x+y
C、int (x+y)
D、int(y+x)

24、设int a = 0,b = 1, c = 2, d = 3;则表达式“a>b?a:(c>d?c:d)”的值是()
A、0
B、1
C、2
D、3

25、下列哪一个不是C语言算术运算符()
A、+
B、%
C、=
D、/

26、若变量已正确定义并赋值,以下哪个表达式不符合 C 语言语()
A、a*b/c
B、3.14%2
C、2,b
D、a/b/c

27、设 float x,y; 使 y 为 x 的小数部分的语句是()
A、y=(int)x;
B、y=int(x);
C、y=x- (int)x;
D、y=(int)x – x;

28、C 语言中的运算对象必须是整型的运算是()
A、/
B、=
C、>=
D、%

29、以下选项中正确的 C 语言常量是()
A、0xEfGh
B、'XYZ'
C、12.34e5
D、'\5A

30、设有变量定义 int i, j; 与表达式 i==0 && j==0 等价的表达式是()
A、i||j
B、!i&&!j
C、!i==!j
D、i==j

31、设整型变量a的值为2,下列表达式值为1的是( )。
A、a%3
B、a/3
C、--a
D、a++

32、设变量a、b、c已定义并赋值,则下列表达式中符??合C语言语法规则的是( )。
A、a=5++
B、a=b=c++
C、a=%2
D、b=a+1=2

33、下列式中,最终运算结果的数据类型不是单精度的表达式是( )。
A、(int)(3+3.0)
B、1e-3
C、(float)(3)
D、(int)3.0+3.0

34、101转化成二进制是( )。
A、1100101B
B、1010011B
C、1100111B
D、1010111B

35、1010B等于下面哪个数 ( )?
A、9
B、bH
C、12O
D、11

36、C语言中整数-8在内存中的存储形式是( )。
A、1111111111111000
B、1000000000001000
C、.0000000000001000
D、.1111111111110111

37、已知a为int类型,b为float类型,则a-b是什么类型( )
A、int
B、long
C、float
D、double

38、已知ch是字符型变量,则下列赋值语句错误的是( )
A、ch=’1+2’
B、ch=’1’+’2’
C、ch=’\0’
D、ch=1+2

39、下列哪组表达式不能交换整数a,b的值( )
A、int c=a;a=b;b=c;
B、a=a+b;b=b-a;a=a+b;b=-b;
C、a=a-b;b=b+a;a=b-a;
D、a=b;b=a;

40、设int类型的数据长度为2个字节,则unsigned?int类型数据的取值范围是( )
A、-256~255
B、0~511
C、0~65535
D、-32768~32767

41、有以下程序: #include<stdio.h> int main() { int d, e; d = 2; e = -1; if (++e) { printf("%d %d\n", d, e); } else if (++d) { printf("%d %d\n", e, e); } else { printf("%d %d\n", d, d); } return 0; } 请问输出的答案是( )
A、2 -1
B、3 3
C、0 0
D、2 2

42、给定如下代码: int x[4]=; int y[4]={ 1}; 数组x和y的值为( )
A、{ 0,0,0,0},{ 1,1,1,1}
B、{ 0,0,0,0},{ 1,0,0,0}
C、{ 0,无法确定},{ 1,无法确定}
D、与编译器有关

43、char a = 'z'-'a'+'A';请问a是( )
A、‘a’
B、‘A’
C、‘z’
D、‘Z’

44、程序开头有“#define a 100” , main 函数中a可以作为变量

45、不同类型的变量在内存中占用存储空间的大小可以不一样。

46、表达式 625%2.5 是合法的C语言表达式。

47、如果s1、s2是两个字符,C语言程序中可以用s1==s2比较这两个字符是否相等。

48、unsigned和void在C语言中都是保留字。

49、有定义语句“char str1[ ]=”hello”,str2[ ]={ ‘w’,’0’,’r’,’l’,’d’};”,则数组str1和str2都有5个元素

50、数组定义语句“char c[ ]= "Hello";”与“char c[ ]={ ‘H’,’e’,’l’,’l’,’o’};”等价。

51、C语言中,位运算的对象只能是整型或者字符型数据。

52、(基本数据类型和表达式)在C语言程序中中,所有的运算符都采用从左至右的结合方式

53、变量都可以进行自增或自减运算

54、x和y均为int型变量,且x=1,y=2,则表达式1.0 + x / y = _____________(取一位小数)。

55、表示整型变量a的不能被5或7整除的C语言表达式是______________;

56、设int a = 3, b = 4, c = 5, x; 计算!(a>b)&&!c||1 = ____________;

57、如何在双引号括起的字符串中表达 ’\’ ? “_______________”

58、设float x=2.5,y=4.7;int a=7;则表达式x+a%3*(int)(x+y)%2/4的值为__________

59、设int a=2,b=2,c=3;写出下面逻辑表达式的值:!(a>b)&&!c||0=____________

60、设x为整型变量,值为1,则表达式(x&&1)==(x%2)的值为_________

61、设a、b、C、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2则逻辑表达式(m=a > b)&&(n=c > d)运算后,n的值为___________

第四章 输入/输出语句

测试

1、有以下程序: #include<stdio.h> int main() { int a=233,b=17; printf("%d\n",a+b); return 0; } 程序运行后的输出结果是()。
A、233
B、17
C、250
D、260

2、有以下程序: #include<stdio.h> int main() { int a=233,b=17; printf("%d,",a+=b); printf("%d\n",b+=a); return 0; } 程序运行后的输出结果是()。
A、233,250
B、250,267
C、233,17
D、250,17

3、有以下程序: #include<stdio.h> int main() { int a=233,b=17; printf("%d, %d\n",a+=b,b+=a); return 0; } 程序运行后的输出结果是()。
A、233,17
B、483,483
C、250,483
D、483,250

4、有以下程序: #include<stdio.h> int main() { int a=2333; printf("%3d\n",a); return 0; } 程序运行后的输出结果是()。
A、2333
B、233
C、333
D、23333

5、有以下程序: #include<stdio.h> int main() { int a=233; printf("%o\n",a); return 0; } 程序运行后的输出结果是()。
A、233
B、351
C、e9
D、0

6、有以下程序: #include<stdio.h> int main() { int a=233; scanf("%d",&a); printf("%d\n",a); return 0; } 程序运行后键盘输入2333,输出结果是()。
A、233
B、2333
C、233233
D、2333233

7、已知a是int型变量,使用scanf函数输入一个整数给变量a,正确的函数调用是()。
A、scanf("%d",a);
B、scanf("%c",a);
C、scanf("%d",&a);?
D、scanf("%c",&a);

8、已知a是char型变量,下列语句无法给a赋值的是()。
A、a=getchar();
B、scanf("%c",&a);
C、scanf("%d",&a);
D、gets(a);

9、有以下程序: #include<stdio.h> int main() { float a=111,b=222; printf("%f\n",a+b); return 0; } 程序运行后的输出结果是()。
A、333
B、333.000000
C、111222
D、111.222

10、有以下程序: #include<stdio.h> int main() { float a=0.12345678,b=0.11111111; printf("%f\n",a+b); return 0; } 程序运行后的输出结果是()。
A、0.23456789
B、0.234567
C、0.234568
D、0.123456

11、有以下程序: #include<stdio.h> int main() { float a=11111.11,b=111111.11; printf("%f\n",a+b); return 0; } 程序运行后的输出结果是()。
A、122222.218750
B、-122222.218750
C、122222.220000
D、-122222.220000

12、有以下程序: #include<stdio.h> int main() { float a=11111.11; printf("%.3f\n",a); return 0; } 程序运行后的输出结果是()。
A、11111.11
B、11111.110
C、111.11
D、111.110

13、有以下程序: #include<stdio.h> int main() { float a=11111.11; printf("%3.3f\n",a); return 0; } 程序运行后的输出结果是()。
A、11111.11
B、11111.110
C、111.11
D、111.110

14、有以下程序: #include<stdio.h> int main() { float a=11111.11; printf("%.1f\n",a); return 0; } 程序运行后的输出结果是()。
A、11111.1
B、11111.11
C、11111
D、11111.0

15、有以下程序: #include<stdio.h> int main() { float a=11111.11; printf("%e\n",a); return 0; } 程序运行后的输出结果是()。
A、1.111e+4
B、1.111e+004
C、1.111111e+4
D、1.111111e+004

16、已知a是字符串,下面语句正确的是()。
A、scanf("%s",a);
B、scanf("%c",a);
C、a=gets();
D、a=putchar();

17、有以下程序: #include<stdio.h> int main() { int a,b; scanf("%d+%d=",&a,&b); printf("%d\n",a+b); return 0; } 程序运行后键盘输入1,2,输出结果是()。
A、1+2=
B、3
C、1+2=3
D、-858993459

18、有以下程序: #include<stdio.h> int main() { printf("%.3s\n","zimba"); return 0; } 程序运行后的输出结果是()
A、zimba
B、zim
C、mba
D、imb

19、有以下程序: #include<stdio.h> int main() { char a[]="afterschool tea time"; char b[]="having a cup of tea"; char c[]="zhenxiang"; printf("%1.5s%7.6s %3.15s\n",a,b,c); return 0; } 程序运行后的输出结果是()。
A、after having a zhenxiang
B、afterhaving a zhenxiang
C、after having zhenxiang
D、afterhaving zhenxiang

20、有以下程序: #include<stdio.h> int main() { int a; scanf("%1d",&a); printf("%d\n",a); return 0; } 程序运行后键盘输入23,输出结果是()。
A、1
B、2
C、3
D、23

21、有以下程序: #include<stdio.h> int main() { int a; scanf("%d",&a); printf("%c\n",’a’+3); return 0; } 程序运行后键盘输入3,输出结果是()。
A、a
B、z3
C、3
D、d

22、有以下程序: #include<stdio.h> int main() { float a; scanf("%e",&a); printf("%e\n",a); return 0; } 程序运行后键盘输入1.1e+001,输出结果是()。
A、1.1e+001
B、1.1000e+001
C、1.100000e+001
D、1.1

23、有以下程序: #include<stdio.h> int main() { float a; scanf("%e",&a); printf("%e\n",a); return 0; } 以下哪种输入可以让程序输出结果是1.110000e+002()。
A、11.1
B、1.110000e+002
C、1110e-001
D、ABC都可以

24、设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是-3。

25、下面程序的最终结果为22. #incldue<stdio.h> int main(){ int x=023; printf("%d\n",--x); return 0; }

26、long a=3;int b=4;long c;c=a+b;最终c的数据类型为long。

27、C语言中要求运算数必须是整形的运算符是%

28、C语言中,char型数据在内存中的储存形式是ASCII码。

29、putchar函数可以向终端输出一个字符串。

30、int x,y;使用x=y=100;将x、y都赋值为100.

31、若x和y均定义为int型,z定义为double型,scanf("%d%lx,%le",&x,&y,&z);不合法。

32、"\\"为合法转义字符。

33、OXffa为C语言合法整数。

34、看下面的代码,填写输出的结果。 #include <stdio.h> int main(){ char c1='a',c2='b',c3='c'; printf("a%cb%cc%c\n",c1,c2,c3); return 0; }

35、看下面的代码,填写输出的结果。 #include <stdio.h> int main(){ int a=12,b=15; printf("a=%d%%,b=%d%%\n",a,b); return 0; }

36、scanf函数中的_____格式字符代表用来输入无符号的八进制整数。

37、scanf函数中除了用%d表示输入十进制的整数之外,____格式字符也能表示。(ld、lld除外)

38、scanf函数中要输入2的32次以下的是int,2的64以下次的数字需要用格式字符____。

39、scanf("%s",str)中除了读取回车键会停止读入之外,还有__键也会产生和回车键有着相同的效果。

40、要使printf("___\n",str);输出的字符占3个宽度,在空白处需要填入_____。

41、语句printf("%d\n",12&012);的输出结果为_____。

第四章作业

1、鸡兔同笼问题是个经典问题,你需要知道一个笼子里有n条腿和m个头。由此计算出兔子数量和鸡的数量。

2、三文鱼最近很无聊,她随便在脑子里想了n个数(可以重复)。当然三文鱼一瞬间就能想出n个随机的数字。但是她不知道到底有多少个不同的数字,下面请你帮忙计算她想出了多少个不同的数字。

3、三文鱼抓到了n只老鼠,但是她想玩老鼠而不是吃掉它们。每只老鼠都不想死,他们尽快地想逃跑,每只老鼠都有一个速度ai。三文鱼打算把老鼠们放跑再把它们抓回来。她有t秒时间去捉老鼠并且有每次只能捉一只,然后必须把老鼠放回起始位置才能去捉下一只老鼠。假设三文鱼和老鼠们都只能沿同一条直线同方向跑(可以看作从正向x轴原点处往无穷远跑),三文鱼有速度a并且三文鱼和老鼠们都能保持自己的速度(不会改变)。第0s老鼠们开始逃跑,第1s三文鱼开始出发追老鼠并把它们捉回起始位置。

第五章 C语言程序结构

测试

1、经过以下语句后: if (a) { a++; } 整型变量 a 的值不可能是()。
A、0
B、1
C、2
D、3

2、有以下程序段: int a = 0; for (int i = 0; i < 10; i++) { a += i; } 执行后 a 的值为()。
A、0
B、10
C、25
D、45

3、有以下程序段: int a = 9, b = 3; while (a) { a -= b; b = a; } 执行后 a 的值为()。
A、0
B、10
C、25
D、45

4、有以下程序段: int a,b=3; do { a = 0; a+=b; b-=1; }while(b); 执行后 a 的值为()。
A、0
B、1
C、2
D、3

5、)有以下程序段: int a = 3; switch (a) { case 3: a++; case 4: a++; break; case 5: a++; default: break; } 执行后 a 的值为()。
A、3
B、4
C、5
D、6

6、有以下程序段: int a = 2, b = 3, c = 4; if (c = a + b) { printf("OK!"); } else { printf("No!"); } 输出结果是()。
A、OK!
B、No!
C、程序错误
D、以上都不对

7、有以下程序段: int a = 3, b = 6; while (b>a) { b -= a; switch (a) { case 3: a -= 2; break; case 4: b += 5; break; case 5: a++; break; default: for (int i = b; i >= a; i--) { a*i; } break; } } 执行后 a 的值为()。
A、0
B、1
C、2
D、4

8、下列属于分支结构的是( )。
A、while
B、switch
C、for
D、以上都不是

9、for循环中,能省略的表达式有():
A、表达式1
B、表达式2
C、表达式3
D、3个都可以

10、下面的程序段出现了几处语法错误? int a,b; scanf("%d",a); b = 2a; if(b>0) printf("%b",b);
A、0
B、1
C、2
D、3

11、有以下程序: #include<stdio.h> int main(){ int a=5,d=1,b=0; for (; a < 10 && d < 10;) { b++; if (a % 2 == 0) { ++a; } else if(d%2==0){ d++; } else { ++d; } } printf(“%d\n”,b); } 程序运行后的输出结果为( )
A、5
B、8
C、9
D、12

12、、有以下程序: #include<stdio.h> int main() { int d = 1; switch (d) { case 0: printf("%d", d); case 1: printf("%d", d); case 2: printf("%d", d); case 3: printf("%d", d); default: break; } printf("\n"); return 0; } 程序运行后的输出结果为( )
A、1
B、11
C、111
D、1111

13、有以下程序: #include<stdio.h> int main() { int d = 1; switch (d) { case 0: printf("%d", d); break; case 1: printf("%d", d); break; case 2: printf("%d", d); break; case 3: printf("%d", d); break; default: break; } printf("\n"); return 0; } 程序运行后的输出结果为( )
A、1
B、11
C、111
D、1111

14、有以下程序: #include<stdio.h> int main(){ int a=11,b=0; while(a%2?a--:b++&&a--,a); printf(“%d\n”,b); return 0; } 程序运行后的输出结果为( )
A、0
B、5
C、6
D、11

15、以下可以将任意一个两位整数n的个位数与十位数对换的表达式为( )
A、(n-n/10*10)*10+n/10
B、n-n/10*10+n/10
C、n/10+(n-n/10)
D、(n-n/10)*10+n/10

16、有以下程序: #include<stdio.h> int main() { int a, b, c[10] = { 0,1,2,3,4,5,6,7,8,9 }; for (a = 0; a<10; ++a) { for (b = 0; b<5 - a; ++b){ if (c[b] < c[b+1]) { c[b] += c[b + 1]; c[b + 1] -= c[b]; c[b] += c[b + 1]; c[b + 1] = -c[b + 1]; } } } for (a = 0; a<10; ++a) { printf("%d", c[a]); } printf("\n"); return 0; } 程序运行后的输出结果为( )
A、0123456789
B、9876543210
C、6543210789
D、5432106789

17、有以下程序: #include<stdio.h> int main() { int a, b, c; a = 153, b = 369; while (b) { c = a % b; a = b; b = c; } printf("%d\n", a); return 0; } 程序运行后的输出结果为( )
A、3
B、6
C、9
D、1

18、以下不属于循环语句的是()
A、for
B、while
C、do...while
D、switch

19、有以下程序: #include<stdio.h> int main() { int i , a = 1; for (i = 1; i <= 10; i++); a += i; printf("%d\n", a); } 程序运行后的输出结果是()
A、12
B、55
C、56
D、9

20、有以下程序: #include<stdio.h> int main() { int sum=0; int i = 1; while (i <= 10) sum += i++; printf("%d %d\n", sum, i); } 程序运行后的输出结果是()
A、60,10
B、55,11
C、65,11
D、65,10

21、下面哪个控制语句可以结束单次循环语句()
A、continue
B、break
C、switch
D、continues

22、C语言中用于结构化程序设计的三种基本结 构是()
A、顺序结构、选择结构、循环结构
B、if、switch、break
C、for、while、do-while
D、if、for、continue

23、有以下程序: #include<stdio.h> int main() { int a = 1; if (a < 1) printf("我考了100分\n"); else if (a == 0) printf("我考了90分\n"); else if (a == 2) printf("打扰了\n"); else printf("我是班级第一\n"); } 程序运行后的输出结果是()
A、我考了100分
B、我考了90分
C、打扰了
D、我是班级第一

24、有以下程序: #include<stdio.h> int main() { int flag = 0; if (flag = 1) { if (flag != 0) printf("Hello World\n"); else printf("Hi World\n"); } else if (flag) printf("Hhhh\n"); else printf("good bye\n"); } 程序运行后的输出结果是()
A、Hello World
B、Hi World
C、Hhhh
D、good bye

25、下列代码不会陷入死循环的是()
A、for (int i = 1; i; i++);
B、while (1);
C、int i=1; do{ i++;} while (i);
D、int i = 0;while (i);

26、有以下程序: #include<stdio.h> int main() { int i = 0, s = 0; do { if (i % 2) { i++; continue; } i++; s += i; } while (i < 7); printf("%d\n", s); } 程序运行后的输出结果是()
A、12
B、16
C、28
D、21

27、有以下程序: #include<stdio.h> int main() { int a = 5, b = 4, c = 3, d = 2; if (a > b > c) printf("%d\n", d); else if ((c - 1 >= d) == 1) printf("%d\n", d + 1); else printf("%d\n", d + 2); } 程序运行后的输出结果是()
A、3
B、2
C、5
D、4

28、有以下程序: #include<stdio.h> int main() { int a=2; switch (a) { case 1: printf("1"); case 2: printf("2"); case 3: printf("3"); default: printf("4"); break; } } 程序运行后的输出结果是()
A、234
B、2
C、23
D、1234

29、有以下程序: #include<stdio.h> int main() { int sum = 0; for (int i = 1; i <= 10; i++) for (int j = 1; j <= 10; j += i) sum += i + j; printf("%d\n", sum); } 程序运行后的输出结果是()
A、234
B、287
C、250
D、1100

30、有以下程序: #include<stdio.h> int main() { for (int i = 1; i <= 10; i++) { if (i % 2) { printf("h"); continue; } if(!(i%2)) printf("H"); } } 程序运行后的输出结果是()
A、hHhHhHhHhH
B、hHhHhHhHh
C、hHhHhHhH
D、hHhHHhHhHhH

31、C语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求。

32、switch 后面括号内的表达式和 case 后的常量表达式,可以是整型表达式或字符型表达式。

33、for语句的循环控制部分的三个成分都是表达式,三个部分之间都用,隔开。

34、break语句可以中止执行switch或循环语句。

35、;是一个空语句。

36、while (1); 会死循环

37、switch语句中case的表达式常量可以相同

38、continues可以结束本次循环语句

39、break语句对for语句起作用

40、绘制流程图可以使程序编制人员的思路清晰,从而避免或减少编写程序时的错误

41、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int a = 0, b = 3, c = 5; if (c = a + b) printf("yes\n"); else printf("no\n"); }

42、执行以下程序后,输出‘#’号的个数是 。 #include<stdio.h> int main() { int i, j; for (i = 1; i < 4; i++) for (j = 2; j <= i; j++) putchar('#'); }

43、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int sum=0; for(int i=1;i<=10;i++) sum*=i; printf("%d\n",sum); }

44、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int sum = 0; printf("%d\n",sum!=0?1:0); }

45、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int sum = 0; for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) sum++; printf("%d\n",sum); }

46、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int a = 1,b=2,c =5; if(a+b-c==3) printf("Hello World\n"); else a++; printf("%d\n",a+++b+c); }

47、7、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int a = 1; switch (a) { case 2: printf("3"); case 1: printf("h"); case 3: printf("hh"); } }

48、7、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int i=0,sum = 0; do { i += i%2?3:1; sum+=i; }while(i<=10); printf("%d\n",sum); }

49、7、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int a = 2,b = 20,res = 1; int mod = 25; while(b) { if(b&1) res=a*res%mod; b>>=1; a=a*a%mod; } printf("%d\n",res); }

50、7、以下程序运行后的输出结果是 。 #include<stdio.h> int main() { int a=1,b=2; if(a-b?a^b:a&b) a^=b,b^=a,a^=b; else b^=a;a^=b;b^=a; printf("%d\n",++a+b++); }

第5章OJ作业

1、古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284。 而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。 请编写一个程序,判断给定的两个数是否是亲和数。

2、给定一个十进制整数n,定义S(n)为n每一位数字的和。例如:S(123)=1+2+3=6,S(0)=0。 你的任务是找到2个整数a,b(0< ab="n" ab="n),使得S(a)+S(b)的值在所有的情况中最大。" >

3、试判断接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。

第六章 数组

测试

1、在定义int a[3][3]之后,对a的引用正确的是:
A、a[2][3]
B、a[2,0]
C、a[2][1]
D、a[3][1]

2、在执行语句:int a[][3]={ 1,2,3,4,5,6}后,a[1][1]的值是:
A、5
B、4
C、2
D、1

3、当接受用户输入的含有空格的字符串时,应使用____函数。
A、gets()
B、getchar()
C、scanf()
D、printf()

4、以下关于数组的描述正确的是:
A、.数组的大小是固定的,但可以有不同类型的数组元素。
B、数组的大小是可变的,且必须有相同类型的数组元素。
C、数组的大小是固定的,且必须有相同类型的数组元素。
D、数组的大小是可变的,但可以有不同类型的数组元素。

5、若有以下定义和语句,则输出结果是: char a[16]=”hello baby!” printf(“%d\n”,strlen(a));
A、12
B、11
C、10
D、16

6、定义char a[12]=”ni hao ya!”,输出a[7]=?
A、a
B、y
C、n
D、o

7、能对一维数组正确初始化的语句是
A、int a[6]={ 8*1}
B、int a[6]={ 1,,,3}
C、int a[6]={ }
D、int a[6]=(0,0,0)

8、定义char s[ ]={ "Boy"},t; 执行下面语句段后输出结果是( )。 s[0]=s[2]; s[2]=s[0]; s[1]=s[3]; s[3]=s[1]; printf("%c,%s \n", s[0], s);
A、B,Boy
B、y,y
C、y,yoy
D、y,yoB

9、数组定义为 int a[3][2]={ 1,2,3,4,5},下列表述中正确的是()。
A、a[3][2]的值为5
B、a[1][1]+1的值为5
C、a[2][1]的值不确定
D、a[0][0]的值为0

10、定义char s[4]={ "Max"},t; 执行下面语句段后输出结果是 t=s[0];s[0]=s[1];s[1]=s[2]; s[2]=s[3]; s[3]=t; printf("%s,%c \n", s, s[3]);
A、axM,\0
B、axM,M
C、ax M,M
D、ax,M

11、定义语句:int a[3][2]={ 0,1,2,3,4,5}; 则下列对a数组元素正确引用的是( )。
A、a[3][2]
B、a[2][a[0][0]]
C、a[2][3]
D、a[2][2]

12、以下不能正确进行字符串赋初值的语句是( )
A、char str[ ]= "good!";
B、char str[5]= "good!"
C、char *str="good!";
D、char str[5]={ 'g','o','o','d'};

13、有定义语句int a[5],i;,输入数组a的所有元素的语句应为( )。
A、scanf("%d%d%d%d%d",a[5]);
B、scanf("%d",a);
C、for(i=0;i<5;i++)scanf("%d",a+i);
D、for(i=0;i<5;i++) scanf("%d",a[i]);

14、若有定义语句:int a[10];则下列对a中数组元素正确引用的是( )。
A、a[10]
B、a(2)
C、a[2.5]
D、a[10/3-2]

15、设有定义语句char s[ ]="hello";,则s[5]的值是( )。
A、未知字符
B、'0'
C、'\0'
D、.'E'

16、以下数组定义中错误的是( )。
A、int x[][3]=;
B、int x[2][3]={ { 1,2},{ 3,4},{ 5,6}};
C、int x[][3]={ { 1,2,3},{ 4,5,6}};
D、int x[2][3]={ 1,2,3,4,5,6};

17、下面程序段的输出结果是( )。 char a[10]= "abcd"; char b[4]= "efg"; strcat(a,b); printf(“%s”,a);
A、abcdefg
B、abcd
C、efg
D、efgabcd

18、若有定义int b[3][4]=;则下面正确的叙述为( )。
A、只有元素b[0][0] 可得到初值0
B、此定义语句不正确
C、数组b中各元素都可得到初值,但其值不一定为0
D、数组b中每个元素均可得到初值0

19、若有定义int a[4][5];,则在a[2][2] 前的元素个数为()。
A、12
B、13
C、11
D、10

20、以下定义语句中,错误的是
A、int a[]={ 1,2,3};
B、char s[]={ "test"};
C、char s[100]={ "test"};
D、int n=5,a[n];

21、以下一维数组a的正确定义是
A、int a(10);
B、int n=10,a[n];
C、int n; scanf("%d",&n); int a[n];
D、#define SIZE 10 int a[SIZE];

22、以下给字符数组str定义和赋值正确的是
A、char str[10]; str={ "China!"};
B、char str[ ]={ "China!"};
C、char str[10]; strcpy( str,"abcdefghijkl");
D、char str[10]={ "abcdefghijkl"};

23、执行下面的程序段后: int k=3,s[2]; s[0]=k; k=s[1]*10; 变量k中的值为______。
A、不定值
B、33
C、30
D、10

24、执行下面的程序段后: int a[6]; memset(a,2,sizeof(a)); a[2]的值为______。
A、2
B、不定值
C、程序错误
D、以上都不是

25、执行下面的程序段后: char in[6] = "13412"; int i,f=0; for(i=0;i<6;i++) { f+=in[i]; } printf("%d",f); 程序的输出为______。
A、11
B、251
C、不定值
D、程序错误

26、有以下程序: int main() { int aa[3][3]={ { 2},{ 4},{ 6}}; int i,p=aa[0][0]; for(i=0;i<2;i++) { if(i==0) aa[i][i+1]=p+1; else ++p; printf("%d",p); } } 程序的输出是________。
A、23
B、26
C、3
D、36

27、以下程序输出a数组中的最小值及其下标 int main() { int i,p=0,a[10]; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=1;i<10;i++) { if(a[i]<a[p]) _______________; } printf("%d,%d\n",a[p],p); return 0; } 在划线处应填入的是________。
A、i=p
B、a[p]=a[i]
C、p=j
D、p=i

28、有如下程序 int main() { int n[5]={ 0,0,0},i,k=3; for(i=0;i<k;i++) n[i]=i+1; printf("%d\n",n[k]); return 0; } 该程序的输出结果是________。
A、不定值
B、4
C、2
D、0

29、一个数组只允许存储同种类型的变量。

30、如果在对数组进行初始化时,给定的数据元素个数比数组元素个数少时,多余的数组元素会被自动初始化为最后一个给定元素的值

31、数组的名称其实是数组在内存中的首地址

32、当数组名作为参数被传递给某个函数时,原数组中的元素的值可能被修改

33、数组名仅仅是一个数组的名字符号,除此之外没有其它任何含义。

34、若a[10]={ 1,2,3,4,5,6,7,8,9,10},那么a[1]=1

35、若有定义“int a[5][6];”,则在数组元素a[2][4]前有16个元素。

36、若有定义语句“int a[10];”则a[10] 是合法的数组元素。

37、若有定义语句“int a[10];”则a[10-7/2] 是合法的数组元素。

38、数组元素的下标必须是整数,不能用实数。

39、字符串结束标志为

40、数组中有多个‘\0’时,遇 第( )个结束

41、strcmp(字符串1,字符串2),若字符串1== 字符串2, 返回( )

42、char s[10]={ ‘A’,‘’,‘B’,‘C’,‘’,‘D’}; strlen(s)的值为( )

43、数组是c语言中的一种复合数据类型,是( )(填相同或不同)数据类型的有序集合

44、数组a[2][2]={ 1,2,3,4},a[1][1]+2=( )

第6章OJ作业

1、给定一个数组,里面有n个元素,分别为a[1]、a[2]、...、a[n]。从1-n中寻找一个分界点m,使得a[1]、...、a[m]严格递增,a[m]、...、a[n]严格递减。严格递增表示任意i>j,a[i]>a[j];严格递减表示任意i>j,a[i]

2、在一个字符串中,从前向后查找第一个子串"Bob"出现的位置。(不区分大小写)

3、有n个编号为1-n的人按编号围成一圈坐在地上玩游戏,从第一个人开始报数,数到的第k个人淘汰,从下一个人继续从1开始报数,输出最后剩下的人的编号

第七章 函数

测试

1、以下哪种类型的函数一定不能带返回值( )
A、int
B、void
C、double
D、float

2、以下函数返回的值为( ) int fun(int a, int b,int c) { a = b; b = a; c = b; c += a ; return c; }
A、2*a
B、2*b
C、a+b
D、a+c

3、以下程序输出的答案为( ) #include<stdio.h> void swap(int a, int b) { int t; t = a; a = b; b = t; } int main() { int a = 1, b = 2; swap(a, b); a *= a; printf("%d\n", a); return 0; }
A、1
B、2
C、4
D、3

4、以下程序输出的答案为( ) #include<stdio.h> int fun(int a, int b) { int t; while (b) { t = b; b = a%b; a = t; } return a; } int main() { int a=4, b=6,ans; ans = fun(a, b); printf("%d\n", ans); return 0; }
A、6
B、4
C、3
D、2

5、当一个子函数已经被主函数调用但是该函数没有return语句时,该函数会()
A、不执行
B、导致整个程序不能运行
C、执行该函数无返回值
D、执行该函数并返回0

6、以下哪种关于主调函数与被调函数之间的关系说法是正确的( )
A、被调函数可以在主调函数内
B、被调函数一定要放在主调函数后
C、被调函数一定要放在主调函数前
D、被调函数被主调函数调用前不一定要先声明

7、以下有哪个函数能交换在主函数内的实参的值() (1).void Swap(int a,int b) { int temp=a; a=b; b=temp; } (2) void Swap(int a,int b) { a=b; b=a; }
A、(1)
B、(2)
C、(1)(2)
D、无

8、以下程序调用函数的顺序为() #include<stdio.h> int f1(int a, int b); int f2(int a, int b); int f3(int a, int b); int f4(int a, int b); int main() { int a, b,ans; a = 1; b = 2; ans = f1(a, b); } int f1(int a, int b) { return f2(a,b); } int f2(int a, int b) { if (a>b) return f3(a, b); return f4(a, b); } int f3(int a, int b) { return a - b; } int f4(int a, int b) { return b - a; }
A、f1->f2->f3->f4
B、f1->f2->f3
C、f1->f2->f4
D、f4->f3->f2->f1

9、关于嵌套函数以下说法不正确的是()
A、函数可以嵌套定义
B、函数之间的关系是平行的
C、函数可以嵌套使用
D、C语言函数定义是相互独立的

10、以下函数被调用时,返回值为() #include<stdio.h> int fun(int a) { if (a == 1||a == 0) return 1; return a*fun(a - 1); } int main() { int a ,ans; ans = fun(a); return 0; }
A、a
B、a*a
C、aa
D、a!

11、以下哪种函数调用不是递归()
A、f1->f2->f1
B、f1->f1
C、f1->f2->f3...->fn->f1
D、f1->f2->f3->...->fn

12、阅读以下程序,以下说法正确的是() #include<stdio.h> void swap(int a[]) { int temp = a[0]; a[0] = a[1]; a[1] = a[0]; } int main() { int a[2] = { 0,1 }; swap(a); return 0; }
A、swap()函数形参出错,应写为void swap(int a[2])
B、swap()函数调用时出错,应写为swap(a[2])
C、该程序未出错,并起到了交换a[0]、a[1]值的作用
D、该程序为出错,但并未起到交换a[0]、a[1]值的作用

13、当数组作为参数传递时,以下说法正确的是()
A、传递的是该数组的首地址
B、传递的是该数组第一个元素的值
C、该传递是单向的
D、传递的是所有参数的值

14、将a[5][5]作为实参传递给函数void fun()时,fun()函数的形参写法正确的是( )
A、int array[][]
B、int array[][10]
C、int array[5][]
D、int array[5][3]

15、局部变量是指( )
A、定义在函数内部的变量
B、定义在函数外的变量
C、定义在函数形参表中的变量
D、整个程序都能使用的变量

16、以下程序执行时主函数内的a的值为( ) #include<stdio.h> int fun(int b) { int a; a = b^b; return a; } int main() { int a, b, ans; a = b = 1; ans = fun(b); return 0; } 以下程序执行时主函数内的a的值为( ) #include<stdio.h> int fun(int b) { int a; a = b^b; return a; } int main() { int a, b, ans; a = b = 1; ans = fun(b); return 0; }
A、3
B、2
C、1
D、0

17、以下哪个变量属于全局变量( ) #include<stdio.h> int a; int fun(int b) { a = b^b; return a; } int main() { int b,ans; a = b = 1; ans = fun(b); return 0; }
A、a
B、b
C、a和b
D、ans

18、阅读以下程序,a的值为#include<stdio.h> int a; int f1(int b, int c, int d); int f2(int b, int c); int f3(int b); int f1(int b, int c, int d) { return f2(b*c, d); } int f2(int b, int c) { return f3(b*c); } int f3(int b) { a = b; return a == 32; } int main() { int b = 2, c = 4, d = 8, ans; a = 1; ans = f1(b, c, d); return 0; }
A、1
B、2
C、32
D、64

19、以下哪个声明符是静态变量声明符( )
A、auto
B、static
C、extern
D、register

20、int a,b=1与哪种声明等价( )
A、float a,b=1.0
B、static int a,b=1
C、float a,b=1
D、auto int a,b=1

21、以下哪个声明符可以声明外部函数( )
A、auto
B、register
C、extern
D、static

22、在c语言中以下不正确的说法是:( )
A、实参可以是常量、变量或表达式
B、形参可以是常量、变量或表达式
C、实参可以为任意类型
D、形参应与其对应的实参类型一致

23、以下正确的说法是:( )
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用可嵌套
C、函数的定义和调用均不可以嵌套
D、函数的定义和调用均可以嵌套

24、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是:( )
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参传回实参
D、传递方式由用户指定

25、关于函数参数,说法正确的是( )。
A、实参与其对应的形参各自占用独立的内存单元
B、实参与其对应的形参共同占用一个内存单元
C、只有当实参和形参同名时才占用同一个内存单元
D、形参是虚拟的,不占用内存单元

26、C语言中,凡未指定存储类别的局部变量的隐含存储类别是:
A、自动(auto)
B、静态(static)
C、外部(extern)
D、寄存器(register)

27、C语言中规定函数的返回值的类型是由( )
A、return语句中的表达式类型所决定
B、调用该函数时的主调用函数类型所决定
C、调用该函数时系统临时决定
D、在定义该函数时所指定的类型所决定

28、以下关于函数叙述中,错误的是( ).
A、函数未被调用时,系统将不为形参分配内存单元
B、实参与形参的个数必须相等,且实参与形参的类型必须对应一致
C、当形参是变量时,实参可以是常量、变量或表达式
D、如函数调用时,实参与形参都为变量,则这两个变量不可能共享同一内存空间

29、以下正确的函数定义形式是( )
A、double fun(int x, int y)
B、double fun(int x; int y)
C、double fun(int x, int y);
D、double fun(int x, y);

30、若用数组名作为函数调用的实参,则传递给形参的是
A、数组第一个元素的地址
B、数组的第一个元素的值
C、数组中所有元素的值
D、数组元素的个数

31、int类型的函数一定要返回一个值

32、主调函数的函数调用语句的函数名后面圆括号中的表达式称为“实际参数”

33、一个函数可以有多条return语句

34、改变形参的值会改变实参的值

35、在主函数中调用f1()、f2()、f3()、f4()属于函数的嵌套使用

36、以下函数是一个正确的递归函数 ( ) int fun(int n) { return n*fun(n - 1); }

37、数组作为函数实参传递时,若在函数内改变数组所有元素的值,在主调函数中,该数组的所有元素值也都会被改变

38、以下程序中a的值为8 #include<stdio.h> int a = 3; int main() { int a = 8; return 0; }

39、static是静态变量声明符

40、分析以下程序 func(int *a,int *b) { int *temp=a; a=b; b=temp; } int main() { int x,y; x=10; y=20; func(x,y); printf((“%d,%d”,x,y); return 0 ; }

第7章OJ作业

1、Bob和Peter都喜欢玩数字游戏,终于有一天,他们开始研究最大公因数,他们互相出题,由对方答。 现在轮到Bob出题,Bob这个人不厚道,出的题不仅是关于两个数的最大公因数,而是两个或两个以上,这可难倒了我们的小peter,于是他向你求助,希望你能帮他设计一个程序,能迅速答出Bob的难题

2、九连环是中国传统民间智力玩具,以金属丝制成9个圆环,将圆环套装在横板或各式框架上,并贯以环柄。 把玩时,按照一定的程序反复操作,可使9个圆环分别解开,或合二为一。给你一个n连环,求解该连环所需最少的步数。

3、小黑最喜欢数兔子了,小兔子的成熟期为3个月,一对成熟的兔子一个月可以生两对小兔子,但小白总喜欢刁难小黑,小白知道小黑喜欢数兔子后,一直问小黑假如第一个月有1对小兔子,那么第n个月共有几只小兔子。但是聪明的小黑肯定不会被这个难倒啊,所以他准备写一个递归的程序来解决问题。假如你是小黑,你会怎么写这个程序呢?

第八章 编译预处理

测试

1、有以下程序: #include <stdio.h> #define HELLO 100 int main() { printf("%d\n",HELLO); return 0; } 程序运行后的输出结果是()。
A、10
B、15
C、100
D、150

2、有以下程序: #include <stdio.h> #define A 2 #define B A+1 int main() { printf("%d\n",B); return 0; } 程序运行后的输出结果是()。
A、1
B、2
C、3
D、编译错误

3、有以下程序: #include <stdio.h> #define MIN(x,y) (x)<(y)?(x):(y) int main() { int k=MIN(1,2); printf("%d\n",k); return 0; } 程序运行后的输出结果是()。
A、1
B、2
C、12
D、编译错误

4、有以下程序: #include <stdio.h> #define MIN(x,y) (x)<(y)?(x):(y) int main() { int i=10,j=15,k; k=10*MIN(i,j); printf("%d\n",k); return 0; } 程序运行后的输出结果是()。
A、10
B、15
C、100
D、150

5、有以下程序: #include <stdio.h> #define MOD(x,y) x%y int main() { int a=15,b=100; int z=MOD(b,a); printf("%d\n",z++); return 0; } 程序运行后的输出结果是()。
A、10
B、11
C、15
D、16

6、有以下程序: #include <stdio.h> #define X 5 #define Y X+1 #define Z Y*X/2 int main() { printf("%d\n",Z); return 0; } 程序运行后的输出结果是()。
A、5
B、6
C、7
D、12

7、#define能作简单的替代,用宏替代计算多项式4*x*x+3*x+2之值的函数f,正确的宏定义是
A、#define?f?(4*x*x+3*x+2)
B、#define? (4*x*x+3*x+2)? f
C、#define?f(x)?(4*x*x+3*x+2)
D、#define?(4*x*x+3*x+2)?f(x)

8、有以下程序: #include <stdio.h> #define F(x) x*x int main() { printf("%d\n",F(1+2)+3); return 0; } 程序运行后的输出结果是()。
A、5
B、8
C、10
D、12

9、有以下程序: #include <stdio.h> #define F(x) (x)*x int main() { printf("%d\n",F(1+2)+3); return 0; } 程序运行后的输出结果是()。
A、5
B、8
C、10
D、12

10、有以下程序: #include <stdio.h> #define F(x) (x)*(x) int main() { printf("%d\n",F(1+2)+3); return 0; } 程序运行后的输出结果是()。
A、5
B、8
C、10
D、12

11、有以下程序: #include <stdio.h> #define F(a,b) { int t;t=a;a=b;b=t;} int main() { int x=1,y=2; F(x,y); printf("%d %d\n",x,y); return 0; } 程序运行后的输出结果是()。
A、1 2
B、2 1
C、1 1
D、2 2

12、有以下程序: #include <stdio.h> #define F(a,b) for(int i=a;i<b;i++) int main() { F(3,5) printf("%d",i); return 0; } 程序运行后的输出结果是()
A、34
B、345
C、45
D、4

13、有以下程序: #include <stdio.h> #define F(x) x*(x+1) int main() { int a=2,b=3; printf("%d",F(1+a+b)); return 0; } 程序运行后的输出结果是()。
A、18
B、24
C、36
D、42

14、有以下程序: #include <stdio.h> #define F(x) x*(x+1) int main() { int a=2,b=3; printf("%d",F(1+(a+b))); return 0; } 程序运行后的输出结果是()。
A、18
B、24
C、36
D、42

15、C语言提供的预处理功能包括条件编译,其基本形式为:?? #XXX?YYY???? ZZZ??? #endif?? 这里XXX可以是()
A、define
B、ifdef或define
C、ifdef或ifndef或define
D、ifdef或ifndef或if

16、有以下程序: #include <stdio.h> #define K 5.5 #define F(x) K*x*x int main() { int a=1,b=2; printf("%.1f\n",F(a+b)); return 0; } 程序运行后的输出结果是()。
A、9.5
B、12.5
C、27.5
D、33.5

17、有以下程序: #include <stdio.h> #define K 5.5 #define F(x) K*(x*x) int main() { int a=1,b=2; printf("%.1f\n",F(a+b)); return 0; } 程序运行后的输出结果是()。
A、9.5
B、12.5
C、27.5
D、33.5

18、编译预处理主要有三种功能:宏定义、文件包含和条件编译

19、预处理命令行都必须以#号开始

20、预处理命令都在编译时处理完毕

21、预处理具有一定的计算的功能

22、可以用#undef命令终止宏定义的作用域

23、宏替换时先求出实参表达式的值,然后代入形参运算求值

24、宏定义语句中宏名后的参数称为实参而在程序中宏名后的参数称为虚参

25、#define?ADD?2+4? ?执行赋值语句:v=ADD*2;后,v的值是12

26、在文件包含预处理语句的使用形式中,当#include后面的文件名用双引号括起时,不检索源文件所在的目录而直接按系统标准方式检索文件目录

27、在文件包含预处理语句的使用形式中,当#include后面的文件名用尖括号括起时,不检索源文件所在的目录而直接按系统标准方式检索文件目录

第九章 指针

测试

1、若有以下定义和语句: int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是? 若有以下定义和语句: int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是?
A、ps+1
B、*(ps+3)
C、ps[0][2]
D、*(ps+1)+3

2、有如下代码段: #include<stdio.h> #include<stdlib.h> int a=0; int *p; int main(){ float b; double *dp=(double*)malloc(sizeof(double)) } 问在内存中存储在同一存储区的变量为
A、a,*dp
B、a,b
C、b,dp
D、p,dp

3、若有说明:int a=2,*p=&a,*q=p; 则下列赋值语句非法的是
A、p=q
B、*p=*q
C、a=*q
D、q=a

4、若有说明:int a[]={ 1,3},*p=a;则printf("%d",*a++);的输出结果为
A、a的地址++
B、1
C、2
D、3

5、变量的指针,其含义是指该变量的
A、值
B、地址
C、名
D、一个标志

6、若有语句:int *p,a=10;p=&a; 下列均代表地址的一组选项是
A、a,p,*&a
B、&*a,&a,*p
C、*&p,*p,&a
D、&a,&*p,p

7、以下程序调用scanf函数给变量a输入数值的方法是错误的,其错误原因是? #include<stdio.h> int main(){ int *p,*q,a,b; p=&a; printf("input a:"); scanf("%d",*p); ... }
A、*p表示的是指针变量p的地址
B、*p表示的是变量a的值,而不是变量a的地址
C、*p表示的是指针变量p的值
D、*p只能用来说明p是一个变量指针

8、下列判断正确的是?
A、char *s="zjgsu"; 等价于 char *s;*s="zjgsu"
B、char s[10]={ "zjgsu"}; 等价于 char s[10];s[10]={ "zjgsu"};
C、char *s="zjgsu"; 等价于 char *s;s="zjgsu"
D、char s[10]="zjgsu",t[10]="zjgsu"; 等价于 char s[10]=t[10]="zjgsu";

9、设 char=*s="zj\020gsu\n"; 则指针变量s指向的字符串所占的字节数是?
A、3
B、11
C、10
D、8

10、有如下程序段: char *s="zj\020gsu\n"; for(;*s!='\0';s++){ printf("*") } 则该程序的输出结果为
A、中国大学mooc网课答案

*
B、中国大学mooc网课答案

****
C、中国大学mooc网课答案

***
D、中国大学mooc网课答案

**

11、下列赋值语句无法赋值成功的是
A、char str[5]="zjgsu";
B、char *str="zjgsu";
C、char str[]="zjgsu";
D、char str[5]={ 'S','C','I','E'};

12、若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的是
A、p=2*(int*)malloc(sizeof(int));
B、p=(int*)malloc(2*sizeof(int));
C、p=(int*)malloc(8);
D、p=(int*)calloc(2,sizeof(int));

13、若已定义char s[10]; 则在下面表达式中不表示s[1]地址的是
A、s+1
B、S++
C、&s[0]+1
D、&s[1]

14、执行以下程序后,a的值为? #include<stdio.h> int main(){ int a,k=4,m=6,*p=&k,*q=&m; a=p==&m; }
A、-1
B、1
C、0
D、4

15、执行以下程序后,b的值为? #include<stdio.h> int main(){ int b,k=4,m=6,*p=&k,*q=&m; b=(-*p)/(*q)+7; }
A、5
B、6
C、7
D、10

16、有以下程序: #include<stdio.h> int main(){ int a=1,b=3,c=5; int *p1=&a,*p2=&b,*p=&c; *p=*p1**p2; printf("%d\n",c); } 程序运行后的输出结果是
A、1
B、2
C、3
D、4

17、在16位系统上,若有定义int a[]=(10,20,30},*p=&a;当执行p++; 后,下列说法错误的是?
A、p向高地址移动了一个字节
B、p向高地址移动了一个存储单元
C、p向高地址移动了两个字节
D、p与a+1等价

18、有以下程序段: int a[10]={ 1,2,3,4,5,,6,7,8,9,10},*p=&a[2],b;b=p[4]; b的值为
A、4
B、5
C、6
D、7

19、有以下程序: void fun(char *c,int d){ *c=*c+1; d=d+1; printf ("%c,%c\n",*c,d); } void main(){ char a=’A’,b=’a’; fun(&b,a); printf("%c,%c\n",a,b); } 程序运行后的输出结果是
A、B,a,B,a
B、a,B,a,B
C、A,b,A,b
D、b,B,A,b

20、若有以下程序: void main(){ char *a[3]={ "I","love","zjgsu"}; char **ptr=a; printf("%c %s",*(*(a+2)+1),*(ptr+1)); } 这段程序的输出是
A、I l
B、o o
C、o zjgsu
D、j love

21、有如下代码段: char *c[]={ "HELLO","NEW","WORLD","SAYHI"}; char **cp[]={ c+3,c+2,c+1,c}; char ***cpp=cp; int main(){ printf("%s",**++cpp); printf("%s",*--*++cpp+3); printf("%s",*cpp[-2]+3); printf("%s",cpp[-1][-1]+1); } 则该程序的输出结果为
A、WORLD,LO,SAYHI,EW
B、WORLD,LO,HI,NEW
C、NEW,LO,SAYHI,EW
D、WORLD,LO,HI,EW

22、有如下定义:char *s="asdas\0accnov\0"; 则printf("%d",strlen(s));的输出为
A、5
B、6
C、15
D、13

23、若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是
A、i=*p;
B、*p=*&j;
C、i=&j;
D、i=**p;

24、int j,*p=&j;要实现j的内容加10,错误的是
A、*p=*&j+10
B、j=*p+10
C、*p=*p+10
D、*p=&j+10

25、若有以下定义char s[]={ "12345"},*p=s;则下列表达式中错误的是
A、*(p+1)
B、*(s+2)
C、p="ABC"
D、s="ABC"

26、若有如下定义和语句,则输出结果是? int **p,*p,a=10,b=20; pp=&p;p=&a;p=&b; printf("%d,%d\n",*p,**p);
A、10,20
B、10,10
C、20,10
D、20,20

27、设有定义语句:int (*ptr)[10]; 其中的ptr是
A、10个指向整型变量的指针
B、指向10个整型变量的函数指针
C、一个指向具有10个元素的一维数组的指针
D、具有10个指针元素的一维数组

28、以下程序的输出结果为? void prt(int *x,int *y,int *z){ printf("%d,%d,%d",++*x,++*y,*(z++)); } int main(){ int a=10,c=20,b=40; prt(&a,&b,&c); prt(&a,&b,&c); }
A、11,42,31 12,22,41
B、11,41,20 12,42,20
C、11,21,40 11,21,41
D、11,21,40 12,22,40

29、若有以下定义语句: int a[]={ 1,2,3,4,5,6,7,8,9,0};*p=a; 则值为3的表达式是
A、p+=2,*(++p)
B、p+=2,*p++
C、p+=3,*p--
D、p+=2,++*p

30、程序中对fun函数有如下声明: void *fun(); 此声明的含义是
A、fun函数无返回值
B、fun函数的返回值可以是任意的数据类型
C、fun函数的返回值是无值型的指针类型
D、指针fun()指向一个函数

31、为避免内存泄漏,使用malloc函数动态申请的内存空间在使用完之后应及时调用free()函数释放内存空间。

32、C库中有标准的malloc和free函数,它们的使用不受分配、释放之间顺序的限制。

33、函数指针和变量指针一样,可以进行诸如fp±i,fp1-fp2,fp++等运算。

34、已知一级指针需要4个字节的存储空间,则二级指针需要8个字节存储空间。

35、已知int *p;则p++使p向后移动了一个字节。

36、设有以下定义和语句: int a[3][2]={ 10,20,30,40,50,60},(*p)[2]; p=a; 则*(*(p+2)+1)的值为

37、若有如下说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是 int t[3][3]={ 1,2,3,4,5,6,7,8,9},*pt[3],k; for(k=0;k<3;k++) pt[k]=&t[k][0];

38、若有以下定义: int a[]={ 1,3,5,7,9},*p; 则下列程序段的输出结果为 p=a; *(p+2)+=2; printf("%d,%d\n",**p,*(p+2));

39、有以下程序: #include<stdio.h> #include<string.h> int main(){ char b1[8]="abcdefg",b2[8],*pb=b1+3; while(--pb>=b1){ strcpy(b2,pb); } printf("%d\n",strlen(b2)); } 输出结果是

40、有如下程序: #include<stdio.h> int main(){ int x=1,y=2; int func(int *a,int *b); y=func(&x,&y); x=func(&x,&y); printf("%d,%d\n",x,y); return 0; } int func(int *a,int *b){ if(*a>*b){ *a-=*b; } else{ *a--; } return (*a+*b); } 该程序的输出结果为

41、有如下程序: #include<stdio.h> int main(){ int s[6][6],i,j; for(i=0;i<6;i++){ for(j=0;j<6;j++){ *(*(s+i)+j)=i-j; } } for(j=0;j<6;j++){ for(i=0;i<6;i++)[ printf("%4d",*(*(s+i)+j)); } printf("\n"); } return 0; } 则该程序输出的第三行内容为

42、指针除了可以指向变量,也可以指向

43、有如下程序段:int a[]={ 1,3,5},*p=a; 则++*p++结果为

44、有如下程序: void swap(int *a,int b){ int t=b; b=*a; *a=t; } int main(){ int a=5,b=10; swap(&a,b); printf("%d,%d\n",a,b); } 则输出结果为

45、当对指针p动态申请内存空间后,在使用的过程中,发现之前申请的内存不够,可使用 函数申请更大的空间。

第9章OJ作业

1、输入一个字符串,内有数字和非数字字符。将其中连续的数字作为一个整数,依次放到数组中。

2、有一个m×n的矩阵,求出其中的最大值及最大值的位置坐标(坐标从0开始)。

3、编写一个程序,实现对一个字符串(不包含空格)的前n的字符用指定字符c替代(如果字符串长度不足n,则把这个字符串都变为指定字符,但是长度不变)。

4、编写一段程序,实现将整数按输入顺序的逆序输出。

第十章 结构与联合

测试

1、若有定义语句: struct node{ int a1; int a2; }a3; 以下赋值语句正确的是()
A、node.a1=4;
B、a2=4;
C、a3={ 4,5};
D、a3.a2=5;

2、变量node所占的内存字节数是_______。(假设整型int为4字节) struct stu{ char name[20]; long int n; int score[4]; }node;
A、28
B、30
C、32
D、46

3、3、下列程序的输出结果是() struct node{ int a,b,c; }; int main(){ struct node s[2]={ { 1,2,3},{ 4,5,6}}; int t; t=s[0].a+s[1].b; printf("%d\n",t); }
A、5
B、6
C、7
D、8

4、设有变量定义 struct node{ int age; int num; }std,*p=&std; 能正确引用结构体变量node中成员age的表达式是()。
A、std->age
B、*std->age
C、*p.age
D、(*p).age

5、有如下定义 struct person{ char name[9]; int age; }; struct person class[4]={ "John",17,"Paul",19,"Mary",18,"Adam",16}; 根据以上定义,能输出字母M的语句是_____。
A、printf("%c\n",class[3].name);
B、printf("%c\n",class[3].name[1]);
C、printf("%c\n",class[2].name[1]);
D、printf("%c\n",class[3].name[0]);

6、以下程序的输出结果是______。 struct node{ int x,y; struct node *p; }h[2]; int main(){ h[0].x=1; h[0].y=2; h[1].x=3; h[1].y=4; h[0].p=&h[1]; h[1].p=h; printf("%d%d\n",(h[0].p)->x,(h[1].p)->y); }
A、12
B、23
C、14
D、32

7、若有以下的说明: struct person{ char name[20]; int age; char sex; }a={ "li ning",20,'m'},*p=&a; 则对字符串li ning的引用方式不可以的是()
A、(*p).name
B、p.name
C、a.name
D、p->name

8、下面程序的输出结果是 typedef union{ long x[2]; int y[4]; char z[8]; }node; node them; int main(){ printf("%d\n",sizeof(them)); }
A、32
B、16
C、8
D、24

9、若有以下定义: struct date{ int day; int month; int year; }time; 下面的哪一引用方式是正确的()。
A、day
B、time.day
C、time->day
D、month->day

10、下面程序的输出是_______。 int main(){ struct node{ int x; int y; }cnum[2]={ 1,3,2,7}; printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x ); }
A、0
B、1
C、3
D、6

11、结构体类型变量可以以整体的形式直接输入输出

12、C语言允许针对具体问题定义各种各样的结构体类型,甚至可以是嵌套的结构体类型

13、可以通过typedef增加新的类型

14、当定义一个结构体变量时,系统为它分配的内存空间是结构体中占内存容量最大的变量所需的容量

15、同一个联合的成员所占内存的起始地址并不一定相同

16、联

学习通高级语言程序设计_13

学习通高级语言程序设计第13课是关于网络编程的内容。网络编程是指使用计算机网络技术实现程序之间的通信。网络编程能够让程序在不同的计算机之间进行数据交换,实现远程控制、远程访问等功能。在本课中,我们将学习如何使用Python实现网络编程。

Socket编程

在Python中,使用Socket模块可以实现网络编程。Socket模块提供了底层的网络通信接口,使用Socket可以方便地实现TCP/IP协议的通信。Socket的使用需要了解IP地址、端口号、协议等基本概念。

IP地址

IP地址是指互联网协议地址,是指分配给主机的地址。在IPv4中,IP地址是一个32位的二进制数,一般用点分十进制表示。在IPv6中,IP地址是一个128位的二进制数,一般用冒号分隔的十六进制表示。

端口号

端口号是指在一台计算机上运行的进程与其他计算机进行通信时使用的标识号。在TCP/IP协议中,端口号是一个16位的整数,取值范围为0~65535。常用的端口号有HTTP的80端口、FTP的21端口、SSH的22端口等。

协议

协议是指计算机之间进行通信时所使用的通信规则。TCP/IP协议是互联网最基本的协议,它定义了网络通信的基本方式和规范。在TCP/IP协议中,数据被分成若干个数据包进行传输,每个数据包包含了数据、源地址、目标地址、端口号、协议等信息。

Socket编程实例

下面是一个使用Socket模块实现的简单客户端和服务器端程序。服务器端监听来自客户端的连接请求,客户端向服务器端发送数据。

服务器端代码

<code>import sockethost = 'localhost'  # 主机名port = 5000         # 端口号s = socket.socket()  # 创建一个socket对象s.bind((host, port))  # 绑定主机和端口s.listen(1)  # 监听来自客户端的连接请求print('Waiting for connection...')# 接收来自客户端的连接请求conn, addr = s.accept()print('Connected:', addr)# 接收来自客户端的数据data = conn.recv(1024).decode()print('Received data:', data)# 发送数据给客户端conn.send('Hello, client!'.encode())# 关闭连接conn.close()</code>

客户端代码

<code>import sockethost = 'localhost'  # 主机名port = 5000         # 端口号s = socket.socket()  # 创建一个socket对象s.connect((host, port))  # 连接服务器端# 发送数据给服务器端s.send('Hello, server!'.encode())# 接收服务器端的数据data = s.recv(1024).decode()print('Received data:', data)# 关闭连接s.close()</code>

总结

本课介绍了Socket编程的基本概念和实现方法。Socket是Python中底层的网络通信接口,可以使用Socket模块实现TCP/IP协议的通信。学习Socket编程需要掌握IP地址、端口号、协议等基本概念,同时需要了解服务器端和客户端的编写方法。

学习通高级语言程序设计_13

学习通高级语言程序设计第13课是关于网络编程的内容。网络编程是指使用计算机网络技术实现程序之间的通信。网络编程能够让程序在不同的计算机之间进行数据交换,实现远程控制、远程访问等功能。在本课中,我们将学习如何使用Python实现网络编程。

Socket编程

在Python中,使用Socket模块可以实现网络编程。Socket模块提供了底层的网络通信接口,使用Socket可以方便地实现TCP/IP协议的通信。Socket的使用需要了解IP地址、端口号、协议等基本概念。

IP地址

IP地址是指互联网协议地址,是指分配给主机的地址。在IPv4中,IP地址是一个32位的二进制数,一般用点分十进制表示。在IPv6中,IP地址是一个128位的二进制数,一般用冒号分隔的十六进制表示。

端口号

端口号是指在一台计算机上运行的进程与其他计算机进行通信时使用的标识号。在TCP/IP协议中,端口号是一个16位的整数,取值范围为0~65535。常用的端口号有HTTP的80端口、FTP的21端口、SSH的22端口等。

协议

协议是指计算机之间进行通信时所使用的通信规则。TCP/IP协议是互联网最基本的协议,它定义了网络通信的基本方式和规范。在TCP/IP协议中,数据被分成若干个数据包进行传输,每个数据包包含了数据、源地址、目标地址、端口号、协议等信息。

Socket编程实例

下面是一个使用Socket模块实现的简单客户端和服务器端程序。服务器端监听来自客户端的连接请求,客户端向服务器端发送数据。

服务器端代码

<code>import sockethost = 'localhost'  # 主机名port = 5000         # 端口号s = socket.socket()  # 创建一个socket对象s.bind((host, port))  # 绑定主机和端口s.listen(1)  # 监听来自客户端的连接请求print('Waiting for connection...')# 接收来自客户端的连接请求conn, addr = s.accept()print('Connected:', addr)# 接收来自客户端的数据data = conn.recv(1024).decode()print('Received data:', data)# 发送数据给客户端conn.send('Hello, client!'.encode())# 关闭连接conn.close()</code>

客户端代码

<code>import sockethost = 'localhost'  # 主机名port = 5000         # 端口号s = socket.socket()  # 创建一个socket对象s.connect((host, port))  # 连接服务器端# 发送数据给服务器端s.send('Hello, server!'.encode())# 接收服务器端的数据data = s.recv(1024).decode()print('Received data:', data)# 关闭连接s.close()</code>

总结

本课介绍了Socket编程的基本概念和实现方法。Socket是Python中底层的网络通信接口,可以使用Socket模块实现TCP/IP协议的通信。学习Socket编程需要掌握IP地址、端口号、协议等基本概念,同时需要了解服务器端和客户端的编写方法。