C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试

稠疗草捞晴锋踢摹鼻凤熔熊喂

 

 

第1周——初识C语言从认识变量和常量开始 练兵区——单选题——不计入总分

1、 下列选项中,合法的C语言标识符是

答案: _a1;
width

2、 以下不适合定义为用户标识符的是

答案: float ;
main;
define

3、 #include <stdio.h>是

答案: 编译预处理指令

4、 在windows下,程序编译链接后形成的可执行文件是

答案: .exe文件

5、 程序编译链接后显示” 0 error,0 warning” 代表

答案: 程序中没有语法错误

6、 用8位无符号二进制数能表示的最大十进制数为

答案: 255

7、 关于可执行文件说法正确的是

答案: 可执行文件是编译链接后生成的文件

8、 若变量a是int类型,并执行了语句:a=’A’+1.6;,则正确的叙述是

答案: ‘A’+1.6的结果是浮点型;
a的值还是整型

9、 C语言用sizeof计算变量在内存中的字节数,其中sizeof是()

答案: 运算符;
一元运算符;
只需要一个操作数的运算符

10、 以下不属于Codeblocks中用于调试程序的工具是

答案: run;
build

11、 程序的开发步骤中不包括

答案: 撰写文档

12、 下列说法中错误的是()

答案: 尾数决定了实数的表数范围,阶码决定了实数的表数精度。;
内存是按位编址的。;
有符号和无符号整数的表数范围是相同的。;
int型在所有的计算机上都占4个字节的存储单元。

13、 若有定义:int a=8,b=5,c; ,执行语句c=a/b+0.4;后,c的值为

答案: 1

14、 在C语言中,字符型数据在内存中以字符的(  )形式存放

答案: ASCII码

15、 以下符合C语言语法的实型常量是

答案: 5e-3

16、 以下选项中可作为C语言合法整数的是

答案: 0xffa

17、 下列说法正确的是

答案: 在C语言中,变量必须先定义后使用。;
一条变量定义语句可定义多个同类型的变量。;
C89规定所有变量必须在第一条可执行语句前定义。;
const常量只能在定义时赋值。;
实型常量的默认类型是double类型。

18、 下列变量定义中合法的是

答案: long ao=0xfdaL;

第1周——初识C语言从认识变量和常量开始 第1周测验

1、 下列选项中,合法的C语言标识符是

答案: _a1

2、 以下不适合定义为用户标识符的是

答案: int 

3、 #include <stdio.h>是

答案: 编译预处理指令

4、 在windows下,程序编译链接后形成的可执行文件是

答案: .exe文件

5、 程序编译链接后显示” 0 error,0 warning” 代表

答案: 程序中没有语法错误

6、 用8位无符号二进制数能表示的最大十进制数为

答案: 255

7、 关于可执行文件说法正确的是

答案: 可执行文件是编译链接后生成的文件

8、 若变量a是int类型,并执行了语句:a=’A’+1.6;,则正确的叙述是

答案: ‘A’+1.6的结果是浮点型;
a的值还是整型

9、 C语言用sizeof计算变量在内存中的字节数,其中sizeof是()

答案: 运算符;
一元运算符;
只需要一个操作数的运算符

10、 以下不属于Codeblocks中用于调试程序的工具是

答案: run;
build

11、 程序的开发步骤中不包括

答案: 撰写文档

12、 下列说法中错误的是()

答案: 尾数决定了实数的表数范围,阶码决定了实数的表数精度。;
内存是按位编址的。;
有符号和无符号整数的表数范围是相同的。;
int型在所有的计算机上都占4个字节的存储单元。

13、 若有定义:int a=8,b=5,c; ,执行语句c=a/b+0.4;后,c的值为

答案: 1

14、 在C语言中,字符型数据在内存中以字符的(  )形式存放

答案: ASCII码

15、 以下符合C语言语法的实型常量是

答案: 5e-3

16、 以下选项中可作为C语言合法整数的是

答案: 0xffa

17、 下列说法正确的是

答案: 在C语言中,变量必须先定义后使用。;
一条变量定义语句可定义多个同类型的变量。;
C89规定所有变量必须在第一条可执行语句前定义。;
const常量只能在定义时赋值。;
实型常量的默认类型是double类型。

18、 下列变量定义中合法的是

答案: long ao=0xfdaL;

 

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

1、 下列程序的输出结果是#include <stdio.h>
int main()

   int a=7,b=5;   
   printf(“%d”,b/a);
   return 0;   
}

答案: 0

2、 下列关于单目运算符++、–的叙述中正确的是

答案: a++的运算过程是:先使用变量a的值,然后再执行a=a+1。

3、 以下程序的输出结果是:#include <stdio.h>
int main() 

    int a=1, b=2; 
    a=a+b; 
    b=a-b; 
    a=a-b; 
    printf(“%d,%d”, a, b );
    return 0;  
}

答案: 2,1

4、 程序运行后的输出结果是#include <stdio.h>
int main()

    int m=3,n=4,x;
    x=m++;
    ++n;
    x=x+8/n;
    printf(“%d,%d”,x,m);
    return 0;
}

答案: 4,4

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;
}

答案: 3.500000

6、 以下非法的赋值语句是

答案: ++(i+1);

7、 设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是

答案: 6.000000

8、  以下程序的运行结果是#include <stdio.h>
int main() 

    int  a = 12, b = 3; 
    float  x = 18.5, y = 4.5; 
    printf(“%f”, (float)(a * b) / 2); 
    printf(“%d”, (int)x %(int)y); 
    return 0;
}

答案: 18.0000002

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

答案: -12

10、 在C语言中,要求操作数必须是整型的运算符是

答案: %

11、 程序运行后的输出结果是#include <stdio.h>
int main()

    char a=’a’;
    printf(“%c,”,++a);
    printf(“%c”,a++);
    return 0;
}

答案:  b,b

12、 下面哪条语句可以生成0-9之间的随机数

答案: magic=rand()%10;

13、 在下面的C语言语句中,存在错误的是

答案: int a=b=10;

14、 若以下选项中的变量已正确定义,则正确的赋值语句是

答案: x3=x2=x1=0; 

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

答案: double

16、 在C程序中如果要使用数学函数,如sin(x),log(x)等,需要在程序中加入的语句是

答案: #include <math.h>

17、 十进制3位数整数x,下面哪条语句能正确分离出它的十位上的数字d?

答案: d=(x-(x/100)100)/10;;
d=(x%100)/10;;
d=(x/10)%10;

18、 在C语言中对下面的语句而言,哪个说法是错误的?int a, b;

答案: 变量a和b中的值都是0;
变量a和b中都没有数值

19、 已知int a,b;并且有a=5%3;以及b=5/3;,则a和b的值分别是(     )。

答案: 2和1

20、 设有以下定义,则下面给出的语句中错误的是int a=0; 
float b=1.25;
char c=’A’;

define d 2

答案: d++;;
(a+b)++;;
(-a)++;;
(a+1)++;

第2周——数字间的那些事儿,做点计算哈 练兵区——单选题——不计入总分

1、 设有语句“int a = 3;”,执行语句“a += a -= a * a;”后,变量a的值是

答案: -12

2、 在C程序中如果要使用数学函数,如sin(x),log(x)等,需要在程序中加入的语句是

答案: #include <math.h>

3、 设有以下定义,则下面给出的语句中错误的是int a=0; 
float b=1.25;
char c=’A’;

define d 2

答案: d++;;
(a+b)++;;
(-a)++;;
(a+1)++;

4、 下列关于单目运算符++、–的叙述中正确的是

答案: a++的运算过程是:先使用变量a的值,然后再执行a=a+1。

5、 以下程序的输出结果是:#include <stdio.h>
int main() 

    int a=1, b=2; 
    a=a+b; 
    b=a-b; 
    a=a-b; 
    printf(“%d,%d”, a, b );  
    return 0;
}

答案: 2,1

6、 下面哪条语句可以生成0-9之间的随机数

答案: magic=rand()%10;

7、 在下面的C语言语句中,存在错误的是

答案: int a=b=10;

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

答案: double

9、 十进制3位数整数x,下面哪条语句能正确分离出它的十位上的数字d?

答案: d=(x-(x/100)100)/10;;
d=(x%100)/10;;
d=(x/10)%10;

10、 在C语言中对下面的语句而言,哪个说法是错误的?int a, b;

答案: 变量a和b中的值都是0;
变量a和b中都没有数值

11、 下列程序的输出结果是#include <stdio.h>
int main()

   int a=7,b=5;   
   printf(“%d”,b/a);
   return 0;   
}

答案: 0

12、 程序运行后的输出结果是#include <stdio.h>
int main()

    int m=3,n=4,x;
    x=m++;
    ++n;
    x=x+8/n;
    printf(“%d,%d”,x,m);
    return 0;
}

答案: 4,4

13、 下面程序的运行结果是#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;
}

答案: 3.500000

14、 以下非法的赋值语句是

答案: ++(i+1);

15、 已知int a,b;并且有a=5%3;以及b=5/3;,则a和b的值分别是

答案: 2和1

16、 设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是

答案: 6.000000

17、 以下程序的运行结果是#include <stdio.h>
int main() 

    int  a = 12, b = 3; 
    float  x = 18.5, y = 4.5; 
    printf(“%f”, (float)(a * b) / 2); 
    printf(“%d”, (int)x %(int)y); 
    return 0;
}

答案: 18.0000002

18、 在C语言中,要求操作数必须是整型的运算符是

答案: %

19、 程序运行后的输出结果是#include <stdio.h>
int main()

    char a=’a’;
    printf(“%c,”,++a);
    printf(“%c”,a++);
    return 0;
}

答案: b,b

20、 若以下选项中的变量已正确定义,则正确的赋值语句是

答案: x3=x2=x1=0; 

第3周——从键盘中来,到键盘中去,开始输入和输出啦 练兵区——单选题——不计入总分

1、 以下程序的输出结果为#include <stdio.h> 
int main() 

   float a = 1234.567,b = 55.32; 
   printf(“a = %4.2f, b = %5.1f”, a,b); 
   return 0;
 }

答案: a = 1234.57, b = 55.3

2、 以下选项中合法的字符常量是

答案:  ‘\010’

3、 给出程序的运行结果程序运行时从键盘输入:1<空格>2<回车>#include <stdio.h>
int main()
{
  char a,b;
  int s;
  printf(“please input a and b:”);
  a=getchar();
  b=getchar();
  s=a+b;
  printf(“a=%c,b=%c”,a,b);
  return 0;
}

答案: a=1,b=

4、 有如下语句,为使变量a的值为1,b的值为2,从键盘输入数据的正确形式是scanf(“a=%d,b=%d”,&a,&b)

答案: a=1,b=2

5、 #include <stdio.h>
int main()

    int a,b,c,d;
    scanf(“%c%c%d,%d”,&a,&b,&c,&d);
    printf(“%c,%c,%c,%c”,a,b,c,d);
    return 0;
}若运行以上程序时从键盘上输入:6565,66<回车>。则输出结果是

答案: 6,5,A,B

6、 给出程序的运行结果,程序运行时从键盘输入:54321<回车>#include <stdio.h>
int main()
{  
    int a,b,s;
    scanf(“%2d%2d”,&a,&b);
    s=a/b;
    printf(“s=%d”,s);
    return 0;
}

答案: 1

7、 在调用printf函数输出数据时,当数据的实际位宽小于printf函数中的指定位宽时,下面叙述正确的是

答案: 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。

8、 程序运行后的输出结果是#include <stdio.h>
int main()

    int a=666,b=888;
    printf(“%d”,a,b);
    return 0;
}

答案: 666

9、 在C语言中,字符型数据在内存中以(  )形式存放

答案: ASCII码

10、 以下程序运行后的输出结果是#include <stdio.h>
int main()

    int a; 
    int c=10;
    float f=100.0; 
    double x;
    a=f/=c*=(x=6.5);
    printf(“%d,%d,%3.1f,%3.1f”,a,c,f,x);
    return 0;
}

答案: 1,65,1.5,6.5

11、 以下程序的输出结果是#include <stdio.h>
int main()
{
    int a=1234;
    printf(“%2d”,a);
    return 0;
}

答案: 1234

12、 设有语句“char c=’\72′;”,则变量c

答案: 包含1个字符

13、 有以下语句段#include <stdio.h>
int main()
{
    int n1=10,n2=20;
    printf(“___”,n1,n2);
    return 0;
}要求按以下格式输出n1和n2的值,每个输出行都是从第一列开始,则空白处代码填写正确的是运行结果示例如下:n1=10n2=20

答案: n1=%dn2=%d

14、 给出程序的运行结果,程序运行时从键盘输入:45-12<回车>#include <stdio.h>
int main()
{  
    int a,b,sum;
    scanf(“%d%*c%d”,&a,&b);
    sum=a+b;
    printf(“sum=%d”,sum);
    return 0;
}

答案: 57

15、 给出程序的运行结果#include <stdio.h>
int main()
{  
    int a,b,s;
    char op;
    scanf(“%d %c%d”,&a,&op,&b);
    s=a%b;
    printf(“s=%d”,s);
    return 0;
}程序运行时从键盘输入:15<回车>%5<回车>

答案: 0

16、 分析下列程序,写出程序运行结果#include <stdio.h>
int main()

    char c1 = ‘a’, c2 = ‘b’, c3 = ‘c’;
    printf(“a%cb%cc%cabc”, c1, c2, c3);
    return 0;
}

答案: aabbccabc

17、 以下程序的输出结果为#include <stdio.h>
int main()
{
      int a=2, c=5;
      printf(“a = %%d, b = %%d”, a, c);
      return 0;
}

答案: a = %d, b = %d

18、 有以下程序,运行时若输入为B,则输出是#include <stdio.h>
int main()
 { 
     char ch;
     ch=getchar();
     ch=ch+32;
     printf(“%c”,ch);
     return 0;
}

答案: b

19、 在下列语句中存在错误的是

答案: int a,b;scanf(“%d %f”,&a,&b);;
int a,b;scanf(“%d %d”,a,b);;
int a,b;scanf(“%d%d”,&a,&b);printf(“%d %d”,a,b);;
float a,b;scanf(“%3.2f %4.2f”,&a,&b);printf(“%f %f”,a,b);

20、 写出下面程序的输出结果#include<stdio.h>
int main()
  {
     int x=6,y,z;
     x*=18+1;
     printf(“%d,”,x–);
     x+=y=z=11;
     printf(“%d”,x);
     return 0;
}

答案: 114,124

21、 给出程序的运行结果#include <stdio.h>
int main()
{
  int a,b,c,d;
  char op1,op2,op3;
  int sum;
  printf(“please input:a+b+c+d”);
  scanf(“%d%c%d%c%d%c%d”,&a,&op1,&b,&op2,&c,&op3,&d);
  sum=a+b+c+d;
  printf(“sum=%d”,sum);
  return 0;
}程序运行时从键盘输入:1<回车>2+3+1<回车>

答案: 7

22、 以下程序的执行结果是#include  <stdio.h> 
int main() 

   int  a = 5, b = 4, x, y; 
   x = 2  a++;
   y = –b 
 2; 
   printf(“a=%d, x=%d”, a, x); 
   printf(“b=%d, y=%d”, b, y); 
   return 0;
}

答案: a=6,  x=10b=3,  y=6

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

1、 分析下列程序,写出程序运行结果#include <stdio.h>
int main()

    char c1 = ‘a’, c2 = ‘b’, c3 = ‘c’;
    printf(“a%cb%cc%cabc”, c1, c2, c3);
    return 0;
}

答案: aabbccabc

2、 有如下语句,为使变量a的值为1,b的值为2,从键盘输入数据的正确形式是scanf(“a=%d,b=%d”,&a,&b);

答案: a=1,b=2

3、 #include <stdio.h>
int main()

    int a,b,c,d;
    scanf(“%c%c%d,%d”,&a,&b,&c,&d);
    printf(“%c,%c,%c,%c”,a,b,c,d);
    return 0;
}若运行以上程序时从键盘上输入:6565,66<回车>。则输出结果是

答案: 6,5,A,B

4、 给出程序的运行结果,程序运行时从键盘输入:54321<回车>#include <stdio.h>
int main()
{  
    int a,b,s;
    scanf(“%2d%2d”,&a,&b);
    s=a/b;
    printf(“s=%d”,s);
    return 0;
}

答案: 1

5、 以下程序的输出结果为#include <stdio.h> 
int main() 

   float a = 1234.567,b = 55.32; 
   printf(“a = %4.2f, b = %5.1f”, a,b); 
   return 0;
 }

答案: a = 1234.57, b = 55.3

6、 以下程序的输出结果为#include <stdio.h>
int main()
{
      int a=2, c=5;
      printf(“a = %%d, b = %%d”, a, c);
      return 0;
}

答案: a = %d, b = %d

7、 有以下程序,运行时若输入为B,则输出是#include <stdio.h>
int main()
 { 
     char ch;
     ch=getchar();
     ch=ch+32;
     printf(“%c”,ch);
     return 0;
}

答案: b

8、 在调用printf函数输出数据时,当数据的实际位宽小于printf函数中的指定位宽时,下面叙述正确的是

答案: 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。

9、 设有语句“char c=’\72′;”,则变量c

答案: 包含1个字符

10、 在下列语句中存在错误的是

答案: int a,b;scanf(“%d %f”,&a,&b);;
int a,b;scanf(“%d %d”,a,b);;
int a,b;scanf(“%d%d”,&a,&b);printf(“%d %d”,a,b);;
float a,b;scanf(“%3.2f %4.2f”,&a,&b);printf(“%f %f”,a,b);

11、 程序运行后的输出结果是#include <stdio.h>
int main()

    int a=666,b=888;
    printf(“%d”,a,b);
    return 0;
}

答案: 666

12、 有以下语句段#include <stdio.h>
int main()
{
    int n1=10,n2=20;
    printf(“___”,n1,n2);
    return 0;
}要求按以下格式输出n1和n2的值,每个输出行都是从第一列开始,则空白处代码填写正确的是运行结果示例如下:n1=10n2=20

答案: n1=%dn2=%d

13、 以下选项中合法的字符常量是

答案:  ‘\010’

14、 写出下面程序的输出结果#include<stdio.h>
int main()
  {
     int x=6,y,z;
     x*=18+1;
     printf(“%d,”,x–);
     x+=y=z=11;
     printf(“%d”,x);
     return 0;
}

答案: 114,124

15、 给出程序的运行结果,程序运行时从键盘输入:45-12<回车>#include <stdio.h>
int main()
{  
    int a,b,sum;
    scanf(“%d%*c%d”,&a,&b);
    sum=a+b;
    printf(“sum=%d”,sum);
    return 0;
}

答案: 57

16、 给出程序的运行结果#include <stdio.h>
int main()
{  
    int a,b,s;
    char op;
    scanf(“%d %c%d”,&a,&op,&b);
    s=a%b;
    printf(“s=%d”,s);
    return 0;
}程序运行时从键盘输入:15<回车>%5<回车>

答案: 0

17、 给出程序的运行结果#include <stdio.h>
int main()
{
  int a,b,c,d;
  char op1,op2,op3;
  int sum;
  printf(“please input:a+b+c+d”);
  scanf(“%d%c%d%c%d%c%d”,&a,&op1,&b,&op2,&c,&op3,&d);
  sum=a+b+c+d;
  printf(“sum=%d”,sum);
  return 0;
}程序运行时从键盘输入:1<回车>2+3+1<回车>

答案: 7

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

答案: ASCII码

19、 以下程序的执行结果是#include  <stdio.h> 
int main() 

   int  a = 5, b = 4, x, y; 
   x = 2  a++;
   y = –b 
 2; 
   printf(“a=%d, x=%d”, a, x); 
   printf(“b=%d, y=%d”, b, y); 
   return 0;
}

答案: a=6,  x=10b=3,  y=6

20、 以下程序运行后的输出结果是#include <stdio.h>
int main()

    int a; 
    int c=10;
    float f=100.0; 
    double x;
    a=f/=c*=(x=6.5);
    printf(“%d,%d,%3.1f,%3.1f”,a,c,f,x);
    return 0;
}

答案: 1,65,1.5,6.5

21、 给出程序的运行结果#include <stdio.h>
int main()
{
  char a,b;
  int s;
  printf(“please input a and b:”);
  a=getchar();
  b=getchar();
  s=a+b;
  printf(“a=%c,b=%c”,a,b);
  return 0;
}程序运行时从键盘输入:1<空格>2<回车>

答案: a=1,b=

22、 以下程序的输出结果是#include <stdio.h>
int main()
{
    int a=1234;
    printf(“%2d”,a);
    return 0;
}

答案: 1234

 

第4周——无处不在的抉择 练兵区——单选题——不计入总分

1、 下面程序代码的功能是判断输入整数的正负性和奇偶性,请将第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”, m);
        }
        else                    //不能被2整除,则是正奇数
        {
            printf(“%d is a positive odd”, m);
        }
    }
    
    __          //判断是否为负数
    
    {
        __

        
        {
             printf(“%d is a negative even”, m);   //是负偶数
        }
        else
        {
             printf(“%d is a negative odd”, m);    //是负奇数
        }
    }
    else
    {
        printf(“%d is zero.It is an even”, m);    
    }
   return 0;
}

答案: 第19行代码: else if(m < 0)第22行代码: if (m % 2 == 0)

2、 执行以下程序后的输出结果为#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;
}

答案: 02

3、 以下程序运行后的输出结果是#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”,k,m);
   return 0;
}

答案: 1,0

4、 以下程序运行后的输出结果是#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;
}

答案: 10,0,0

5、 编程设计一个简单的计算器程序,要求用户从键盘输入如下形式的表达式:        操作数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”, data1, data2, data1 + data2); 
                            break;
                   case ‘-‘:
                            printf(“%f – %f = %f”, data1, data2, data1 – data2);
                            break;
                   case ‘
‘:
                            printf(“%f  %f = %f”, data1, data2, data1  data2); 
                            break;
                   case ‘/’:
                            printf(“%f/%f = %f”, data1, data2,data1/data2); 
                            break;
                   default: 
                            printf(“Invalid operator!”);
         }
        return 0;
}

答案: 第20行语句有错误,改成:if (fabs(data2)<=EPS) printf(“Division by zero!”);else  printf(“%f/%f = %f”, data1, data2, data1/data2);同时,第1行语句下方应加入#include  <math.h>#define   EPS 1e-6

6、 下列复合语句中,不能实现两数交换的是

答案: {
  a=b;
  b=a;
}

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”, a, b) ;
   return 0;
}

答案: a=2, b=2

8、 执行下列程序,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;
}

答案: 123

9、 编程计算下面的分段函数,根据从键盘输入的x值,在屏幕上输出y值。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第1张程序代码如下,为完成以上功能,请将第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”, y);
    return 0;
}

答案: else if (x == 0)

10、 以下程序的功能是计算一元二次方程的根。代码如下,请将第10行标号处缺少的语句填写完整。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第2张#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!”);
               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”, p);
      }
     else                      
     { 
                 if (disc > EPS)        /
 判别式大于0时,输出两不等实根 /
                 {
                            printf(“x1 = %.2f, x2 = %.2f”, p+q, p-q);
                 }
                 else                     /
 判别式小于0时,输出两共轭复根 */
                 {
                            printf(“x1 = %.2f+%.2fi, “, p, q);
                            printf(“x2 = %.2f-%.2fi”, p, q);
                 }
      }
     return 0;
}

答案: if (fabs(a) <= EPS)

11、 从键盘输入三角形的三边长为a,b,c,按下面公式计算并输出三角形的面积。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第3张程序代码如下,但程序运行后输出结果不正确,请找出有问题的语句。#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”, area); 
    }
    else
    {
       printf(“It is not a triangle”);    
    }
    return 0; 
}

答案: 第11行:   s = 1/2 * (a + b + c); 

12、 若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是

答案: (x-y)<-10||!(y-x)>10

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

答案: c+32

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

答案: the output data is 7

15、 以下程序运行后的输出结果是#include <stdio.h>
int main()

   int a=5,b=4,c=3,d;
   d=(a>b>c);
   printf(“%d”,d);
   return 0;
}

答案: 0

16、 下面程序运行后的输出结果是#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”,d);
   return 0;
}

答案: 2

17、 下列说法错误的是()。

答案: case后的“常量表达式”的类型只能是整型。;
若case后面的语句省略不写,则表示它什么也不做。;
switch语句中的break和default可有可无。

 

第4周——无处不在的抉择 第4周测验

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

答案: the output data is 7

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;
}

答案: 10,0,0

3、 从键盘输入三角形的三边长为a,b,c,按下面公式计算并输出三角形的面积。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第4张程序代码如下,但程序运行后输出结果不正确,请找出有问题的语句。#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”, area); 
    }
    else
    {
       printf(“It is not a triangle”);    
    }
    return 0; 
}

答案: 第11行:   s = 1/2 * (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”, data1, data2, data1 + data2); 
                            break;
                   case ‘-‘:
                            printf(“%f – %f = %f”, data1, data2, data1 – data2);
                            break;
                   case ‘
‘:
                            printf(“%f  %f = %f”, data1, data2, data1  data2); 
                            break;
                   case ‘/’:
                            printf(“%f/%f = %f”, data1, data2,data1/data2); 
                            break;
                   default: 
                            printf(“Invalid operator!”);
         }
        return 0;
}

答案: 第20行语句有错误,改成:if (fabs(data2)<=EPS) printf(“Division by zero!”);else  printf(“%f/%f = %f”, data1, data2, data1/data2);同时,第1行语句下方应加入#include  <math.h>#define   EPS 1e-6

5、 若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是

答案: (x-y)<-10||!(y-x)>10

6、 下列复合语句中,不能实现两数交换的是

答案: {
  a=b;
  b=a;
}

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”, a, b) ;
   return 0;
}

答案: a=2, b=2

8、 以下程序运行后的输出结果是#include <stdio.h>
int main()

   int a=5,b=4,c=3,d;
   d=(a>b>c);
   printf(“%d”,d);
   return 0;
}

答案: 0

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;
}

答案: 02

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”,d);
   return 0;
}

答案: 2

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”, m);
        }
        else                    //不能被2整除,则是正奇数
        {
            printf(“%d is a positive odd”, m);
        }
    }

    
   __          //判断是否为负数
    
    {
        __

        
        {
             printf(“%d is a negative even”, m);   //是负偶数
        }
        else
        {
             printf(“%d is a negative odd”, m);    //是负奇数
        }
    }
    else
    {
        printf(“%d is zero.It is an even”, m);    
    }
   return 0;
}

答案: 第19行代码: else 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”,c); 
  return 0;  
}

答案: c+32 

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;
}

答案: 123

14、 编程计算下面的分段函数,根据从键盘输入的x值,在屏幕上输出y值。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第5张 程序代码如下,为完成以上功能,请将第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”, y);
    return 0;
}

答案: else 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”,k,m);
   return 0;
}

答案: 1,0

16、 以下程序的功能是计算一元二次方程的根。代码如下,请将第10行标号处缺少的语句填写完整。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第6张 #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!”);
               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”, p);
      }
     else                      
     { 
                 if (disc > EPS)        /
 判别式大于0时,输出两不等实根 /
                 {
                            printf(“x1 = %.2f, x2 = %.2f”, p+q, p-q);
                 }
                 else                     /
 判别式小于0时,输出两共轭复根 */
                 {
                            printf(“x1 = %.2f+%.2fi, “, p, q);
                            printf(“x2 = %.2f-%.2fi”, p, q);
                 }
      }
     return 0;
}

答案: if (fabs(a) <= EPS)

17、 下列说法错误的是()。

答案: case后的“常量表达式”的类型只能是整型。;
若case后面的语句省略不写,则表示它什么也不做。;
switch语句中的break和default可有可无。

 

第5周——周而复始的循环之道 练兵区——单选题——不计入总分

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; 
 
}

答案: 000122

2、 若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是

答案: for( i=1; i<=5; i++ ){    p=1;    p*=i;}

3、 下面程序的输出是#include <stdio.h>
int main()

    int y=9;
    for( ; y>0; y–)
        {   
            if(y%3==0)
                { 
                    printf(“%d”, –y);
                    continue;
                }
        }
    return 0;
}

答案: 852

4、 爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨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”, x);
                find = 1;   
        }
        x++;
    }
    
    return 0;
}

答案: 第5行:     !find第7行:     x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0

5、 鸡兔同笼,共有98个头,386只脚,编程求鸡、兔各多少只。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
    int x, y;
    for (x=1; _; x++)
    {
        __;
        if (
____)
        {
                printf(“x = %d, y = %d”, x, y);
        }
    }
    
    return 0;
}

答案: 第5行:     x<=97第7行:     y = 98 – x第8行:     2x+4y == 386

6、 以下正确的描述是

答案: 只能在循环体内和switch语句体内使用break语句

7、 华氏和摄氏温度的转换公式为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”, fahr, celsius);
         
_______ ;
    }
    return 0;
}

答案: 第8行代码: celsius = 5.0 / 9 * (fahr – 32)第10行代码: fahr = fahr + step

8、 利用泰勒级数:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第7张计算e的近似值,当最后一项的绝对值小于C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第8张时认为达到了精度要求,要求统计总共累加了多少项。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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”, e, count);
    return 0;
}

答案: 第6行代码:      double e = 1.0第10行代码:     term = term / n第13行代码:     count++

9、 打印所有的“水仙花数”。所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153是“水仙花数”,因为C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第9张代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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(“”);
    return 0;
}

答案: 第6行: n<1000第9行: (n – i * 100) / 10第10行:n % 10第11行:i100+j10+k == iii+jjj+kkk

10、 以下程序执行后的输出结果是#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);
   return 0;
}

答案: n=4

11、 以下程序运行后的输出结果是#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”,s);
    return 0;
 }

答案: 程序进入死循环

12、 程序执行后的输出结果是#include <stdio.h>
int main( )
{
     int i,s=0;
     for(i=1;i<10;i+=2)
     {
        s+=i+1;
     }
     printf(“%d”,s);
     return 0;
}

答案: 自然数1~10中的偶数之和

13、 以下程序运行时,从键盘输入: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”);
            case ‘1’: printf(“number”);
        }
   }
   return 0;
}

答案: anothernumbernumber

14、 以下程序执行后的输出结果是#include <stdio.h>
int main( )

    int x=0,y=5,z=3;
    while(z–>0 && ++x<5) 
    {
        y=y-1;
    }
    printf(“%d,%d,%d”,x,y,z);
    return 0;
}

答案: 3,2,-1

15、 以下能正确计算1×2×3×4…×10的程序段是

答案: i=1;
s=1;
do {
        s=s*i;
        i++;
     } while(i<=10);

16、 下面程序的功能是输出以下形式的图案,则在下划线处应填入的是    *#include <stdio.h>
int main( )
{   int i,j;
    for(i=1;i<=4;i++)
     {  
        for(j=1;j<=____;j++) 
        {
            printf(“
“);
        }
        printf(“”);
     }
    return 0;
}

答案: 2*i-1

17、 以下程序的输出结果是#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”,a);
    return 0;
}

答案: 4

18、 以下不是死循环的程序段是

答案: int s=36;
while (s) 
{
   –s;
}

19、 计算C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第10张直到最后一项的绝对值小于C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第11张为止。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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”, sum);
    return 0;
}

答案: 第7行代码: float sign=1第13行代码: sign = -sign

20、 设已定义i和k为int类型变量,则以下for循环语句for(i=0,k=-1;k=1; i++,k++)
    printf( “   “);

答案: 是无限循环

21、 有以下程序,若从键盘给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”,s);
    return 0;
}

答案: 2

22、 三色球问题。若一个口袋中放有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”, i, j, k);
                    }
                }
        }
    }
    
    return 0;
}

答案: 第9行:   k=0; k<=6; k++第11行:  i + j + k == 8

23、 我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只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”, x, y, z);
                }
        }
    }
    
    return 0;

答案: 第7行:     y<=33第9行:     z = 100 – x – y第10行:     5x + 3y + z/3.0 == 100

24、 以下程序的功能是计算: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”,s);
    return 0;
}

答案: s=s+1/n;

第5周——周而复始的循环之道 第5周测验

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; 
 
}

答案: 000122

2、 若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是

答案: for( i=1; i<=5; i++ )
{
    p=1;
    p*=i;
}

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”,x,y,z);
    return 0;
}

答案: 3,2,-1

4、 下面程序的输出是#include <stdio.h>
int main()

    int y=9;
    for( ; y>0; y–)
        {   
            if(y%3==0)
                { 
                    printf(“%d”, –y);
                    continue;
                }
        }
    return 0;
}

答案: 852 

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”, x);
                find = 1;   
        }
        x++;
    }
    
    return 0;
}

答案: 第5行:     !find第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;
}

答案: 第5行:     x<=97第7行:     y = 98 – x第8行:     2x+4y == 386

7、 以下能正确计算1×2×3×4…×10的程序段是

答案: i=1;
s=1;
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);
   return 0;
}

答案: n=4

9、 以下正确的描述是

答案: 只能在循环体内和switch语句体内使用break语句

10、 计算C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第12张直到最后一项的绝对值小于C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第11张为止。‍代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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”, sum);
           return 0;
}

答案: 第7行代码: float sign=1第13行代码: sign = -sign

11、 设已定义i和k为int类型变量,则以下for循环语句for(i=0,k=-1;k=1; i++,k++)
      printf( “   “);

答案: 是无限循环

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”,s);
    return 0;
}

答案: 2

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”,s);
    return 0;
 }

答案: 程序进入死循环

14、 下面程序的功能是输出以下形式的图案,则在下划线处应填入的是    *#include <stdio.h>
int main( )
{   int i,j;
    for(i=1;i<=4;i++)
     {  
        for(j=1;j<=____;j++) 
        {
            printf(“
“);
        }
        printf(“”);
     }
    return 0;
}

答案: 2*i-1

15、 程序执行后的输出结果是#include <stdio.h>
int main( )
{
     int i,s=0;
     for(i=1;i<10;i+=2)
     {
        s+=i+1;
     }
     printf(“%d”,s);
     return 0;
}

答案: 自然数1~10中的偶数之和

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”,a);
    return 0;
}

答案: 4

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”, i, j, k);
                    }
                }
        }
    }
    
    return 0;
}

答案: 第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”, x, y, z);
                }
        }
    }
    
    return 0;
}

答案: 第7行:     y<=33第9行:     z = 100 – x – y第10行:     5x + 3y + z/3.0 == 100 

19、 以下不是死循环的程序段是

答案: int s=36;
while (s) 
{
   –s;
}

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”,s);
    return 0;
}

答案: s=s+1/n;

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”);
            case ‘1’: printf(“number”);
        }
   }
   return 0;
}

答案: anothernumbernumber

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”, fahr, celsius);
         
_______ ;
    }
    return 0;
}

答案: 第8行代码: celsius = 5.0 / 9 * (fahr – 32)第10行代码: fahr = fahr + step

23、 利用泰勒级数:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第14张计算e的近似值,当最后一项的绝对值小于C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第8张时认为达到了精度要求,要求统计总共累加了多少项。‍代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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”, e, count);
    return 0;
}

答案: 第6行代码:      double e = 1.0第10行代码:     term = term / n第13行代码:     count++

24、 打印所有的“水仙花数”。所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153是“水仙花数”,因为C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第16张 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #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(“”);
    return 0;

答案: 第6行: n<1000第9行: (n – i * 100) / 10第10行:n % 10第11行:i100+j10+k == iii+jjj+kkk

 

第6周——函数:分工与合作的艺术 练兵区——单选题——不计入总分

1、 设计一个函数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”, x);
     }
     else
     {
          printf(“Input error!”);
     }
     
     return 0;
}

//函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数
int MaxCommonFactor(int a, int b)
{
     int r;
     if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数
         
     do{
          __;
          a = b;
          
__;
     }while (
_);
     
     return  a;   
}

答案: 第8行:     MaxCommonFactor(a, b)第29行:    r = a % b第31行:    b = r第32行:    r != 0

2、 C语言规定:在一个源程序中,main函数的位置

答案: 可以任意

3、 以下程序执行后输出结果是#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”,d,f,e);
    return 0;
}

答案: 5,4,3

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

答案: Fun(a,b); 

5、 完全数,又称完美数或完数(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”, m);
    else
        printf(“%d is not a perfect number”, 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;     
}

答案: 第10行:   IsPerfect(m)第24行:   i=1; i<x; i++第26行:   x % i == 0

6、 下列说法中正确的是

答案: 函数原型是一条语句,不包括函数体。

7、 以下程序有语法错误,有关错误原因的正确说法是#include <stdio.h>
void prt_char();
int main()
{
    int G=5,k;
     ……
    k=prt_char(G);
     ……
    return 0;
}

 int prt_char(int x)
{
     ……
}

答案: 函数原型和函数定义不匹配

8、 以下程序的功能是选出能被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(“n=%d”,n);
    return 0;
}

答案: 第7行:  (k%3==0&&a2==5)||(k%3==0&&a1==5)第22行: Sub(k,n)第24行: m!=-1

9、 设计一个函数,用来判断一个整数是否为素数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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);
     }
     else
     {
          printf(“%d is not a prime number”, 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;
}

答案: 第11行:   ret != 0第29行:   i<=sqrt(number)第31行:   number % i == 0

10、 以下程序执行后的输出结果是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”,x,y,z);
    return 0;
}

答案: 1,3,2

11、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是

答案: 函数调用可以作为一个函数的形参

12、 设计一个函数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”, x);
    else              
        printf(“Input error!”);
        
   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;
}

答案: 第8行:    MinCommonMultiple(a, b)第10行:    x != -1第22行:   a<=0 || b<=0第26行:   (i * a) % b == 0

13、 编程计算下面组合数的值C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第17张代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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”, p);
     return 0;
}

//函数功能:计算无符号整型数number的阶乘
unsigned long Factorial(unsigned int number)
{
     unsigned long i, result = 1;
     
     for (____)
     {
          result *= i;
     }
     return result;
}

答案: 第2行:     unsigned long Factorial(unsigned int number)第6行:    double p第11行:   m<k || m<0 || k<0第23行:   i=2; i<=number; i++

 

第6周——函数:分工与合作的艺术 第6周测验

1、 下列说法中正确的是

答案: 函数原型是一条语句,不包括函数体。

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)
{
     ……
}

答案: 函数原型和函数定义不匹配

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(“n=%d”,n);
    return 0;
}

答案: 第7行:  (k%3==0&&a2==5)||(k%3==0&&a1==5)第22行: Sub(k,n)第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);
     }
     else
     {
          printf(“%d is not a prime number”, 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;
}

答案: 第11行:   ret != 0第29行:   i<=sqrt(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”,x,y,z);
    return 0;
}

答案: 1,3,2

6、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是

答案: 函数调用可以作为一个函数的形参

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

答案: 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”, x);
    else              
        printf(“Input error!”);
        
   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;
}

答案: 第8行:    MinCommonMultiple(a, 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”, x);
     }
     else
     {
          printf(“Input error!”);
     }
     
     return 0;
}

//函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数
int MaxCommonFactor(int a, int b)
{
     int r;
     if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数
         
     do{
          __;
          a = b;
          
__;
     }while (
_);
     
     return  a;   
}

答案: 第8行:     MaxCommonFactor(a, b)第29行:    r = a % b第31行:    b = r第32行:    r != 0

10、 C语言规定:在一个源程序中,main函数的位置

答案: 可以任意

11、 编程计算下面组合数的值C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第18张代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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”, p);
     return 0;
}

//函数功能:计算无符号整型数number的阶乘
unsigned long Factorial(unsigned int number)
{
     unsigned long i, result = 1;
     
     for (____)
     {
          result *= i;
     }

     return result;
}

答案: 第2行:     unsigned long Factorial(unsigned int number)第6行:    double p第11行:   m<k || m<0 || k<0第23行:   i=2; 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”, m);
    else
        printf(“%d is not a perfect number”, 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;     

答案: 第10行:   IsPerfect(m)第24行:   i=1; 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”,d,f,e);
    return 0;
}

答案: 5,4,3 

第7周——《盗梦空间》的逻辑:探寻递归的奥秘 练兵区——单选题——不计入总分

1、 写出下面程序的运行结果#include <stdio.h>
void Bin(int x)
{
    if (x/2 > 0) Bin(x/2);
    printf(“%d”, x%2);
}

int main()
{
    Bin(12);
    return 0;

答案: 1100

2、 子函数Incre()的功能是,利用静态变量,使子函数的输出值能够随调用次数的增加依次为:第1次调用,输出:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第19张的结果第2次调用,输出:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第20张的结果第3次调用,输出:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第21张的结果…..在下面的程序中,对子函数Incre()进行了两次调用,若使程序的输出结果是:26请补充完整空白处缺少的代码。#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”,x);
}

答案: 第7行:   i<x第13行:  static int x=1

3、 函数Sum(int n)是用递归方法计算下面的公式,请补充程序中缺少的内容。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第22张int Sum(int n)
{
    if (n <= 0) printf(“data error”);
    if (n == 1)__;
    else return 
_____;
}

答案: 第4行: return 1第5行: n+Sum(n-1)

4、 程序运行后的输出结果是#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”,j);
    return 0;
}

答案: 3

5、 以下程序运行后的输出结果是#include <stdio.h>
float Fun(int x,int y)
{
    return(x+y);
}

int main()
{
    int a=2,b=5,c=8;
    printf(“%3.0f”,Fun((int)Fun(a+c,b),a-c));
    return 0;
}

答案: 9

6、 Y()是实现n层嵌套平方根计算的函数,其公式如下,请将程序补充完整。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第23张double Y(double x, int n)
{
    if (n == 0) return 0;
    else        return (square(x +_______)); 
}

答案: Y(x,n-1)

7、 下面程序是用辗转相除法计算两个正整数的最大公约数的递归求解方法。请将程序补充完整。提示:辗转相除法的基本思路是,对正整数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 ________;
}

答案: Gcd(b, a%b)

8、 下面函数是求阶乘的递归函数,请将程序补充完整。long Fact(int n)
{
    if (n < 0)      return 0;
    if (n==1 || n==0) ___;
    else 
_____;
}

答案: 第4行: return  1 第5行: return nFact(n-1)

9、 子函数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;
 }

答案: 第4行: x第11行:%c        Fun(a,b),Fun(b,c)

10、 下列说法正确的是

答案: 递归算法的执行过程可分为递推和回归两个阶段。在递推阶段,必须要有终止递归的情况。当满足递归终止条件时,即获得最简单情况的解以后,开始进入回归阶段,即递归返回阶段。;
基本条件是一个能控制递归过程结束的条件,是递归的出口,它本身不再使用递归的方式来定义。一般条件定义了递归关系,控制递归调用向着基本条件的方向转化。;
数学归纳法是递归的数学基础。;
形参也是局部变量,形参变量和实参变量的作用域是不同的,因此形参变量和实参变量同名时,二者互不干扰。;
全局变量破坏了函数的封装性,不能实现信息隐藏,依赖全局变量的函数很难在其他程序中复用,对于使用全局变量的程序维护也比较困难,因此建议尽量不用全局变量。

11、 子函数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;
}

答案: 第4行: a第5行: b第11行: Fun(Fun(x,y),z)

12、 以下程序的输出结果是 #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);
 }

答案: 10,20

13、 请给出程序的运行结果#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”, a);
    }
    
    return 0;
}

答案: 00

14、 写出下面程序的运行结果。#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”, i);
    return 0;
}

答案: 2,6,42,3

15、 根据最大公约数的如下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”, a, b, c);
     else        
          printf(“Input number should be positive!”);
     return 0; 
}

int Gcd(int a, int b) 
{     
     if (___)     
          return -1;
     if (a == b)
          return _;
     else if (a > b)
          return 
_;
     else        
          return _____;
 }

答案: 第9行:  c!= -1第18行:  a <= 0 || b <= 0第21行:  a第23行: Gcd(a – b, b)第25行: Gcd(a, b – a)

 

第7周——《盗梦空间》的逻辑:探寻递归的奥秘 第7周测验

1、 下列说法正确的是

答案: 递归算法的执行过程可分为递推和回归两个阶段。在递推阶段,必须要有终止递归的情况。当满足递归终止条件时,即获得最简单情况的解以后,开始进入回归阶段,即递归返回阶段。;
基本条件是一个能控制递归过程结束的条件,是递归的出口,它本身不再使用递归的方式来定义。一般条件定义了递归关系,控制递归调用向着基本条件的方向转化。;
数学归纳法是递归的数学基础。;
形参也是局部变量,形参变量和实参变量的作用域是不同的,因此形参变量和实参变量同名时,二者互不干扰。;
全局变量破坏了函数的封装性,不能实现信息隐藏,依赖全局变量的函数很难在其他程序中复用,对于使用全局变量的程序维护也比较困难,因此建议尽量不用全局变量。

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”,Fun((int)Fun(a+c,b),a-c));
    return 0;
}

答案: 9

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;
}

答案: 第4行: a第5行: b第11行: Fun(Fun(x,y),z)

4、 写出下面程序的运行结果#include <stdio.h>
void Bin(int x)
{
    if (x/2 > 0) Bin(x/2);
    printf(“%d”, x%2);
}

int main()
{
    Bin(12);
    return 0;
}

答案: 1100

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 ________;
}

答案: Gcd(b, a%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);
 }

答案: 10,20

7、 子函数Incre()的功能是,利用静态变量,使子函数的输出值能够随调用次数的增加依次为:第1次调用,输出:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第19张的结果第2次调用,输出:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第20张的结果第3次调用,输出:C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第21张的结果…..在下面的程序中,对子函数Incre()进行了两次调用,若使程序的输出结果是:26请补充完整空白处缺少的代码。#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”,x);
}

答案: 第7行:   i<x第13行:  static int x=1

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”, a);
    }
    
    return 0;
}

答案: 00

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”, i);
    return 0;
}

答案: 2,6,42,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”, a, b, c);
     else        
          printf(“Input number should be positive!”);
     return 0; 
}

int Gcd(int a, int b) 
{     
     if (___)     
          return -1;
     if (a == b)
          return _;
     else if (a > b)
          return 
_;
     else        
          return _____;
 }

答案: 第9行:  c!= -1第18行:  a <= 0 || b <= 0第21行:  a第23行: Gcd(a – b, b)第25行: Gcd(a, b – a)

11、 函数Sum(int n)是用递归方法计算下面的公式,请补充程序中缺少的内容。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第27张int Sum(int n)
{
    if (n <= 0) printf(“data error”);
    if (n == 1)__;
    else return 
_____;
}

答案: 第4行: return 1第5行: n+Sum(n-1)

12、 下面函数是求阶乘的递归函数,请将程序补充完整。long Fact(int n)
{
    if (n < 0)      return 0;
    if (n==1 || n==0) ___;
    else 
_____;
}

答案: 第4行: return  1 第5行: return nFact(n-1)

13、 Y()是实现n层嵌套平方根计算的函数,其公式如下,请将程序补充完整。C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第28张double Y(double x, int n)
{
    if (n == 0) return 0;
    else        return (square(x +_______)); 
}

答案: Y(x,n-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”,j);
    return 0;
}

答案: 3

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;
 }

答案: 第4行: x第11行:%c        Fun(a,b),Fun(b,c)

 



上方为免费预览版答案,如需购买完整答案,请点击下方红字

点击这里,购买完整版答案


 

点关注,不迷路,微信扫一扫下方二维码

关注我们的公众号:阿布查查  随时查看答案,网课轻松过

C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第29张


为了方便下次阅读,建议在浏览器添加书签收藏本网页

电脑浏览器添加/查看书签方法

1.按键盘的ctrl键+D键,收藏本页面

C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第30张

2.下次如何查看收藏的网页?

点击浏览器右上角-【工具】或者【收藏夹】查看收藏的网页

C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第31张


手机浏览器添加/查看书签方法

一、百度APP添加/查看书签方法

1.点击底部五角星收藏本网页

C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第32张

2.下次如何查看收藏的网页?

点击右上角【┇】-再点击【收藏中心】查看

C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第33张

二、其他手机浏览器添加/查看书签方法

1.点击【设置】-【添加书签】收藏本网页

C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第34张

2.下次如何查看收藏的网页?

点击【设置】-【书签/历史】查看收藏的网页

C语言程序设计精髓(哈尔滨工业大学) 中国大学mooc答案满分完整版章节测试第35张

你古赋羔镁权扩叹市弗桨欣肠