0.0894

五煦查题

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

中国大学大学计算机基础(理)廖瑞华课后答案(mooc完整答案)

64 min read

中国大学大学计算机基础(理)廖瑞华课后答案(mooc完整答案)

第1周——为什么学习C语言、中国整答C数据类型、大学大学实验一

1.4 课外参考之--变量的计算机基表数范围和存储形式(29分钟)随堂测验

1、C语言用sizeof计算变量在内存中的础理字节数,其中sizeof是廖瑞()
A、函数
B、华课后答运算符
C、案m案标识符
D、中国整答语句

1.5 课外参考之--宏常量与const常量(13分钟)该内容在第二周学习随堂测验

1、大学大学宏定义是计算机基()
A、一条语句
B、础理一种编译预处理指令
C、廖瑞一个标识符
D、华课后答一个变量

2、案m案const常量有数据类型。中国整答

第1周测验

1、下列选项中,合法的C语言标识符是
A、_a1
B、width.x
C、#abc123
D、123abc
E、o*k
F、a?
G、a+b
H、%a
I、b!

2、以下不适合定义为用户标识符的是
A、int
B、a2
C、def2
D、_3com_
E、PI
F、Source
G、abc

3、#include <stdio.h>是
A、编译预处理指令
B、语句
C、函数
D、什么都不是
E、有语法错误

4、在windows下,程序编译链接后形成的可执行文件是
A、.obj文件
B、.exe文件
C、.o文件
D、.c文件
E、.h文件

5、程序编译链接后显示" 0 error,0 warning" 代表
A、程序中没有语法错误
B、程序是正确的
C、程序是不正确的
D、程序中可能存在语法错误
E、程序中有语义错误

6、用8位无符号二进制数能表示的最大十进制数为
A、255
B、127
C、128
D、256

7、关于可执行文件说法正确的是
A、可执行文件是编译链接后生成的文件
B、可执行文件就是源代码文件
C、可执行文件后缀为.obj
D、可执行文件就是main.c文件

8、C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
A、运算符
B、只需要一个操作数的运算符
C、函数
D、语句
E、标识符
F、变量

9、在C语言中,字符型数据在内存中以字符的( )形式存放
A、ASCII码
B、国标码
C、BCD码
D、反码

10、以下符合C语言语法的实型常量是
A、5e-3
B、3.14.159e
C、1.2e0.5
D、e15

11、以下选项中可作为C语言合法整数的是
A、0xffa
B、10110B
C、038x
D、x2a2

12、下列说法正确的是
A、在C语言中,变量必须先定义后使用。
B、一条变量定义语句可定义多个同类型的变量。
C、实型常量的默认类型是double类型。
D、一条变量定义语句不可以同时定义多个变量。
E、不同类型的变量分配的存储空间大小都是相同的。
F、在C语言中,所有变量都必须在定义时进行初始化。
G、变量在没有初始化的时候,其值都是0

13、下列变量定义中合法的是
A、long ao=0xfdaL;
B、short _a=1-.1e-1;
C、double b=1+5e2.5;
D、float 2_and=1-e-3;

第2周——数字间的那些事儿,做点计算哈

2.1 算术运算(20分钟)随堂测验

1、二元的算术运算符的结合性都是左结合。

2.2 赋值运算(15分钟)随堂测验

1、下列语句中错误的是()。
A、int a, b, c; a=b=c=0;
B、int a, b, c; a=0; b=0; c=0;
C、int a=0; int b=0; int c=0;
D、int a=b=c=0;

2.4 自动类型转换(5分钟)随堂测验

1、通常情况下,不同类型数据的运算结果的类型是取值范围较大的那种类型。

2.5 强制类型转换(7分半)随堂测验

1、强制类型转换运算符就是强制改变一个变量原有的数据类型。

第2周测验

1、下列程序的输出结果是 #include <stdio.h> int main() { int a=7,b=5; printf("%d\n",b/a); return 0; }
A、0
B、5
C、1
D、0.7

2、下列关于单目运算符++、--的叙述中正确的是
A、a++的运算过程是:先使用变量a的值,然后再执行a=a+1。
B、++a的运算过程是:先使用变量a的值,然后再执行a=a+1。
C、a++的运算过程是:先执行a=a+1,然后再使用变量a的值。
D、a++和++a都是最终使变量a执行a=a+1,因此对于包含a++或++a的表达式而言(如j=a++;或者j=++a;),两种情况下表达式的最终运算结果一定是相同的。

3、以下程序的输出结果是: #include <stdio.h> int main() { int a=1, b=2; a=a+b; b=a-b; a=a-b; printf("%d,%d\n", a, b ); return 0; }
A、2,1
B、3,1
C、3,2
D、1,2

4、程序运行后的输出结果是#include <stdio.h> int main() { int m=3,n=4,x; x=m++; ++n; x=x+8/n; printf("%d,%d\n",x,m); return 0; }
A、4,4
B、4,3
C、5,4
D、5,3

5、下面程序的运行结果是 #include <stdio.h> int main() { int a = 2, b = 3 ; float x = 3.5, y = 2.5 ; printf("%f", (float)(a+b) / 2 + (int)x % (int)y) ; return 0; }
A、3.500000
B、3.000000
C、3.5
D、3

6、以下非法的赋值语句是
A、++(i+1);
B、x=(j--);
C、n=++i;
D、j++;

7、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是
A、6.000000
B、6.500000
C、6
D、5.500000

8、以下程序的运行结果是 #include <stdio.h> int main() { int a = 12, b = 3; float x = 18.5, y = 4.5; printf("%f\n", (float)(a * b) / 2); printf("%d\n", (int)x %(int)y); return 0; }
A、18.000000 2
B、18 2
C、18 2.000000
D、18.000000 2.000000

9、设有语句“int a = 3;”,执行语句“a += a -= a * a;”后,变量a的值是
A、-12
B、3
C、0
D、9

10、在C语言中,要求操作数必须是整型的运算符是
A、%
B、/
C、*
D、+
E、-

11、程序运行后的输出结果是#include <stdio.h> int main() { char a='a'; printf("%c,",++a); printf("%c\n",a++); return 0; }
A、b,b
B、b,c
C、a,b
D、a,c

12、在下面的C语言语句中,存在错误的是
A、int a=b=10;
B、int a=10,b=10;
C、int a,b; a=b=10;
D、int a,b; a=10; b=10;

13、若以下选项中的变量已正确定义,则正确的赋值语句是
A、x3=x2=x1=0;
B、x1=26.8%3;
C、1+2=x2;
D、x4=1+2=3;

14、若有以下定义,则表达式“a * b + d – c”的值的类型为 #include <stdio.h> int main() { char a; int b; float c; double d; .... return 0; }
A、double
B、int
C、float
D、char

15、在C程序中如果要使用数学函数,如sin(x),log(x)等,需要在程序中加入的语句是
A、#include <math.h>
B、#include <stdio.h>
C、#define <math.h>
D、#define <stdio.h>

16、十进制3位数整数x,下面哪条语句能正确分离出它的十位上的数字d?
A、d=(x-(x/100)*100)/10;
B、d=(x%100)/10;
C、d=(x/10)%10;
D、d=x%10;
E、d=(x-x%10)/10;
F、d=x%100;

17、在C语言中对下面的语句而言,哪个说法是错误的? int a, b;
A、变量a和b中的值都是0
B、变量a和b中都没有数值
C、变量a和b中的值都是未知的随机数
D、a和b都是整型变量
E、变量a和b占用的内存空间的大小是相同的

18、已知int a,b;并且有a=5%3;以及b=5/3;,则a和b的值分别是( )。
A、2和1
B、0和1.67
C、3和1
D、5和1
E、0和1
F、3和1.67
G、5和1.67

19、设有以下定义,则下面给出的语句中错误的是 int a=0; float b=1.25; char c='A'; #define d 2
A、d++;
B、(a+b)++;
C、(-a)++;
D、(a+1)++;
E、a++;
F、b++;
G、c++;

第2周——从键盘中来,到键盘中去,开始输入和输出啦

3.1 数据的格式化屏幕输出(15分钟)随堂测验

1、在调用printf函数输出数据时,当数据的实际位宽大于printf函数中的指定位宽时,将按照数据的实际位宽输出数据。

3.3 单个字符的输入输出(15分半)随堂测验

1、单个字符既可以以c格式符也可以以d格式符输出,前者是输出这个字符,后者是输出这个字符的ASCII码值。

3.5 进阶:用%c输入数据存在的问题(含错误案例分析)(10分)随堂测验

1、用c格式符输入字符型数据的时候,为了避免将输入缓冲区中的空白字符(空格、回车换行符、Tab键)作为有效字符读入,可以在%c前面加一个空格。

第3周——无处不在的抉择

4.1 关系运算符和逻辑运算符(23分钟)随堂测验

1、下面判断ch是大写或者小写英文字母的表达式是否正确? ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z'

4.2 条件语句(14分钟)随堂测验

1、下列关于if-else语句的说法中哪个是正确的。
A、else总是和离它最近的if配对
B、else总是和前面离它最近的且还未和其他else匹配的在同一语句块内同一层次的if配对
C、else总是和前面离它最近的且位于花括号内的if配对
D、else可以和它前面的尚未与其他else匹配的任何一个if配对

2、条件运算符是C语言中唯一的一个三元运算符.

4.4 进阶:数值溢出和精度损失问题(34分半)随堂测验

1、在赋值操作中,当赋值表达式左侧的变量的类型与右侧的表达式的类型不一致的时候,下面说法正确的是()。
A、在赋值操作中,当赋值运算符左侧的变量的类型与右侧的表达式的类型不一致的时候,会发生自动类型转换,赋值表达式的结果类型是赋值运算符左侧变量的类型。
B、在赋值操作中,当赋值运算符左侧的变量的类型与右侧的表达式的类型不一致的时候,赋值表达式的结果类型是赋值运算符右侧表达式的类型。
C、在赋值操作中,只要赋值运算符左侧的变量的类型与右侧的表达式的类型不一致,就会发生数值溢出。
D、在赋值操作中,当赋值运算符左侧的变量的类型与右侧的表达式的类型不一致的时候,要么发生数值溢出,要么发生数值精度的损失。

4.4 进阶:数值溢出和精度损失问题(34分半)随堂测验

1、下列说法错误的是()。
A、浮点数并非真正意义上的实数,只是其在某种范围内的近似。
B、浮点数能精确表示的数字位数取决于这种类型的浮点数的有效数字位数。
C、使用更多的位来存储阶码,将会扩大浮点数的表数精度。
D、受浮点数表数精度的限制,因此对于浮点数不能直接比较其是否相等,应该比较其是否近似相等。

4.5 进阶:软件测试与错误实例分析(20分半)随堂测验

1、下列说法错误的是()。
A、软件测试的目的就是证明程序的正确性,即给定特定的输入,通过运行被测程序,检查程序的输出是否与预期结果一致,进而验证程序的正确性。
B、白盒测试就是在完全了解程序的结构和处理过程的情况下,按照程序内部的逻辑测试程序,检验程序中的每条逻辑路径是否都能按预定要求正确工作。黑盒测试就是把系统看成一个黑盒子,不考虑程序内部的逻辑结构和处理过程,只根据需求规格说明书的要求,设计测试用例,检查程序的功能是否符合它的功能说明。
C、在选择测试用例时,不仅要选取合理的输入数据,还要选取一些不合理的输入数据,以及某些极端的边界点或临界点等,对程序进行测试
D、由于修复了旧的bug的同时,往往又会产生新的bug,因此往往还需要对所有出现过的bug重新测试一遍,看其是否会重新出现,并给确认代码修改后没有引入新的bug,即修改代码后需要进行回归测试。

第3周测验

1、程序代码如下:#include <stdio.h> int main() { int a,b; printf("please input a and b:\n"); scanf("%d%d",&a,&b); printf("the output data is %d\n",a<b?b:a); return 0; } 从键盘输入以下数据: 2<回车> 7<回车> 则程序输出为
A、the output data is 7
B、the output data is 2
C、the output data is 1
D、the output data is 0

2、以下程序运行后的输出结果是 #include <stdio.h> int main() { int a,b,c; a=10; b=20; c=(a%b<1)||(a/b>1); printf("%d,%d,%d",a%b,a/b,c); return 0; }
A、10,0,0
B、10,1,0
C、10,0,1
D、10,1,1

3、从键盘输入三角形的三边长为a,b,c,按下面公式计算并输出三角形的面积。 程序代码如下,但程序运行后输出结果不正确,请找出有问题的语句。 #include <stdio.h> #include <math.h> int main() { float a, b, c; float s, area; printf("Input a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); if (a+b>c && b+c>a && a+c>b) { s = 1/2 * (a + b + c); area = sqrt(s * (s - a) * (s - b) * (s - c)); printf("area=%.2f\n", area); } else { printf("It is not a triangle\n"); } return 0; }
A、第11行: s = 1/2 * (a + b + c);
B、第9行: if (a+b>c && b+c>a && a+c>b)
C、第12行: area = sqrt(s * (s - a) * (s - b) * (s - c));
D、第8行: scanf("%f,%f,%f",&a,&b,&c);

4、编程设计一个简单的计算器程序,要求用户从键盘输入如下形式的表达式: 操作数1 运算符op 操作数2 然后,计算并输出表达式的值 指定的运算符为: 加(+) 减(-) 乘(*) 除(/) 代码如下,所给程序是否存在错误,若有,找出错误所在并改正。 #include <stdio.h> int main() { float data1, data2; char op; printf("Please enter the expression:"); scanf("%f %c%f", &data1, &op, &data2); /* %c前有一个空格 */ switch (op) { case '+': printf("%f + %f = %f\n", data1, data2, data1 + data2); break; case '-': printf("%f - %f = %f\n", data1, data2, data1 - data2); break; case '*': printf("%f * %f = %f\n", data1, data2, data1 * data2); break; case '/': printf("%f/%f = %f\n", data1, data2,data1/data2); break; default: printf("Invalid operator!\n"); } return 0; }
A、第20行语句有错误,改成: if (fabs(data2)<=EPS) printf("Division by zero!\n"); else printf("%f/%f = %f\n", data1, data2, data1/data2); 同时,第1行语句下方应加入 #include <math.h> #define EPS 1e-6
B、default分支缺少break语句
C、没有错误
D、第20行语句有错误,改成: if (data2=0) printf("Division by zero!\n"); else printf("%f/%f = %f\n", data1, data2, data1/data2);

5、若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是
A、(x-y)<-10||!(y-x)>10
B、fabs(x-y)<10
C、x-y>-10 && x-y<10
D、(x-y)*(x-y)<100

6、下列复合语句中,不能实现两数交换的是
A、{ a=b; b=a; }
B、{ b = a * b; a = b / a; b = b / a; }
C、{ t=a; a=b; b=t; }
D、{ a = a + b; b = a – b; a = a – b; }

7、写出下面程序的输出结果 #include <stdio.h> int main() { int x=1, y=0, a=0, b=0; switch(x) { case 1: switch(y) { case 0: a++; case 1: b++; } case 2: a++; b++; } printf("a=%d, b=%d\n", a, b) ; return 0; }
A、a=2, b=2
B、a=2, b=1
C、a=1, b=1
D、a=1, b=0

8、以下程序运行后的输出结果是 #include <stdio.h> int main() { int a=5,b=4,c=3,d; d=(a>b>c); printf("%d\n",d); return 0; }
A、0
B、1
C、5
D、4
E、3

9、执行以下程序后的输出结果为 #include <stdio.h> int main() { 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; } return 0; }
A、**0****2**
B、**0**
C、**0****1****2**
D、有语法错误

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

11、下面程序代码的功能是判断输入整数的正负性和奇偶性,请将第19行和22行标号处缺少的代码填写完整。 #include <stdio.h> int main() { int m; printf("Input m: "); scanf("%d", &m); //输入一个整数 if (m > 0) //是否为正数 { if (m % 2 == 0) //是正数,且能被2整除,则是正偶数 { printf("%d is a positive even\n", m); } else //不能被2整除,则是正奇数 { printf("%d is a positive odd\n", m); } } _______________ //判断是否为负数 { _______________ { printf("%d is a negative even\n", m); //是负偶数 } else { printf("%d is a negative odd\n", m); //是负奇数 } } else { printf("%d is zero.It is an even\n", m); } return 0; }
A、第19行代码: else if(m < 0) 第22行代码: if (m % 2 == 0)
B、第19行代码: if(m < 0) 第22行代码: if (m % 2 == 0)
C、第19行代码: else if(m < 0) 第22行代码: if (m % 2 != 0)
D、第19行代码: if(m < 0) 第22行代码: if (m % 2 != 0)

12、程序功能:从键盘输入一个字符,判别它是否为大写字母。如果是,将它转换成小写字母,如果不是,不转换。在屏幕上输出最后得到的字符。程序代码如下,为实现上述功能,请将第8行标号处缺少的语句填写完整。 #include<stdio.h> int main() { char c; printf("Please input a character:"); scanf("%c",&c); if(c >='A'&&c <= 'Z') c =_______________; printf("%c\n",c); return 0; }
A、c+32
B、c+48
C、C+65
D、C+97

13、执行下列程序,k输入为1时的输出结果是 #include <stdio.h> int main() { int k; scanf("%d",&k); switch(k) { case 1: printf("%d",k++); case 2: printf("%d",k++); case 3: printf("%d",k++); break; default: printf("Full!"); } return 0; }
A、123
B、1
C、2
D、3

14、编程计算下面的分段函数,根据从键盘输入的x值,在屏幕上输出y值。 程序代码如下,为完成以上功能,请将第13行标号处缺少的代码填写完整。 #include <stdio.h> #include <math.h> int main() { int x; double y; printf("Input x: "); scanf("%d", &x); // 输入一个整数 if (x > 0) { y = exp(-x); //如果大于0,计算y=exp(-x)的值 } _____________ { y = 1; //x=0,则y=1 } else { y = -exp(x); //x<0,则y=-exp(x) } printf("y=%f\n", y); return 0; }
A、else if (x == 0)
B、else if (x = 0)
C、if (x == 0)
D、if (x = 0)

15、以下程序运行后的输出结果是 #include <stdio.h> int main() { int a=1,b=2,m=0,n=0,k; k=(n=b>a)||(m=a<b); printf("%d,%d\n",k,m); return 0; }
A、1,0
B、0,0
C、0,1
D、1,1

16、以下程序的功能是计算一元二次方程的根。代码如下,请将第10行标号处缺少的语句填写完整。 #include <stdio.h> #include <stdlib.h> #include <math.h> #define EPS 1e-6 int main() { float a, b, c, disc, p, q; printf("Please enter the coefficients a,b,c:"); scanf("%f,%f,%f", &a, &b, &c); _________________________________ /* a=0时,输出"不是二次方程" */ { printf("It is not a quadratic equation!\n"); exit(0); /* C标准库函数,用于终止整个程序的执行,强制返回操作系统 */ } disc = b * b - 4 * a * c; /* 计算判别式 */ p = - b / (2 * a); q = sqrt(fabs(disc)) / (2 * a); if (fabs(disc) <= EPS) /* 判别式等于0时,输出两相等实根 */ { printf("x1 = x2 = %.2f\n", p); } else { if (disc > EPS) /* 判别式大于0时,输出两不等实根 */ { printf("x1 = %.2f, x2 = %.2f\n", p+q, p-q); } else /* 判别式小于0时,输出两共轭复根 */ { printf("x1 = %.2f+%.2fi, ", p, q); printf("x2 = %.2f-%.2fi\n", p, q); } } return 0; }
A、if (fabs(a) <= EPS)
B、if (a <= EPS)
C、if (a=0)
D、if (a<= EPS || a>=-EPS)

17、下列说法错误的是()。
A、case后的“常量表达式”的类型只能是整型。
B、若case后面的语句省略不写,则表示它什么也不做。
C、switch语句中的break和default可有可无。
D、每个case后的“常量表达式”的类型应该与switch后括号内表达式的类型一致。
E、程序执行到switch语句时,先计算表达式的值,然后自上而下寻找与该值匹配的case常量,找到后则按顺序执行此case后的所有语句,而不再进行判断,直到遇break语句或右花括号}为止。
F、若所有的case常量都不能与表达式的值相匹配,那么就执行default后面的语句。通常用于处理不在合理区间内的非法数据。
G、每个case后的常量只起语句标号的作用,所以case常量的值必须互不相同,而且在每个case的语句序列后都有break的情况下,改变case常量出现的次序,不影响程序的运行结果。
H、case后面的表达式不能是含有变量的关系表达式和逻辑表达式,它不能像if语句那样起到判断表达式真假的作用。

第4-6周——周而复始的循环之道

5.1 计数控制的循环(31分钟)随堂测验

1、下列说法错误的是()。
A、逗号运算符也称为顺序求值运算符,由逗号运算符构成的表达式称为逗号表达式。
B、多数情况下,我们并不使用整个逗号表达式的值,主要用它来顺序求得到各个子表达式的值。
C、逗号表达式主要用在循环语句中同时对多个变量赋初值等。
D、在逗号表达式中,其第一个表达式的值就是整个逗号表达式的值。

5.3 条件控制的循环(32分钟)随堂测验

1、下列说法错误的是()。
A、函数rand()用于生成一个[0,RAND_MAX]间的随机数,RAND_MAX是不大于双字节整数的最大值32767的宏常量。使用函数rand()必须在程序开头加上这样一条编译预处理指令:#include <stdio.h>
B、magic = rand()%100 + 1用于生成[1,100]之间的随机数。
C、事实上,函数rand()产生的都是伪随机数。
D、函数srand()用于为rand()设置随机数种子,使rand()产生的随机数“随机化”。

5.4 嵌套循环(17分钟)随堂测验

1、下列说法错误的是( )。
A、执行嵌套循环时是先执行内层循环,后执行外层循环。
B、嵌套循环的内层和外层循环的循环控制变量不能同名。
C、嵌套循环的循环次数等于外层循环的循环次数与内层循环的循环次数之积。
D、如果一个循环的循环体中又完整地包含了另一个循环,则称为嵌套循环。

5.5 穷举(39分钟)随堂测验

1、下面程序段中的break语句是转移到哪里去执行()。for(...) { for(...) { switch(...) { case 1: ... break; case 2:... ... } A: //code } B: //code } C: //code
A、转到标号A所在的语句行与执行
B、转到标号B所在的语句行与执行
C、转到标号C所在的语句行与执行
D、不进行流程转移,而是继续执行break后面的语句

5.6 进阶:软件调试与错误实例分析(27分钟)随堂测验

1、下列说法错误的是()。
A、程序测试的目的就是验证程序的正确性。
B、程序中常见的错误有三种:编译错误,链接错误,以及运行时错误。
C、编译错误通常是由语法错误造成的。
D、运行时错误是指在程序运行时发生的错误,运行时错误有两种:一种是导致程序的运行结果与预期的不一致,另一种是导致程序无法正常运行。

第4-6周测验

1、程序运行后的输出结果是 #include <stdio.h> int main() { int i; for(i=0;i<3;i++) switch(i) { case 0: printf("%d",i); case 2: printf("%d",i); default: printf("%d",i); } return 0; }
A、000122
B、022111
C、021021
D、012

2、若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是
A、for( i=1; i<=5; i++ ) { p=1; p*=i; }
B、for(i=1,p=1;i<=5;i++) p*=i;
C、i=1; p=1; while ( i<=5 ) { p*=i; i++; }
D、i=1; p=1; do { p*=i; i++; } while ( i<=5 );

3、以下程序执行后的输出结果是 #include <stdio.h> int main( ) { int x=0,y=5,z=3; while(z-->0 && ++x<5) { y=y-1; } printf("%d,%d,%d\n",x,y,z); return 0; }
A、3,2,-1
B、3,2,0
C、4,3,-1
D、5,-2,-5

4、下面程序的输出是 #include <stdio.h> int main() { int y=9; for( ; y>0; y--) { if(y%3==0) { printf("%d", --y); continue; } } return 0; }
A、852
B、741
C、963
D、875421

5、爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。请问,这条阶梯共有多少阶? 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int x = 1, find = 0; while (__________) { if (______________________) { printf("x = %d\n", x); find = 1; } x++; } return 0; }
A、第5行: !find 第7行: x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0
B、第5行: find==1 第7行: x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0
C、第5行: find!=1 第7行: x/2==1 && x/3==2 && x/5==4 && x/6==5 && x/7==0
D、第5行: find!=0 第7行: x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0

6、鸡兔同笼,共有98个头,386只脚,编程求鸡、兔各多少只。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int x, y; for (x=1; _______; x++) { ____________; if (____________) { printf("x = %d, y = %d", x, y); } } return 0; }
A、第5行: x<=97 第7行: y = 98 - x 第8行: 2*x+4*y == 386
B、第5行: x<97 第7行: x = 98 - y 第8行: 2*x+4*y == 386
C、第5行: x<97 第7行: y = 98 - x 第8行: 2x+4y == 386
D、第5行: x<=97 第7行: x = 98 - y 第8行: 2*x+4*y <= 386

7、以下能正确计算1×2×3×4...×10的程序段是
A、i=1; s=1; do { s=s*i; i++; } while(i<=10);
B、do { i=1; s=1; s=s*i; i++; } while(i<=10);
C、do { i=1; s=0; s=s*i; i++; } while(i<=10);
D、i=1; s=0; do { s=s*i; i++; } while(i<=10);

8、以下程序执行后的输出结果是 #include <stdio.h> int main( ) { int i,n=0; for(i=2;i<5;i++) { do { if(i%3) continue; n++; }while(!i); n++; } printf("n=%d\n",n); return 0; }
A、n=4
B、n=5
C、n=2
D、n=3

9、以下正确的描述是
A、只能在循环体内和switch语句体内使用break语句
B、continue语句的作用是结束整个循环的执行
C、在循环体内使用break语句或continue语句的作用相同
D、continue语句可以写在循环体之外

10、计算 直到最后一项的绝对值小于为止。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> #include <math.h> int main() { int n = 1; float term = 1, sum = 0; ______________; while (fabs(term) >= 1e-4) //判末项大小 { term = sign / n; //求出累加项 sum = sum + term; //累加 ________________; //改变项的符号 n++; //分母加1 } printf("sum = %f\n", sum); return 0; }
A、第7行代码: float sign=1 第13行代码: sign = -sign
B、第7行代码: float sign= -1 第13行代码: sign = -sign
C、第7行代码: float sign=1 第13行代码: term = -term
D、第7行代码: float sign= -1 第13行代码: term = -term

11、设已定义i和k为int类型变量,则以下for循环语句 for(i=0,k=-1;k=1; i++,k++) printf( "* * * *\n");
A、是无限循环
B、判断循环结束的条件不合法
C、循环一次也不执行
D、循环只执行一次

12、有以下程序,若从键盘给n输入的值是-3,则程序的输出结果是 #include <stdio.h> int main() { int s=0,a=1,n; scanf("%d",&n); do { s+=1; a=a-2; } while(a!=n); printf("%d\n",s); return 0; }
A、2
B、-1
C、3
D、0

13、以下程序运行后的输出结果是 #include <stdio.h> int main() { int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i++; s+=i; } printf("%d\n",s); return 0; }
A、程序进入死循环
B、10
C、13
D、21

14、下面程序的功能是输出以下形式的图案,则在下划线处应填入的是 * *** ***** 试题及答案

* #include <stdio.h> int main( ) { int i,j; for(i=1;i<=4;i++) { for(j=1;j<=__________;j++) { printf("*"); } printf("\n"); } return 0; }
A、2*i-1
B、2*i+1
C、i+2
D、i

15、程序执行后的输出结果是 #include <stdio.h> int main( ) { int i,s=0; for(i=1;i<10;i+=2) { s+=i+1; } printf("%d\n",s); return 0; }
A、自然数1~10中的偶数之和
B、自然数1~9的累加和
C、自然数1~10的累加和
D、自然数1~9中的奇数之和

16、以下程序的输出结果是 #include <stdio.h> int main() { int a, b; for(a=1, b=1; a<=100; a++) { if(b>=10) break; if (b%3==1) { b+=3; continue; } } printf("%d\n",a); return 0; }
A、4
B、101
C、6
D、5

17、三色球问题。若一个口袋中放有12个球,其中有3个红色的,3个白色的,6个黑色的,从中任取8个球,问共有多少种不同的颜色搭配? 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int i, j, k; for (i=0; i<=3; i++) { for (j=0; j<=3; j++) { for (________________) { if (__________________) { printf("i=%d, j=%d, k=%d\n", i, j, k); } } } } return 0; }
A、第9行: k=0; k<=6; k++ 第11行: i + j + k == 8
B、第9行: k=0; k<=6; k++ 第11行: i + j + k = 8
C、第9行: k=0; k<=6; k++ 第11行: i + j + k <= 8
D、第9行: k=0; k<6; k++ 第11行: i + j + k == 8

18、我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只? 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int x, y, z; for (x=0; x<=20; x++) { for (y=0; _________; y++) { _______________; if (_______________) { printf("x=%d, y=%d, z=%d\n", x, y, z); } } } return 0; }
A、第7行: y<=33 第9行: z = 100 – x - y 第10行: 5*x + 3*y + z/3.0 == 100
B、第7行: y<=33 第9行: z + y + x = 100 第10行: 5*x + 3*y + z/3.0 = 100
C、第7行: y<=33 第9行: z = 100 – x - y 第10行: 5x + 3y + z/3.0 == 100
D、第7行: y<33 第9行: z = 100 – x - y 第10行: 5*x + 3*y + z/3.0 <= 100

19、以下不是死循环的程序段是
A、int s=36; while (s) { --s; }
B、int i=100; while(1) { i=i%100+1; if (i>100) break; }
C、for( ; ;);
D、unsigned int k=0; do{ ++k; } while (k>=0);

20、以下程序的功能是计算:s= 1+1/2+1/3+……+1/10,程序运行后输出结果错误,导致错误结果的程序行是 #include <stdio.h> int main() { int n; float s; s=1.0; for(n=10;n>1;n--) { s=s+1/n; } printf("%6.4f\n",s); return 0; }
A、s=s+1/n;
B、printf("%6.4f\n",s);
C、for(n=10;n>1;n--)
D、s=1.0;

21、以下程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是 #include <stdio.h> int main( ) { char k; int i; for(i=1;i<3;i++) { scanf("%c",&k); switch(k) { case '0': printf("another\n"); case '1': printf("number\n"); } } return 0; }
A、another number number
B、number number
C、another number
D、another number another

22、华氏和摄氏温度的转换公式为C=5/9×(F-32)。式中,C表示摄氏温度,F表示华氏温度。要求:华氏0℉~300℉,每隔20℉输出一个华氏温度对应的摄氏温度值。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int upper = 300, step = 20; float fahr = 0, celsius; while (fahr < upper) { _________________; printf("%4.0f\t%6.1f\n", fahr, celsius); ________________ ; } return 0; }
A、第8行代码: celsius = 5.0 / 9 * (fahr - 32) 第10行代码: fahr = fahr + step
B、第8行代码: celsius = 5 / 9 * (fahr - 32) 第10行代码: fahr = fahr + step
C、第8行代码: celsius = 5.0 / (9 * (fahr - 32)) 第10行代码: fahr = fahr + step
D、第8行代码: celsius = 5.0 / 9 * (fahr - 32) 第10行代码: fahr = fahr - step

23、利用泰勒级数: 计算e的近似值,当最后一项的绝对值小于时认为达到了精度要求,要求统计总共累加了多少项。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <math.h> #include <stdio.h> int main() { int n = 1, count = 1; ________________; double term = 1.0; while (fabs(term) >= 1e-5) //判末项大小 { ______________; //求出累加项 e = e + term; //累加 n++; // 计算下一项 _______________; //统计累加项数 } printf("e = %f, count = %d\n", e, count); return 0; }
A、第6行代码: double e = 1.0 第10行代码: term = term / n 第13行代码: count++
B、第6行代码: double e = 0 第10行代码: term = term / n 第13行代码: count++
C、第6行代码: double e = 1.0 第10行代码: term = term *n 第13行代码: count++
D、第6行代码: double e = 0 第10行代码: term = term *n 第13行代码: count++

24、打印所有的“水仙花数”。所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153是“水仙花数”,因为 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int main() { int i, j, k, n; printf("result is:"); for (n=100; ________; n++) { i = n / 100; //分离出百位 j = ____________; //分离出十位 k = ____________; //分离出个位 if (_________________________) { printf("%d\t ",n); //输出结果 } } printf("\n"); return 0; }
A、第6行: n<1000 第9行: (n - i * 100) / 10 第10行:n % 10 第11行:i*100+j*10+k == i*i*i+j*j*j+k*k*k
B、第6行: n<1000 第9行: (n - i * 100) / 10 第10行:n % 10 第11行:i*100+j*10+k = i*i*i+j*j*j+k*k*k
C、第6行: n<=1000 第9行: n % 100 第10行:n % 10 第11行:i*100+j*10+k == i*i*i+j*j*j+k*k*k
D、第6行: n<1000 第9行: (n - i * 100) / 10 第10行:n /10 第11行:i*100+j*10+k == i*i*i+j*j*j+k*k*k

第7周——函数(一)

6.1 函数定义、调用、参数传递和函数原型(35分半)随堂测验

1、下列说法中错误的是()。
A、函数中的return语句可以有多个,但是多个return语句并不表示函数可以用return返回多个值,用return返回的函数值只能有一个。
B、在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。
C、形参也是局部变量,只能在函数体内访问。
D、在C语言中,实参与其对应的形参各占独立的存储单元,函数调用时的参数传递就是把实参的值复制一份给形参,即由实参向形参进行单向传值,因此形参值的变化不影响实参的值。

6.1 函数定义、调用、参数传递和函数原型(35分半)随堂测验

1、下列说法错误的是()。
A、当函数原型与函数定义中的形参类型不一致时,编译器一般都会指出参数类型不匹配的编译错误。因此,写上函数原型有助于编译器对函数参数进行类型匹配检查。
B、函数声明是一条语句,不包括函数体。
C、无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。
D、函数调用时,要求实参与形参的数量相等,它们的类型也要匹配,匹配的原则与变量赋值的原则一致。当函数调用时的实参与函数定义中的形参的类型不匹配时,有的编译器会发出警告,提示有可能出现数据信息丢失,而有的编译器则不会发出警告。

6.2 函数封装与程序的健壮性(23分钟)随堂测验

1、下列说法错误的是()。
A、我们常将程序具有遇到不正确使用或非法数据输入时仍能保护自己避免出错的能力称为程序的健壮性。
B、在函数的入口处增加对函数参数合法性的检查以及对函数调用是否成功的检查,是一种常用的增强程序健壮性的方法。
C、对于一个封装好的函数,外界对函数的影响仅限于入口参数,函数对外界的影响仅限于函数的返回值和数组、指针形参 。
D、编译器给出的警告信息无关紧要,因此可以忽略。

6.3 进阶:断言与防御式编程(14分钟)随堂测验

1、下列说发错误的是()。
A、assert()其实是一个在<assert.h>中定义的宏,用来验证“不应该”发生的情况是否的确不会发生。
B、assert()的功能就是验证assert后括号内表达式值的真假,当该表达式的值为真时,它什么也不做。反之,则立即终止程序的执行,并报告错误,但是不会对错误采取其他处理措施。
C、在使用assert()时,必须在源文件中用编译预处理指令包含头文件<assert.h>。
D、断言不仅可以用于调试程序,还可以作为程序的功能,检查有可能发生的程序错误。

6.3 进阶:断言与防御式编程(14分钟)随堂测验

1、在下列哪些情况下适合使用断言?
A、检查程序中的各种假设的正确性。
B、证实或测试某种不可能发生的状况确实不会发生。
C、捕捉不应该或者不可能发生的非法情况。
D、捕捉程序中有可能出现的错误。

6.4 进阶:代码风格(22分钟)随堂测验

1、下面所列举的函数名正确且具有良好风格的是()
A、2_abcd()
B、GetNumber()
C、change_directory()
D、chushihua@()

第7周测验

1、下列说法中正确的是
A、函数原型是一条语句,不包括函数体。
B、无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。
C、在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。
D、函数只有一个返回值,所以不能有多个return语句。

2、以下程序有语法错误,有关错误原因的正确说法是 #include <stdio.h> void prt_char(float x); int main() { int G=5,k; ...... k=prt_char(G); ...... return 0; } int prt_char(int x) { ...... }
A、函数原型和函数定义不匹配
B、变量名不能使用大写字母
C、函数名不能使用下划线
D、函数prt_char(int x)定义的位置不对,不能放在主函数main()的后面。

3、以下程序的功能是选出能被3整除且至少有一位是5的两位数的整数,输出所有满足条件的数及其个数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int Sub(int k,int n) { int a1,a2; a2=k/10; a1=k-a2*10; if(________________) { printf("%4d",k); n++; return n; } else return -1; } int main() { int n=0,k,m; for(k=10;k<100;k++) { m=__________; if(________) n=m; } printf("\nn=%d\n",n); return 0; }
A、第7行: (k%3==0&&a2==5)||(k%3==0&&a1==5) 第22行: Sub(k,n) 第24行: m!=-1
B、第7行:(k%3==0 &&a2==5) && (k%3==0 &&a1==5) 第22行:Sub(n,k) 第24行:m==-1
C、第7行:(k%3=0 && a2=5)||(k%3=0 && a1=5) 第22行:Sub(k,n) 第24行:m=-1
D、第7行:(k%3=0 && a2=5) && (k%3=0 && a1=5) 第22行:Sub(n,k) 第24行:m!=-1

4、设计一个函数,用来判断一个整数是否为素数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <math.h> #include <stdio.h> int IsPrimeNumber(int number); int main() { int n, ret; printf("Input n:"); scanf("%d", &n); ret = IsPrimeNumber(n); if (___________) { printf("%d is a prime number\n", n); } else { printf("%d is not a prime number\n", n); } return 0; } //函数功能:判断number是否是素数,函数返回非0值,表示是素数,否则不是素数 int IsPrimeNumber(int number) { int i; if (number <= 1) return 0; // 负数、0和1都不是素数 for (i=2; ________________; i++) { if (_______________) // 被整除,不是素数 return 0; } return 1; }
A、第11行: ret != 0 第29行: i<=sqrt(number) 第31行: number % i == 0
B、第11行: ret == 0 第29行: i<=number 第31行: number % i == 0
C、第11行: ret == 0 第29行: i<=sqrt(number) 第31行: number / i == 0
D、第11行: ret != 0 第29行: i<=number 第31行: number / i == 0

5、以下程序执行后的输出结果是 void Fun(int v , int w) { int t; t=v; v=w; w=t; } int main( ) { int x=1,y=3,z=2; if(x>y) Fun(x,y); else if(y>z) Fun(y,z); else Fun(x,z); printf("%d,%d,%d\n",x,y,z); return 0; }
A、1,3,2
B、1,2,3
C、3,1,2
D、2,3,1

6、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
A、函数调用可以作为一个函数的形参
B、函数调用可以作为独立的语句存在
C、函数调用可以作为一个函数的实参
D、函数调用可以出现在表达式中

7、有以下函数定义: void Fun(int n, double x) { …… } 若以下选项中的变量都已正确定义并赋值如下: int a,k; double b; a=12; b=0.45; 则对函数Fun的正确调用语句是
A、Fun(a,b);
B、Fun(int y,double m);
C、k=Fun(10,12.5);
D、k=void Fun(a,b);

8、设计一个函数MinCommonMultiple(),计算两个正整数的最小公倍数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int MinCommonMultiple(int a, int b); int main() { int a, b, x; printf("Input a,b:"); scanf("%d,%d", &a, &b); x = _________________; if (__________) printf("MinCommonMultiple = %d\n", x); else printf("Input error!\n"); return 0; } //函数功能:计算两个正整数的最小公倍数,-1表示没有最小公倍数 int MinCommonMultiple(int a, int b) { int i; if (_________________) return -1; // 保证输入的参数为正整数 for (i=1; i<b; i++) { if (________________) return i * a; } return b * a; }
A、第8行: MinCommonMultiple(a, b) 第10行: x != -1 第22行: a<=0 || b<=0 第26行: (i * a) % b == 0
B、第8行: MinCommonMultiple 第10行: x == -1 第22行: a<=0 && b<=0 第26行: (i * a) % b == 0
C、第8行: MinCommonMultiple(b, a) 第10行: x != -1 第22行: a<=0 || b<=0 第26行: (i * a) / b == 0
D、第8行: MinCommonMultiple(int a, int b) 第10行: x = -1 第22行: a<=0 || b<=0 第26行: (i * a) % b == 0

9、设计一个函数MaxCommonFactor(),利用欧几里德算法(也称辗转相除法)计算两个正整数的最大公约数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int MaxCommonFactor(int a, int b); int main() { int a, b, x; printf("Input a,b:"); scanf("%d,%d", &a, &b); x =_______________ ; if (x != -1) { printf("MaxCommonFactor = %d\n", x); } else { printf("Input error!\n"); } return 0; } //函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数 int MaxCommonFactor(int a, int b) { int r; if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数 do{ ____________; a = b; _____________; }while (__________); return a; }
A、第8行: MaxCommonFactor(a, b) 第29行: r = a % b 第31行: b = r 第32行: r != 0
B、第8行: MaxCommonFactor(a, b, x) 第29行: r = a % b 第31行: a = r 第32行: r == 0
C、第8行: MaxCommonFactor(a, x) 第29行: r = b % a 第31行: b = r 第32行: r = 0
D、第8行: MaxCommonFactor(x, b) 第29行: r = a / b 第31行: a = r 第32行: r != 0

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

11、编程计算下面组合数的值 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> _________________________; int main() { int m, k; _________; do{ printf("Please input m,k (m>=k>0):"); scanf("%d, %d", &m, &k); } while (______________); p = (double)Factorial(m) / (Factorial(k) * Factorial (m-k)); printf("p=%.0f\n", p); return 0; } //函数功能:计算无符号整型数number的阶乘 unsigned long Factorial(unsigned int number) { unsigned long i, result = 1; for (________________) { result *= i; } return result; }
A、第2行: unsigned long Factorial(unsigned int number) 第6行: double p 第11行: m<k || m<0 || k<0 第23行: i=2; i<=number; i++
B、第2行: long Factorial(unsigned int number) 第6行: double p 第11行: m<k || m<0 || k<0 第23行: i=1; i<number; i++
C、第2行: unsigned long Factorial(int number) 第6行: int p 第11行: m<k && m<0 && k<0 第23行: i=2; i<=number; i++
D、第2行: unsigned Factorial(unsigned number) 第6行: int p 第11行: m<k || m<0 || k<0 第23行: i=1; i<=number; i++

12、完全数,又称完美数或完数(Perfect Number),它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如,6就是一个完全数,是因为6 = 1 + 2 + 3。请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。注意:1没有真因子,所以不是完全数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> #include <math.h> int IsPerfect(int x); int main() { int m; printf("Input m:"); scanf("%d", &m); if (_________________) /* 完全数判定 */ printf("%d is a perfect number\n", m); else printf("%d is not a perfect number\n", m); return 0; } /* 函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数 */ int IsPerfect(int x) { int i; int total = 0; /* 1没有真因子,不是完全数 */ for (__________________) { if (___________) total = total + i; } return total==x ? 1 : 0; }
A、第10行: IsPerfect(m) 第24行: i=1; i<x; i++ 第26行: x % i == 0
B、第10行: m 第24行: i=1; i<=x; i++ 第26行: x % i != 0
C、第10行: IsPerfect(m)!=1 第24行: i=0; i<=x; i++ 第26行: x / i == 0
D、第10行: IsPerfect(m)==0 第24行: i=0; i<x; i++ 第26行: x % i != 0

13、以下程序执行后输出结果是 #include <stdio.h> int MaxValue(int x, int y) { return x>y? x:y; } int MinValue(int x,int y) { return x>y? y:x; } int main() { int a=4,b=3,c=5,d,e,f; d=MaxValue(a,b); d=MaxValue(d,c); e=MinValue(a,b); e=MinValue(e,c); f=a+b+c-d-e; printf("%d,%d,%d\n",d,f,e); return 0; }
A、5,4,3
B、3,4,5
C、5,3,4
D、3,5,4

第8周——函数(二)

7.1 从嵌套调用到递归调用(20分钟)随堂测验

1、下列说法错误的是()
A、函数既可以嵌套定义,也可以嵌套调用。
B、函数直接或间接调用自己,称为递归调用。
C、一个递归算法必须包含一般条件和基本条件两个基本要素。
D、基本条件是一个能控制递归过程结束的条件,是递归的出口,它本身不再使用递归的方式来定义。一般条件定义了递归关系,控制递归调用向着基本条件的方向转化。

7.1 从嵌套调用到递归调用(20分钟)随堂测验

1、数学归纳法是递归的数学基础。

7.2 递归是如何执行的(16分钟)随堂测验

1、递归算法的执行过程可分为递推和回归两个阶段。在递推阶段,必须要有终止递归的情况。当满足递归终止条件时,即获得最简单情况的解以后,开始进入回归阶段,即递归返回阶段。

7.3 进阶:尾递归是什么鬼?(14分半)随堂测验

1、当递归调用是整个函数体中最后执行的语句且它的返回值不属于任何表达式的一部分(即在回归阶段不需要任何计算)时,这种递归调用就是尾递归。

7.4 变量的作用域(22分半)随堂测验

1、下列说法错误的是()。
A、变量的作用域是指变量的作用范围,即在程序中可以被读写访问的区域,它取决于变量被定义的位置。
B、局部变量与全局变量同名时,全局变量隐藏局部变量,即全局变量起作用,局部变量不起作用。
C、形参也是局部变量,形参变量和实参变量的作用域是不同的,因此形参变量和实参变量同名时,二者互不干扰。
D、只要同名的变量出现在不同的作用域内,二者互不干扰,编译器有能力区分不同作用域中的同名变量

7.4 变量的作用域(22分半)随堂测验

1、全局变量破坏了函数的封装性,不能实现信息隐藏,依赖全局变量的函数很难在其他程序中复用,对于使用全局变量的程序维护也比较困难,因此建议尽量不用全局变量。

7.5 进阶:变量的生存期(33分半)随堂测验

1、下列说法错误的是()。
A、变量的作用域决定了变量可以被访问的范围,而变量的存储类型决定了变量的生存期。
B、静态变量和全局变量都是在静态存储区中分配内存的,而自动变量是在动态存储区中分配内存的。
C、用extern声明变量为外部变量的时候,编译器是对其分配内存的。
D、静态局部变量和静态全局变量的生存期是相同的,但二者的作用域是不同的,而静态局部变量和自动变量的作用域都是局部的,但二者的生存期是不同的。

第8周测验

1、下列说法正确的是
A、递归算法的执行过程可分为递推和回归两个阶段。在递推阶段,必须要有终止递归的情况。当满足递归终止条件时,即获得最简单情况的解以后,开始进入回归阶段,即递归返回阶段。
B、基本条件是一个能控制递归过程结束的条件,是递归的出口,它本身不再使用递归的方式来定义。一般条件定义了递归关系,控制递归调用向着基本条件的方向转化。
C、数学归纳法是递归的数学基础。
D、形参也是局部变量,形参变量和实参变量的作用域是不同的,因此形参变量和实参变量同名时,二者互不干扰。
E、全局变量破坏了函数的封装性,不能实现信息隐藏,依赖全局变量的函数很难在其他程序中复用,对于使用全局变量的程序维护也比较困难,因此建议尽量不用全局变量。
F、函数既可以嵌套定义,也可以嵌套调用。
G、局部变量与全局变量同名时,全局变量隐藏局部变量,即全局变量起作用,局部变量不起作用。
H、用extern声明变量为外部变量的时候,编译器是对其分配内存的。
I、静态局部变量和静态全局变量的生存期和作用域都是相同的。

2、以下程序运行后的输出结果是 #include <stdio.h> float Fun(int x,int y) { return(x+y); } int main() { int a=2,b=5,c=8; printf("%3.0f\n",Fun((int)Fun(a+c,b),a-c)); return 0; }
A、9
B、21
C、9.0
D、编译出错

3、子函数Fun(int a, int b)的功能是,对任意两个整数a和b,返回两者中的最大值。以下程序是通过调用子函数Fun(int a, int b),找到三个整数中的最大值。若程序运行后的输出结果是8,请补充完整空白处缺少的代码。 #include <stdio.h> int Fun(int a, int b) { if(a>b) return_________; else return________; } int main() { int x=3, y=8, z=6, r; r=_______________; // 找到三个整数x,y,z中的最大值 printf("%d", r); return 0; }
A、第4行: a 第5行: b 第11行: Fun(Fun(x,y),z)
B、第4行: b 第5行: a 第11行: Fun(x,y,z)
C、第4行: 1 第5行: 0 第11行: Fun(x,y,z)
D、第4行: 0 第5行: 1 第11行: Fun(Fun(x,y),z)

4、写出下面程序的运行结果 #include <stdio.h> void Bin(int x) { if (x/2 > 0) Bin(x/2); printf("%d\n", x%2); } int main() { Bin(12); return 0; }
A、1 1 0 0
B、0 0 1 1
C、6 3 1 0
D、6 3 1 1

5、下面程序是用辗转相除法计算两个正整数的最大公约数的递归求解方法。请将程序补充完整。 提示:辗转相除法的基本思路是,对正整数a和b,连续进行求余运算,直到余数为0为止,此时非0的除数就是最大公约数。设r=a mod b表示a除以b的余数,若r≠0,则将b作为新的a,r作为新的b,重复a mod b运算,直到r=0时为止,此时b为所求的最大公约数。例如,50和15的最大公约数的求解过程可表示为:Gcd(50, 15)=Gcd(15, 5)=Gcd(5, 0)=5。 int Gcd(int a, int b) { if (a%b == 0) return b; else return ____________________; }
A、Gcd(b, a%b)
B、Gcd(a, b%a)
C、Gcd(b%a, a)
D、Gcd(a%b, b)

6、以下程序的输出结果是 #include <stdio.h> int Func(); int i=10; int main() { int j=1; j=Func(); printf("%d,",j); j=Func(); printf("%d",j); return 0; } int Func() { int k=0; k=k+i; i=i+10; return(k); }
A、10,20
B、0,0
C、10,10
D、20,20

7、子函数Incre()的功能是,利用静态变量,使子函数的输出值能够随调用次数的增加依次为: 第1次调用,输出:的结果 第2次调用,输出:的结果 第3次调用,输出:的结果 ..... 在下面的程序中,对子函数Incre()进行了两次调用,若使程序的输出结果是: 2 6 请补充完整空白处缺少的代码。 #include <stdio.h> int x=3; void Incre(); int main() { int i; for (i=1;_______;i++) Incre(); return 0; } void Incre() { ___________; x*=x+1; printf("%d\n",x); }
A、第7行: i<x 第13行: static int x=1
B、第7行: i<=x 第13行: static int x=0
C、第7行: i<x 第13行: int x=1
D、第7行: i<=x 第13行: int x=0

8、请给出程序的运行结果。 #include <stdio.h> int Fun(int m) { static int n = 0; m /= 2; m = m * 2; if (m) { n *= m; return(Fun(m - 2)); } else return n; } int main() { int a, i; for (i = 0; i < 2; i++) { a = Fun(4 + i); printf("%d\n", a); } return 0; }
A、0 0
B、8 8
C、4 4
D、64 64

9、写出下面程序的运行结果。 #include <stdio.h> int Square(int i) { return i * i; } int main(void) { int i = 0; i = Square(i); for ( ; i<3; i++) { static int i = 1; i += Square(i); printf("%d,", i); } printf("%d\n", i); return 0; }
A、2,6,42,3
B、2,2,2,3
C、2,2,3,3
D、2,3,4,3

10、根据最大公约数的如下3条性质,采用递归法编写计算最大公约数的函数Gcd(),在主函数中调用该函数计算并输出从键盘任意输入的两正整数的最大公约数。 性质1 如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a, b) = Gcd(a-b, b) 性质2 如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a, b) = Gcd(a, b-a) 性质3 如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a, b) = a = b 代码如下,请补充程序中缺少的内容。 #include <stdio.h> int Gcd(int a, int b); int main() { int a, b, c; printf("Input a,b:"); scanf("%d,%d", &a, &b); c = Gcd(a, b); if (_________) printf("Greatest Common Divisor of %d and %d is %d\n", a, b, c); else printf("Input number should be positive!\n"); return 0; } int Gcd(int a, int b) { if (_______________) return -1; if (a == b) return __________; else if (a > b) return __________; else return ___________; }
A、第9行: c!= -1 第18行: a <= 0 || b <= 0 第21行: a 第23行: Gcd(a - b, b) 第25行: Gcd(a, b - a)
B、第9行: c== -1 第18行: a <= 0 && b <= 0 第21行: a 第23行: Gcd(a - b, b) 第25行: Gcd(a, b - a)
C、第9行: c!= -1 第18行: a <= 0 && b <= 0 第21行: b 第23行: Gcd(a, b - a) 第25行: Gcd(a - b, b)
D、第9行: c== -1 第18行: a <= 0 || b <= 0 第21行: a 第23行: Gcd(a, b - a) 第25行: Gcd(a - b, b)

11、函数Sum(int n)是用递归方法计算下面的公式,请补充程序中缺少的内容。 int Sum(int n) { if (n <= 0) printf("data error\n"); if (n == 1)_________________; else return ____________________; }
A、第4行: return 1 第5行: n+Sum(n-1)
B、第4行: return 0 第5行: Sum(n-1)
C、第4行: return 1 第5行: Sum(n-1)
D、第4行: return 0 第5行: Sum(n)

12、下面函数是求阶乘的递归函数,请将程序补充完整。 long Fact(int n) { if (n < 0) return 0; if (n==1 || n==0) __________________; else ____________________; }
A、第4行: return 1 第5行: return n*Fact(n-1)
B、第4行: return 0 第5行: return n*Fact(n-1)
C、第4行: return -1 第5行: return (n-1)*Fact(n)
D、第4行: return 1 第5行: return Fact(n-1)

13、Y()是实现n层嵌套平方根计算的函数,其公式如下,请将程序补充完整。 double Y(double x, int n) { if (n == 0) return 0; else return (square(x +___________________)); }
A、Y(x,n-1)
B、Y(x,n)
C、Y(x,n+1)
D、Y(x,1)

14、程序运行后的输出结果是 #include <stdio.h> int Fun(int n) { if (n==1) return 1; else return Fun(n-1)+1; } int main() { int i,j=0; for(i=1;i<3;i++) j+=Fun(i); printf("%d\n",j); return 0; }
A、3
B、4
C、2
D、1

15、子函数Fun(char x , char y)的功能是对任意两个字符x和y,如果x为真,则函数返回y的值,否则返回x的值。若使以下程序运行后的输出结果是7,请补充完整空白处缺少的代码。 #include <stdio.h> char Fun(char x , char y) { if(__________) return y; else return x; } int main( ) { char a='9',b='8',c='7'; printf("____",Fun(_______________)); return 0; }
A、第4行: x 第11行:%c Fun(a,b),Fun(b,c)
B、第4行: x=0 第11行:%d Fun(b,c),Fun(a,b)
C、第4行: x==0 第11行:%c Fun(b,a),Fun(c,b)
D、第4行: x!=0 第11行:%d Fun(c,b),Fun(b,a)

第11周——指针:C语言世界中所向披靡的“金箍棒”

9.1 指针变量的定义、初始化及其解引用(19分)随堂测验

1、下列说法错误的是()。
A、指针变量占用的内存单元字节数就是它所指向的变量所占用的内存单元字节数。
B、指针变量指向的数据的类型,称为指针的基类型。指针变量只能指向同一基类型的变量。
C、指针变量使用之前必须初始化,如果你不知道该用什么值对其进行初始化的话,那么就先用NULL对其进行初始化。使用未初始化的结果将是无法预知的。
D、通过间接寻址运算符引用指针变量指向的变量的值,称为指针的解引用。

9.2 指针变量作函数参数(36分半)随堂测验

1、普通变量做函数参数,是将实参值的一个副本传给形参,而指针变量做函数参数是将变量的地址值传给形参,因此你想要修改哪个变量的值,将这个变量的地址传给指针形参就好了。

9.3 进阶:函数指针及其应用(27分)随堂测验

1、int (*f)(int, int); 这条语句定义的是一个函数指针f,它可以指向一个有两个整型形参和整型返回值的函数。假设 int Fun(int a, int b); 那么必须用f=Fun();对f进行初始化,让其指向函数Fun()。

9.4 进阶:数组的趣味应用(50分)随堂测验

1、筛法求素数的核心操作就是在一个按a[2]=2,a[3]=3,......,a[N]=N初始化的数组中依次筛掉所有素数的倍数。

9.4 进阶:数组的趣味应用(50分)随堂测验

1、void MakeDigit(int a[]) { int i, j, temp; srand(time(NULL)); for (i=0; i<10; i++) { a[i] = i; } for (i=0; i<10; i++) { j = rand() % 10; temp = a[j]; a[j] = a[i]; a[i] = temp; } }这个方法其实就是模拟了洗牌的方法对一个有序的数组元素进行随机置乱。

第11周测验

1、下面程序的功能是输入某年某月某日,计算并输出它是这一年的第几天。 程序的运行结果如下: Please enter year, month, day:2014,12,29↙ yearDay = 363 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h> int DayofYear(int year, int month, int day); int dayTab[2][13] = { { 0,31,28,31,30,31,30,31,31,30,31,30,31},{ 0,31,29,31,30,31,30,31,31,30,31,30,31}}; int main() { int year, month, day, yearDay; printf("Please enter year, month, day:"); scanf("%d,%d,%d", &year, &month, &day); yearDay = DayofYear(year, month, day); printf("yearDay = %d\n", yearDay); return 0; } /* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */ int DayofYear(int year, int month, int day) { int i, leap; leap = ________________________; /* 若year为闰年,即leap值为1,则用第1

中国大学大学计算机基础(理)廖瑞华

中国大学大学计算机基础(理)是一门重要的课程,是计算机科学与技术专业的必修课之一。该课程由廖瑞华老师讲授,是一位技术娴熟、经验丰富的老师。

课程内容

该课程的主要内容包括:

  • 计算机系统基础
  • 计算机编程语言基础
  • 数据结构与算法
  • 操作系统原理
  • 计算机网络基础

通过该课程的学习,可以让学生掌握计算机系统的基本知识,熟悉常用的编程语言,了解常见的数据结构和算法,掌握操作系统的基本原理,了解计算机网络的基本概念和协议。

教学方法

廖瑞华老师采用多种教学方法,包括讲解、案例分析、实验、课堂讨论等。他注重理论与实践相结合,力求让学生在课堂上得到充分的实际操作经验。同时,他还鼓励学生积极参与课堂讨论,提高学生的思考和分析能力。

教学成果

廖瑞华老师长期从事计算机科学与技术的教学与研究工作,拥有丰富的教学经验。在他的教学下,许多学生取得了优异的成绩,并获得了国内外知名高校的研究生录取资格。

近年来,廖瑞华老师在计算机科学与技术领域的研究取得了不少成果。他发表了多篇高水平学术论文,参与了多项国家级科研项目,获得了多项科研成果奖励。

结语

中国大学大学计算机基础(理)廖瑞华是一门非常重要的课程,对于计算机科学与技术专业的学生来说至关重要。廖瑞华老师的讲解非常清晰、深入,能够让学生更好地掌握计算机基础知识。如果你对计算机科学与技术感兴趣,那么一定要好好学习这门课程!