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