文章目录[隐藏]

本答案对应课程为:点我自动跳转查看
本课程起止时间为:2020-02-14到2020-06-30
本篇答案更新状态:已完结

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

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

2、 问题:以下不适合定义为用户标识符的是
选项:
A:float 
B:main
C:define
D:3com
E:PI
F:Source
G:abc
答案: 【float ;
main;
define

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

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

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

6、 问题:用8位无符号二进制数能表示的最大十进制数为
选项:
A:255
B:127
C:128
D:256
答案: 【255

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

8、 问题:若变量a是int类型,并执行了语句:a=’A’+1.6;,则正确的叙述是
选项:
A:’A’+1.6的结果是浮点型
B:a的值还是整型
C:a的值是字符C
D:a的值是浮点型
E:不允许字符型和浮点型相加
答案: 【‘A’+1.6的结果是浮点型;
a的值还是整型

9、 问题:C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A:运算符
B:一元运算符
C:只需要一个操作数的运算符
D:函数
E:语句
F:标识符
G:变量
答案: 【运算符;
一元运算符;
只需要一个操作数的运算符

10、 问题:以下不属于Codeblocks中用于调试程序的工具是
选项:
A:run
B:build
C:run to cursor
D:next line
E:stop debugger
F:watches
答案: 【run;
build

11、 问题:程序的开发步骤中不包括
选项:
A:撰写文档
B:运行程序
C:编译链接
D:程序测试
E:编辑(编写代码)
答案: 【撰写文档

12、 问题:下列说法中错误的是()
选项:
A:尾数决定了实数的表数范围,阶码决定了实数的表数精度。
B:内存是按位编址的。
C:有符号和无符号整数的表数范围是相同的。
D:int型在所有的计算机上都占4个字节的存储单元。
E:编译器按变量定义的类型对不同类型的变量分配不同大小的内存空间。
F:内存是按字节编址的。
G:对于同样的尾数,阶码的值越大,则浮点数所表示的数值的绝对值就越大。
H:sizeof是编译时执行的运算符,不会导致额外的运行时间开销。
答案: 【尾数决定了实数的表数范围,阶码决定了实数的表数精度。;
内存是按位编址的。;
有符号和无符号整数的表数范围是相同的。;
int型在所有的计算机上都占4个字节的存储单元。

13、 问题:若有定义:int a=8,b=5,c; ,执行语句c=a/b+0.4;后,c的值为
选项:
A:1
B:1.4
C:2.0
D:2
答案: 【1

14、 问题:在C语言中,字符型数据在内存中以字符的(  )形式存放
选项:
A:ASCII码
B:国标码
C:BCD码
D:反码 
答案: 【ASCII码

15、 问题:以下符合C语言语法的实型常量是
选项:
A:5e-3
B:3.14.159e
C:1.2e0.5
D:e15
答案: 【5e-3

16、 问题:以下选项中可作为C语言合法整数的是
选项:
A:0xffa
B:10110B       
C:038x
D:x2a2
答案: 【0xffa

17、 问题:下列说法正确的是
选项:
A:在C语言中,变量必须先定义后使用。
B:一条变量定义语句可定义多个同类型的变量。
C:C89规定所有变量必须在第一条可执行语句前定义。
D:const常量只能在定义时赋值。
E:实型常量的默认类型是double类型。
F:一条变量定义语句不可以同时定义多个变量。
G:不同类型的变量分配的存储空间大小都是相同的。
H:在C语言中,所有变量都必须在定义时进行初始化。
I:变量在没有初始化的时候,其值都是0
J:宏常量有数据类型,编译器在宏替换时可以进行类型检查。
答案: 【在C语言中,变量必须先定义后使用。;
一条变量定义语句可定义多个同类型的变量。;
C89规定所有变量必须在第一条可执行语句前定义。;
const常量只能在定义时赋值。;
实型常量的默认类型是double类型。

18、 问题:下列变量定义中合法的是
选项:
A:long ao=0xfdaL;
B:short _a=1-.1e-1;
C:double b=1+5e2.5;
D:float 2_and=1-e-3;
答案: 【long ao=0xfdaL;

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

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

2、 问题:以下不适合定义为用户标识符的是
选项:
A:int 
B:a2
C:def2
D:3com
E:PI 
F:Source
G:abc
答案: 【int 

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

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

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

6、 问题:用8位无符号二进制数能表示的最大十进制数为
选项:
A:255
B:127
C:128
D:256
答案: 【255

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

8、 问题:若变量a是int类型,并执行了语句:a=’A’+1.6;,则正确的叙述是
选项:
A:’A’+1.6的结果是浮点型
B:a的值还是整型
C:a的值是字符C
D:a的值是浮点型
E:不允许字符型和浮点型相加
答案: 【‘A’+1.6的结果是浮点型;
a的值还是整型

9、 问题:C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A:运算符
B:一元运算符
C:只需要一个操作数的运算符
D:函数
E:语句
F:标识符
G:变量
答案: 【运算符;
一元运算符;
只需要一个操作数的运算符

10、 问题:以下不属于Codeblocks中用于调试程序的工具是
选项:
A:run
B:build
C:run to cursor
D:next line
E:stop debugger
F:watches
答案: 【run;
build

11、 问题:程序的开发步骤中不包括
选项:
A:撰写文档
B:运行程序
C:编译链接
D:程序测试
E:编辑(编写代码)
答案: 【撰写文档

12、 问题:下列说法中错误的是()
选项:
A:尾数决定了实数的表数范围,阶码决定了实数的表数精度。
B:内存是按位编址的。
C:有符号和无符号整数的表数范围是相同的。
D:int型在所有的计算机上都占4个字节的存储单元。
E:编译器按变量定义的类型对不同类型的变量分配不同大小的内存空间。
F:内存是按字节编址的。
G:对于同样的尾数,阶码的值越大,则浮点数所表示的数值的绝对值就越大。
H:sizeof是编译时执行的运算符,不会导致额外的运行时间开销。
答案: 【尾数决定了实数的表数范围,阶码决定了实数的表数精度。;
内存是按位编址的。;
有符号和无符号整数的表数范围是相同的。;
int型在所有的计算机上都占4个字节的存储单元。

13、 问题:若有定义:int a=8,b=5,c; ,执行语句c=a/b+0.4;后,c的值为
选项:
A:1
B:1.4
C:2.0
D:2
答案: 【1

14、 问题:在C语言中,字符型数据在内存中以字符的(  )形式存放
选项:
A:ASCII码
B:国标码
C:BCD码
D:反码 
答案: 【ASCII码

15、 问题:以下符合C语言语法的实型常量是
选项:
A:5e-3
B:3.14.159e
C:1.2e0.5
D:e15
答案: 【5e-3

16、 问题:以下选项中可作为C语言合法整数的是
选项:
A:0xffa
B:10110B       
C:038x
D:x2a2
答案: 【0xffa

17、 问题:下列说法正确的是
选项:
A:在C语言中,变量必须先定义后使用。
B:一条变量定义语句可定义多个同类型的变量。
C:C89规定所有变量必须在第一条可执行语句前定义。
D:const常量只能在定义时赋值。
E:实型常量的默认类型是double类型。
F:一条变量定义语句不可以同时定义多个变量。
G:不同类型的变量分配的存储空间大小都是相同的。
H:在C语言中,所有变量都必须在定义时进行初始化。
I:变量在没有初始化的时候,其值都是0
J:宏常量有数据类型,编译器在宏替换时可以进行类型检查。
答案: 【在C语言中,变量必须先定义后使用。;
一条变量定义语句可定义多个同类型的变量。;
C89规定所有变量必须在第一条可执行语句前定义。;
const常量只能在定义时赋值。;
实型常量的默认类型是double类型。

18、 问题:下列变量定义中合法的是
选项:
A:long ao=0xfdaL;
B:short _a=1-.1e-1;
C:double b=1+5e2.5;
D:float 2_and=1-e-3;
答案: 【long ao=0xfdaL;

【作业】第1周——初识C语言从认识变量和常量开始 练兵区——编程题——不计入总分

1、 问题:hello world!
建议:【本题是主观题,暂无解析

2、 问题:在屏幕上输出多行信息
建议:【本题是主观题,暂无解析

3、 问题:计算半圆弧长及半圆的面积。
建议:【本题是主观题,暂无解析

4、 问题:计算长方体体积
建议:【本题是主观题,暂无解析

第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;
}
选项:
A:aabbccabc
B:acbcabc
C:aabcabc
D:acbbcabc
答案: 【aabbccabc

2、 问题:有如下语句,为使变量a的值为1,b的值为2,从键盘输入数据的正确形式是scanf("a=%d,b=%d",&a,&b);
选项:
A:a=1,b=2
B:1 2
C:1,2
D:a=1 b=2
答案: 【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<回车>。则输出结果是
选项:
A:6,5,A,B
B:6,5,65,66
C:6,5,6,5
D:6,5,6,6
答案: 【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;
}
选项:
A:1
B:1.6875
C:2
D: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:a = 1234.57, b = 55.3
B:a =1234, b =55
C:a = 1234.6, b = 5.32
D:a =1234.567, b = 55.32
答案: 【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:a = %d, b = %d
B:a = %2, b = %5
C:a = 2, b = 5
D:a = %%d, b = %%d
答案: 【a = %d, b = %d

7、 问题:有以下程序,运行时若输入为B,则输出是#include <stdio.h>
int main()
 { 
     char ch;
     ch=getchar();
     ch=ch+32;
     printf("%c",ch);
     return 0;
}
选项:
A:b
B:98
C:32
D:66
答案: 【b

8、 问题:在调用printf函数输出数据时,当数据的实际位宽小于printf函数中的指定位宽时,下面叙述正确的是
选项:
A:如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。
B:如果格式字符前面没有负号,那么输出的数据将会左对齐、右补空格;如果格式字符前面有负号,那么输出的数据将会右对齐、左补空格。
C:如果格式字符前面没有负号,那么输出的数据将会右对齐、左补0;如果格式字符前面有负号,那么输出的数据将会左对齐、右补0。
D:如果格式字符前面没有负号,那么输出的数据将会左对齐、右补0;如果格式字符前面有负号,那么输出的数据将会右对齐、左补0。
答案: 【如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。

9、 问题:设有语句“char c=’\72′;”,则变量c
选项:
A:包含1个字符
B:包含2个字符
C:包含3个字符
D:不合法
答案: 【包含1个字符

10、 问题:在下列语句中存在错误的是
选项:
A:int a,b;scanf("%d %f",&a,&b);
B:int a,b;scanf("%d %d",a,b);
C:int a,b;scanf("%d%d",&a,&b);printf("%d %d",a,b);
D:float a,b;scanf("%3.2f %4.2f",&a,&b);printf("%f %f",a,b);
E:float a,b;scanf("%f %f",&a,&b);printf("%f %f",a,b);
F:float a,b;scanf("%f %f",&a,&b);printf("a=%4.3f,b=%4.3f",a,b);
G:int a,b;scanf("%2d%2d",&a,&b);printf("a=%d,b=%d",a,b);
H:int a,b;scanf("%d,%d",&a,&b);printf("a=%2d,b=%2d",a,b);
I:int a,b;scanf("a=%d,b=%d",&a,&b);printf("a=%d,b=%d",a,b);
答案: 【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;
}
选项:
A:666
B:错误信息 
C:888  
D:666,888
答案: 【666

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

13、 问题:以下选项中合法的字符常量是
选项:
A: ‘\010’
B:"B"
C:68
D:D
答案: 【 ‘\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;
}
选项:
A:114,124
B:113,124
C:109,116
D:110,116
答案: 【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;
}
选项:
A:57
B:输出报错
C:33
D:输出一个随机数
答案: 【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<回车>
选项:
A:0
B:程序报错
C:输出一个随机数
D:3
答案: 【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<回车>
选项:
A:7
B:1
C:3
D:6
答案: 【7

18、 问题:在C语言中,字符型数据在内存中以(  )形式存放
选项:
A:ASCII码
B:国标码
C:BCD码
D:反码
答案: 【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:a=6,  x=10b=3,  y=6
B:a=6,  x=10b=3,  y=8
C:a=6,  x=12b=3,  y=6
D:以上均不对
答案: 【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;
}
选项:
A:1,65,1.5,6.5
B:1,65,1,6.5
C:1,65,1.0,6.5
D: 2,65,1.5,6.5
答案: 【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:a=1,b=
B:a=1,b=2
C:a= ,b=2
D:输出乱码
答案: 【a=1,b=

22、 问题:以下程序的输出结果是#include <stdio.h>
int main()
{
    int a=1234;
    printf("%2d",a);
    return 0;
}
选项:
A:1234
B:12
C:34
D:提示出错、无结果
答案: 【1234

第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;
选项:
A:1100
B:0011
C:6310
D:6311
答案: 【1100

2、 问题:子函数Incre()的功能是,利用静态变量,使子函数的输出值能够随调用次数的增加依次为:第1次调用,输出:的结果第2次调用,输出:的结果第3次调用,输出:的结果…..在下面的程序中,对子函数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);
}
选项:
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
答案: 【第7行:   i<x第13行:  static int x=1

3、 问题:函数Sum(int n)是用递归方法计算下面的公式,请补充程序中缺少的内容。int Sum(int n)
{
    if (n <= 0) printf("data error");
    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)
答案: 【第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;
}
选项:
A:3
B:4
C:2
D:1
答案: 【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;
}
选项:
A:9
B:21
C:9.0
D:编译出错
答案: 【9

6、 问题: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)
答案: 【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 ________;
}
选项:
A:Gcd(b, a%b)
B:Gcd(a, b%a)
C:Gcd(b%a, a)
D:Gcd(a%b, b)
答案: 【Gcd(b, a%b)

8、 问题:下面函数是求阶乘的递归函数,请将程序补充完整。long Fact(int n)
{
    if (n < 0)      return 0;
    if (n==1 || n==0) ___;
    else 
_____;
}
选项:
A:第4行: return  1 第5行: return nFact(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)
答案: 【第4行: return  1 第5行: return n
Fact(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;
 }
选项:
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)
答案: 【第4行: x第11行:%c        Fun(a,b),Fun(b,c)

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

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;
}
选项:
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行: 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);
 }
选项:
A:10,20
B:0,0
C:10,10
D:20,20
答案: 【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;
}
选项:
A:00
B:88
C:44
D:6464
答案: 【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;
}
选项:
A:2,6,42,3
B:2,2,2,3
C:2,2,3,3
D:2,3,4,3
答案: 【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 _____;
 }
选项:
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)
答案: 【第9行:  c!= -1第18行:  a <= 0 || b <= 0第21行:  a第23行: Gcd(a – b, b)第25行: Gcd(a, b – a)

第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;   
}
选项:
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
答案: 【第8行:     MaxCommonFactor(a, b)第29行:    r = a % b第31行:    b = r第32行:    r != 0

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

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;
}
选项:
A:5,4,3
B:3,4,5
C:5,3,4
D:3,5,4
答案: 【5,4,3

4、 问题:有以下函数定义: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); 
答案: 【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;     
}
选项:
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
答案: 【第10行:   IsPerfect(m)第24行:   i=1; i<x; i++第26行:   x % i == 0

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

7、 问题:以下程序有语法错误,有关错误原因的正确说法是#include <stdio.h>
void prt_char();
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()的后面。
答案: 【函数原型和函数定义不匹配

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;
}
选项:
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
答案: 【第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;
}
选项:
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
答案: 【第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;
}
选项:
A:1,3,2
B:1,2,3
C:3,1,2
D:2,3,1
答案: 【1,3,2

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

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;
}
选项:
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
答案: 【第8行:    MinCommonMultiple(a, b)第10行:    x != -1第22行:   a<=0 || b<=0第26行:   (i * a) % b == 0

13、 问题:编程计算下面组合数的值代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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;
}
选项:
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++
答案: 【第2行:     unsigned long Factorial(unsigned int number)第6行:    double p第11行:   m<k || m<0 || k<0第23行:   i=2; i<=number; i++

【作业】第7周——《盗梦空间》的逻辑:探寻递归的奥秘 第7周编程题在线测试

1、 问题:n层嵌套平方根的计算
建议:【本题是主观题,暂无解析

2、 问题:递归法求和
建议:【本题是主观题,暂无解析

3、 问题:猴子吃桃程序_扩展3
建议:【本题是主观题,暂无解析

4、 问题:网购打折商品V2.0
建议:【本题是主观题,暂无解析

【作业】第7周——《盗梦空间》的逻辑:探寻递归的奥秘 练兵区——编程题——不计入总分

1、 问题:谐均值计算
建议:【本题是主观题,暂无解析

2、 问题:输出指定行列数的字符
建议:【本题是主观题,暂无解析

3、 问题:魔术师猜数
建议:【本题是主观题,暂无解析

4、 问题:计算礼炮声响次数
建议:【本题是主观题,暂无解析

5、 问题:水手分椰子
建议:【本题是主观题,暂无解析

6、 问题:递归法计算游戏人员的年龄
建议:【本题是主观题,暂无解析

7、 问题:递归法计算两个数的最大公约数
建议:【本题是主观题,暂无解析

8、 问题:寻找中位数v1.0
建议:【本题是主观题,暂无解析

9、 问题:还原算术表达式
建议:【本题是主观题,暂无解析

【作业】第6周——函数:分工与合作的艺术 练兵区——编程题——不计入总分

1、 问题:绘制金字塔
建议:【本题是主观题,暂无解析

2、 问题:循环嵌套的应用
建议:【本题是主观题,暂无解析

3、 问题:利用泰勒级数计算sinx的值
建议:【本题是主观题,暂无解析

4、 问题:计算100~200之间的所有素数之和
建议:【本题是主观题,暂无解析

5、 问题:编程实现一个输入指定范围内的整数的函数
建议:【本题是主观题,暂无解析

6、 问题:程序改错v2.0
建议:【本题是主观题,暂无解析

7、 问题:编程计算a+aa+aaa+…+aa…a(n个a)的值
建议:【本题是主观题,暂无解析

8、 问题:搬砖问题
建议:【本题是主观题,暂无解析

9、 问题:编程输出某年某月有多少天(考虑到闰年)
建议:【本题是主观题,暂无解析

【作业】第6周——函数:分工与合作的艺术 第6周编程题在线测试

1、 问题:计算阶乘的和v2.0
建议:【本题是主观题,暂无解析

2、 问题:计算最大的三位约数
建议:【本题是主观题,暂无解析

3、 问题:孔融分梨
建议:【本题是主观题,暂无解析

4、 问题:素数求和
建议:【本题是主观题,暂无解析

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

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("n=%d",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
答案: 【第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;
}
选项:
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
答案: 【第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;
}
选项:
A:1,3,2
B:1,2,3
C:3,1,2
D:2,3,1
答案: 【1,3,2

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); 
答案: 【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;
}
选项:
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
答案: 【第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;   
}
选项:
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
答案: 【第8行:     MaxCommonFactor(a, b)第29行:    r = a % b第31行:    b = 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", 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++
答案: 【第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;     

选项:
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
答案: 【第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;
}
选项:
A:5,4,3 
B:3,4,5
C: 5,3,4
D:3,5,4
答案: 【5,4,3 

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

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",Fun((int)Fun(a+c,b),a-c));
    return 0;
}
选项:
A:9
B:21
C:9.0
D:编译出错
答案: 【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;
}
选项:
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行: 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;
}
选项:
A:1100
B:0011
C:6310
D:6311
答案: 【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 ________;
}
选项:
A:Gcd(b, a%b)
B:Gcd(a, b%a)
C:Gcd(b%a, a)
D:Gcd(a%b, b)
答案: 【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);
 }
选项:
A:10,20
B:0,0
C:10,10
D:20,20
答案: 【10,20

7、 问题:子函数Incre()的功能是,利用静态变量,使子函数的输出值能够随调用次数的增加依次为:第1次调用,输出:的结果第2次调用,输出:的结果第3次调用,输出:的结果…..在下面的程序中,对子函数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);
}
选项:
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
答案: 【第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;
}
选项:
A:00
B:88
C:44
D:6464
答案: 【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;
}
选项:
A:2,6,42,3
B:2,2,2,3
C:2,2,3,3
D:2,3,4,3
答案: 【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 _____;
 }
选项:
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)
答案: 【第9行:  c!= -1第18行:  a <= 0 || b <= 0第21行:  a第23行: Gcd(a – b, b)第25行: Gcd(a, b – a)

11、 问题:函数Sum(int n)是用递归方法计算下面的公式,请补充程序中缺少的内容。int Sum(int n)
{
    if (n <= 0) printf("data error");
    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)
答案: 【第4行: return 1第5行: n+Sum(n-1)

12、 问题:下面函数是求阶乘的递归函数,请将程序补充完整。long Fact(int n)
{
    if (n < 0)      return 0;
    if (n==1 || n==0) ___;
    else 
_____;
}
选项:
A:第4行: return  1 第5行: return nFact(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)
答案: 【第4行: return  1 第5行: return n
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)
答案: 【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;
}
选项:
A:3
B:4
C:2
D:1
答案: 【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;
 }
选项:
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)
答案: 【第4行: x第11行:%c        Fun(a,b),Fun(b,c)

【作业】第8周—— 一堆数据来了,你准备好了吗 第8周编程题在线测试

1、 问题:摘苹果
建议:【本题是主观题,暂无解析

2、 问题:好数对
建议:【本题是主观题,暂无解析

3、 问题:组合三位数
建议:【本题是主观题,暂无解析

4、 问题:求100以内的最大素数
建议:【本题是主观题,暂无解析

【作业】第8周—— 一堆数据来了,你准备好了吗 练兵区——编程题——不计入总分

1、 问题:三天打渔两天晒网
建议:【本题是主观题,暂无解析

2、 问题:统计用户输入
建议:【本题是主观题,暂无解析

3、 问题:统计正整数中指定数字的个数
建议:【本题是主观题,暂无解析

4、 问题:玫瑰花数
建议:【本题是主观题,暂无解析

5、 问题:四位反序数
建议:【本题是主观题,暂无解析

6、 问题:8除不尽的自然数
建议:【本题是主观题,暂无解析

7、 问题:矩阵转置v1.0
建议:【本题是主观题,暂无解析

8、 问题:兔子生崽问题
建议:【本题是主观题,暂无解析

9、 问题:抓交通肇事犯
建议:【本题是主观题,暂无解析

10、 问题:检验并打印幻方矩阵
建议:【本题是主观题,暂无解析

第8周—— 一堆数据来了,你准备好了吗 练兵区——单选题——不计入总分

1、 问题:假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>

define  M  40

define  N  11

int main()
{
    int  i, j, grade, feedback[M], count[N] = {0};
    printf("Input the feedbacks of 40 students:");
    
    for (i=0; i<M; i++)
    {
        scanf("%d", &feedback[i]);
    }
    
    for (i=0; i<M; i++)
    {
        ___;
    }
    
    printf("Feedback\tCount\tHistogram");
    
    for (
_; grade<=N-1; grade++)
    { 
        printf("%8d\t%5d\t", grade, count[grade]);
        for (j=0; _____; j++)
        {
            printf("%c",’*’);
        }
        printf("");
    }
    return 0;
}
选项:
A:第16行:    count[feedback[i]]++第21行:    grade=1第24行:    j<count[grade]
B:第16行:    feedback[i]++第21行:    grade=1第24行:    j<N-1
C:第16行:    count[i]++第21行:    grade=0第24行:    j<N-1
D:第16行:    count[feedback[i]]++第21行:    grade=0第24行:    j<grade
答案: 【第16行:    count[feedback[i]]++第21行:    grade=1第24行:    j<count[grade]

2、 问题:输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include  <stdio.h>

define N 40

intGetFailNum(int score[], int n);
int main()

    int i, n, fail, score[N];
    printf("How many students?");
    scanf("%d", &n);
    for (i=0; i<n; i++)
    {
        scanf("%d", ___);
    }
    fail = ___;
    printf("Fail students = %d", fail);
    return 0;
}
/ 函数功能:统计不及格人数 /
int GetFailNum(int score[], int n)
{
    int  i, count = 0;
    for (i=0; i<n; i++)
    {
        if (
_)  count++;
    }
    return count;
}
选项:
A:第11行:    &score[i]第13行:    GetFailNum(score, n)第23行:    score[i] < 60
B:第11行:    score[i]第13行:    GetFailNum(score, n)第23行:    score[i] <= 60
C:第11行:    score[i]第13行:    GetFailNum(n,score)第23行:    score[i] < 60
D:第11行:    &score[i]第13行:    GetFailNum(score[i], n)第23行:    score[i] >= 60
答案: 【第11行:    &score[i]第13行:    GetFailNum(score, n)第23行:    score[i] < 60

3、 问题:模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include ___

include <time.h>

include <stdio.h>

int main()
{
    int  face, roll, frequency[7] = {0};
    srand(time (NULL));
    
    for (roll=1; roll<=6000; roll++)
    { 
        face = ___;
        
____;
    }
    
    printf("%4s%17s", "Face", "Frequency");
    
    for (face=1; face<=6; face++)
    {
        printf("%4d%17d", face, frequency[face]);
    }
    
    return 0;
}
选项:
A:第1行:    <stdlib.h>第11行:    rand()%6 + 1第12行:    frequency[face]++
B:第1行:    <math.h>第11行:    rand()/6 + 1第12行:    frequency[face]++
C:第1行:    <stdlib.h>第11行:    rand()%6 + 1第12行:    frequency[roll]++
D:第1行:    <math.h>第11行:    rand()/6 + 1第12行:    frequency[roll]++
答案: 【第1行:    <stdlib.h>第11行:    rand()%6 + 1第12行:    frequency[face]++

4、 问题:以下程序中函数Fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
Fun(__,int m,int n)

    int  i,s=0;
    for( __;i<=n;i++)  
        s=s+b[i];
    return 
_____;
}

int main()

    int  x,a[]={1,2,3,4,5,6,7,8,9};
    x=Fun(a,3,7);
    printf("%d",x);
    return 0;
}
选项:
A:第2行:    int b[]第5行:    i=m第7行:    s
B:第2行:    int b[]第5行:    i=1第7行:    i
C:第2行:    int b第5行:    i=0第7行:    s
D:第2行:    int b[]第5行:    i=n-1第7行:    b[i]
答案: 【第2行:    int b[]第5行:    i=m第7行:    s

5、 问题:以下程序中函数Sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Sort(int a[],int n)

    int i,j,t;
    for(i=0;___;i++)
        for(__;j<n;j++)
            if(a[i]<a[j])
            {
                t=a[i];
                ____;
                a[j]=t;
            }
}

int main()
{
    int aa[10]={1,2,30,4,5,6,7,8,9,10},i;
    ____;
    
    for(i=0;i<10;i++)
        printf("%d,",aa[i]);
    printf("");
    return 0;
选项:
A:第5行:    i<n-1第6行:    j=i+1第10行:    a[i]=a[j]第18行:    Sort(aa,10)
B:第5行:    i<n-1第6行:    j=i第10行:    a[i]=a[j]第18行:    Sort(aa[],10)
C:第5行:    i<n第6行:    j=i+1第10行:    a[j]=a[i]第18行:    Sort(aa,10)
D:第5行:    i<=nj第6行:    =i第10行:    a[i]=a[j]第18行:    Sort(10,aa)
答案: 【第5行:    i<n-1第6行:    j=i+1第10行:    a[i]=a[j]第18行:    Sort(aa,10)

6、 问题:以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是#include <stdio.h>
int main()

    int n,k;
    float score ,sum,ave;
    sum=0.0;
    for(n=1;n<=10;n++)
    { 
        for(k=1;k<=4;k++)
        { 
            scanf("%f",&score); 
            sum+=score;
        }
        
        ave=sum/4.0;
        printf("NO%d:%f",n,ave);
        
    }
    
    return 0;
选项:
A:sum=0.0;
B:sum+=score;
C:ave=sun/4.0;
D:printf("NO%d:%f",n,ave);
答案: 【sum=0.0;

7、 问题:以下程序中函数Reverse的功能是对数组a中的前一半元素逆序、后一半元素逆序,再将逆序后的前、后两部分数据位置交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。例如:主程序中数组b中的元素为{16,22,13,41,50,62,27,18,9,10},调用函数Reverse后,数组b中元素变为{10 9 18 27 62 50 41 13 22 16}#include <stdio.h>
void Reverse(int a[],int n)
{   
    int i,t;
    for(i=0;__;i++)
     { 
         t=a[i]; 
         ____; 
         a[n-i]=t;
      }
}

int main()
{   
    int b[10]={16,22,13,41,50,62,27,18,9,10}; 
    int i,s=0;
    ____;
    
    for(i=0;i<10;i++) 
    {
         printf("%4d",b[i]);
    }
    
    return 0;
}
选项:
A:第5行:    i<=n/2第8行:    a[i]=a[n-i]第17行:    Reverse(b,9)
B:第5行:    i<=n第8行:    a[n-i]=a[i]第17行:    Reverse(b,9)
C:第5行:    i<=n/2第8行:    a[n]=a[i]第17行:    Reverse(9,b)
D:第5行:    i<=n/2第8行:    a[i]=a[n]第17行:    Reverse(b,9)
答案: 【第5行:    i<=n/2第8行:    a[i]=a[n-i]第17行:    Reverse(b,9)

8、 问题:输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>

define  N   10

void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);
int main()
{
    int a[N][N], n, sum;                
    printf("Input n:");
    scanf("%d", &n);
    InputMatrix(a, n);
    sum = AddDiagonal(a, n);
    printf("sum = %d", sum);
    return 0;
}

/  函数功能: 输入n×n矩阵的元素值,存于数组a中 /
void InputMatrix(__, int n)
{
    int i, j;                
    printf("Input %d*%d matrix:", n, n);
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
              scanf("%d",
__);
        }
    }
}

/  函数功能: 计算n×n矩阵中两条对角线上的元素之和 /
int AddDiagonal(int a[N][N], int n)
{
    int i, j, sum = 0;                
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
            if (____)
                sum = sum + a[i][j];      
        }  
    }
    return ______;
}
选项:
A:第17行:    int a[N][N]第25行:    &a[i][j]第38行:    i==j || i+j==n-1第42行:    sum
B:第17行:    int a[N][N]第25行:    &a[i][j]第38行:    i==j && i+j==n-1第42行:    a[i][j]
C:第17行:    int a[N][N]第25行:    a[i][j]第38行:    i==j || i+j==n-1第42行:    a[N][N]
D:第17行:    int a[][]第25行:    &a[i][j]第38行:    i==j && i+j==n-1第42行:    sum
答案: 【第17行:    int a[N][N]第25行:    &a[i][j]第38行:    i==j || i+j==n-1第42行:    sum

9、 问题:下面代码的功能是将数组a中存放的5个整型数据逆序后在屏幕上输出,具体输出内容如下:5    4    3    2    1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Fun(int b[],int i,int j)

     int t;
     if(i<j)
     { 
          _
          
          b[i]=b[j];
          _
;
          
          Fun(b,i+1,j-1);
     }
}

int main( )

     int i,a[5]={1,2,3,4,5};
     ___;
     
     for(i=0;i<5;i++) printf("%d\t",a[i]); 
     printf("");
     return 0;
 }
选项:
A:第7行:    t=b[i]第10行:    b[j]=t第19行:    Fun(a,0,4)
B:第7行:    t=b[i]第10行:    b[i]=t第19行:    Fun(a,0,5)
C:第7行:    t=b[j]第10行:    b[j]=t第19行:    Fun(a,1,4)
D:第7行:    t=b[i]第10行:    b[i]=t第19行:    Fun(a,1,5)
答案: 【第7行:    t=b[i]第10行:    b[j]=t第19行:    Fun(a,0,4)

10、 问题:某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。)按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
    int i,j,k,s,n=0;
    int a[100]={0};
    
    for(i=0;_;i++)
        for(j=0;__;j++)
        {
            s=___;
            
            for(for(k=0;a[k]!=0;k++))
                if(s==a[k])
                   
_;
                   
            if(a[k]==0&&s>0)
            {
                _
;
                n++;
            }
        }
        
    printf(" %d kinds:",n);
    
    for(k=0;a[k];k++)
        printf("%2d,",a[k]);
        
    return 0;
选项:
A:第7行:    i<=5第8行:    j<=5第10行:    2i+3j第14行:    break第18行:    a[k]=s
B:第7行:    i<5第8行:    j<5第10行:    2i+3j第14行:    break第18行:    s=a[k]
C:第7行:    i<=5第8行:    j<=5第10行:    2i+3j第14行:    continue第18行:    a[k]=s
D:第7行:    i<5第8行:    j<5第10行:    2i+3j第14行:    continue第18行:    s=a[k]+1
答案: 【第7行:    i<=5第8行:    j<=5第10行:    2i+3j第14行:    break第18行:    a[k]=s

11、 问题:某矩阵m存储的数据如下:1 4 72 5 83 6 9现将该矩阵最后一行的所有数据输出到屏幕,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()

    int m[][3]={1,4,7,2,5,8,3,6,9};
    int i,j,k=_;
    
    for(i=0;
_;i++)
    { 
        printf("%d",
______); 
    }
    
    return 0;
}
选项:
A:第5行:    2第7行:    i<3第9行:    m[k][i]
B:第5行:    3第7行:    i<=3第9行:    m[k][i]
C:第5行:    2第7行:    i<2第9行:    m[i][k]
D:第5行:    3第7行:    i<3第9行:    m[i][k]
答案: 【第5行:    2第7行:    i<3第9行:    m[k][i]

12、 问题:下列说法正确的是
选项:
A:在C语言中,数组的下标都是从0开始的。
B:在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
C:简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
D:数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
E:在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
F:C语言中的二维数组在内存中是按列存储的。
G:对于一个二维数组,可以按任意的顺序对其进行赋值,输出二维数组元素也可以按任意的顺序来输出。
H:在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
I:定义数组的大小、访问数组元素时在下标中都可以使用变量或表达式。
答案: 【在C语言中,数组的下标都是从0开始的。;
在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。;
简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。;
数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。;
在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。

13、 问题:用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include<stdio.h>

define  N  20

void  CaculateYH(int a[][N], int  n);
void  PrintYH(int a[][N], int  n);
int main()
{
    int  a[N][N] = {0}, n;
    printf("Input  n(n<20):");
    scanf("%d", &n);     
    CaculateYH(a, n);
    PrintYH(a, n);
    return 0;
}

/ 函数功能:计算杨辉三角形前n行元素的值 /
void CaculateYH(_, int n)
{
    int  i, j;
    for (i=0; i<n; i++)
     {   
        a[i][0] = 1;
        
__; 
     }
    for (_; i<n; i++)
    {
        for (j=1; j<=i-1; j++)
        {
           a[i][j] = ___;
        }
   } 
}
/ 函数功能:输出杨辉三角形前n行元素的值 /
void PrintYH(int a[][N], int n)
{
    int  i, j;
    for (i=0; i<n; i++)
    {
        for (j=0; 
______; j++)
        {
            printf("%4d", a[i][j]);
        }
        printf("");
    }
}
选项:
A:第16行:    int a[][N]第22行:    a[i][i] = 1第24行:    i=2第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<=i
B:第16行:    int a[][]第22行:    a[i][i] = 1第24行:    i=1第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<=i
C:第16行:    int a[][N]第22行:    a[0][i] = 1第24行:    i=2第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<i
D:第16行:    int a[N][]第22行:    a[i][i] = 1第24行:    i=2第28行:    a[j-1][i-1] + a[j][i-1]第38行:    j<=i
答案: 【第16行:    int a[][N]第22行:    a[i][i] = 1第24行:    i=2第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<=i

14、 问题:输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束,用函数编程统计成绩高于平均分的学生人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>

define N 40

int Average(int score[], int n); 
int ReadScore(int score[]);      
int GetAboveAver(int score[], int n);
int main()
{
    int score[N], m, n;
    n = ReadScore(score);           / 输入成绩,返回学生人数 /
    printf("Total students are %d", n);
    m = GetAboveAver(score, n);    / 统计成绩在平均分及其上的学生人数 /   
    if (__) printf("Students of above average is %d", m);
    return 0;
}

/ 函数功能:若n>0,则计算并返回n个学生成绩的平均分,否则返回-1 /
int Average(int score[], int n) 
{
    int i, sum = 0;
    for (i=0; i<n; i++)
    {
        sum += score[i];
    }
    return  __
}

/ 函数功能:输入学生某门课成绩,当输入成绩为负值时,结束输入,返回学生人数 /
int ReadScore(int score[])  
{
    int i = -1;         
    do{
            i++;
            printf("Input score:");
            scanf("%d", &score[i]);
       }while (_);   
    return 
____;                     
}

/ 函数功能:若n>0,则统计并返回成绩在平均分及平均分之上的学生人数,否则返回-1 /
int GetAboveAver(int score[], int n)
{
    int   i, count = 0, aver;
    aver = __;  / 计算并打印平均分 /
    if (aver == -1) return -1;
    printf("Average score is %d", aver);
    for (i=0; i<n; i++)
    {
        if (score[i] >= aver)  count++;
    }
    return ____;
}
选项:
A:第12行:    m != -1第24行:    n>0 ? sum/n : -1第35行:    score[i] >= 0第36行:    i第43行:    Average(score, n)第50行:    count
B:第12行:    m == -1第24行:    n>0 ? sum/n : -1第35行:    score[i] >= 0第36行:    i第43行:    Average(score, n)第50行:    i
C:第12行:    m != -1第24行:    n>0 ? -1 : sum/n第35行:    score[i] >= 0第36行:    i第43行:    Average(n,score)第50行:    count
D:第12行:    m == -1第24行:    n<=0 ? sum/n : -1第35行:    score[i] >= 0第36行:    score第43行:    Average(score, n)第50行:    aver
答案: 【第12行:    m != -1第24行:    n>0 ? sum/n : -1第35行:    score[i] >= 0第36行:    i第43行:    Average(score, n)第50行:    count

15、 问题:下面代码的功能是在屏幕上输出以下内容013程序中空白处缺少的代码由下列选项给出,其中有一个不能满足题目要求,请将其找出。#include <stdio.h>
int main()
{  
     int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
     
     for(i=0;i<3;i++)
         for(j=i;j<=i;j++) 
           {
                t=t+______;
                printf("%d",t);
           }  
     
     return 0;
}
选项:
A:b[j][t]
B:b[i][b[j][j]]
C:b[t][j]
D:b[i][j]
答案: 【b[j][t]

16、 问题:以下程序的输出结果是void swap1(int c[])

    int t;
    t=c[0];
    c[0]=c[1];
    c[1]=t;
}

void swap2(int c0,int c1)

    int t;
    t=c0;
    c0=c1;
    c1=t;
}

int main( )

    int a[2]={3,5},b[2]={3,5};
    swap1(a); 
    swap2(b[0],b[1]);
    printf("%d %d %d %d",a[0],a[1],b[0],b[1]);
    return 0;
}
选项:
A:5 3 3 5
B:5 3 5 3
C:3 5 3 5
D:3 5 5 3
答案: 【5 3 3 5

第8周—— 一堆数据来了,你准备好了吗 第8周测验

1、 问题:输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include  <stdio.h>

define N 40

intGetFailNum(int score[], int n);
int main()

    int i, n, fail, score[N];
    printf("How many students?");
    scanf("%d", &n);
    for (i=0; i<n; i++)
    {
        scanf("%d", ___);
    }
    fail = ___;
    printf("Fail students = %d", fail);
    return 0;
}
/ 函数功能:统计不及格人数 /
int GetFailNum(int score[], int n)
{
    int  i, count = 0;
    for (i=0; i<n; i++)
    {
        if (
_)  count++;
    }
    return count;
}
选项:
A:第11行:    &score[i]第13行:    GetFailNum(score, n)第23行:    score[i] < 60
B:第11行:    score[i]第13行:    GetFailNum(score, n)第23行:    score[i] <= 60
C:第11行:    score[i]第13行:    GetFailNum(n,score)第23行:    score[i] < 60
D:第11行:    &score[i]第13行:    GetFailNum(score[i], n)第23行:    score[i] >= 60
答案: 【第11行:    &score[i]第13行:    GetFailNum(score, n)第23行:    score[i] < 60

2、 问题:输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>

define  N   10

void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);
int main()
{
    int a[N][N], n, sum;                
    printf("Input n:");
    scanf("%d", &n);
    InputMatrix(a, n);
    sum = AddDiagonal(a, n);
    printf("sum = %d", sum);
    return 0;
}

/  函数功能: 输入n×n矩阵的元素值,存于数组a中 /
void InputMatrix(__, int n)
{
    int i, j;                
    printf("Input %d*%d matrix:", n, n);
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
              scanf("%d",
__);
        }
    }
}

/  函数功能: 计算n×n矩阵中两条对角线上的元素之和 /
int AddDiagonal(int a[N][N], int n)
{
    int i, j, sum = 0;                
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
            if (____)
                sum = sum + a[i][j];      
        }  
    }
    return ______;
}
选项:
A:第17行:    int a[N][N]第25行:    &a[i][j]第38行:    i==j || i+j==n-1第42行:    sum
B:第17行:    int a[N][N]第25行:    &a[i][j]第38行:    i==j && i+j==n-1第42行:    a[i][j]
C:第17行:    int a[N][N]第25行:    a[i][j]第38行:    i==j || i+j==n-1第42行:    a[N][N]
D:第17行:    int a[][]第25行:    &a[i][j]第38行:    i==j && i+j==n-1第42行:    sum
答案: 【第17行:    int a[N][N]第25行:    &a[i][j]第38行:    i==j || i+j==n-1第42行:    sum

3、 问题:输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束,用函数编程统计成绩高于平均分的学生人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>

define N 40

int Average(int score[], int n); 
int ReadScore(int score[]);      
int GetAboveAver(int score[], int n);
int main()
{
    int score[N], m, n;
    n = ReadScore(score);           / 输入成绩,返回学生人数 /
    printf("Total students are %d", n);
    m = GetAboveAver(score, n);    / 统计成绩在平均分及其上的学生人数 /   
    if (__) printf("Students of above average is %d", m);
    return 0;
}

/ 函数功能:若n>0,则计算并返回n个学生成绩的平均分,否则返回-1 /
int Average(int score[], int n) 
{
    int i, sum = 0;
    for (i=0; i<n; i++)
    {
        sum += score[i];
    }
    return  __
}

/ 函数功能:输入学生某门课成绩,当输入成绩为负值时,结束输入,返回学生人数 /
int ReadScore(int score[])  
{
    int i = -1;         
    do{
            i++;
            printf("Input score:");
            scanf("%d", &score[i]);
       }while (_);   
    return 
____;                     
}

/ 函数功能:若n>0,则统计并返回成绩在平均分及平均分之上的学生人数,否则返回-1 /
int GetAboveAver(int score[], int n)
{
    int   i, count = 0, aver;
    aver = __;  / 计算并打印平均分 /
    if (aver == -1) return -1;
    printf("Average score is %d", aver);
    for (i=0; i<n; i++)
    {
        if (score[i] >= aver)  count++;
    }
    return ____;
}
选项:
A:第12行:    m != -1第24行:    n>0 ? sum/n : -1第35行:    score[i] >= 0第36行:    i第43行:    Average(score, n)第50行:    count
B:第12行:    m == -1第24行:    n>0 ? sum/n : -1第35行:    score[i] >= 0第36行:    i第43行:    Average(score, n)第50行:    i
C:第12行:    m != -1第24行:    n>0 ? -1 : sum/n第35行:    score[i] >= 0第36行:    i第43行:    Average(n,score)第50行:    count
D:第12行:    m == -1第24行:    n<=0 ? sum/n : -1第35行:    score[i] >= 0第36行:    score第43行:    Average(score, n)第50行:    aver
答案: 【第12行:    m != -1第24行:    n>0 ? sum/n : -1第35行:    score[i] >= 0第36行:    i第43行:    Average(score, n)第50行:    count

4、 问题:模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include ___

include <time.h>

include <stdio.h>

int main()
{
    int  face, roll, frequency[7] = {0};
    srand(time (NULL));
    
    for (roll=1; roll<=6000; roll++)
    { 
        face = ___;
        
____;
    }
    
    printf("%4s%17s", "Face", "Frequency");
    
    for (face=1; face<=6; face++)
    {
        printf("%4d%17d", face, frequency[face]);
    }
    
    return 0;
}
选项:
A:第1行:    <stdlib.h>第11行:    rand()%6 + 1第12行:    frequency[face]++
B:第1行:    <math.h>第11行:    rand()/6 + 1第12行:    frequency[face]++
C:第1行:    <stdlib.h>第11行:    rand()%6 + 1第12行:    frequency[roll]++
D:第1行:    <math.h>第11行:    rand()/6 + 1第12行:    frequency[roll]++
答案: 【第1行:    <stdlib.h>第11行:    rand()%6 + 1第12行:    frequency[face]++

5、 问题:以下程序中函数Fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
Fun(__,int m,int n)

    int  i,s=0;
    for( __;i<n;i++)  
        s=s+b[i];
    return 
_____;
}

int main()

    int  x,a[]={1,2,3,4,5,6,7,8,9};
    x=Fun(a,3,7);
    printf("%d",x);
    return 0;
}
选项:
A:第2行:    int b[]第5行:    i=m-1第7行:    s
B:第2行:    int b[]第5行:    i=1第7行:    i
C:第2行:    int b第5行:    i=0第7行:    s
D:第2行:    int b[]第5行:    i=n-1第7行:    b[i]
答案: 【第2行:    int b[]第5行:    i=m-1第7行:    s

6、 问题:下面代码的功能是将数组a中存放的5个整型数据逆序后在屏幕上输出,具体输出内容如下:5    4    3    2    1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
void Fun(int b[],int i,int j)

     int t;
     if(i<j)
     { 
          _
          
          b[i]=b[j];
          _
;
          
          Fun(b,i+1,j-1);
     }
}

int main( )

     int i,a[5]={1,2,3,4,5};
     ___;
     
     for(i=0;i<5;i++) printf("%d\t",a[i]); 
     printf("");
     return 0;
 }
选项:
A:第7行:    t=b[i]第10行:    b[j]=t第19行:    Fun(a,0,4)
B:第7行:    t=b[i]第10行:    b[i]=t第19行:    Fun(a,0,5)
C:第7行:    t=b[j]第10行:    b[j]=t第19行:    Fun(a,1,4)
D:第7行:    t=b[i]第10行:    b[i]=t第19行:    Fun(a,1,5)
答案: 【第7行:    t=b[i]第10行:    b[j]=t第19行:    Fun(a,0,4)

7、 问题:某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。)按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
    int i,j,k,s,n=0;
    int a[100]={0};
    
    for(i=0;_;i++)
        for(j=0;__;j++)
        {
            s=___;
            
            for(k=0;a[k]!=0;k++)
                if(s==a[k])
                   
_;
                   
            if(a[k]==0 && s>0)
            {
                _
;
                n++;
            }
        }
        
    printf(" %d kinds:",n);
    
    for(k=0;a[k];k++)
        printf("%2d,",a[k]);
        
    return 0;
}
选项:
A:第7行:    i<=5第8行:    j<=5第10行:    2i+3j第14行:    break第18行:    a[k]=s
B:第7行:    i<5第8行:    j<5第10行:    2i+3j第14行:    break第18行:    s=a[k]
C:第7行:    i<=5第8行:    j<=5第10行:    2i+3j第14行:    continue第18行:    a[k]=s
D:第7行:    i<5第8行:    j<5第10行:    2i+3j第14行:    continue第18行:    s=a[k]+1
答案: 【第7行:    i<=5第8行:    j<=5第10行:    2i+3j第14行:    break第18行:    a[k]=s

8、 问题:以下程序中函数Sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Sort(int a[],int n)

    int i,j,t;
    for(i=0;___;i++)
        for(__;j<n;j++)
            if(a[i]<a[j])
            {
                t=a[i];
                ____;
                a[j]=t;
            }
}

int main()
{
    int aa[10]={1,2,30,4,5,6,7,8,9,10},i;
    ____;
    
    for(i=0;i<10;i++)
        printf("%d,",aa[i]);
    printf("");
    return 0;
}
选项:
A:第5行:    i<n-1第6行:    j=i+1第10行:    a[i]=a[j]第18行:    Sort(aa,10)
B:第5行:    i<n-1第6行:    j=i第10行:    a[i]=a[j]第18行:    Sort(aa[],10)
C:第5行:    i<n第6行:    j=i+1第10行:    a[j]=a[i]第18行:    Sort(aa,10)
D:第5行:    i<=nj第6行:    =i第10行:    a[i]=a[j]第18行:    Sort(10,aa)
答案: 【第5行:    i<n-1第6行:    j=i+1第10行:    a[i]=a[j]第18行:    Sort(aa,10)

9、 问题:以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是#include <stdio.h>
int main()

    int n,k;
    float score ,sum,ave;
    sum=0.0;
    for(n=1;n<=10;n++)
    { 
        for(k=1;k<=4;k++)
        { 
            scanf("%f",&score); 
            sum+=score;
        }
        
        ave=sum/4.0;
        printf("NO%d:%f",n,ave);
        
    }
    
    return 0;
}
选项:
A:sum=0.0;
B:sum+=score;
C:ave=sun/4.0;   
D:printf("NO%d:%f",n,ave);
答案: 【sum=0.0;

10、 问题:下面代码的功能是在屏幕上输出以下内容013程序中空白处缺少的代码由下列选项给出,其中有一个不能满足题目要求,请将其找出。#include <stdio.h>
int main()
{  
     int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
     
     for(i=0;i<3;i++)
         for(j=i;j<=i;j++) 
           {
                t=t+______;
                printf("%d",t);
           }  
     
     return 0;
}
选项:
A:b[j][t]
B:b[i][b[j][j]]
C:b[t][j]
D:b[i][j]
答案: 【b[j][t]

11、 问题:以下程序的输出结果是void swap1(int c[])

    int t;
    t=c[0];
    c[0]=c[1];
    c[1]=t;
}

void swap2(int c0,int c1)

    int t;
    t=c0;
    c0=c1;
    c1=t;
}

int main( )

    int a[2]={3,5},b[2]={3,5};
    swap1(a); 
    swap2(b[0],b[1]);
    printf("%d %d %d %d",a[0],a[1],b[0],b[1]);
    return 0;
}
选项:
A:5 3 3 5
B:5 3 5 3
C:3 5 3 5
D:3 5 5 3
答案: 【5 3 3 5

12、 问题:以下程序中函数Reverse的功能是对数组a中的前一半元素逆序、后一半元素逆序,再将逆序后的前、后两部分数据位置交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。例如:主程序中数组b中的元素为{16,22,13,41,50,62,27,18,9,10},调用函数Reverse后,数组b中元素变为{10 9 18 27 62 50 41 13 22 16}#include <stdio.h>
void Reverse(int a[],int n)
{   
    int i,t;
    for(i=0;__;i++)
     { 
         t=a[i]; 
         ____; 
         a[n-i]=t;
      }
}

int main()
{   
    int b[10]={16,22,13,41,50,62,27,18,9,10}; 
    int i,s=0;
    ____;
    
    for(i=0;i<10;i++) 
    {
         printf("%4d",b[i]);
    }
    
    return 0;
}
选项:
A:第5行:    i<=n/2第8行:    a[i]=a[n-i]第17行:    Reverse(b,9)
B:第5行:    i<=n第8行:    a[n-i]=a[i]第17行:    Reverse(b,9)
C:第5行:    i<=n/2第8行:    a[n]=a[i]第17行:    Reverse(9,b)
D:第5行:    i<=n/2第8行:    a[i]=a[n]第17行:    Reverse(b,9)
答案: 【第5行:    i<=n/2第8行:    a[i]=a[n-i]第17行:    Reverse(b,9)

13、 问题:某矩阵m存储的数据如下:1 4 72 5 83 6 9现将该矩阵最后一行的所有数据输出到屏幕,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()

    int m[][3]={1,4,7,2,5,8,3,6,9};
    int i,j,k=_;
    
    for(i=0;
_;i++)
    { 
        printf("%d",
______); 
    }
    
    return 0;
}
选项:
A:第5行:    2第7行:    i<3第9行:    m[k][i]
B:第5行:    3第7行:    i<=3第9行:    m[k][i]
C:第5行:    2第7行:    i<2第9行:    m[i][k]
D:第5行:    3第7行:    i<3第9行:    m[i][k]
答案: 【第5行:    2第7行:    i<3第9行:    m[k][i]

14、 问题:下列说法正确的是
选项:
A:在C语言中,数组的下标都是从0开始的。
B:在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
C:简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
D:数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
E:在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
F:C语言中的二维数组在内存中是按列存储的。
G:可以按任意的顺序对二维数组元素进行赋值,并且也可以按任意的屏幕输出顺序来输出二维数组元素。
H:在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
I:定义数组的大小、访问数组元素时在下标中都可以使用变量或表达式。
答案: 【在C语言中,数组的下标都是从0开始的。;
在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。;
简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。;
数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。;
在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。

15、 问题:用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include<stdio.h>

define  N  20

void  CaculateYH(int a[][N], int  n);
void  PrintYH(int a[][N], int  n);
int main()
{
    int  a[N][N] = {0}, n;
    printf("Input  n(n<20):");
    scanf("%d", &n);     
    CaculateYH(a, n);
    PrintYH(a, n);
    return 0;
}

/ 函数功能:计算杨辉三角形前n行元素的值 /
void CaculateYH(_, int n)
{
    int  i, j;
    for (i=0; i<n; i++)
     {   
        a[i][0] = 1;
        
__; 
     }
    for (_; i<n; i++)
    {
        for (j=1; j<=i-1; j++)
        {
           a[i][j] = ___;
        }
   } 
}
/ 函数功能:输出杨辉三角形前n行元素的值 /
void PrintYH(int a[][N], int n)
{
    int  i, j;
    for (i=0; i<n; i++)
    {
        for (j=0; 
______; j++)
        {
            printf("%4d", a[i][j]);
        }
        printf("");
    }
}
选项:
A:第16行:    int a[][N]第22行:    a[i][i] = 1第24行:    i=2第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<=i
B:第16行:    int a[][]第22行:    a[i][i] = 1第24行:    i=1第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<=i
C:第16行:    int a[][N]第22行:    a[0][i] = 1第24行:    i=2第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<i
D:第16行:    int a[N][]第22行:    a[i][i] = 1第24行:    i=2第28行:    a[j-1][i-1] + a[j][i-1]第38行:    j<=i
答案: 【第16行:    int a[][N]第22行:    a[i][i] = 1第24行:    i=2第28行:    a[i-1][j-1] + a[i-1][j]第38行:    j<=i

16、 问题:假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>

define  M  40

define  N  11

int main()
{
    int  i, j, grade, feedback[M], count[N] = {0};
    printf("Input the feedbacks of 40 students:");
    
    for (i=0; i<M; i++)
    {
        scanf("%d", &feedback[i]);
    }
    
    for (i=0; i<M; i++)
    {
        _______;
    }

    printf("Feedback\tCount\tHistogram");

    for (___; grade<=N-1; grade++)
    { 
        printf("%8d\t%5d\t", grade, count[grade]);
        for (j=0; _____; j++)
        {
            printf("%c",’*’);
        }
        printf("");
    }
    return 0;
}
选项:
A:第16行:    count[feedback[i]]++第21行:    grade=1第24行:    j<count[grade]
B:第16行:    feedback[i]++第21行:    grade=1第24行:    j<N-1
C:第16行:    count[i]++第21行:    grade=0第24行:    j<N-1
D:第16行:    count[feedback[i]]++第21行:    grade=0第24行:    j<grade
答案: 【第16行:    count[feedback[i]]++第21行:    grade=1第24行:    j<count[grade]

第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; 
 
}
选项:
A:000122
B:022111
C:021021
D:012
答案: 【000122

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 );
答案: 【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;
}
选项:
A:852
B:741
C:963
D:875421 
答案: 【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;
}
选项:
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
答案: 【第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;
}
选项:
A:第5行:     x<=97第7行:     y = 98 – x第8行:     2x+4y == 386
B:第5行:     x<97第7行:     x = 98 – y第8行:     2x+4y == 386
C:第5行:     x<97第7行:     y = 98 – x第8行:     2x+4y == 386
D:第5行:     x<=97第7行:     x = 98 – y第8行:     2x+4y <= 386
答案: 【第5行:     x<=97第7行:     y = 98 – x第8行:     2x+4y == 386

6、 问题:以下正确的描述是
选项:
A:只能在循环体内和switch语句体内使用break语句
B: continue语句的作用是结束整个循环的执行
C:在循环体内使用break语句或continue语句的作用相同  
D:continue语句可以写在循环体之外
答案: 【只能在循环体内和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;
}
选项:
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
答案: 【第8行代码: celsius = 5.0 / 9 * (fahr – 32)第10行代码: fahr = fahr + step

8、 问题:利用泰勒级数:计算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", 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++
答案: 【第6行代码:      double e = 1.0第10行代码:     term = term / n第13行代码:     count++

9、 问题:打印所有的“水仙花数”。所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,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("");
    return 0;
}
选项:
A:第6行: n<1000第9行: (n – i * 100) / 10第10行:n % 10第11行:i100+j10+k == iii+jjj+kkk
B:第6行: n<1000第9行: (n – i * 100) / 10第10行:n % 10第11行:i100+j10+k = iii+jjj+kkk
C:第6行: n<=1000第9行: n % 100第10行:n % 10第11行:i100+j10+k == iii+jjj+kkk
D:第6行: n<1000第9行: (n – i * 100) / 10第10行:n /10第11行:i100+j10+k == iii+jjj+kkk
答案: 【第6行: n<1000第9行: (n – i * 100) / 10第10行:n % 10第11行:i100+j10+k == iii+jjj+kkk

本门课程剩余章节答案为付费内容
本文章不含期末不含主观题!!
本文章不含期末不含主观题!!
支付后可长期查看
有疑问请添加客服QQ 2356025045反馈
如遇卡顿看不了请换个浏览器即可打开
请看清楚了再购买哦,电子资源购买后不支持退款哦
   

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注