蓝莓题库

中国大学moocc语言程序设计精髓试题及答案-k8凯发

欢迎来访!

k8凯发-凯发官网入口财会问答 正文

作者2022-12-05 07:15:54财会问答 78 ℃0 评论
1 初识c语言从认识变量和常量开始

1.2 变量的表数范围和存储形式随堂测验

1、c语言用sizeof计算变量在内存中的字节数,其中sizeof是()
    a、函数
    b、运算符
    c、标识符
    d、语句

1.3 宏常量与const常量随堂测验

1、宏定义是()
    a、一条语句
    b、一种编译预处理指令
    c、一个标识符
    d、一个变量

2、const常量有数据类型。

第1周单元测验

1、下列选项中,合法的c语言标识符是
    a、_a1
    b、123abc
    c、a b
    d、b!

2、以下不适合定义为用户标识符的是
    a、int
    b、a2
    c、def2
    d、_3com_

3、#include
    a、编译预处理指令
    b、语句
    c、函数
    d、有语法错误

4、在windows下,程序编译链接后形成的可执行文件是
    a、.obj文件
    b、.exe文件
    c、.c文件
    d、.h文件

5、程序编译链接后显示" 0 error,0 warning" 代表
    a、程序中没有语法错误
    b、程序是正确的
    c、程序是不正确的
    d、程序中可能存在语法错误

6、关于可执行文件说法正确的是
    a、可执行文件是编译链接后生成的文件
    b、可执行文件就是源代码文件
    c、可执行文件后缀为.obj
    d、可执行文件就是main.c文件

7、c语言用sizeof计算变量在内存中的字节数,其中sizeof是()
    a、运算符
    b、函数
    c、语句
    d、变量

8、若有定义:int a=8,b=5,c; ,执行语句c=a/b 0.4;后,c的值为
    a、1
    b、1.4
    c、2.0
    d、2

9、在c语言中,字符型数据在内存中以字符的( )形式存放
    a、ascii码
    b、国标码
    c、bcd码
    d、反码

10、以下符合c语言语法的实型常量是
    a、5e-3
    b、3.14.159e
    c、1.2e0.5
    d、e15

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

练兵区——编程题——不计入总分

1、hello world!

2、计算半圆弧长及半圆的面积。

3、计算长方体体积

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

2.1 算术运算随堂测验

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

2.2 赋值运算随堂测验

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

2.4 自动类型转换随堂测验

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

2.5 强制类型转换随堂测验

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

第2周单元测验

1、下列程序的输出结果是 #include int main() { int a=7,b=5; printf("%d\n",b/a); return 0; }
    a、0
    b、5
    c、1
    d、0.7

2、以下程序的输出结果是: #include int main() { int a=1, b=2; a=a b; b=a-b; a=a-b; printf("%d,%d\n", a, b ); return 0; }
    a、2,1
    b、3,1
    c、3,2
    d、1,2

3、程序运行后的输出结果是#include int main() { int m=3,n=4,x; x=m ; n; x=x 8/n; printf("%d,%d\n",x,m); return 0; }
    a、4,4
    b、4,3
    c、5,4
    d、5,3

4、下面程序的运行结果是 #include int main() { int a = 2, b = 3 ; float x = 3.5, y = 2.5 ; printf("%f", (float)(a b) / 2 (int)x % (int)y) ; return 0; }
    a、3.500000
    b、3.000000
    c、3.5
    d、3

5、以下非法的赋值语句是
    a、 (i 1);
    b、x=(j--);
    c、n= i;
    d、j ;

6、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a b/b的值是
    a、6.000000
    b、6.500000
    c、9
    d、5.500000

7、以下程序的运行结果是 #include int main() { int a = 12, b = 3; float x = 18.5, y = 4.5; printf("%f\n", (float)(a * b) / 2); printf("%d\n", (int)x %(int)y); return 0; }
    a、18.000000 2
    b、18 2
    c、18 2.000000
    d、18.000000 2.000000

8、设有语句“int a = 3;”,执行语句“a = a -= a * a;”后,变量a的值是
    a、-12
    b、3
    c、0
    d、9

9、在c语言中,要求操作数必须是整型的运算符是
    a、%
    b、/
    c、*
    d、

10、在下面的c语言语句中,存在错误的是
    a、int a=b=10;
    b、int a=10,b=10;
    c、int a,b; a=b=10;
    d、int a,b; a=10; b=10;

11、若以下选项中的变量已正确定义,则正确的赋值语句是
    a、x3=x2=x1=0;
    b、x1=26.8%3;
    c、1 2=x2;
    d、x4=1 2=3;

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

13、在c程序中如果要使用数学函数,如sin(x),log(x)等,需要在程序中加入的语句是
    a、#include
    b、#include
    c、#include
    d、#include

14、已知int a,b;并且有a=5%3;以及b=5/3;,则a和b的值分别是( )。
    a、2和1
    b、0和1.67
    c、3和1
    d、5和1
    e、0和1
    f、3和1.67
    g、5和1.67

练兵区——单选题——不计入总分

1、设有语句“int a = 3;”,执行语句“a = a -= a * a;”后,变量a的值是
    a、-12
    b、3
    c、0
    d、9

2、在c程序中如果要使用数学函数,如sin(x),log(x)等,需要在程序中加入的语句是
    a、#include
    b、#include
    c、#define
    d、#define

3、设有以下定义,则下面给出的语句中错误的是 int a=0; float b=1.25; char c='a'; #define d 2
    a、d ;
    b、(a b) ;
    c、(a 1) ;
    d、a ;
    e、b ;
    f、c ;

4、以下程序的输出结果是: #include int main() { int a=1, b=2; a=a b; b=a-b; a=a-b; printf("%d,%d\n", a, b ); return 0; }
    a、2,1
    b、3,1
    c、3,2
    d、1,2

5、下面哪条语句可以生成0-9之间的随机数
    a、magic=rand();
    b、magic=rand() 1;
    c、magic=rand()/10;
    d、magic=rand()/10 1;

6、在下面的c语言语句中,存在错误的是
    a、int a=b=10;
    b、int a=10,b=10;
    c、int a,b; a=b=10;
    d、int a,b; a=10; b=10;

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

8、下列程序的输出结果是#include int main() { int a=7,b=5; printf("%d\n",b/a); return 0; }
    a、0
    b、5
    c、1
    d、0.7

9、程序运行后的输出结果是 #include int main() { int m=3,n=4,x; x=m ; n; x=x 8/n; printf("%d,%d\n",x,m); return 0; }
    a、4,4
    b、4,3
    c、5,4
    d、5,3

10、下面程序的运行结果是 #include int main() { int a = 2, b = 3 ; float x = 3.5, y = 2.5 ; printf("%f", (float)(a b) / 2 (int)x % (int)y) ; return 0; }
    a、3.500000
    b、3.000000
    c、3.5
    d、3

11、已知int a,b;并且有a=5%3;以及b=5/3;,则a和b的值分别是
    a、2和1
    b、0和1.67
    c、3和1
    d、5和1
    e、0和1
    f、3和1.67
    g、5和1.67

12、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a b/b的值是
    a、6.000000
    b、6.500000
    c、6
    d、5.500000

13、以下程序的运行结果是 #include int main() { int a = 12, b = 3; float x = 18.5, y = 4.5; printf("%f\n", (float)(a * b) / 2); printf("%d\n", (int)x %(int)y); return 0; }
    a、18.000000 2
    b、18 2
    c、18 2.000000
    d、18.000000 2.000000

14、在c语言中,要求操作数必须是整型的运算符是
    a、%
    b、/
    c、*
    d、
    e、-

15、若以下选项中的变量已正确定义,则正确的赋值语句是
    a、x3=x2=x1=0;
    b、x1=26.8%3;
    c、1 2=x2;
    d、x4=1 2=3;

练兵区——编程题——不计入总分

1、输出逆序数

2、计算总分和平均分

3 从键盘中来,到键盘中去,开始输入和输出啦

3.1 数据的格式化屏幕输出随堂测验

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

3.3 单个字符的输入输出随堂测验

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

第3周测验

1、分析下列程序,写出程序运行结果 #include int main() { char c1 = 'a', c2 = 'b', c3 = 'c'; printf("a���bc\n", c1, c2, c3); return 0; }
    a、aabbccabc
    b、acbcabc
    c、aabcabc
    d、acbbcabc

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

3、#include int main() { int a,b,c,d; scanf("%c%c%d,%d",&a,&b,&c,&d); printf("%c,%c,%c,%c\n",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

4、以下程序的输出结果为 #include int main() { float a = 1234.567,b = 55.32; printf("a = %4.2f, b = %5.1f\n", 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

5、有以下程序,运行时若输入为b,则输出是 #include int main() { char ch; ch=getchar(); ch=ch 32; printf("%c",ch); return 0; }
    a、b
    b、98
    c、32
    d、66

6、在调用printf函数输出数据时,当数据的实际位宽小于printf函数中的指定位宽时,下面叙述正确的是
    a、如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。
    b、如果格式字符前面没有负号,那么输出的数据将会左对齐、右补空格;如果格式字符前面有负号,那么输出的数据将会右对齐、左补空格。
    c、如果格式字符前面没有负号,那么输出的数据将会右对齐、左补0;如果格式字符前面有负号,那么输出的数据将会左对齐、右补0。
    d、如果格式字符前面没有负号,那么输出的数据将会左对齐、右补0;如果格式字符前面有负号,那么输出的数据将会右对齐、左补0。

7、在下列语句中存在错误的是
    a、int a,b; scanf("%d %f",&a,&b);
    b、int a,b; scanf("%d %d",a,b);
    c、float a,b; scanf("%f %f",&a,&b); printf("%f %f",a,b);
    d、float a,b; scanf("%f %f",&a,&b); printf("a=%4.3f,b=%4.3f",a,b);
    e、int a,b; scanf("%d,%d",&a,&b); printf("a=-,b=-",a,b);
    f、int a,b; scanf("a=%d,b=%d",&a,&b); printf("a=%d,b=%d",a,b);

8、有以下语句段#include int main() { int n1=10,n2=20; printf("_________",n1,n2); return 0; }要求按以下格式输出n1和n2的值,每个输出行都是从第一列开始,则空白处代码填写正确的是 运行结果示例如下: n1=10 n2=20
    a、n1=%d\nn2=%d
    b、n1=%dn2=%d\n
    c、n1=%d,n2=%d
    d、n1=%d n2=%d\n

9、以下选项中合法的字符常量是
    a、'\010'
    b、"b"
    c、68
    d、d

10、在c语言中,字符型数据在内存中以( )形式存放
    a、ascii码
    b、国标码
    c、bcd码
    d、反码

11、以下程序的输出结果是 #include int main() { int a=1234; printf("-\n",a); return 0; }
    a、1234
    b、12
    c、34
    d、提示出错、无结果

练兵区——单选题——不计入总分

1、以下程序的输出结果为 #include int main() { float a = 1234.567,b = 55.32; printf("a = %4.2f, b = %5.1f\n", 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

2、以下选项中合法的字符常量是
    a、'\010'
    b、"b"
    c、68
    d、d

3、有如下语句,为使变量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

4、在调用printf函数输出数据时,当数据的实际位宽小于printf函数中的指定位宽时,下面叙述正确的是
    a、如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。
    b、如果格式字符前面没有负号,那么输出的数据将会左对齐、右补空格;如果格式字符前面有负号,那么输出的数据将会右对齐、左补空格。
    c、如果格式字符前面没有负号,那么输出的数据将会右对齐、左补0;如果格式字符前面有负号,那么输出的数据将会左对齐、右补0。
    d、如果格式字符前面没有负号,那么输出的数据将会左对齐、右补0;如果格式字符前面有负号,那么输出的数据将会右对齐、左补0。

5、在c语言中,字符型数据在内存中以( )形式存放
    a、ascii码
    b、国标码
    c、bcd码
    d、反码

6、以下程序的输出结果是 #include int main() { int a=1234; printf("-\n",a); return 0; }
    a、1234
    b、12
    c、34
    d、提示出错、无结果

7、有以下语句段 #include int main() { int n1=10,n2=20; printf("_________",n1,n2); return 0; } 要求按以下格式输出n1和n2的值,每个输出行都是从第一列开始,则空白处代码填写正确的是 运行结果示例如下: n1=10 n2=20
    a、n1=%d\nn2=%d
    b、n1=%dn2=%d\n
    c、n1=%d,n2=%d
    d、n1=%d n2=%d\n

8、分析下列程序,写出程序运行结果 #include int main() { char c1 = 'a', c2 = 'b', c3 = 'c'; printf("a���bc\n", c1, c2, c3); return 0; }
    a、aabbccabc
    b、acbcabc
    c、aabcabc
    d、acbbcabc

9、有以下程序,运行时若输入为b,则输出是 #include int main() { char ch; ch=getchar(); ch=ch 32; printf("%c",ch); return 0; }
    a、b
    b、98
    c、32
    d、66

10、在下列语句中存在错误的是
    a、int a,b; scanf("%d %f",&a,&b);
    b、int a,b; scanf("%d %d",a,b);
    c、float a,b; scanf("%f %f",&a,&b); printf("%f %f",a,b);
    d、float a,b; scanf("%f %f",&a,&b); printf("a=%4.3f,b=%4.3f",a,b);
    e、int a,b; scanf("%d,%d",&a,&b); printf("a=-,b=-",a,b);
    f、int a,b; scanf("a=%d,b=%d",&a,&b); printf("a=%d,b=%d",a,b);

第3周编程题在线测试

1、学分绩计算

2、一尺之捶,日取其半

3、网购打折商品v1.0

4、计算时间差v1.0

练兵区——编程题——不计入总分

1、产品信息格式化

2、计算两个数的平方和

3、逆序数的拆分计算

4、拆分英文名

5、计算体指数

4 无处不在的抉择

4.1 关系运算符和逻辑运算符随堂测验

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

第4周测验

1、程序代码如下: #include int main() { int a,b; printf("please input a and b:\n"); scanf("%d%d",&a,&b); printf("the output data is %d\n",a 7<回车> 则程序输出为
    a、the output data is 7
    b、the output data is 2
    c、the output data is 1
    d、the output data is 0

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

3、以下程序运行后的输出结果是 #include int main() { int a=5,b=4,c=3,d; d=(a>b>c); printf("%d\n",d); return 0; }
    a、0
    b、1
    c、5
    d、4
    e、3

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

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

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

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

8、以下程序运行后的输出结果是 #include int main() { int a=1,b=2,m=0,n=0,k; k=(n=b>a)||(m=a    a、1,0
    b、0,0
    c、0,1
    d、1,1

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

练兵区——单选题——不计入总分

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

2、执行以下程序后的输出结果为#include int main() { int a=1,b=0; switch (a) { case 1: switch (b) { case 0: printf("**0**");break; case 1: printf("**1**");break; } case 2: printf("**2**");break; } return 0; }
    a、**0****2**
    b、**0**
    c、**0****1****2**
    d、有语法错误

3、以下程序运行后的输出结果是#include int main() { int a=1,b=2,m=0,n=0,k; k=(n=b>a)||(m=a    a、1,0
    b、0,0
    c、0,1
    d、1,1

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

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

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

7、写出下面程序的输出结果#include int main() { int x=1, y=0, a=0, b=0; switch(x) { case 1: switch(y) { case 0: a ; case 1: b ; } case 2: a ; b ; } printf("a=%d, b=%d\n", a, b) ; return 0; }
    a、a=2, b=2
    b、a=2, b=1
    c、a=1, b=1
    d、a=1, b=0

8、执行下列程序,k输入为1时的输出结果是#include int main() { int k; scanf("%d",&k); switch(k) { case 1: printf("%d",k ); case 2: printf("%d",k ); case 3: printf("%d",k ); break; default: printf("full!"); } return 0; }
    a、123
    b、1
    c、2
    d、3

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

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

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

12、若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是
    a、(x-y)<-10||!(y-x)>10
    b、fabs(x-y)<10
    c、x-y>-10 && x-y<10
    d、(x-y)*(x-y)<100

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

14、程序代码如下:#include int main() { int a,b; printf("please input a and b:\n"); scanf("%d%d",&a,&b); printf("the output data is %d\n",a 7<回车> 则程序输出为
    a、the output data is 7
    b、the output data is 2
    c、the output data is 1
    d、the output data is 0

15、以下程序运行后的输出结果是#include int main() { int a=5,b=4,c=3,d; d=(a>b>c); printf("%d\n",d); return 0; }
    a、0
    b、1
    c、5
    d、4
    e、3

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

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

第4周编程题在线测试

1、分数比较

2、存款利率计算器v2.0

3、博弈论之best response

练兵区——编程题——不计入总分

1、检测用户错误输入

2、闰年判断

3、程序改错v1.0

4、字符类型判断

5、快递费用计算

6、数位拆分v2.0

7、出租车计价

8、数据区间判断

9、计算一元二次方程的根v2.0

5 周而复始的循环之道

5.1 计数控制的循环随堂测验

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

5 测验

1、程序运行后的输出结果是 #include int main() { int i; for(i=0;i<3;i ) switch(i) { case 0: printf("%d",i); case 2: printf("%d",i); default: printf("%d",i); } return 0; }
    a、000122
    b、022111
    c、021021
    d、012

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

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

4、下面程序的输出是 #include int main() { int y=9; for( ; y>0; y--) { if(y%3==0) { printf("%d", --y); continue; } } return 0; }
    a、852
    b、741
    c、963
    d、875421

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

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

7、以下能正确计算1×2×3×4...×10的程序段是
    a、i=1; s=1; do { s=s*i; i ; } while(i<=10);
    b、do { i=1; s=1; s=s*i; i ; } while(i<=10);
    c、do { i=1; s=0; s=s*i; i ; } while(i<=10);
    d、i=1; s=0; do { s=s*i; i ; } while(i<=10);

8、以下程序执行后的输出结果是 #include int main( ) { int i,n=0; for(i=2;i<5;i ) { do { if(i%3) continue; n ; }while(!i); n ; } printf("n=%d\n",n); return 0; }
    a、n=4
    b、n=5
    c、n=2
    d、n=3

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

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

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

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

13、以下程序运行后的输出结果是 #include int main() { int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i ; s =i; } printf("%d\n",s); return 0; }
    a、程序进入死循环
    b、10
    c、13
    d、21

14、下面程序的功能是输出以下形式的图案,则在下划线处应填入的是 * *** ***** 试题及答案* #include int main( ) { int i,j; for(i=1;i<=4;i ) { for(j=1;j<=__________;j ) { printf("*"); } printf("\n"); } return 0; }
    a、2*i-1
    b、2*i 1
    c、i 2
    d、i

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

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

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

18、以下程序的功能是计算:s= 1 1/2 1/3 …… 1/10,程序运行后输出结果错误,导致错误结果的程序行是 #include int main() { int n; float s; s=1.0; for(n=10;n>1;n--) { s=s 1/n; } printf("%6.4f\n",s); return 0; }
    a、s=s 1/n;
    b、printf("%6.4f\n",s);
    c、for(n=10;n>1;n--)
    d、s=1.0;

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

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

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

练兵区——单选题——不计入总分

1、程序运行后的输出结果是#include int main() { int i; for(i=0;i<3;i ) switch(i) { case 0: printf("%d",i); case 2: printf("%d",i); default: printf("%d",i); } return 0; }
    a、000122
    b、022111
    c、021021
    d、012

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

3、下面程序的输出是#include 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

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

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

6、以下正确的描述是
    a、只能在循环体内和switch语句体内使用break语句
    b、continue语句的作用是结束整个循环的执行
    c、在循环体内使用break语句或continue语句的作用相同
    d、continue语句可以写在循环体之外

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

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

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

10、以下程序执行后的输出结果是#include int main( ) { int i,n=0; for(i=2;i<5;i ) { do { if(i%3) continue; n ; }while(!i); n ; } printf("n=%d\n",n); return 0; }
    a、n=4
    b、n=5
    c、n=2
    d、n=3

11、以下程序运行后的输出结果是#include int main() { int i=0,s=0; for (;;) { if(i==3||i==5) continue; if (i==6) break; i ; s =i; } printf("%d\n",s); return 0; }
    a、程序进入死循环
    b、10
    c、13
    d、21

12、程序执行后的输出结果是 #include int main( ) { int i,s=0; for(i=1;i<10;i =2) { s =i 1; } printf("%d\n",s); return 0; }
    a、自然数1~10中的偶数之和
    b、自然数1~9的累加和
    c、自然数1~10的累加和
    d、自然数1~9中的奇数之和

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

14、以下程序执行后的输出结果是#include int main( ) { int x=0,y=5,z=3; while(z-->0 && x<5) { y=y-1; } printf("%d,%d,%d\n",x,y,z); return 0; }
    a、3,2,-1
    b、3,2,0
    c、4,3,-1
    d、5,-2,-5

15、以下能正确计算1×2×3×4...×10的程序段是
    a、i=1; s=1; do { s=s*i; i ; } while(i<=10);
    b、do { i=1; s=1; s=s*i; i ; } while(i<=10);
    c、do { i=1; s=0; s=s*i; i ; } while(i<=10);
    d、i=1; s=0; do { s=s*i; i ; } while(i<=10);

16、下面程序的功能是输出以下形式的图案,则在下划线处应填入的是 * *** ***** 试题及答案*#include int main( ) { int i,j; for(i=1;i<=4;i ) { for(j=1;j<=__________;j ) { printf("*"); } printf("\n"); } return 0; }
    a、2*i-1
    b、2*i 1
    c、i 2
    d、i

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

18、以下不是死循环的程序段是
    a、int s=36; while (s) { --s; }
    b、int i=100; while(1) { i=i0 1; if (i>100) break; }
    c、for( ; ;);
    d、unsigned int k=0; do{ k; } while (k>=0);

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

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

21、有以下程序,若从键盘给n输入的值是-3,则程序的输出结果是#include int main() { int s=0,a=1,n; scanf("%d",&n); do { s =1; a=a-2; } while(a!=n); printf("%d\n",s); return 0; }
    a、2
    b、-1
    c、3
    d、0

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

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

24、以下程序的功能是计算:s= 1 1/2 1/3 …… 1/10,程序运行后输出结果错误,导致错误结果的程序行是#include int main() { int n; float s; s=1.0; for(n=10;n>1;n--) { s=s 1/n; } printf("%6.4f\n",s); return 0; }
    a、s=s 1/n;
    b、printf("%6.4f\n",s);
    c、for(n=10;n>1;n--)
    d、s=1.0;

第5周编程题在线测试

1、马克思手稿中的趣味数学题

2、闰年相关的问题v3.0——计算有多少闰年

练兵区——编程题——不计入总分

1、判断一个整型数据有几位v2.0

2、奖金计算

3、程序修改—1

4、程序修改—2

5、程序改错-1

6、程序改错-2

7、程序改错-3

8、猴子吃桃程序_扩展1

9、猴子吃桃程序_扩展2

10、6位密码输入检测

11、判断一个整型数据有几位v1.0

12、检测输入数据中奇数和偶数的个数

13、计算球的反弹高度

6 一堆数据来了,你准备好了吗

6.1 数组的定义和初始化随堂测验

1、下列说法错误的是()。
    a、c语言中的二维数组在内存中是按列存储的。
    b、在c语言中,数组的下标都是从0开始的。
    c、在c语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
    d、c89规定不能使用变量定义数组的大小,但是在访问数组元素时在下标中可以使用变量或表达式。

6.2 向函数传递一堆相同类型的数据随堂测验

1、下列说法错误的是()。
    a、简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
    b、数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
    c、在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
    d、在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。

第6周测验

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

2、输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #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\n", sum); return 0; } /* 函数功能: 输入n×n矩阵的元素值,存于数组a中 */ void inputmatrix(___________, int n) { int i, j; printf("input %d*%d matrix:\n", n, n); for (i=0; i    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

3、输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束,用函数编程统计成绩高于平均分的学生人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #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", n); m = getaboveaver(score, n); /* 统计成绩在平均分及其上的学生人数 */ if (______________) printf("students of above average is %d\n", m); return 0; } /* 函数功能:若n>0,则计算并返回n个学生成绩的平均分,否则返回-1 */ int average(int score[], int n) { int i, sum = 0; for (i=0; i0,则统计并返回成绩在平均分及平均分之上的学生人数,否则返回-1 */ int getaboveaver(int score[], int n) { int i, count = 0, aver; aver = ______________; /* 计算并打印平均分 */ if (aver == -1) return -1; printf("average score is %d\n", aver); for (i=0; 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

4、模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include _________ #include #include int main() { int face, roll, frequency[7] = ; srand(time (null)); for (roll=1; roll<=6000; roll ) { face = _____________; __________________; } printf("%4ss\n", "face", "frequency"); for (face=1; face<=6; face ) { printf("md\n", face, frequency[face]); } return 0; }
    a、第1行: 第11行: rand()%6 1 第12行: frequency[face]
    b、第1行: 第11行: rand()/6 1 第12行: frequency[face]
    c、第1行: 第11行: rand()%6 1 第12行: frequency[roll]
    d、第1行: 第11行: rand()/6 1 第12行: frequency[roll]

5、以下程序中函数fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include fun(________,int m,int n) { int i,s=0; for( ______;i    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]

6、下面代码的功能是将数组a中存放的5个整型数据逆序后在屏幕上输出,具体输出内容如下: 5 4 3 2 1 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void fun(int b[],int i,int j) { int t; if(i    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、某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。)按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int i,j,k,s,n=0; int a[100]=; 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("\n %d kinds:",n); for(k=0;a[k];k ) printf("-,",a[k]); return 0; }
    a、第7行: i<=5 第8行: j<=5 第10行: 2*i 3*j 第14行: break 第18行: a[k]=s
    b、第7行: i<5 第8行: j<5 第10行: 2*i 3*j 第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行: 2*i 3*j 第14行: continue 第18行: s=a[k] 1

8、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void sort(int a[],int n) { int i,j,t; for(i=0;_________;i ) for(________;j    a、第5行: i    b、第5行: i    c、第5行: i    d、第5行: i<=n j第6行: =i 第10行: a[i]=a[j] 第18行: sort(10,aa)

9、以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是 #include 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",n,ave); } return 0; }
    a、sum=0.0;
    b、sum =score;
    c、ave=sun/4.0;
    d、printf("no%d:%f\n",n,ave);

10、下面代码的功能是在屏幕上输出以下内容 0 1 3 程序中空白处缺少的代码由下列选项给出,其中有一个不能满足题目要求,请将其找出。 #include 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\n",t); } return 0; }
    a、b[j][t]
    b、b[i][b[j][j]]
    c、b[t][j]
    d、b[i][j]

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\n",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

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 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("m",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)

13、某矩阵m存储的数据如下: 1 4 7 2 5 8 3 6 9 现将该矩阵最后一行的所有数据输出到屏幕,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include 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]

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

15、用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define n 20 void caculateyh(int a[][n], int n); void printyh(int a[][n], int n); int main() { int a[n][n] = , 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    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    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、假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define m 40 #define n 11 int main() { int i, j, grade, feedback[m], count[n] = ; printf("input the feedbacks of 40 students:\n"); for (i=0; i    a、第16行: count[feedback[i]] 第21行: grade=1 第24行: j    b、第16行: feedback[i] 第21行: grade=1 第24行: j    c、第16行: count[i] 第21行: grade=0 第24行: j    d、第16行: count[feedback[i]] 第21行: grade=0 第24行: j
练兵区——单选题——不计入总分

1、假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define m 40 #define n 11 int main() { int i, j, grade, feedback[m], count[n] = ; printf("input the feedbacks of 40 students:\n"); for (i=0; i    a、第16行: count[feedback[i]] 第21行: grade=1 第24行: j    b、第16行: feedback[i] 第21行: grade=1 第24行: j    c、第16行: count[i] 第21行: grade=0 第24行: j    d、第16行: count[feedback[i]] 第21行: grade=0 第24行: j
2、输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include #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    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

3、模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include _________ #include #include int main() { int face, roll, frequency[7] = ; srand(time (null)); for (roll=1; roll<=6000; roll ) { face = _____________; __________________; } printf("%4ss\n", "face", "frequency"); for (face=1; face<=6; face ) { printf("md\n", face, frequency[face]); } return 0; }
    a、第1行: 第11行: rand()%6 1 第12行: frequency[face]
    b、第1行: 第11行: rand()/6 1 第12行: frequency[face]
    c、第1行: 第11行: rand()%6 1 第12行: frequency[roll]
    d、第1行: 第11行: rand()/6 1 第12行: frequency[roll]

4、以下程序中函数fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include 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\n",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]

5、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void sort(int a[],int n) { int i,j,t; for(i=0;_________;i ) for(________;j    a、第5行: i    b、第5行: i    c、第5行: i    d、第5行: i<=n j第6行: =i 第10行: a[i]=a[j] 第18行: sort(10,aa)

6、以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是#include 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",n,ave); } return 0;
    a、sum=0.0;
    b、sum =score;
    c、ave=sun/4.0;
    d、printf("no%d:%f\n",n,ave);

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 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("m",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)

8、输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include #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\n", sum); return 0; } /* 函数功能: 输入n×n矩阵的元素值,存于数组a中 */ void inputmatrix(___________, int n) { int i, j; printf("input %d*%d matrix:\n", n, n); for (i=0; i    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

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

10、某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。)按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int i,j,k,s,n=0; int a[100]=; 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("\n %d kinds:",n); for(k=0;a[k];k ) printf("-,",a[k]); return 0;
    a、第7行: i<=5 第8行: j<=5 第10行: 2*i 3*j 第14行: break 第18行: a[k]=s
    b、第7行: i<5 第8行: j<5 第10行: 2*i 3*j 第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行: 2*i 3*j 第14行: continue 第18行: s=a[k] 1

11、某矩阵m存储的数据如下: 1 4 7 2 5 8 3 6 9 现将该矩阵最后一行的所有数据输出到屏幕,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include 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]

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

13、用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define n 20 void caculateyh(int a[][n], int n); void printyh(int a[][n], int n); int main() { int a[n][n] = , 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    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    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

14、输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束,用函数编程统计成绩高于平均分的学生人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include #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", n); m = getaboveaver(score, n); /* 统计成绩在平均分及其上的学生人数 */ if (______________) printf("students of above average is %d\n", m); return 0; } /* 函数功能:若n>0,则计算并返回n个学生成绩的平均分,否则返回-1 */ int average(int score[], int n) { int i, sum = 0; for (i=0; i0,则统计并返回成绩在平均分及平均分之上的学生人数,否则返回-1 */ int getaboveaver(int score[], int n) { int i, count = 0, aver; aver = ______________; /* 计算并打印平均分 */ if (aver == -1) return -1; printf("average score is %d\n", aver); for (i=0; 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

15、下面代码的功能是在屏幕上输出以下内容 0 1 3 程序中空白处缺少的代码由下列选项给出,其中有一个不能满足题目要求,请将其找出。#include 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\n",t); } return 0; }
    a、b[j][t]
    b、b[i][b[j][j]]
    c、b[t][j]
    d、b[i][j]

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\n",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

第6周编程题在线测试

1、求500以内的10个最大素数及其和,分别输出这最大的10个素数及其和。

练兵区——编程题——不计入总分

1、三天打渔两天晒网

2、统计用户输入

3、统计正整数中指定数字的个数

4、玫瑰花数

5、四位反序数

6、8除不尽的自然数

7、矩阵转置v1.0

8、兔子生崽问题

9、抓交通肇事犯

10、检验并打印幻方矩阵

7 函数:分工与合作的艺术

7.1 函数定义、调用、参数传递和函数原型随堂测验

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

7.1 函数定义、调用、参数传递和函数原型随堂测验

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

第6周测验

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

2、以下程序有语法错误,有关错误原因的正确说法是 #include 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 int sub(int k,int n) { int a1,a2; a2=k/10; a1=k-a2*10; if(________________) { printf("m",k); n ; return n; } else return -1; } int main() { int n=0,k,m; for(k=10;k<100;k ) { m=__________; if(________) n=m; } printf("\nn=%d\n",n); return 0; }
    a、第7行: (k%3==0&&a2==5)||(k%3==0&&a1==5) 第22行: sub(k,n) 第24行: m!=-1
    b、第7行:(k%3==0 &&a2==5) && (k%3==0 &&a1==5) 第22行:sub(n,k) 第24行:m==-1
    c、第7行:(k%3=0 && a2=5)||(k%3=0 && a1=5) 第22行:sub(k,n) 第24行:m=-1
    d、第7行:(k%3=0 && a2=5) && (k%3=0 && a1=5) 第22行:sub(n,k) 第24行:m!=-1

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

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

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

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

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

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

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

11、编程计算下面组合数的值 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include _________________________; int main() { int m, k; _________; do{ printf("please input m,k (m>=k>0):"); scanf("%d, %d", &m, &k); } while (______________); p = (double)factorial(m) / (factorial(k) * factorial (m-k)); printf("p=%.0f\n", p); return 0; } //函数功能:计算无符号整型数number的阶乘 unsigned long factorial(unsigned int number) { unsigned long i, result = 1; for (________________) { result *= i; } return result; }
    a、第2行: unsigned long factorial(unsigned int number) 第6行: double p 第11行: m    b、第2行: long factorial(unsigned int number) 第6行: double p 第11行: m    c、第2行: unsigned long factorial(int number) 第6行: int p 第11行: m    d、第2行: unsigned factorial(unsigned number) 第6行: int p 第11行: m
12、完全数,又称完美数或完数(perfect number),它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如,6就是一个完全数,是因为6 = 1 2 3。请编写一个判断完全数的函数isperfect(),然后判断从键盘输入的整数是否是完全数。注意:1没有真因子,所以不是完全数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int isperfect(int x); int main() { int m; printf("input m:"); scanf("%d", &m); if (_________________) /* 完全数判定 */ printf("%d is a perfect number\n", m); else printf("%d is not a perfect number\n", m); return 0; } /* 函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数 */ int isperfect(int x) { int i; int total = 0; /* 1没有真因子,不是完全数 */ for (__________________) { if (___________) total = total i; } return total==x ? 1 : 0; }
    a、第10行: isperfect(m) 第24行: i=1; i    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
13、以下程序执行后输出结果是 #include int maxvalue(int x, int y) { return x>y? x:y; } int minvalue(int x,int y) { return x>y? y:x; } int main() { int a=4,b=3,c=5,d,e,f; d=maxvalue(a,b); d=maxvalue(d,c); e=minvalue(a,b); e=minvalue(e,c); f=a b c-d-e; printf("%d,%d,%d\n",d,f,e); return 0; }
    a、5,4,3
    b、3,4,5
    c、5,3,4
    d、3,5,4

练兵区——单选题——不计入总分

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

2、c语言规定:在一个源程序中,main函数的位置
    a、可以任意
    b、必须在程序的最开始
    c、必须在系统调用的库函数的后面
    d、必须在程序的最后

3、以下程序执行后输出结果是#include int maxvalue(int x, int y) { return x>y? x:y; } int minvalue(int x,int y) { return x>y? y:x; } int main() { int a=4,b=3,c=5,d,e,f; d=maxvalue(a,b); d=maxvalue(d,c); e=minvalue(a,b); e=minvalue(e,c); f=a b c-d-e; printf("%d,%d,%d\n",d,f,e); return 0; }
    a、5,4,3
    b、3,4,5
    c、5,3,4
    d、3,5,4

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

5、完全数,又称完美数或完数(perfect number),它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如,6就是一个完全数,是因为6 = 1 2 3。请编写一个判断完全数的函数isperfect(),然后判断从键盘输入的整数是否是完全数。注意:1没有真因子,所以不是完全数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include #include int isperfect(int x); int main() { int m; printf("input m:"); scanf("%d", &m); if (_________________) /* 完全数判定 */ printf("%d is a perfect number\n", m); else printf("%d is not a perfect number\n", m); return 0; } /* 函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数 */ int isperfect(int x) { int i; int total = 0; /* 1没有真因子,不是完全数 */ for (__________________) { if (___________) total = total i; } return total==x ? 1 : 0; }
    a、第10行: isperfect(m) 第24行: i=1; i    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
6、下列说法中正确的是
    a、函数原型是一条语句,不包括函数体。
    b、无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。
    c、在c语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。
    d、函数只有一个返回值,所以不能有多个return语句。

7、以下程序有语法错误,有关错误原因的正确说法是 #include 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 int sub(int k,int n) { int a1,a2; a2=k/10; a1=k-a2*10; if(________________) { printf("m",k); n ; return n; } else return -1; } int main() { int n=0,k,m; for(k=10;k<100;k ) { m=__________; if(________) n=m; } printf("\nn=%d\n",n); return 0; }
    a、第7行: (k%3==0&&a2==5)||(k%3==0&&a1==5) 第22行: sub(k,n) 第24行: m!=-1
    b、第7行:(k%3==0 &&a2==5) && (k%3==0 &&a1==5) 第22行:sub(n,k) 第24行:m==-1
    c、第7行:(k%3=0 && a2=5)||(k%3=0 && a1=5) 第22行:sub(k,n) 第24行:m=-1
    d、第7行:(k%3=0 && a2=5) && (k%3=0 && a1=5) 第22行:sub(n,k) 第24行:m!=-1

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

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\n",x,y,z); return 0; }
    a、1,3,2
    b、1,2,3
    c、3,1,2
    d、2,3,1

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

12、设计一个函数mincommonmultiple(),计算两个正整数的最小公倍数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include int mincommonmultiple(int a, int b); int main() { int a, b, x; printf("input a,b:"); scanf("%d,%d", &a, &b); x = _________________; if (__________) printf("mincommonmultiple = %d\n", x); else printf("input error!\n"); return 0; } //函数功能:计算两个正整数的最小公倍数,-1表示没有最小公倍数 int mincommonmultiple(int a, int b) { int i; if (_________________) return -1; // 保证输入的参数为正整数 for (i=1; i    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

练兵区——编程题——不计入总分

1、绘制金字塔

2、循环嵌套的应用

3、利用泰勒级数计算sinx的值

4、计算100~200之间的所有素数之和

5、编程实现一个输入指定范围内的整数的函数

6、程序改错v2.0

7、编程计算a aa aaa … aa…a(n个a)的值

8、搬砖问题

9、编程输出某年某月有多少天(考虑到闰年)

8 《盗梦空间》的逻辑:探寻递归的奥秘

第7周测验

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

2、以下程序运行后的输出结果是 #include float fun(int x,int y) { return(x y); } int main() { int a=2,b=5,c=8; printf("%3.0f\n",fun((int)fun(a c,b),a-c)); return 0; }
    a、9
    b、21
    c、9.0
    d、编译出错

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

4、写出下面程序的运行结果 #include void bin(int x) { if (x/2 > 0) bin(x/2); printf("%d\n", x%2); } int main() { bin(12); return 0; }
    a、1 1 0 0
    b、0 0 1 1
    c、6 3 1 0
    d、6 3 1 1

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

6、以下程序的输出结果是 #include int func(); int i=10; int main() { int j=1; j=func(); printf("%d,",j); j=func(); printf("%d",j); return 0; } int func() { int k=0; k=k i; i=i 10; return(k); }
    a、10,20
    b、0,0
    c、10,10
    d、20,20

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

8、请给出程序的运行结果。 #include int fun(int m) { static int n = 0; m /= 2; m = m * 2; if (m) { n *= m; return(fun(m - 2)); } else return n; } int main() { int a, i; for (i = 0; i < 2; i ) { a = fun(4 i); printf("%d\n", a); } return 0; }
    a、0 0
    b、8 8
    c、4 4
    d、64 64

9、写出下面程序的运行结果。 #include int square(int i) { return i * i; } int main(void) { int i = 0; i = square(i); for ( ; i<3; i ) { static int i = 1; i = square(i); printf("%d,", i); } printf("%d\n", i); return 0; }
    a、2,6,42,3
    b、2,2,2,3
    c、2,2,3,3
    d、2,3,4,3

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

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

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

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

14、程序运行后的输出结果是 #include int fun(int n) { if (n==1) return 1; else return fun(n-1) 1; } int main() { int i,j=0; for(i=1;i<3;i ) j =fun(i); printf("%d\n",j); return 0; }
    a、3
    b、4
    c、2
    d、1

15、子函数fun(char x , char y)的功能是对任意两个字符x和y,如果x为真,则函数返回y的值,否则返回x的值。若使以下程序运行后的输出结果是7,请补充完整空白处缺少的代码。 #include 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)

9-1 指针:c语言世界中所向披靡的“金箍棒”

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

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

9-1测验

1、下面程序的功能是输入某年某月某日,计算并输出它是这一年的第几天。 程序的运行结果如下: please enter year, month, day:2014,12,29↙ yearday = 363 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int dayofyear(int year, int month, int day); int daytab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; int main() { int year, month, day, yearday; printf("please enter year, month, day:"); scanf("%d,%d,%d", &year, &month, &day); yearday = dayofyear(year, month, day); printf("yearday = %d\n", yearday); return 0; } /* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */ int dayofyear(int year, int month, int day) { int i, leap; leap = ________________________; /* 若year为闰年,即leap值为1,则用第1行元素daytab[1][i]计算; 否则leap值为0,用第0行daytab[0][i]计算 */ for (i=1; _______; i ) { day = ________________; } return day; /* 返回计算出的day的值 */ }
    a、第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) 第20: i    b、第18行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0) 第20: i    c、第18行: ((year % 4 == 0) && (year % 100 != 0)) && (year % 400 == 0) 第20: i<12 第22行: day daytab[leap][i]
    d、第18行: ((year % 4 != 0) && (year % 100 != 0)) || (year % 400 != 0) 第20: i<=month 第22行: day daytab[i][leap]

2、下面程序的功能是从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。程序运行结果如下: input n(n<=10):10↙ input 10 numbers:1 4 3 0 –2 6 7 2 9 -1 ↙ exchange results: 1 4 3 0 9 6 7 2 -2 -1 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void readdata(int a[], int n); void printdata(int a[], int n); void maxminexchang(int a[], int n); void swap(int *x, int *y); int main() { int a[10], n; printf("input n(n<=10):"); scanf("%d", &n); printf("input %d numbers:", n); readdata(a, n); maxminexchang(a, n); printf("exchange results:"); printdata(a, n); return 0; } /* 函数功能:输入数组a的n个元素值 */ void readdata(int a[], int n) { int i; for (i=0; i maxvalue) { maxvalue = _______; maxpos = ____; } if (a[i] < minvalue) { minvalue = a[i]; minpos = i; } } swap(________________); } /* 函数功能:两整数值互换 */ void swap(int *x, int *y) { int ________; temp = *x; _________; *y = temp; }
    a、第41行: int a[] 第49行: a[i] 第50行: i 第58行: &a[maxpos], &a[minpos] 第64行: temp 第66行: *x = *y
    b、第41行: int a 第49行: a[i] 第50行: i 第58行: a[maxpos], a[minpos] 第64行: temp 第66行: *x = *y
    c、第41行: int a[] 第49行: a[0] 第50行: 0 第58行: &a[maxpos], &a[minpos] 第64行: *temp 第66行: x = y
    d、第41行: int a[] 第49行: a[n-1] 第50行: n-1 第58行: *a[maxpos], *a[minpos] 第64行: &temp 第66行: x = y

3、下面程序中子函数monthday()的功能是将某年的第几天转换为某月某日。程序的运行结果如下: please enter year, yearday:2014,100↙ month = 4, day = 10 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void monthday(int year, int yearday, int *pmonth, int *pday); int daytab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; int main() { int year, month, day, yearday; printf("please enter year, yearday:"); scanf("%d,%d", &year, &yearday); _________________; printf("month = %d, day = %d\n", month, day); return 0; } /* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */ void monthday(int year, int yearday, int *pmonth, int *pday) { int i, leap; leap = _________________________; for (i=1; yearday>daytab[leap][i]; i ) { yearday = ______________________; } ______________; /* 将计算出的月份值赋值给pmonth所指向的变量 */ *pday = yearday; /* 将计算出的日号赋值给pday所指向的变量 */ }
    a、第10行: monthday(year, yearday, &month, &day) 第19行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) 第23行: yearday - daytab[leap][i] 第25行: *pmonth = i
    b、第10行: monthday(year, yearday, month, day) 第19行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0) 第23行: yearday - daytab[leap][i] 第25行: pmonth = i
    c、第10行: monthday(&year, &yearday, &month, &day) 第19行: ((year % 4 == 0) || (year % 100 != 0)) && (year % 400 != 0) 第23行: yearday daytab[i][leap] 第25行: *pmonth = i
    d、第10行: monthday(&year, &yearday, month, day) 第19行: ((year % 4 == 0) && (year % 100 == 0)) || (year % 400 == 0) 第23行: yearday - daytab[i][leap] 第25行: pmonth = i

4、子函数fun的功能是比较形参变量x和y所指的内存单元中的数据大小,将两者中的最小值返回。以下程序执行后输出结果是7,8,7。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int fun(int *x,int *y) { if(___________) /*如果形参变量x所指的内存单元中的数据小于y所指的内存单元中的数据,则返回该最小值*/ return *x; else return *y; } int main() { int a=7,b=8,_______,r; p=&a; q=&b; r=____________; /*调用子函数fun,返回变量a和b中的最小值,将其存放到变量r中。*/ printf("%d,%d,%d\n",*p,*q,r); return 0; }
    a、第4行: *x<*y 第12行: *p,*q 第15行: fun(p,q)
    b、第4行: x    c、第4行: *x<*y 第12行: p,q 第15行: fun(&p,&q)
    d、第4行: x
5、下列函数的功能为________。 void exchange(int *p1, int *p2) { int p; p = *p1; *p1 = *p2; *p2 = p; }
    a、交换*p1和*p2的值
    b、正确,但无法改变*p1和*p2的值
    c、交换*p1和*p2的地址
    d、可能造成系统故障

6、声明语句int (*p)();的含义是________。
    a、p是一个指向函数的指针,该函数的返回值是一个整型
    b、p是一个指向一维数组的指针变量
    c、p是指针变量,指向一个整型数据
    d、以上都不对

7、声明语句int *f();中f的含义是________。
    a、一个返回值为指针类型的函数名
    b、一个用于指向函数的指针变量
    c、一个用于指向一维数组的行指针
    d、一个用于指向整型数据的指针变量

8、下面程序的功能是用函数编程实现两个数组中对应元素值的交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 程序的运行结果示例: input array size(n<=10):5↙ input array a:1 2 3 4 5↙ input array b:6 7 8 9 10↙ output array a: 6 7 8 9 10 output array b: 1 2 3 4 5 #include #define n 10 void readdata(int a[], int n); void printdata(int a[], int n); void swap(int *x, int *y); int main() { int a[n], b[n], i, n; printf("input array size(n<=10):"); scanf("%d", &n); printf("input array a:"); readdata(a, n); printf("input array b:"); readdata(b, n); for (i=0; i    a、第17行:&a[i], &b[i] 第52行:temp = *x 第53行:*x = *y 第54行:*y = temp
    b、第17行:a[i], b[i] 第52行:temp = *x 第53行:*x = *y 第54行:*y = temp
    c、第17行:&a[i], &b[i] 第52行:*temp = *x 第53行:*x = *y 第54行:*y = *temp
    d、第17行:a[i], b[i] 第52行:temp = x 第53行:x = y 第54行:y = temp

9、给出下面程序的运行结果。 #include int main(void) { static int x[] = {1,2,3}; int s = 1, i, *p = x; for (i=0; i<3; i ) { s*= *(p i); } printf("%d\n", s); return 0; }
    a、6
    b、3
    c、4
    d、5

10、从键盘任意输入10个整数,计算并输出最大值和最小值及其它们在数组中的下标位置。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 程序运行结果示例1: input 10 numbers:1 2 3 4 5 6 7 8 9 10↙ max=10,pos=9 min=1,pos=0 程序运行结果示例2: input 10 numbers:2 4 5 6 8 10 1 3 5 7 9↙ max=10,pos=5 min=1,pos=6 #include int findmax(int a[], int n, int *pmaxpos); int findmin(int a[], int n, int *pminpos); int main() { int a[10], maxvalue, maxpos, minvalue, minpos, i; printf("input 10 numbers:"); for (i=0; i<10; i ) { scanf("%d", &a[i]); // 输入10个数 } maxvalue = findmax(a, 10, _________); // 找最大值及其所在下标位置 minvalue = findmin(a, 10, _________); // 找最小值及其所在下标位置 printf("max=%d,pos=%d\n", maxvalue, maxpos); printf("min=%d,pos=%d\n", minvalue, minpos); return 0; } //函数功能:求有n个元素的整型数组a中的最大值及其所在下标位置,函数返回最大值 int findmax(int a[], int n, int *pmaxpos) { int i, max; max = a[0]; //假设a[0]为最大值 __________; //假设最大值在数组中的下标位置为0 for (i=1; i max) { max = a[i]; __________; //pmaxpos指向最大值数组元素的下标位置 } } return max ; } //函数功能:求有n个元素的整型数组a中的最小值及其所在下标位置,函数返回最小值 int findmin(int a[], int n, int *pminpos) { int i, min; min = a[0]; //假设a[0]为最小 __________; //假设最小值在数组中的下标位置为0 for (i=1; i<10; i ) { if (a[i] < min) { min = a[i]; __________; //pminpos指向最小值数组元素的下标位置 } } return min ; }
    a、第13行:&maxpos 第14行:&minpos 第25行:*pmaxpos = 0 第32行:*pmaxpos = i 第43行:*pminpos = 0 第50行:*pminpos = i
    b、第13行:maxpos 第14行:minpos 第25行:pmaxpos = 0 第32行:*pmaxpos = i 第43行:pminpos = 0 第50行:*pminpos = i
    c、第13行:maxpos 第14行:minpos 第25行:pmaxpos = 0 第32行:pmaxpos = i 第43行:pminpos = 0 第50行:pminpos = i
    d、第13行:&maxpos 第14行:&minpos 第25行:pmaxpos = 0 第32行:pmaxpos = i 第43行:*pminpos = 0 第50行:*pminpos = i

11、采用梯形法编程实现在积分区间[a,b]内计算下面两个函数的定积分。 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 程序运行结果示例: y1=1.333350 y2=1.151212 #include float fun1(float x); float fun2(float x); float integral(float (*f)(float), float a, float b); int main() { float y1, y2; y1 = integral(fun1, 0.0, 1.0); y2 = integral(fun2, 0.0, 3.0); printf("y1=%f\ny2=%f\n", y1, y2); return 0; } /* 函数功能:计算函数1 x*x的函数值 */ float fun1(float x) { return 1 x * x; } /* 函数功能:计算函数x/(1 x*x)的函数值 */ float fun2(float x) { return x / (1 x * x); } /* 函数功能:用梯形法计算函数的定积分 */ float integral(float (*f)(float), float a, float b) { float s, h; int n = 100, i; s = __________; h = __________; for (i=1; i    a、第31行:((*f)(a) (*f)(b)) / 2 第32行:(b - a) / n 第36行:(*f)(a i * h) 第38行:s * h
    b、第31行:(*f)(a b) / 2 第32行:(b - a) / n 第36行:(*f)(a i * h) 第38行:s
    c、第31行:((*f)(a) (*f)(b)) / 2 第32行:(a - b) / n 第36行:*f(a i * h) 第38行:s * h
    d、第31行:(*f)(a b) / 2 第32行:(a - b) / n 第36行:*f(a i * h) 第38行:s

9-2 指针的应用

9.3 指针的运算随堂测验

1、下列说法错误的是()。
    a、指针指向数组元素时,指针算术运算才有意义
    b、两个指针指向同一个数组时,指针相减才有意义
    c、指针的算术运算允许通过对指针变量重复自增来访问数组的元素
    d、p 就是将指针变量p加上一个字节

9-2测验

1、下面程序的功能是用指针变量作函数参数编程计算任意m×n阶矩阵的转置矩阵。要求用指向一维数组的指针变量即二维数组的行指针作函数参数。程序的运行结果如下: please enter matrix: 1 2 3 4↙ 1 2 3 4↙ 1 2 3 4↙ the transposed matrix is: 1 1 1 2 2 2 3 3 3 4 4 4 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define row 3 #define col 4 void transpose(int (*a)[col], int (*at)[row], int row, int col); void inputmatrix(int (*s)[col], int row, int col); void printmatrix(int (*s)[row], int row, int col); int main(void) { int s[row][col];//s代表原矩阵 int st[col][row];//st代表转置后的矩阵 printf("please enter matrix:\n"); inputmatrix(s, row, col);//输入原矩阵,s指向矩阵s的第0行,是行指针 transpose(s, st, row, col);//对矩阵s进行转置,结果存放于st中 printf("the transposed matrix is:\n"); printmatrix(st, col, row); //输出转置矩阵,*st指向st的第0行,是行指针 return 0; } //函数功能: 对任意row行col列的矩阵a转置,转置后的矩阵为at void transpose(____________,int (*at)[row], int row, int col) { int i, j; for (i=0; i    a、第20行: int (*a)[col] 第27行: *(*(at j) i) = *(*(a i) j) 第32行: int(*s)[col] 第39行: *(s i) j 第44行: (*s)[row]
    b、第20行: int *a[col] 第27行: *(*(at j) i) = (*(a i) j) 第32行: int(*s)[row] 第39行: *(s i) j 第44行: *s[col]
    c、第20行: int (*a)[row] 第27行: *(at j i) = *(*(a i) j) 第32行: int(*s)[col] 第39行: *(s i j) 第44行: (*s)[row]
    d、第20行: int (*a)[col] 第27行: *(*(at j) i) = *(*(a i j)) 第32行: int(*s)[row] 第39行: *(s) i j 第44行: (*s)[col]

2、口袋中有若干红、黄、蓝、白、黑5种颜色的球,每次从口袋中取出3个球,编程输出得到3种不同颜色的球的所有可能取法。下面程序用三重循环模拟取球过程,但每次取出的球如果与前面的球颜色相同就抛弃。程序的运行结果如下: 1:red,yellow,blue 2:red,yellow,white 3:red,yellow,black 4:red,blue,white 5:red,blue,black 6:red,white,black 7:yellow,blue,white 8:yellow,blue,black 9:yellow,white,black 10:blue,white,black 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { char *bcolor[] = {"red","yellow","blue","white","black"}; int i, j, k, m = 0; for (i=0; i<5; i ) { for (________; j<5; j ) { for (________; k<5; k ) { m ; printf("%d:%s,%s,%s\n", ___________________); } } } return 0; }
    a、第8行: j=i 1 第10行: k=j 1 第13行: m, bcolor[i], bcolor[j], bcolor[k]
    b、第8行: j=1 第10行: k=1 第13行: m, *bcolor i, *bcolor j, *bcolor k
    c、第8行: j=i 第10行: k=j 第13行: m,*(bcolor i), *(bcolor j), *(bcolor k)
    d、第8行: j=0 第10行: k=0 第13行: m, *bcolor[i], *bcolor[j], *bcolor[k]

3、char (*p)[10];该语句定义了一个
    a、指向含有10个元素的一维字符型数组的指针变量p
    b、指向长度为10的字符串的指针变量p
    c、有10个元素的指针数组p,每个元素可以指向一个字符串
    d、有10个元素的指针数组p,每个元素存放一个字符串

4、设有以下定义: int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int (*ptr)[3] = a; int *p = a[0]; 则以下能够正确表示数组元素a[1][2]的表达式是
    a、*(*(ptr 1) 2)
    b、*((*ptr 1) 2)
    c、*(*(p 5))
    d、(*ptr 1) 2

5、二维数组a有m行n列,则在a[i][j]之前的元素个数为
    a、i*n j
    b、j*n i
    c、i*n j-1
    d、i*n j 1

6、下面关于表达式(*p) 和*p 的含义分析说明中,错误的是
    a、(*p) 指的是先取出p指向的存储单元中的内容,然后将取出的数值加1,此时p不再指向原来的存储单元。
    b、(*p) 指的是先取出p指向的存储单元中的内容,然后将取出的数值加1,而p仍然指向原来的存储单元。
    c、*p 则指的是先取出p指向的存储单元中的内容,然后将p值加1,此时p不再指向原来的存储单元。
    d、表达式(*p) 和*p 具有不同的含义,(*p) 并没有修改指针p的指向,而*p 则修改了指针p的指向。

7、假设有下面定义语句: float a[10]; float *p=a; 则p 相当于是加上()个字节
    a、sizeof(float)
    b、1个字节
    c、sizeof(p)
    d、sizeof(a)
    e、sizeof(float*)

8、下列说法中错误的是
    a、char *country[] = {"french", "england", "japan", "china", "finland"}; 这条语句定义了一个字符指针数组country,并将初始化列表中的字符串保存到字符指针数组中。
    b、当指针变量指向一维数组的时候,sizeof(数组名)和sizeof(指针变量名)的计算结果是不相同的。
    c、指针的算术运算允许通过对指针变量重复自增来访问数组的元素。
    d、指针指向数组元素时,指针算术运算才是有意义的。

9、下面程序希望得到的运行结果如下: total string numbers = 3 how are you 但是现在代码存在错误,找出下面选项中修改正确的语句 #include void print(char *arr[], int len); int main() { char *parray[] = {"how","are","you"}; int num = sizeof(parray) / sizeof(char); printf("total string numbers = %d\n", num); print(parray, num); return 0; } void print(char *arr[], int len) { int i; for (i=0; i    a、第6行应该是: int num = sizeof(parray) / sizeof(char*);
    b、第12行应该是: void print(char arr[], int len)
    c、第5行应该是: char parray[] = {"how","are","you"};
    d、第6行应该是: int num = sizeof(parray/char *);

10、以下程序运行后的输出结果是#include int main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5]; printf("%d",b); return 0; }
    a、9
    b、5
    c、6
    d、8

11、有以下程序段,则*(p[0] 1)所代表的数组元素是 #include int main() { int a[3][2]={1,2,3,4,5,6,},*p[3]; p[0]=a[1]; ..... return 0; }
    a、a[1][1]
    b、a[0][1]
    c、a[1][0]
    d、a[1][2]

12、以下程序运行后的输出结果是 #include int main() { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i ) { p[i]=i 1; } printf("%d\n",a[1][2]); return 0; }
    a、6
    b、3
    c、9
    d、2

13、如下程序的执行结果是 #include int main() { int a[ ][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i=1,j=2; p=a; printf("%d\n",*(*(p i) j)); return 0; }
    a、13
    b、9
    c、11
    d、17

14、在以下程序段中的空白处填写适当的表达式或语句,使程序能正确引用c数组元素。 #include int main() { int c[4][5],(*p)[5],i,j,d=0; for(i=0;i<4;i ) { for(j=0;j<5;j ) { c[i][j]=d; d ; printf("m",c[i][j]); } printf("\n"); } p=c; printf("%d,%d\n",____________); return 0; }
    a、*(p[0] 2),c[0][2]
    b、*(p 1) 3,c[1][3]
    c、*(p 3),c[0][3]
    d、p 1,c[0][1]

15、下面给出的选项中,能定义为一个指针数组的语句是
    a、int *ptr[5];
    b、int (*ptr)[5];
    c、int *(ptr[5]);
    d、int ptr[5];

16、若有定义“int *p[5];”,则以下叙述中正确的是
    a、定义了一个指针数组p,该数组含有5个元素,每个元素都是基类型为int的指针变量
    b、定义了一个基类型为int的指针变量p,该变量有5个指针
    c、定义了一个名为*p的整型数组,该数组含有5个int类型元素
    d、定义了一个可指向一维数组的指针变量p,所指一维数组应具有5个int类型元素

17、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是
    a、for(i=0;i<6;i ) printf("-",(*p) );
    b、for(i=0;i<6;i ) printf("-",*(p ));
    c、for(i=0;i<6;i ) printf("-",*(p i));
    d、for(i=0;i<6;i ) printf("-",*p );

18、若二维数组a有m行n列,则下面能够正确引用元素a[i][j]的为
    a、*(*(a i) j)
    b、*(a j*n i)
    c、*(a i*n j)
    d、*(*a i) j

19、设有语句“int array[3][4];”,则在下面几种引用下标为i和j的数组元素的方法中,不正确的引用方式是________。
    a、*(array i*4 j)
    b、array[i][j]
    c、*(*(array i) j)
    d、*(array[i] j)

20、有int *p[10];以下说法错误的是________。
    a、p 操作是合法的
    b、p是数组名
    c、p是一个指针数组
    d、p中每个元素都是一个指针变量

10 字符串:c语言世界中的大力水手

10.1 字符串的存储与表示(28分)随堂测验

1、下列说法正确的是()。
    a、用双引号括起的一串字符是字符串常量,系统自动为其添加空字符'\0'作为字符串的结束标志。
    b、字符数组的最后一个元素必须是字符'0'才能表示一个字符串。
    c、char *pstr = "hello china";表示定义了一个指向字符串常量的字符指针变量。此时既可以修改pstr的值,也可以通过间接寻址的方法修改pstr指向的字符。
    d、char *pstr; scanf("%s", pstr); 这两条语句的作用就是将用户从键盘输入的字符串保存到字符指针变量pstr中。

第10周测验

1、下面程序的功能是从键盘输入一个字符串,编程将其字符顺序颠倒后重新存放,并输出这个字符串。 程序的运行结果如下: input a string: abcdef↙ the inversed string is: fedcba 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include void inverse(char *pstr); int main() { char str[80]; printf("input a string:\n"); gets(str);//输入字符串 inverse(str);//将存于str数组中的字符串逆序存放 printf("the inversed string is:\n"); puts(str);//输出字符串 return 0; } void inverse(char *pstr) { int len = 0; char temp; char *pstart = pstr;//指针变量pstart指向字符串的第一个字符 char *pend;//指针变量pend指向字符串的最后一个字符 for (; *pstart!='\0'; _________) //求出字符串长度 { len ; } for (pstart=pstr,___________; pstart    a、第21行: pstart 第25行: pend=pstr len-1 第27行: *pstart 第28行: *pstart = *pend
    b、第21行: *pstart 第25行: pend=pstr len 第27行: *pstart 第28行: *pstart = *pend
    c、第21行: pstart 第25行: pend=pstr len-1 第27行: pstart 第28行: pstart = pend
    d、第21行: *pstart 第25行: pend=pstr len 第27行: pstart 第28行: pstart = pend

2、squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。例如,输入为: abcdef↙ c↙ 输出为: abdef 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include void squeeze(char *s, char c); int main() { char a[80], c, *s; s = a; gets(a); scanf("%c",&c); squeeze(s, c); printf("%s\n", s); return 0; } void squeeze(char *s, char c) { int i, j; for (i = j = 0; s[i] != '\0'; i ) { if (__________) { __________; j ; } } _____________; /* 在字符串t2的末尾添加字符串结束标志 */ }
    a、第20行: s[i] != c 第22行: s[j] = s[i] 第26行: s[j] = '\0'
    b、第20行: s[i] == c 第22行: s[j] = s[i] 第26行: s[i] = '\0'
    c、第20行: s[j] != c 第22行: s[i] = s[j] 第26行: s[j] = '\0'
    d、第20行: s[j] == c 第22行: s[j] = s[i] 第26行: s[i] = '\0'

3、以下程序中函数findminstring的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。例如,若运行时依次输入三个字符串: 123↙ 1223↙ 124↙ 输出结果为1223 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include char *findminstring( _____________ ) { if(_____________) return(s1); else return(s2); } int main() { int i; char string[20], str[3][20]; for(i=0;i<3;i ) { gets(str[i]); } strcpy(string,findminstring(str[0],str[1])); /*对字符串进行复制*/ strcpy(string,___________________); printf("%s\n",string); return 0; }
    a、第3行: char *s1, char *s2 第5行: strcmp(s1,s2)<0 第20行: findminstring(string,str[2])
    b、第3行: char s1, char s2 第5行: s1    c、第3行: char s1, char s2 第5行: strcmp(s1,s2)>0 第20行: findminstring(str[0],str[2])
    d、第3行: char *s1, char *s2 第5行: s1>s2 第20行: strcmp(str[1],str[2])

4、子函数move的功能是将某字符串中的第i个字符向左移动1位,覆盖第i-1个字符。下面程序通过多次调用move函数,将字符数组b中存放的字符串依次左移3位,并在移动后的字符串末尾添上字符0补足。程序的运行结果为: 2345678900 3456789000 4567890000 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void move( _________,int i) { a[i-1]=a[i]; } int main( ) { char b[11]={"1234567890"}; int i,j; for (j=0;j<=2;j ) { for(i=1;b[i]!='\0';i ) { __________; printf("%c",b[i-1]); } _________; printf("%c\n",________); } return 0; }
    a、第2行: char *a 第15行: move(b,i) 第18行: b[i-1]='0' 第19行: b[i-1]
    b、第2行: char a 第15行: move(b,i) 第18行: b[i-1]='\0' 第19行: b[i-1]
    c、第2行: char *a 第15行: move(b,i) 第18行: b[i]='0' 第19行: b[i]
    d、第2行: char a 第15行: move(i,b) 第18行: b[i]='\0' 第19行: b[i]

5、下面能正确进行字符串赋值操作的是
    a、char *s=“abcde”;
    b、char s[5]={“abcde”};
    c、char s[5]={'a', 'b', 'c', 'd', 'e'};
    d、char *s,scanf(“%s”,s);

6、下列对字符串的定义中,错误的是
    a、char str[7] = "fortran";
    b、char str[] = "fortran";
    c、char *str = "fortran";
    d、char str[] = {'f','o','r','t','r','a','n',0};

7、已知:int *p(); 则p是
    a、一个函数,该函数的返回值是指向int型的指针变量
    b、指向int型的指针变量
    c、int型的指针数组
    d、一个指向函数的指针变量,该函数的返回值是int型

8、下面函数fun的功能是 #include #include int fun(char *ps) { char *p; p=ps; while(*p ); return (p-ps); } int main() { char *s; int a1,a2; s = "hello"; a1=fun(s); a2=strlen(s); printf("%d,%d\n", a1,a2); return 0; }
    a、以上三种说法都不对
    b、比较两个字符串的大小
    c、求字符串的长度
    d、将串ps复制到串s中

9、下面函数fun的功能是 void fun(char *s1, char *s2) { while(*s2 =*s1 ); }
    a、串复制
    b、求串长
    c、串比较
    d、串反向

10、给出以下定义,则正确的叙述是 char x[ ]= “abcedfg”; char y[ ]={ ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’’, ‘g’ };
    a、数组x 的长度大于数组y的长度
    b、数组x 和数组y 等价
    c、数组x 和数组y 的长度相同
    d、数组x 的长度小于数组y的长度

11、执行以下代码段后,输出的字符串是#include #include int main() { char s1[10],*s2="ab\0cdef"; strcpy(s1,s2); puts(s1); ....... return 0; }
    a、ab
    b、cdef
    c、ab\0cdef
    d、内容不确定

12、下面程序的功能是将字符数组中存放的字符串以多种书写形式输出,如“program”,“program”,以及逆序输出的字符串“margorp”等,程序的运行结果为: program program margorp 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main(void) { int i = 0; char b[] = "program"; char *a = "program"; printf("_____\n", *a, b 1); /* 输出program */ while (_________________) /* 输出program */ { ___________; i ; } printf("\n"); while (_____) /* 输出margorp */ { putchar (___________); } __________; return 0; }
    a、第8行: %c%s 第9行: *(a i)!='\0' 第11行: putchar(*(a i)) 第15行: --i 第17行: *(b i) 第19行: putchar (*(b i))
    b、第8行: %s%s 第9行: (*a i)!='\0' 第11行: putchar(*a i)) 第15行: i-- 第17行: *(b i) 第19行: putchar (*(b i))
    c、第8行: %c%s 第9行: *(a i)=='\0' 第11行: putchar(*(a i)) 第15行: --i 第17行: *b i 第19行: putchar (*b i))
    d、第8行: %s%s 第9行: (*a i)=='\0' 第11行: putchar(*a i)) 第15行: i-- 第17行: *b i 第19行: putchar (*b i)

13、下面程序的功能是用字符指针变量作函数参数编程实现字符串连接函数strcat()的功能,将字符串srcstr连接到字符串dststr的尾部。 程序的运行结果如下: please enter the source string:abcd↙ please enter the other string:efgh↙ the concat is: abcdefgh 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void mystrcat(char *dststr, char *srcstr); int main() { char s[80]; //源字符串 char t[80]; //待连接字符串 printf("please enter the source string: \n"); gets(s); printf("please enter the other string: "); gets(t); //输入字符串 mystrcat(s, t); //将字符数组t中的字符串连到s的尾部 printf("the concat is:\n"); puts(s); //输出连接后的字符串s return 0; } void mystrcat(char *dststr, char *srcstr) //用字符指针作为函数参数 { while (__________) { dststr ; } while (*srcstr != '\0') //若srcstr所指字符不是字符串结束标志 { _________; //将srcstr所指字符复制到dststr所指的存储单元中 srcstr ; //使srcstr指向下一个字符 dststr ; //使dststr指向下一个存储单元 } _____________; //在字符串dststr的末尾添加一个字符串结束标志 }
    a、第19行: *dststr != '\0' 第25行: *dststr = * srcstr 第29行: *dststr = '\0'
    b、第19行: dststr != '\0' 第25行: dststr = srcstr 第29行: *dststr = '\0'
    c、第19行: *dststr == '\0' 第25行: *dststr = * srcstr 第29行: *dststr = '\n'
    d、第19行: dststr == '\0' 第25行: dststr = srcstr 第29行: *dststr = '\n'

14、以下程序的功能是分别测量字符数组及数组中存放的字符串的长度,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main( ) { char a[]="abcdefg",b[10]="abcdefg"; _________________________; /*测量字符数组a,b的长度,并输出*/ _________________________; /*测量字符数组a,b中存放的字符串的长度,并输出*/ return 0; }
    a、第6行: printf("%d %d\n",sizeof(a) ,sizeof(b)) 第7行: printf("%d %d\n",strlen(a) ,strlen(b))
    b、第6行: printf("%d %d\n",strlen(a) ,strlen(b)) 第7行: printf("%d %d\n",sizeof(a) ,sizeof(b))
    c、第6行: printf("%d %d\n",sizeof(*a) ,sizeof(*b)) 第7行: printf("%d %d\n",strlen(*a) ,strlen(*b))
    d、第6行: printf("%d %d\n",sizeof(&a) ,sizeof(&b)) 第7行: printf("%d %d\n",strlen(&a) ,strlen(&b))

15、下面程序的功能是将一个字符串s2插入到字符串s1中,其起始插入位置为n。 程序运行示例如下: main string:hello,world! sub string:cc site of begining:(<=12)5 after instert:hellocc,world! 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #define n 100 int main() { int n, i, j, k, len; char s1[n], s2[n], s3[2 * n]; printf("main string:"); gets(s1); printf("sub string:"); gets(s2); len = strlen(s1); do { printf("site of begining:(<=%d)", len); scanf("%d", &n); }while (__________); for (i = 0; i < n; i ) { s3[i] = s1[i]; } for (j = 0; s2[j] != '\0'; j ) { __________________; } for (________; s1[k] != '\0'; k ) { ________________; } s3[j k] = '\0'; printf("after instert:%s\n", s3); return 0; }
    a、第17行: n > len 第25行: s3[i j] = s2[j] 第27行: k = n 第29行: s3[j k] = s1[k]
    b、第17行: n < len 第25行: s3[i] = s2[j] 第27行: k = n 第29行: s3[j] = s1[k]
    c、第17行: n <= len 第25行: s2[j]=s3[i j] 第27行: k = 0 第29行: s3[j] = s1[k]
    d、第17行: n >= len 第25行: s3[j] = s2[j] 第27行: k = 0 第29行: s1[k] = s3[j k]

16、下面程序的功能是从键盘输入一行字符(最长不超过80字符),用函数编程统计其中单词(以空格作为间隔符的字符串)的个数。 基本思路是:当前被检验字符不是空格,而前一被检验字符是空格,则表示有新单词出现。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。(下面答案中两个单引号''中间都有一个空格) 样例1: input a string:how are you↙ numbers of words = 3 样例2: input a string: how are you↙ numbers of words = 3 #include int countwords(char str[]); int main() { char str[81]; int num; printf("input a string:\n"); gets(str); num=countwords(str); printf("number of words=%d\n", num); return 0; } int countwords(char str[]) { int i, num; num = (__________) ? 1 : 0; i=1; while (str[i]!='\0') { if (_______________________) { num ; } __________; } return num; }
    a、第17行: str[0] != ' ' 第21行: str[i]!=' ' && str[i-1] == ' ' 第25行: i
    b、第17行: str[0] == ' ' 第21行: str[i]!=' ' || str[i-1] == ' ' 第25行: i
    c、第17行: str[0] != '\0 ' 第21行: str[i]==' ' && str[i-1] == ' ' 第25行: i
    d、第17行: str[0] != ' ' 第21行: str[i]!=' ' && str[i-1] != ' ' 第25行: num

17、下面程序的功能是实现字符串逆序存放。 程序运行结果如下: input a string:abcdefghi↙ inversed results:ihgfedcba 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #define n 80 void inverse(char *pstr); int main() { char a[n]; printf("input a string:"); gets(a); inverse(a); printf("inversed results:%s\n", a); return 0; } /* 函数功能: 实现将字符数组中的字符串逆序存放 */ void inverse(____________) { int len; char temp; char *pstart; /* 指针变量pstart指向字符串的第一个字符 */ char *pend; /* 指针变量pend指向字符串的最后一个字符 */ len = strlen(pstr); /* 求出字符串长度 */ for (pstart=pstr,___________; pstart    a、第16行: char *pstr 第23行: pend=pstr len-1 pend-- 第26行: *pstart = *pend
    b、第16行: char pstr 第23行: pend=pstr len pend-- 第26行: *pstart = *pend
    c、第16行: char *pstr 第23行: pend=pstr len-1 pend 第26行: pstart = pend
    d、第16行: char pstr 第23行: pend=pstr len 1 pend 第26行: *pstart = *pend

18、下面程序的功能是从键盘输入一行字符(不超过80个),统计其中的英文字符、数字字符、空格和其他字符的个数。例如,输入的一行字符为 *****c language.***** 输出为 english character: 9 digit character: 0 space: 1 other character: 11 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #define str_len 80 int main() { char str[str_len 1]; int len, i, letter = 0, digit = 0, space = 0, others = 0; printf("please input a string:"); ___________; for (i = 0; __________; i ) { if (___________________________) letter ; /*统计英文字符 */ else if (______________________) digit ; /*统计数字字符 */ else if (str[i] == ' ' ) space ; /*统计空格*/ else others ; /*统计其他字符的个数*/ } printf("english character: %d\n", letter); printf("digit character: %d\n", digit); printf("space: %d\n", space); printf("other character: %d\n", others); return 0; }
    a、第9行: gets(str) 第10行: str[i] != '\0' 第12行: str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'a' && str[i] <= 'z' 第14行: str[i] >= '0' && str[i] <= '9'
    b、第9行: scanf("%s",str) 第10行: str[i] != '\0' 第12行: 'z' >= str[i] >= 'a' || 'a' <= str[i] <= 'z' 第14行: 9 >= str[i] >= 0
    c、第9行: puts(str) 第10行: str[i] != '\n' 第12行: 'z' >= str[i] >= 'a' || 'a' <= str[i] <= 'z' 第14行: str[i] >= '0' && str[i] <= '9'
    d、第9行: scanf("%s",str) 第10行: str[i] != '\n' 第12行: str[i] >= 'a' || str[i] <= 'z' && str[i] >= 'a' || str[i] <= 'z' 第14行: str[i] >= 0 && str[i] <= 9

19、下面程序的功能是在字符串每个字符间插入一个空格。 程序的运行结果如下: input a string:howareyou↙ insert results:h o w a r e y o u 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #define n 100 void insert(char s[]); int main() { char str[n]; printf("input a string:"); gets(str); insert(str); printf("insert results:%s\n", str); return 0; } void insert(char s[]) { char t[n]; int i, j; ____________; for (i=0, j=0; ____________; i , j ) { ________; j ; ________; } s[j] = '\0';/* 在字符串s的末尾添加字符串结束标志 */ }
    a、第19行:strcpy(t, s) 第20行:t[i]!='\0' 第22行:s[j] = t[i] 第24行:s[j] = ' '
    b、第19行:t=s; 第20行:t[i]!='\0' 第22行:s[i] = t[j] 第24行:s[j] = ' '
    c、第19行:strcpy(t, s) 第20行:t[i]='\0' 第22行:t[j] = s[i] 第24行:s[j] = '\0 '
    d、第19行:strcpy(s, t) 第20行:t[i]=='\0' 第22行:s[j] = t[i] 第24行:s[j] = '0 '

20、子函数change的功能是将英文大写字母转换为小写字母,下面程序的输出结果是 abc_abc_def 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void change(__________) { int i; for(;________;ch ) { if(____________) _________________; } } int main() { char s[]="abc_abc_def"; change(s); printf("%s\n",s); return 0; }
    a、第2行: char *ch 第5行: *ch!='\0' 第7行: *ch>='a'&& *ch<='z' 第8行: *ch=*ch-'a' 'a'
    b、第2行: char ch 第5行: ch!='\0' 第7行: *ch>='a'&& *ch<='z' 第8行: *ch=*ch-'a' 'a'
    c、第2行: char *ch 第5行: *ch!='\0' 第7行: ch>='a'&& ch<='z' 第8行: ch=ch-'a' 'a'
    d、第2行: char ch[] 第5行: *ch=='\0' 第7行: *ch>='a'|| *ch<='z' 第8行: *ch=*ch-'a' 'a'

21、下面程序的功能是比较用户键盘输入的口令userinput与内设的口令password是否相同。若相同,则输出"correct password! welcome to the system...",若userinputpassword"。 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main() { char password[7] = "secret"; char userinput[81] ; printf("input password:"); scanf(_____________); if ( ______________ ) printf("correct password! welcome to the system...\n"); else if ( ___________________) printf("invalid password!user inputpassword\n"); return 0; }
    a、第8行: "%s", userinput 第9行: strcmp(userinput, password) == 0 第11行: strcmp(userinput, password) < 0
    b、第8行: "%c", userinput 第9行: strcmp(userinput, password) = 0 第11行: strcmp(userinput, password) < 0
    c、第8行: "%s", userinput 第9行: userinput==password 第11行: userinput    d、第8行: "%c", userinput 第9行: strcpy(userinput, password) == 0 第11行: strcpy(userinput, password) < 0

11 海陆空齐上阵:又来了一堆数据

第11周测验

1、设有以下说明语句,则下面的叙述中错误的是 struct ex { int x ; float y; char z ; } example;
    a、example是结构体类型名
    b、struct是结构体类型的关键字
    c、x,y,z都是结构体成员名
    d、ex为结构体标签。

2、若有以下说明,则下面哪个叙述是正确的(已知short占2个字节,float占4个字节)。 struct { short a; float b; } v1; union { short a; float b; } v2;
    a、执行sizeof(v1)获得的结果是8个字节,对结构体变量v1中的任何一个成员都可以进行初始化。
    b、执行sizeof(v1)获得的结果是6个字节,只能对结构体变量v1中的第一个成员进行初始化。
    c、执行sizeof(v2)获得的结果是6个字节,只能对共用体变量v2中的第一个成员进行初始化。
    d、执行sizeof(v2)获得的结果是4个字节,对共用体变量v2中的任何一个成员都可以进行初始化。
    e、执行sizeof(v2)获得的结果是8个字节,只能对共用体变量v2中的第一个成员进行初始化
    f、执行sizeof(v1)获得的结果是8个字节,只能对结构体变量v1中的第一个成员进行初始化。
    g、执行sizeof(v1)获得的结果是4个字节,对结构体变量v1中的任何一个成员都可以进行初始化。
    h、执行sizeof(v2)获得的结果是6个字节,对共用体变量v2中的任何一个成员都可以进行初始化。

3、以下选项中不能正确把cl定义成结构体变量的是
    a、struct color cl { int red; int green; int blue; }
    b、typedef struct { int red; int green; int blue; } color; color cl;
    c、struct color { int red; int green; int blue; } cl;
    d、struct { int red; int green; int blue; } cl;

4、以下程序执行后的输出结果是 #include struct stu { char name[10]; int num; }; void fun1(struct stu c) { struct stu b={"liguo",2042}; c=b; }; void fun2(struct stu *c) { struct stu b={"sundan",2044}; *c=b; }; int main() { struct stu a={"yanghan",2041},b={"wangyi",2043}; fun1(a); fun2(&b); printf("%d %d\n",a.num,b.num); return 0; }
    a、2041 2044
    b、2041 2043
    c、2042 2044
    d、2042 2043

5、下面说法错误的是
    a、在一个结构体内不能包含另一个不同类型的结构体作为其成员。
    b、用结构体变量做函数参数,是将结构体变量的所有成员的内容传给被调函数,因此在被调函数中对结构体内容的修改不影响原结构体变量。
    c、结构体在内存中所占的字节数不仅与所定义的结构体类型有关,还与计算机系统本身有关。
    d、和整型、实型、字符型一样,枚举类型也是一种基本数据类型。
    e、用指向结构体变量的指针做函数参数,是将结构体变量的地址传给被调函数,因此在被调函数中对结构体内容的修改会影响原结构体变量。

6、若能使程序运行后的输出结果如下: 201501 201502 201503 则空白处填写的表达式或语句应该是 #include struct student { int age; char num[8]; }; int main() { struct student stu[3]={{20,"201501"},{21,"201502"},{19,"201503"}}; struct student *p=stu; ____________________ return 0; }
    a、printf("%s\n",(*p).num); printf("%s\n",( p)->num); printf("%s\n",stu[2].num);
    b、printf("%s\n",(p ).num); printf("%s\n",(p ).num); printf("%s\n",(p ).num);
    c、printf("%s\n",( p)->num); printf("%s\n",( p)->num); printf("%s\n",(*p).num);
    d、printf("%s\n",stu[0]->num); printf("%s\n",stu[1]->num); printf("%s\n",stu[2]->num);

7、以下是时钟模拟显示程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include typedef struct clock { int hour; int minute; int second; }clock; /* 函数功能:时、分、秒时间的更新 */ void update(________) { static long m = 1; t->hour = m / 3600; t->minute = __________________; t->second = ___________; m ; if (t->hour == 24) m = 1; } /* 函数功能:时、分、秒时间的显示 */ void display(clock *t) { printf("-:-:-\r", t->hour, t->minute, t->second); } /* 函数功能:模拟延迟1秒的时间 */ void delay(void) { long t; for (t=0; t<50000000; t ) { /* 循环体为空语句的循环,起延时作用 */ } } int main() { long i; clock myclock; myclock.hour = myclock.minute = myclock.second = 0; for (i=0; i<100000; i ) /* 利用循环,控制时钟运行的时间 */ { update(&myclock); /* 时钟值更新 */ display(__________); /* 时间显示 */ delay(); /* 模拟延时1秒 */ } return 0; }
    a、第10行: clock *t 第14行: (m – 3600 * t->hour) / 60 第15行: m % 60 第44行: &myclock
    b、第10行: clock *t 第14行: (m – 3600 * hour) / 60 第15行: m / 60 第44行: &myclock
    c、第10行: clock t 第14行: (m – 3600 * t->hour) / 60 第15行: m / 60 第44行: myclock
    d、第10行: clock t 第14行: (m – 3600 * hour) / 60 第15行: m % 60 第44行: myclock

8、有以下说明和定义语句,下面各输入语句中错误的是 #include int main() { struct student { int age; char sex; char name[8]; }; struct student std; struct student *p=&std; ....... return 0; }
    a、scanf("%c",&std[0].sex);
    b、scanf("%d",&(*p).age);
    c、scanf("%s",std.name);
    d、scanf("%c",&(p->sex));

9、以下程序的功能是计算每个学生3门课成绩的总和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include struct stu { char num[10]; float score[3]; }; int main() { struct stu s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p=s; int i,j; float sum; __________ return 0; }
    a、for (j=0;j<3;j ) { sum=0; for(i=0;i<3;i ) { sum=sum p->score[i]; } printf("%6.2f\n",sum); p ; }
    b、sum=0; for(i=0;i<3;i ) { sum=sum p->score[i]; } printf("%6.2f\n",sum);
    c、sum=0; for(i=0;i<3;i ) { sum=sum p->score[i]; p ; } printf("%6.2f\n",sum);
    d、for (j=0;j<3;j ) { sum=0; for(i=0;i<3;i ) { sum=sum p->score[i]; p ; } printf("%6.2f\n",sum); }

10、下面程序的输出结果是 #include int main() { union { int i[2]; int k; int c; }t,*s = &t; s->i[0] = 10; s->i[1] = 20; s->k=30; printf("%d\n", s->k); printf("%d\n", s->i[0]); printf("%d\n", s->c); return 0; }
    a、30 30 30
    b、10 20 30
    c、30 10 随机数
    d、30 10 20

12 学会保存你的数据

第12周测验

1、若要以“a ”方式打开一个已存在的文件,则以下叙述正确的是
    a、文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做添加和读操作。
    b、文件打开时,原有文件内容不被删除,位置指针移动到文件开头,可做重写和读操作。
    c、文件打开时,原有文件内容被删除,只可做写操作。
    d、以上各种说法都不正确。

2、在c语言中,从计算机内存中将数据写入文件中,称为
    a、输出
    b、输入
    c、修改
    d、删除

3、下面的程序执行后,文件test中的内容是 #include #include void fun(char *fname,char *st) { file *myf; int i; myf=fopen(fname,"w" ); if (myf == null) { printf("cannot open the file.\n"); exit(0); } for(i=0;i    a、hello
    b、new worldhello
    c、new world
    d、hello rld

4、阅读以下程序,对程序功能的描述中正确的是 #icnlude int main() { file *in, *out; char ch, infile[10], outfile[10]; printf("enter the infile name:\n"); scanf("%s", infile); printf("enter the outfile name:\n"); scanf("%s", outfile); if ((in = fopen(infile, "r")) == null) { printf("cannot open infile.\n"); exit(0); } if ((out = fopen(outfile, "w")) == null) { printf("cannot open outfile.\n"); exit(0); } while (!feof(in)) { fputc(fgetc(in), out); } fclose(in); fclose(out); return 0; }
    a、程序完成将一个磁盘文件中的信息复制到另一个磁盘文件中的功能。
    b、程序完成将磁盘文件的信息在屏幕上显示的功能。
    c、程序完成将两个磁盘文件合二为一的功能。
    d、程序完成将两个磁盘文件合并并在屏幕上输出的功能。

5、c语言中标准输入文件stdin是指
    a、键盘
    b、显示器
    c、鼠标
    d、硬盘
    e、u盘

6、设有以下结构类型,并且结构数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下形式错误的是 struct st { char name[8]; int num; float s[4]; } student[50];
    a、fwrite(student, 25 * sizeof(struct st), 1, fp);
    b、fwrite(student, sizeof(struct st), 50, fp);
    c、fwrite(student, 50 * sizeof(struct st), 1, fp);
    d、for (i = 0; i < 50; i ) fwrite(student, sizeof(struct st), 1, fp);

7、若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该是
    a、“wb ”
    b、“ab ”
    c、“rb ”
    d、“ab”

8、以下程序执行后输出结果是 #include int main() { file *fp; int i,k=0,n=0; fp=fopen("d1.dat","w"); if (fp == null) { printf("cannot open the file.\n"); exit(0); } for(i=1;i<4;i ) { fprintf(fp,"%d",i); } fclose(fp); fp=fopen("d1.dat","r"); if (fp == null) { printf("cannot open infile.\n"); exit(0); } fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n); fclose(fp); return 0; }
    a、123 0
    b、1 2
    c、1 23
    d、0 0

9、关于文件读写,正确的叙述是
    a、可把整型数以二进制形式存放到文件中的函数是fwrite函数。
    b、使用fread可以直接将数值从二进制文件读入(拷贝)到程序的变量中。
    c、使用fprintf函数可以将信息以文本的形式写入文件(类似向屏幕输出文本信息的printf函数)。
    d、使用fscanf函数可以从文本文件,按格式读入int、float等各种类型的数值(类似从键盘读入信息的scanf函数)。
    e、以二进制形式打开的文件,如果使用fprintf向文件写入所有数据,其结果是生成的文件还是个文本文件。
    f、以文本方式打开的文件,如果使用fwrite向文件写入所有数据,其结果是生成的文件还是个二进制文件。正因如此,如果用文本编辑器打开这个文件查看文件中的内容会发现是乱码。
    g、文件打开后一定要检查是否打开成功。
    h、文件用完一定要关闭,否则,可能会引起数据丢失,或者影响其他文件的打开,因为多数情况下,系统限制同时处于打开状态的文件总数。
    i、以r(只读)、a(追加)和r (读写)方式打开文件时,该文件必须是已存在的文件,否则将打开不成功。
    j、以w(只写)和w (读写)方式打开一个文件时,无论该文件是否存在,都新建一个文件,这就意味着如果文件已存在,则其原有的内容将丢失。
    k、文件一旦按文本方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是文本,对应的内容都是字符‘1’。
    l、文件一旦按二进制方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是二进制文件,对应的内容都是数值1。
    m、用file只能定义指向文本文件的文件指针。
    n、用file只能定义指向二进制文件的文件指针。
    o、c语言中的文件都是流式文件,只能按顺序读写,不能进行随机读写。
    p、文件的读写方式中w 和r 都是可读可写方式,二者是完全一样的。

10、以下叙述中错误的是
    a、不可以用file定义指向二进制文件的文件指针。
    b、二进制文件打开后可以先读文件的末尾,而顺序文件不可以。
    c、在程序结束时,应当用fclose()函数关闭已打开的文件。
    d、在利用fread()函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据。

11、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
    a、0
    b、1
    c、-1
    d、一个非0值

12、在进行文件操作时,写文件的一般含义是
    a、将计算机内存中的信息存入磁盘。
    b、将磁盘中的信息存入计算机内存。
    c、将计算机cpu中的信息存入磁盘。
    d、将磁盘中的信息存入计算机cpu。

13、以下程序希望把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。出错的原因是 #include int main() { file *fout; char ch; fout=fopen('abc.txt','w'); if (fout == null) { printf("cannot open infile.\n"); exit(0); } ch=fgetc(stdin); while(ch!='#') { fputc(ch,fout); ch=fgetc(stdin); } fclose(fout); return 0; }
    a、函数fopen()调用形式错误
    b、输入文件没有关闭
    c、函数fgetc()调用形式错误
    d、文件指针stdin没有定义

练兵区——单选题——不计入总分

1、下面的程序执行后,文件test中的内容是#include #include void fun(char *fname,char *st) { file *myf; int i; myf=fopen(fname,"w" ); if (myf == null) { printf("cannot open the file.\n"); exit(0); } for(i=0;i    a、hello
    b、new worldhello
    c、new world
    d、hello rld

2、有如下程序, 若文本文件f1.txt中原有内容为:good,则运行以下程序后文件f1.txt中的内容为#include int main() { file *fp1; fp1=fopen("f1.txt","w"); if (fp1 == null) { printf("cannot open the file.\n"); exit(0); } fprintf(fp1,"abc"); fclose(fp1); return 0; }
    a、abc
    b、goodabc
    c、good
    d、abcgood

3、下列关于c语言数据文件的叙述中正确的是
    a、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
    b、文件由ascii码字符序列组成,c语言只能读写文本文件
    c、文件由二进制数据序列组成,c语言只能读写二进制文件
    d、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件

4、以下程序希望把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。出错的原因是#include int main() { file *fout; char ch; fout=fopen('abc.txt','w'); if (fout == null) { printf("cannot open infile.\n"); exit(0); } ch=fgetc(stdin); while(ch!='#') { fputc(ch,fout); ch=fgetc(stdin); } fclose(fout); return 0; }
    a、函数fopen()调用形式错误
    b、输入文件没有关闭
    c、函数fgetc()调用形式错误
    d、文件指针stdin没有定义

5、阅读以下程序,对程序功能的描述中正确的是#icnlude int main() { file *in, *out; char ch, infile[10], outfile[10]; printf("enter the infile name:\n"); scanf("%s", infile); printf("enter the outfile name:\n"); scanf("%s", outfile); if ((in = fopen(infile, "r")) == null) { printf("cannot open infile.\n"); exit(0); } if ((out = fopen(outfile, "w")) == null) { printf("cannot open outfile.\n"); exit(0); } while (!feof(in)) { fputc(fgetc(in), out); } fclose(in); fclose(out); return 0; }
    a、程序完成将一个磁盘文件中的信息复制到另一个磁盘文件中的功能。
    b、程序完成将磁盘文件的信息在屏幕上显示的功能。
    c、程序完成将两个磁盘文件合二为一的功能。
    d、程序完成将两个磁盘文件合并并在屏幕上输出的功能。

6、设有以下结构类型,并且结构数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下形式错误的是 struct st { char name[8]; int num; float s[4]; } student[50];
    a、fwrite(student, 25 * sizeof(struct st), 2, fp);
    b、fwrite(student, sizeof(struct st), 50, fp);
    c、fwrite(student, 50 * sizeof(struct st), 1, fp);
    d、for (i = 0; i < 50; i ) fwrite(student, sizeof(struct st), 1, fp);

7、c语言中标准输入文件stdin是指
    a、键盘
    b、显示器
    c、鼠标
    d、硬盘
    e、u盘

8、若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该是
    a、“wb ”
    b、“ab ”
    c、“rb ”
    d、“ab”

9、关于文件读写,正确的叙述是
    a、可把整型数以二进制形式存放到文件中的函数是fwrite函数。
    b、使用fread可以直接将数值从二进制文件读入(拷贝)到程序的变量中。
    c、使用fprintf函数可以将信息以文本的形式写入文件(类似向屏幕输出文本信息的printf函数)。
    d、使用fscanf函数可以从文本文件,按格式读入int、float等各种类型的数值(类似从键盘读入信息的scanf函数)。
    e、以二进制形式打开的文件,如果使用fprintf向文件写入所有数据,其结果是生成的文件还是个文本文件。
    f、以文本方式打开的文件,如果使用fwrite向文件写入所有数据,其结果是生成的文件还是个二进制文件。正因如此,如果用文本编辑器打开这个文件查看文件中的内容会发现是乱码。
    g、文件打开后一定要检查是否打开成功。
    h、文件用完一定要关闭,否则,可能会引起数据丢失,或者影响其他文件的打开,因为多数情况下,系统限制同时处于打开状态的文件总数。
    i、以r(只读)、a(追加)和r (读写)方式打开文件时,该文件必须是已存在的文件,否则将打开不成功。
    j、以w(只写)和w (读写)方式打开一个文件时,无论该文件是否存在,都新建一个文件,这就意味着如果文件已存在,则其原有的内容将丢失。
    k、文件一旦按文本方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是文本,对应的内容都是字符‘1’。
    l、文件一旦按二进制方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是二进制文件,对应的内容都是数值1。
    m、用file只能定义指向文本文件的文件指针。
    n、用file只能定义指向二进制文件的文件指针。
    o、c语言中的文件都是流式文件,只能按顺序读写,不能进行随机读写。
    p、文件的读写方式中w 和r 都是可读可写方式,二者是完全一样的。

10、若要以“a ”方式打开一个已存在的文件,则以下叙述正确的是
    a、文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做添加和读操作。
    b、文件打开时,原有文件内容不被删除,位置指针移动到文件开头,可做重写和读操作。
    c、文件打开时,原有文件内容被删除,只可做写操作。
    d、以上各种说法都不正确。

11、在c语言中,从计算机内存中将数据写入文件中,称为
    a、输出
    b、输入
    c、修改
    d、删除

12、以下叙述中错误的是
    a、c语言中顺序读写方式不适用于二进制文件
    b、c语言中的文本文件以ascⅱ码形式存储数据
    c、c语言中对二进制文件的访问速度比文本文件快
    d、c语言中随机读写方式不适用于文本文件

13、以下程序执行后输出结果是#include int main() { file *fp; int i,k=0,n=0; fp=fopen("d1.dat","w"); if (fp == null) { printf("cannot open the file.\n"); exit(0); } for(i=1;i<4;i ) { fprintf(fp,"%d",i); } fclose(fp); fp=fopen("d1.dat","r"); if (fp == null) { printf("cannot open infile.\n"); exit(0); } fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n); fclose(fp); return 0; }
    a、123 0
    b、1 2
    c、1 23
    d、0 0

14、以下叙述中错误的是
    a、不可以用file定义指向二进制文件的文件指针。
    b、二进制文件打开后可以先读文件的末尾,而顺序文件不可以。
    c、在程序结束时,应当用fclose()函数关闭已打开的文件。
    d、在利用fread()函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据。

15、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
    a、0
    b、1
    c、-1
    d、一个非0值

练兵区——编程题——不计入总分

1、计算零件数

2、走台阶

3、将数据按照奇偶排序

结课考试

c语言程序设计考试

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

2、用字符数组作函数参数编程,利用一个数组实现字符串(允许输入带空格的字符串)的逆序存放。要求如下: (1)在主函数中从键盘输入字符串,字符串的最大长度为80个字符。 调用inverse()函数将字符串逆序存放,然后在主函数中输出逆序后的字符串。 (2)在子函数inverse()中实现字符串的逆序存放。函数原型为: void inverse(char str[]); 在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #define n 80 void inverse(char str[]); int main() { char a[n]; printf("input a string:\n"); ________; inverse(a); printf("inversed results:\n"); ________; return 0; } void inverse(char str[]) { int len, i, j; char temp; len = __________; for (___________; i    a、第9行: gets(a) 第13行: puts(a) 第22行: strlen(str) 第24行: i=0, j=len-1
    b、第9行: get(a) 第13行: put(a) 第22行: strlen(str) 第24行: i=1, j=len
    c、第9行: gets(a) 第13行: puts(a) 第22行: sizeof(str) 第24行: i=0, j=len
    d、第9行: getchar(a) 第13行: putchar(a) 第22行: sizeof(str) 第24行: i=1, j=len-1

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

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

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

6、从键盘任意输入一个实数,不使用计算绝对值函数编程计算并输出该实数的绝对值。 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { float x; printf("input a float number:"); scanf("%f", &x); ______________; printf("absolute value of x is %f\n", x); return 0; }
    a、if (x < 0) x = -x
    b、x = -x
    c、if (x > 0) continue
    d、if (x > 0) x = x

7、从键盘任意输入一个整数,编程判断它的奇偶性。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include int main() { int a; printf("input an integer number:"); scanf("%d", &a); if (________) printf("a is an even number\n"); else printf("a is an odd number\n"); return 0; }
    a、a%2 == 0
    b、a%2 = 0
    c、a/2 = 0
    d、a%2 != 0

8、某人在国外留学,不熟悉当地天气预报中的华氏温度值,请编程按每隔10°输出-40°到110°之间的华氏温度到摄氏温度的对照表,以方便他对照查找。已知华氏和摄氏温度的转换公式为c=5/9*(f-32),其中,c表示摄氏温度,f表示华氏温度。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int fahr; float celsius; for (fahr=-40; fahr<=110; __________) { celsius = ____________; printf("m\t%6.1f\n", fahr, celsius); } return 0; }
    a、第6行: fahr=fahr 10 第8行: 5.0 / 9 * (fahr - 32)
    b、第6行: fahr 第8行: 5.0 / 9 * (fahr - 32)
    c、第6行: fahr=fahr 10 第8行: 5 / 9 * (fahr - 32)
    d、第6行: fahr 第8行: 5 / 9 * (fahr - 32)

9、从键盘任意输入a,b,c的值,编程计算并输出下面一元二次方程的根 当a=0时,输出“该方程不是一元二次方程”,当a≠0时,分三种情况计算并输出方程的根,即: , 两个不相等的实根,分别为:x1 = p q,x2 = p-q , 两个相等的实根为:x1 = x2 =p , 一对共轭复根,分别为:x1 = p qi,x2 = p-qi 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #include #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); if (________) /* a=0时,输出“不是二次方程” */ { printf("it is not a quadratic equation!\n"); exit(0); } disc = b * b - 4 * a * c; /* 计算判别式 */ p = - b / (2 * a); q = sqrt(fabs(disc)) / (2 * a); if (___________) /* 判别式等于0时,输出两相等实根 */ { printf("x1 = x2 = %.2f\n", p); } else { if (__________) /* 判别式大于0时,输出两不等实根 */ { printf("x1 = %.2f, x2 = %.2f\n", p q, p-q); } else /* 判别式小于0时,输出两共轭复根 */ { printf("x1 = %.2f %.2fi, ", p, q); printf("x2 = %.2f-%.2fi\n", p, q); } } return 0; }
    a、第11行: fabs(a) <= eps 第20行: fabs(disc) <= eps 第26行: disc > eps
    b、第11行: fabs(a) = 0 第20行: fabs(disc) = 0 第26行: disc > eps
    c、第11行: fabs(a) = 0 第20行: fabs(disc) <= eps 第26行: disc >= 0
    d、第11行: fabs(a) <= eps 第20行: fabs(disc) = 0 第26行: disc >= eps

10、编程实现简单的计算器功能,要求用户按如下格式从键盘输入算式: 操作数1 运算符op 操作数2 计算并输出表达式的值,其中算术运算符包括:加( )、减(-)、乘(*)、除(/)。 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int data1, data2; char op; printf("please enter an expression:"); scanf("%d%c%d", &data1, &op, &data2); /* 输入运算表达式 */ switch (____) /* 根据输入的运算符确定执行的运算 */ { case ' ': /* 加法运算 */ printf("%d %d = %d \n", data1, data2, data1 data2); break; case '-': /* 减法运算 */ printf("%d - %d = %d \n", data1, data2, data1 - data2); break; case '*': /* 乘法运算 */ printf("%d * %d = %d \n", data1, data2, data1 * data2); break; case '/': /* 除法运算 */ if (_________) /* 为避免除0错误,检验除数是否为0 */ printf("division by zero!\n"); else printf("%d / %d = %d \n", data1, data2, data1 / data2); break; default: /* 处理非法运算符 */ printf("invalid operator! \n"); } return 0; }
    a、第8行: op 第20行: data2==0
    b、第8行: op 第20行: data2=0
    c、第8行: 'op' 第20行: data2==0
    d、第8行: "op" 第20行: data2=0

11、下面程序的功能是输出一个正整数等差数列的前十项,该输出数列的前四项之和是26,该输出数列的前四项之积是880。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int a,d,i,s,f,x; for (a=1;a<=6;a ) { for(d=1;d<=5;d ) { s=0; f=1; x=a; for(i=1;i<=4;i ) { s=s x; f=f*x; x=x d; } if(______________) { for(i=0;_________;i ) printf("=",_________); } } } return 0; }
    a、第19行: s==26 && f==880 第21行: i<10 第23行: a i*d
    b、第19行: s==26 || f==880 第21行: i<=10 第23行: a i
    c、第19行: s=26 && f=880 第21行: i<10 第23行: i*d
    d、第19行: s=26 || f=880 第21行: i<=10 第23行: d i*a

12、已知今年的工业产值为100万元,产值增长率为从键盘输入,请编程计算工业产值过多少年可实现翻一番(即增加一倍)。 提示:用符号常量current表示今年的工业产值为100万元,用变量growrate表示产值增长率,用变量year表示产值翻番所需的年数,则计算年产值增长额的计算公式为: output = output * (1 growrate) 利用迭代法循环计算,直到output >= 2*current时为止。当output >= 2*current时,表示已实现产值翻番。此时,循环被执行的次数year即为产值翻番所需的年数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include #define current 100 int main() { int year; /* 产值翻番所需年数 */ double growrate; /* 工业产值的增长率 */ double output; /* 工业总产值 */ printf("input grow rate:"); scanf("%lf", &growrate); output = current; /* 当年产值为100万元 */ for (year=0; ___________; year ) { output = ______________; } printf("when grow rate is %.0f%%, the output can be doubled after %d years.\n", growrate*100, year); return 0; }
    a、第11行: output<2*current 第13行: output * (1 growrate)
    b、第11行: output<2*current 第13行: output * growrate
    c、第11行: output<=2*current 第13行: output * (1 growrate)
    d、第11行: output<=2*current 第13行: output * growrate

13、输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include #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    a、第19行: int score[] 第24行: score[i] < 60 第26行: count
    b、第19行: int score 第24行: score[i] <= 60 第26行: count
    c、第19行: int score[] 第24行: score[i] <= 60 第26行: i
    d、第19行: int score 第24行: score[i] >= 60 第26行: score[i]

14、下面程序的功能是:输入10个正整数,求出最大数和最小数的最大公约数。要求用数组实现。 程序运行结果如下: input 10 numbers: 15 23 56 87 94 105 78 19 22 43↙ maxnum=105 minnum=15 15 在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #define n 10 int gcd(int a, int b) { int tmp, c; if (________) { tmp = a; a = b; b = tmp; } c = ________; while (c) { a = b; b = c; c = _______; } return ______; } int main() { int a[n]; int i, maxnum, minnum, res; printf("input 10 numbers:\n"); for (i = 0; i < n; i) { scanf("%d", &a[i]); } maxnum = a[0]; minnum = a[0]; for (i = 1; i < n; i) { maxnum = a[i] > maxnum ? a[i] : maxnum; minnum = a[i] < minnum ? a[i] : minnum; } printf("maxnum=%d\n",maxnum); printf("minnum=%d\n",minnum); res = gcd(maxnum, minnum); printf("%d", res); return 0; }
    a、第7行: a < b 第14行: a % b 第20行: a % b 第22行: b
    b、第7行: a <= b 第14行: b % a 第20行: a 第22行: a
    c、第7行: a >= b 第14行: a / b 第20行: a / b 第22行: c
    d、第7行: a > b 第14行: b % a 第20行: b % a 第22行: 0

15、有5个人围坐在一起,问第5个人多大年纪,他说比第4个人大2岁;问第4个人,他说比第3个人大2岁;问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。第1个人说自己10岁,问第5个人多大年纪。用递归法编写程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。递归公式为: #include unsigned int computeage(unsigned int n); int main() { unsigned int n = 5; printf("the 5th person's age is %d\n", computeage(n)); return 0; } // 函数功能:用递归算法计算第n个人的年龄 unsigned int computeage(unsigned int n) { unsigned int age; if (________) { age = 10; } else { age = ______________; } return ______; }
    a、第13行: n == 1 第19行: computeage(n - 1) 2 第21行: age
    b、第13行: n = 1 第19行: computeage(n) 2 第21行: age
    c、第13行: n = 1 第19行: computeage(n - 1) 2 第21行: n
    d、第13行: n == 1 第19行: n - 1 2 第21行: n

16、在字符串中删除与某字符相同的字符,要求用字符数组作函数参数。程序运行结果如下: input a string: hello, my friend!↙ input a character: !↙ results:hello, my friend 在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void squeeze(char s[], char c); int main() { char str[20], ch; printf("input a string:\n"); gets(str); printf("input a character:\n"); ch = getchar(); squeeze(str, ch); printf("results:%s\n", str); return 0; } void squeeze(char s[], char c) { int i, j; for (i=j=0; ________; i ) { if (_________) { ___________; j ; } } s[j] = '\0'; /* 在字符串s的末尾添加字符串结束标志 */ }
    a、第18行: s[i]!='\0' 第20行: s[i] != c 第22行: s[j] = s[i]
    b、第18行: s[i]!= '\n' 第20行: s[i] = c 第22行: s[i] = s[j]
    c、第18行: s[i]= '\0' 第20行: s[i] == c 第22行: s[j] = s[i]
    d、第18行: s[i]=='\0' 第20行: s[i] = c 第22行: s[i] = s[j]

17、36块砖,36人搬,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?请用穷举法编程求解。在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int x, y, z; for (x = 0; ________; x ) { for (y = 0; _________; y ) { z = 36 - x - y; if ( ________________) { printf("men=%d,women=%d,children=%d\n", x, y, z); } } } return 0; }
    a、第5行: x <= 9 第7行: y <= 12 第11行: 4 * x 3 * y z / 2 == 36 && z % 2 == 0
    b、第5行: x < 9 第7行: y < 12 第11行: 4 * x 3 * y z / 2 == 36 || z % 2 == 0
    c、第5行: x ≤ 9 第7行: y ≤ 12 第11行: 4 * x 3 * y z / 2 = 36 && z % 2 = 0
    d、第5行: x <= 36 第7行: y <= 36 第11行: 4 * x 3 * y z / 2 = 36 || z % 2 = 0

18、对指定的正实数n,试求满足下面平方根不等式的最小整数m,并输出不等式左边的值。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main() { int i, m; double s, n; printf("input n:\n"); scanf("%lf", &n); for (m = 1; m <= 10000; m ) { s = 0; for (i = m; ________; i ) { s = _________; } if (s > n) { _______; } } printf("result:m>=%d\n", m); printf("s=%.2lf\n", s); return 0; }
    a、第12行: i <= 2 * m 第14行: s sqrt(i) 第19行: break
    b、第12行: i <= m 第14行: s sqrt(m) 第19行: break
    c、第12行: i <= 2m 第14行: s sqrt(i) 第19行: continue
    d、第12行: i <= 2 * m 第14行: s sqrt(m) 第19行: continue

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

20、设计一个函数,用来判断一个整数是否为素数。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int isprimenumber(int number); int main() { int n, ret; printf("input n:"); scanf("%d", &n); ret = isprimenumber(n); if (___________) { printf("%d is a prime number\n", n); } else { printf("%d is not a prime number\n", n); } return 0; } //函数功能:判断number是否是素数,函数返回非0值,表示是素数,否则不是素数 int isprimenumber(int number) { int i; if (number <= 1) return 0; // 负数、0和1都不是素数 for (i=2; ________________; i ) { if (_______________) // 被整除,不是素数 return 0; } return 1; }
    a、第11行: ret != 0 第29行: i<=sqrt(number) 第31行: number % i == 0
    b、第11行: ret == 0 第29行: i<=number 第31行: number % i = 0
    c、第11行: ret = 0 第29行: i    d、第11行: ret != 1 第29行: i
21、下面程序的功能是从键盘任意输入一个4位数x,编程计算x的每一位数字相加之和(忽略整数前的正负号)。例如,输入x为1234,则由1234分离出其千位1、百位2、十位3、个位4,然后计算1 2 3 4=10,并输出10。程序的运行结果如下: input data is:-4213↙ the sum of the total bit is 10 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main() { int i1, i2, i3, i4, k, n; printf("input data is:"); scanf("%d", &n); k = fabs(n); //取绝对值 i1 = ___________; //分离出千位 i2 = ___________; //分离出百位 i3 = ___________; //分离出十位 i4 = ___________; //分离出个位 printf("the sum of the total bit is %d\n", i1 i2 i3 i4); return 0; }
    a、第9行: k / 1000 第10行: k/ 100 % 10 第11行: k / 10 % 10 第12行: k % 10
    b、第9行: k % 1000 第10行: (k - i1 * 100) / 10 第11行: (k - i1 * 1000 - i2 * 100) % 10 第12行: k % 10
    c、第9行: k % 100 第10行: (k - i1 * 1000) / 100 第11行: k / 10 第12行: (k - i1 * 100 - i2 * 10) / 10
    d、第9行: k % 10 第10行: (k - i1 * 1000) / 10 第11行: (k - i1 * 1000 - i2 * 100) / 10 第12行: k / 10

22、从键盘任意输入三角形的三边长为a,b,c,编程判断a,b,c的值能否构成一个三角形,若能构成三角形,则计算并输出三角形的面积,否则提示不能构成三角形。已知构成三角形的条件是:任意两边之和大于第三边。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main() { float a, b, c, s, area; printf("input a,b,c:"); scanf("%f,%f,%f", &a, &b, &c); if (______________) { s = (float)(a b c) / 2; area = _______________; printf("area = %f\n", area); } else { printf("it is not a triangle\n"); } return 0; }
    a、第9行: a b>c && b c>a && a c>b 第13行: sqrt(s * (s - a) * (s - b) * (s - c))
    b、第9行: a b>c || b c>a || a c>b 第13行: sqrt(s * (s - a) * (s - b) * (s - c))
    c、第9行: a b>c && b c>a && a c>b 第13行: sqrt(s(s - a)(s - b)(s - c))
    d、第9行: a b>c || b c>a || a c>b 第13行: s * (s - a) * (s - b) * (s - c)

23、已知下面程序的功能是:从键盘任意输入一个年号,判断它是否是闰年。若是闰年输出“yes”,否则输出“no”。已知符合下列条件之一者是闰年:(1)能被4整除,但不能被100整除;(2)能被400整除。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include int main() { int year, flag; printf("input a year:"); scanf("%d", &year); if (___________) flag = 1; /* 如果year是闰年,则标志变量flag置1 */ else flag = 0; /* 否则,标志变量flag置0 */ if (___________) printf("%d is a leap year!\n",year); /* 打印“是闰年”*/ else printf("%d is not a leap year!\n",year); /* 打印“不是闰年”*/ return 0; }
    a、第8行: year%4 == 0 && year0 != 0 || year@0 == 0 第14行: flag
    b、第8行: year%4 == 0 || year0 != 0 && year@0 == 0 第14行: flag=1
    c、第8行: year%4 = 0 && year0 != 0 || year@0 = 0 第14行: flag=0
    d、第8行: year/4 == 0 || year/100 != 0 && year/400 == 0 第14行: flag!=1

24、用1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,问共有几种兑换方案?每种方案各换多少枚?按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int x, y, z, count = 0; for (x=1; x<=29; x ) { for (y=1; y<=72; y ) { ____________; if (_____________) { count ; printf("%d, %d, %d\n", x, y, z); } } } printf("count = %d\n", count); return 0; }
    a、第9行: z = 100 - x - y 第11行: 5*x 2*y z == 150
    b、第9行: z x y = 100 第11行: 5*x 2*y z = 150
    c、第9行: z = 100 - x - y 第11行: 5x 2y z == 150
    d、第9行: z x y = 100 第11行: 5x 2y z == 150

25、从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号)。例如,输入-123,则忽略负号,由123分离出其百位1、十位2、个位3,然后计算3*100 2*10 1 = 321,并输出321。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main() { int x, b0, b1, b2, y; printf("input x:"); scanf("%d", &x); x = (int)fabs(x); b2 = ________; /* 计算百位数字 */ b1 = _________; /* 计算十位数字 */ b0 = _________; /* 计算个位数字 */ y = b2 b1*10 b0*100; printf("y = %d\n",y); return 0; }
    a、第10行: x / 100 第12行: x/ 10 % 10 第14行: x % 10
    b、第10行: x % 100 第12行: x/ 10 % 10 第14行: x / 10
    c、第10行: x / 100 第12行: (x - b2 * 100) % 10 第14行: x / 10
    d、第10行: x / 10 第12行: (x - b2 * 10) / 10 第14行: x % 100

26、从键盘输入一个英文字母,如果它是大写英文字母,则将其转换为小写英文字母,如果它是小写英文字母,则将其转换为大写英文字母,然后将转换后的英文字母及其ascii码值显示到屏幕上,如果不是英文字母,则不转换直接将它及其ascii码值输出到屏幕上。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { char ch; printf("press a key and then press enter:"); ch = getchar(); if (____________) ch = ch 32; else if (________________) ch = ch - 32; printf("%c, %d\n", ch, ch); return 0; }
    a、第8行: ch >= 'a' && ch <= 'z' 第12行: ch >= 'a' && ch <= 'z'
    b、第8行: ch >= a && ch <= z 第12行: ch >= a && ch <= z
    c、第8行: ch ≥ 'a' && ch ≤ 'z' 第12行: ch ≥'a' && ch ≤ 'z'
    d、第8行: ch ≥ a && ch ≤ z 第12行: ch ≥ a && ch ≤ z

27、下面程序的功能是计算1*2*3 3*4*5 … 99*100*101的值。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { long i ; long term, sum = 0; for (i=1;_______; i=i 2) { term = ______________; sum = sum term; } printf("sum = %ld\n", sum); return 0; }
    a、第6行: i<=99 第8行: i * (i 1) * (i 2)
    b、第6行: i≤99 第8行: i (i 1) (i 2)
    c、第6行: i<99 第8行: (i 1) * (i 2)*(i 3)
    d、第6行: i<=101 第8行: i * (i 1) * (i 2)

28、下面程序的功能是计算 a aa aaa … aa…a(n个a)的值,n和a的值由键盘输入。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { long ________, sum = 0; int a , i, n; printf("input a,n:"); scanf("%d,%d", &a, &n); for (i=1; i<=n; i ) { term = ___________; sum = sum term; } printf("sum = %ld\n", sum); return 0; }
    a、第4行: term = 0 第11行: term * 10 a
    b、第4行: term 第11行: 10term a
    c、第4行: term = 1 第11行: term *10 a
    d、第4行: term 第11行: a * 10 term

29、编程计算下面的分段函数,根据从键盘输入的x值,在屏幕上输出y值。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include 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 } ______________ { y = -exp(x); //x<0,则y=-exp(x) } printf("y=%f\n", y); return 0; }
    a、第14行: else if (x == 0) 第20行: else
    b、第14行: else if (x = 0) 第20行: else
    c、第14行: if (x == 0) 第20行: else
    d、第14行: if (x = 0) 第20行: else if (x<0)

30、已知不等式:1! 2! … m! < n,请编程对用户指定的n值计算并输出满足该不等式的m的整数解。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { unsigned long i, n, term = 1, sum = 0; printf("please enter n:"); scanf("%lu", &n); for (___________) { term = term * i; sum = sum term; if (sum >= n) ________; } printf("m <= %lu\n", i-1); return 0; }
    a、第7行: i=1; ;i 第11行: break
    b、第7行: i=1;i 第11行: continue
    c、第7行: i=1;i 第11行: break
    d、第7行: i=1; ;i 第11行: continue

31、以下程序中函数fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int 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\n",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=m-1 第7行: b[i]

32、马克思手稿中有这样一道趣味数学题:男人、女人和小孩总计30个人,在一家饭店里吃饭,共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,请用穷举法编程计算男人、女人和小孩各有几人。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int x, y, z; printf("man\twomen\tchildren\n"); for (x=0; x<=16; x ) { for (y=0; y<=25; y ) { _____________; if (_____________) printf("=\t]\t�\n", x, y, z); } } return 0; }
    a、第10行: z = 30 – x - y 第12行: 3*x 2*y z == 50
    b、第10行: z x y = 30 第12行: 3*x 2*y z = 50
    c、第10行: z = 30 – x - y 第12行: 3x 2y z == 50
    d、第10行: z x y = 30 第12行: 3*x 2*y z = 50

33、下面程序的功能是从键盘输入一行字符(不超过80个),统计其中的英文字符、数字字符、空格和其他字符的个数。例如,输入的一行字符为 *****c language.*****↙ 输出为 english character: 9 digit character: 0 space: 1 other character: 11 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include #define str_len 80 int main() { char str[str_len 1]; int len, i, letter = 0, digit = 0, space = 0, others = 0; printf("please input a string:"); ___________; for (i = 0; __________; i ) { if (___________________________) letter ; /*统计英文字符 */ else if (______________________) digit ; /*统计数字字符 */ else if (str[i] == ' ' ) space ; /*统计空格*/ else others ; /*统计其他字符的个数*/ } printf("english character: %d\n", letter); printf("digit character: %d\n", digit); printf("space: %d\n", space); printf("other character: %d\n", others); return 0; }
    a、第9行: gets(str) 第10行: str[i] != '\0' 第12行: str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'a' && str[i] <= 'z' 第14行: str[i] >= '0' && str[i] <= '9'
    b、第9行: scanf("%s",str) 第10行: str[i] != '\0' 第12行: 'z' >= str[i] >= 'a' || 'a' <= str[i] <= 'z' 第14行: 9 >= str[i] >= 0
    c、第9行: puts(str) 第10行: str[i] != '\n' 第12行: 'z' >= str[i] >= 'a' || 'a' <= str[i] <= 'z' 第14行: str[i] >= 0 || str[i] <= 9
    d、第9行: getchar("%s",str) 第10行: str[i] != '\n' 第12行: str[i] >= 'a' || str[i] <= 'z' && str[i] >= 'a' || str[i] <= 'z' 第14行: str[i] >= 0 && str[i] <= 9

34、下面程序代码的功能是判断输入整数的正负性和奇偶性,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int m; printf("input m: "); scanf("%d", &m); //输入一个整数 if (m > 0) //是否为正数 { if (m % 2 == 0) //是正数,且能被2整除,则是正偶数 { printf("%d is a positive even\n", m); } else //不能被2整除,则是正奇数 { printf("%d is a positive odd\n", m); } } _______________ //判断是否为负数 { _______________ { printf("%d is a negative even\n", m); //是负偶数 } else { printf("%d is a negative odd\n", m); //是负奇数 } } else { printf("%d is zero.it is an even\n", m); } return 0; }
    a、第19行代码: else if(m < 0) 第22行代码: if (m % 2 == 0)
    b、第19行代码: if(m < 0) 第22行代码: if (m % 2 == 0)
    c、第19行代码: else 第22行代码: if (m % 2 != 0)
    d、第19行代码: if(m < 0) 第22行代码: if (m % 2 != 0)

35、相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1个格子中放1粒,第2格中放2粒,第3格中放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。请问:国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米(已知1立方米麦子约1.42e8粒)?按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define const 1.42e8 int main() { int n; double term = 1; double sum = 1; for (________; n <= 64; n ) { ________________; sum = sum term; } printf("sum = %e\n", sum); printf("volum = %e\n", _________); return 0; }
    a、第8行: n=2 第10行: term = term * 2 第15行: sum / const
    b、第8行: n=1 第10行: term = term 2 第15行: sum / const
    c、第8行: n=0 第10行: term = term * 2 第15行: sum * const
    d、第8行: n=1 第10行: term = term 2 第15行: sum * const

36、韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。你知道韩信至少有多少兵吗?按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int x = 1; int find = 0; //设置找到标志为假 while (_______) { if (_________________) { printf("x = %d\n", x); find = 1; } x ; } return 0; }
    a、第6行: !find 第8行: x%5==1 && x%6==5 && x%7==4 && x==10
    b、第6行: find!=0 第8行: x%5=1 && x%6=5 && x%7=4 && x=10
    c、第6行: find=0 第8行: x/5==1 && x/6==5 && x/7==4 && x/11==10
    d、第6行: !find==0 第8行: x/5=1 && x/6=5 && x/7=4 && x/11=10

37、以下程序用来完成数学函数p(x, y)的计算,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include double f(double a); int main() { double x, y, p; scanf("%lf%lf", &x, &y); p = x * y / f(______________); printf("result=%lf\n", p); return 0; } double f(double a) { double f1; f1 = pow(4, a) sqrt(10 _____________); return f1; }
    a、第8行: x 2*y 第17行: pow(3,2*a)
    b、第8行: x 2y 第17行: pow(3,2a)
    c、第8行: sqrt(x 2*y) 第17行: sqrt(pow(3,2*a))
    d、第8行: sqrt(x 2y) 第17行: sqrt(pow(3,2a))

38、下面程序的功能是:输入一些整数,编程计算并输出其中所有正数的和,输入负数时不累加,继续输入下一个数。输入零时,表示输入数据结束。要求最后统计出累加的项数。在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int i = 0, n, sum = 0; printf("input a number:\n"); scanf("%d", &n); while(_________) { if (________) { sum = sum n; ______; } printf("input a number:\n"); scanf("%d", &n); } printf("sum=%d,count=%d\n", sum, i); return 0; }
    a、第7行: n != 0 第9行: n > 0 第12行: i
    b、第7行: n == 0 第9行: n >= 0 第12行: n
    c、第7行: n = 0 第9行: n ≥ 0 第12行: i
    d、第7行: n ≠ 0 第9行: n > 0 第12行: n

39、计算圆柱体的表面积:从键盘输入底面半径r和高h,输出圆柱体的表面积,要求保留三位小数,格式见样例。 样例输入: r=3.5,h=9 样例输出:area = 274.889 程序代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main() { const double pi=3.14159; double r,h,s1,s2,s; ______________; s1=pi*r*r; s2=2*pi*r*h; s=s1*2.0 s2; _______________; return 0; }
    a、第7行: scanf("r=%lf,h=%lf", &r, &h); 第12行: printf("area = %.3lf\n", s);
    b、第7行: scanf("r=%.1f,h=%.1f", &r, &h); 第12行: printf("area = %.3lf\n", s);
    c、第7行: scanf("%.1f,%.1f", r, h); 第12行: printf("area = %f\n", s);
    d、第7行: scanf("r=%lf r=%lf", &r, &h); 第12行: printf("area = %.3lf\n", s);

40、输出满足个位的数字、十位上的数字和百位上的数字都相等的所有三位数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int g, s, b; for (g = 1; g < 10; g ) for (s = 1; s < 10; s ) for (b = 1; b < 10; b ) { if (________________) printf("]",______________); } return 0; }
    a、第9行: g==s && s==b 第11行: g s*10 b*100
    b、第9行: g==s ||s ==b 第11行: g s*10 b*100
    c、第9行: g=s && s=b 第11行: g 10s 100b
    d、第9行: g=s || s=b 第11行: g 10s 100b

41、用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define n 20 void caculateyh(int a[][n], int n); void printyh(int a[][n], int n); int main() { int a[n][n] = , 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    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[j-1][i-1] a[i-1][j] 第38行: j<=i
    c、第16行: int a[][n] 第22行: a[0][i] = 1 第24行: i=2 第28行: a[j-1][i-1] a[i-1][j] 第38行: j    d、第16行: int a[n][] 第22行: a[0][i] = 1 第24行: i=1 第28行: a[i-1][j-1] a[j][i-1] 第38行: j
42、假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子?请编程求解该问题。 提示:兔子的繁殖情况如图所示,图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律: (1)每月小兔对数 = 上个月成兔对数。 (2)每月成兔对数 = 上个月成兔对数 上个月小兔对数。 综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。 用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式: 按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #define n 12 void fibonacci(int f[], int n); int main() { int f[n], i; fibonacci(f, n); printf("\ntotal = %d\n", f[n-1]); return 0; } /* 函数功能:计算并打印fibonacci数列的前n项 */ void fibonacci(int f[], int n) { int i; f[0] = ____; f[1] = ____; for (_______; i    a、第16行: 1 第17行: 2 第18行: i=2 第20行: f[i-1] f[i-2] 第23行: i=0
    b、第16行: 0 第17行: 1 第18行: i=1 第20行: f[i] f[i-1] 第23行: i=1
    c、第16行: 0 第17行: 2 第18行: i=0 第20行: f[i-1] f[i-2] 第23行: i=2
    d、第16行: 1 第17行: 1 第18行: i=2 第20行: f[i] f[i-2] 第23行: i=1

43、以下程序的功能是根据输入的“y”或“y”与“n”或“n“,在屏幕上分别显示出“ this is yes.”与 “ this is no.”,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void yesno(char ch) { switch (ch) { case 'y': case 'y': printf("this is yes. \n"); ______________; case 'n': case 'n': printf("this is no. \n"); } } int main() { char ch; printf("\nenter a char 'y', 'y' or 'n', 'n': "); ch = _______________; printf("ch: % c", ch); ____________; return 0; }
    a、第10行: break 第22行: getchar() 第25行: yesno(ch)
    b、第10行: continue 第22行: getchar() 第25行: yesno()
    c、第10行: continue 第22行: scanf("%c",&c) 第25行: yesno(ch)
    d、第10行: break 第22行: scanf("%c",&c) 第25行: yesno()

44、有一堆零件(100--200之间),如果分成4个零件一组的若干组,则多2个零件,如果分成7个零件一组的若干组,则多3个零件,如果分成9个零件一组的若干组,则多5个零件,编程计算这堆零件的总数。在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int i; for (i = 100; i <= 200; i ) { if (____________) { if (___________) { if (___________) printf("%d\n", i); } } } return 0; }
    a、第7行: (i - 2) % 4 == 0 第9行: (i - 3) % 7 == 0 第11行: (i - 5) % 9 == 0
    b、第7行: (i - 2) % 4 = 0 第9行: (i - 3) % 7 = 0 第11行: (i - 5) % 9 = 0
    c、第7行: (i - 2) / 4 == 0 第9行: (i - 3) / 7 == 0 第11行: (i - 5) / 9 == 0
    d、第7行: (i - 2) / 4 = 0 第9行: (i - 3) / 7 = 0 第11行: (i - 5) / 9 = 0

猜你喜欢

  • 2022-12-05 21:58
  • 2022-12-05 21:51
  • 2022-12-05 21:49
  • 2022-12-05 21:46
  • 2022-12-05 21:39
  • 2022-12-05 20:42
  • 2022-12-05 20:26
  • 2022-12-05 20:24
  • 2022-12-05 19:48
  • 2022-12-05 19:26
网站分类
最新发表
标签列表
网站地图