内容正文:
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(三)原卷版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 下列哪个不是C语言的特点( )
A. 结构化程序设计 B. 面向对象 C. 移植性好 D. 中级语言
2. 已知大写字母A的ASCII值是65,小写字母a的ASCII值是97。下列不能将变量c中的大写字母转换为对应小写字母的表达式是( )
A. c=(‘A’+c)%26-‘a’ B. c=c+32
C. c=c-‘A’+‘a’ D. c=(c-‘A’)%26+‘a’
3. 若有定义“int x=12,y=8,z;”,在其后执行语句“z=0.9+x/y;”,则z的值为( )
A. 1.9 B. 2.9 C.1 D. 2.4
4. 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是( )
if (x>y)
z=x;x=y;y=z;
A. x=10, y=20, z=30 B. x=20, y=30, z=20
C. x=20, y=30, z=10 D. x=20, y=30, z=30
5. 若x、i、j、k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为( )
A. 4 B. 16 C. 32 D. 52
6. 设有int i; char c; float f; 则表达式10+'a'+i*f-c的结果类型为( )
A. int B. char C. float D. double
7. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int x = 10, y = 3;
printf("%d", y = x / y);
}
A. 1 B. 3 C. 3.333 D. 0
8. 若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是( )
A. a=a+b; b=a-b; a=a-b; B. t=a; a=b; b=t;
C. a=t; t=b; b=a; D. t=b; b=a; a=t;
9. 以下程序段的输出结果是( )
int a = 10;
printf("%d
", ++a);
printf("%d
", a--);
A. 10, 10 B. 11, 10 C. 11, 11 D. 10, 11
10. 若int i=10; 执行下列程序后,变量i的正确结果是( )
switch(i) {
case 9: i+=1;
case 10: i+=1;
case 11: i+=1;
default: i+=1;
}
A. 10 B. 11 C. 12 D. 13
11. 判断char型变量c是否为大写字母的正确表达式是( )
A. 'A'<=c<='Z' B. (c>='A')&(c<='Z')
C.('A'<=c)&&('Z'>=c) D. (c>='A')&&(c<='Z')
12. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int i, sum = 0;
for(i = 1; i <= 3; sum++)
sum += i;
printf("%d", sum);
}
A. 6 B. 3 C. 死循环 D. 0
13. 以下描述正确的是( )
A. continue语句的作用是结束整个循环的执行
B. 只能在循环体内和switch语句体内使用break语句
C. 在循环体内使用break语句或continue语句的作用相同
D. 从多层循环嵌套中退出时,只能使用goto语句
14. 以下能正确定义一维数组的选项是( )
A. int a[5]={0,1,2,3,4,5}; B. char a[]={0,1,2,3,4,5};
C. char a={'A','B','C'}; D. int a[5]="0123";
15. 若有说明:int a[][4]={0,0}; 则下面不正确的叙述是( )
A. 数组a的每个元素都可得到初值0
B. 二维数组a的第一维大小为1
C. 因为二维数组初值个数除以第二维大小的值的商为1,故数组a的行数为1
D. 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
16. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int i, s=0;
for(i=0; i<4; i++)
s += a[i][i];
printf("%d", s);
}
A. 34 B. 68 C. 10 D. 不确定
17. 以下关于函数的叙述中正确的是( )
A.函数调用必须传递实参 B. 函数必须返回一个值
C.函数中可以定义另一个函数 D.函数名必须唯一
18. 以下程序的输出结果是( )
#include <stdio.h>
int func(int a, int b) {
return (a+b);
}
main() {
int x=2, y=5, z=8, r;
r = func(func(x,y), z);
printf("%d", r);
}
A. 12 B. 13 C. 14 D. 15
19. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int x) {
if(x/2 > 0) fun(x/2);
printf("%d ", x);
}
main() {
fun(20);
}
A. 20 10 5 2 1 B. 1 2 5 10 20 C. 20 10 5 2 D. 1 2 5 10
20. 以下程序的输出结果是( )
#include <stdio.h>
int f(int n) {
static int a = 1;
n += a++;
return n;
}
main() {
int a = 3, s;
s = f(a);
s = s + f(a);
printf("%d", s);
}
A. 7 B. 8 C. 9 D. 10
21. 若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是( )。
A. 函数的形参和实参分别占用不同的存储单元
B. 形参只是形式上的存在,不占用具体存储单元
C. 同名的实参和形参占同一存储单元
D. 函数的实参和其对应的形参共占同一存储单元
22. 有以下程序,运行结果是( )
#include<stdio.h>
int f(int x,int y)
{return ((y-x)*x);
}
main()
{int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d
",d);
}
A. 7 B. 8 C. 9 D. 10
23.以下函数表示空函数的是( )
A. int fun( ){return 0;} B. int fun( );
C. int fun(){} D. int fun(int a,int b){return 1;}
24. 若有定义:int a[5], *p=a; 则对a数组元素的正确引用是( )
A. *&a[5] B. a+2 C. *(p+5) D. *(a+2)
25.若有定义“int a[2][3],*p[3];”则以下语句中正确的是( )
A.p=a; B.p[0]=a; C.p[0]=&a[1][2]; D. p[1]=&a;
二、简答题(共3小题,每题5分,共15分)
1. 下面程序段的运行结果是( )
main()
{
char x[ ]= "the teacher";
int i = 0;
while (x[++i]!= '\0')
if (x[i-1] = = 't')
printf("%c",x[i]);
}
2.阅读以下程序段,写出输出结果( )
#include <stdio.h>
main()
{ int a=28,b;
char s[10],*p;
p = s;
do { b=a%16;
if(b<10) *p = b+48;
else *p=b+55;
p++;
a=a/5;
}while (a>0);
*p='\0';
puts(s);
}
3.阅读以下程序段,写出输出结果( )
#include <stdio.h>
main() {
int i, j, k = 0;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= i; j++) {
k += i * j;
if (k % 5 == 0)
continue;
k--;
}
k += 2;
}
printf("k = %d
", k);
}
三、案例分析题(共3小题,每题5分,共15分)
1. 下面程序的功能是用do-while语句求1~1000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印5个数。
#include <stdio.h>
main()
{ int i = 1, j = 0;
do {
if ( ① )
{ printf (" %4d ", i);
j = j + 1;
if ( ② ) printf ("
");
}
i = i + 1;
}
while (i < 1000);
}
2. 统计整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。
例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2。
#include <stdio.h>
int c1,c2,c3;
void fun(long n)
{
c1 = c2 = c3 = 0;
while (n)
{
switch( ③ )
{
case 1: c1++; break;
case 2: c2++; ④ ;
case 3: c3++;
}
n /= 10;
}
}
main()
{ int n=123114350;
fun(n);
printf("
n=%d c1=%d c2=%d c3=%d
",n,c1,c2,c3);
}
3. 下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,请填空。
main ()
{ int a[2][3] = {{1,2,3},{4,5,6}};
int b[3][2], i, j;
printf ("array a:
");
for (i = 0; i < = 1; i++)
{ for (j = 0; ⑤ j++)
{ printf ("%5d", a[i][j]);
⑥ ;
}
printf ("
");
}
printf ("array b:
");
for (i = 0; ⑦ ; i++)
{ for (j = 0; j<= 1; j++)
printf ("%5d",b[i][j]);
printf ("
");
}
}
四、综合应用题(共2小题,每题10分,共20分)
1. 求方程ax2+bx+c=0的根,用2个函数分别求当b24ac大于0和等于0时的根并输出结果,从主函数中输入a,b,c的值。
2. 从键盘输入若干整数(个数应少于50个),其值在0~4的范围内,用-1作为输入结束的标志。统计每个整数的个数。试编程序完成。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:本冲刺卷严格依据山东省软件与应用技术类高考考纲编写,依托《编程语言基础—C语言》(高教版第五版),聚焦高三考生冲刺需求,助力高效提分。内容上深度覆盖考纲掌握、理解层级考点,既系统梳理构建知识框架,又强化应用能力训练;同时结合近五年高考真题,精准把握高频考点、命题趋势与题型特点,确保贴合高考方向。
山东省软件与应用技术类
《C语言程序设计》高教版第五版
高频考点冲刺卷(三)解析版
时间:60分钟 总分:100分
班级 姓名 学号 成绩
一、单选题(共25小题,每题2分,共50分)
1. 下列哪个不是C语言的特点?( )
A. 结构化程序设计 B. 面向对象 C. 移植性好 D. 中级语言
答案:C
解析:C语言是结构化程序设计语言,具有移植性好、高效灵活等特点,属于中级语言(既有高级语言的特性,又能进行底层操作)。C++才是面向对象语言,C语言本身不支持面向对象编程。
2. 已知大写字母A的ASCII值是65,小写字母a的ASCII值是97。下列不能将变量c中的大写字母转换为对应小写字母的表达式是( )
A. c=(‘A’+c)%26-‘a’ B. c=c+32
C. c=c-‘A’+‘a’ D. c=(c-‘A’)%26+‘a’
答案:A
解析:小写字母比与之对应的大写字母的ASCII值大32,。A选项中不能实现将变量c中的大写字母转换为小写字母。
3. 若有定义“int x=12,y=8,z;”,在其后执行语句“z=0.9+x/y;”,则z的值为( )
A. 1.9 B. 2.9 C.1 D. 2.4
答案:C
解析:先计算“x/y”,结果为1;在计算“0.9+1”,结果为1.9。又因为z为整形变量,所以z的值为1。
4. 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是( )。
if (x>y)
z=x;x=y;y=z;
A. x=10, y=20, z=30 B. x=20, y=30, z=20
C. x=20, y=30, z=10 D. x=20, y=30, z=30
答案:D
解析:初始值:x=10, y=20, z=30。if (x>y) 判断 10>20 为假,因此不执行 z=x;。执行 x=y;,将 y 的值赋给 x,此时 x=20。执行 y=z;,将 z 的值赋给 y,此时 y=30。z 保持不变,仍为 30。
因此,执行后 x=20, y=30, z=30,对应选项 D。
5. 若x、i、j、k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为?( )
A. 4 B. 16 C. 32 D. 52
答案:C
解析:逗号表达式的值是最后一个表达式的值。先计算i=4,j=16,最后k=32,整个表达式值为32。
6. 设有int i; char c; float f; 则表达式10+'a'+i*f-c的结果类型为?( )
A. int B. char C. float D. double
答案:D
解析:类型转换规则:char→int→unsigned→long→float→double。'a'转为97(int),i*f为int*float→float→double,整个表达式最终为double类型。
7. 以下程序的输出结果是?( )
#include <stdio.h>
main() {
int x = 10, y = 3;
printf("%d", y = x / y);
}
A. 1 B. 3 C. 3.333 D. 0
答案:B
解析:x/y是整数除法,10/3=3。赋值表达式y=x/y的值为3,printf输出该值。
8. 若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是?( )
A. a=a+b; b=a-b; a=a-b; B. t=a; a=b; b=t;
C. a=t; t=b; b=a; D. t=b; b=a; a=t;
答案:B
解析:C选项错误在于t未初始化就被使用。交换两个变量的正确方法:使用中间变量或数学方法。
9. 以下程序段的输出结果是( )
int a = 10;
printf("%d
", ++a);
printf("%d
", a--);
A. 10, 10 B. 11, 10 C. 11, 11 D. 10, 11
答案:C
解析:++a先自增后使用,输出11;a--先使用后自减,输出11但a变为10。
10. 若int i=10; 执行下列程序后,变量i的正确结果是( )
switch(i) {
case 9: i+=1;
case 10: i+=1;
case 11: i+=1;
default: i+=1;
}
A. 10 B. 11 C. 12 D. 13
答案:D
解析:switch语句没有break会"穿透"执行。i=10匹配case 10,执行后面所有语句:
- i+=1 → i=11
- case 11: i+=1 → i=12
- default: i+=1 → i=13
11. 判断char型变量c是否为大写字母的正确表达式是( )
A. 'A'<=c<='Z' B. (c>='A')&(c<='Z')
C. ('A'<=c)&&('Z'>=c) D. (c>='A')&&(c<='Z')
答案:D
解析:A错在连续比较的写法,B错在用&而不是&&,C虽然逻辑正确但不是常见写法,D是标准写法。
12. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int i, sum = 0;
for(i = 1; i <= 3; sum++)
sum += i;
printf("%d", sum);
}
A. 6 B. 3 C. 死循环 D. 0
答案:C
解析:for循环中i值从未改变,i<=3始终成立,导致死循环。
13. 以下描述正确的是( )
A. continue语句的作用是结束整个循环的执行
B. 只能在循环体内和switch语句体内使用break语句
C. 在循环体内使用break语句或continue语句的作用相同
D. 从多层循环嵌套中退出时,只能使用goto语句
答案:B
解析:A错在continue只结束本次循环;C错在break和continue作用不同;D错在还有其它退出方法。
14. 以下能正确定义一维数组的选项是( )
A. int a[5]={0,1,2,3,4,5}; B. char a[]={0,1,2,3,4,5};
C. char a={'A','B','C'}; D. int a[5]="0123";
答案:B
解析:A初始值过多,超过数组长度;B正确,不指定长度自动计算;C是字符变量不是数组;D字符串不能初始化整型数组。
15. 若有说明:int a[][4]={0,0}; 则下面不正确的叙述是( )
A. 数组a的每个元素都可得到初值0
B. 二维数组a的第一维大小为1
C. 因为二维数组初值个数除以第二维大小的值的商为1,故数组a的行数为1
D. 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
答案:D
解析:int a[][4]={0,0}定义1行4列数组,前两个元素为0,其余自动初始化为0,D错误。16. 以下程序的输出结果是( )
#include <stdio.h>
main() {
int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int i, s=0;
for(i=0; i<4; i++)
s += a[i][i];
printf("%d", s);
}
A. 34 B. 68 C. 10 D. 不确定
答案:A
解析:求主对角线元素和:a[0][0]+a[1][1]+a[2][2]+a[3][3]=1+6+11+16=34
17. 以下关于函数的叙述中正确的是( )
A.函数调用必须传递实参 B. 函数必须返回一个值
C.函数中可以定义另一个函数 D.函数名必须唯一
答案:D
解析:A错在无参函数不需要实参;B错在void函数不返回值;C错在C语言不支持函数的嵌套定义。
18. 以下程序的输出结果是( )
#include <stdio.h>
int func(int a, int b) {
return (a+b);
}
main() {
int x=2, y=5, z=8, r;
r = func(func(x,y), z);
printf("%d", r);
}
A. 12 B. 13 C. 14 D. 15
答案:D
解析:先计算func(2,5)=7,再计算func(7,8)=15
19. 以下程序的输出结果是( )
#include <stdio.h>
void fun(int x) {
if(x/2 > 0) fun(x/2);
printf("%d ", x);
}
main() {
fun(20);
}
A. 20 10 5 2 1 B. 1 2 5 10 20 C. 20 10 5 2 D. 1 2 5 10
答案:B
解析:递归调用过程:
fun(20)→fun(10)→fun(5)→fun(2)→fun(1);返回顺序:1→2→5→10→20。
20. 以下程序的输出结果是( )
#include <stdio.h>
int f(int n) {
static int a = 1;
n += a++;
return n;
}
main() {
int a = 3, s;
s = f(a);
s = s + f(a);
printf("%d", s);
}
A. 7 B. 8 C. 9 D. 10
答案:C
解析:静态变量a只初始化一次:
第一次调用:a=1, n=3+1=4, a++=2, 返回4
第二次调用:a=2, n=3+2=5, a++=3, 返回5
s=4+5=9
21. 若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是( )。
A. 函数的形参和实参分别占用不同的存储单元
B. 形参只是形式上的存在,不占用具体存储单元
C. 同名的实参和形参占同一存储单元
D. 函数的实参和其对应的形参共占同一存储单元
答案:A
解析:在C语言中,实参变量与形参变量的数据传递是“值传递”,属于单向传递,只由实参传递给形参,而不能由形参传递给实参。在内存中,实参单元与形参单元是不同的单元。
22. 有以下程序,运行结果是( )
#include<stdio.h>
int f(int x,int y)
{return ((y-x)*x);
}
main()
{int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d
",d);
}
A. 7 B. 8 C. 9 D. 10
答案:C
解析:在主函数中调用f(a,b)函数返回3,调用f(a,c)函数返回6,所以外层调用f(f(a,b),f(a,c)),即调用f(3,6)函数返回9。
23.以下函数表示空函数的是( )
A. int fun( ){return 0;} B. int fun( );
C. int fun(){} D. int fun(int a,int b){return 1;}
答案:C
解析:空函数是函数体没有执行语句的函数。A、D不是空函数,B是函数声明,不是函数。
24. 若有定义:int a[5], *p=a; 则对a数组元素的正确引用是( )
A. *&a[5] B. a+2 C. *(p+5) D. *(a+2)
答案:D
解析:A、C越界访问;B是地址不是值;D等价于a[2]
25.若有定义“int a[2][3],*p[3];”则以下语句中正确的是( )
A.p=a; B.p[0]=a; C.p[0]=&a[1][2]; D. p[1]=&a;
答案:C
解析:A选项错误,因为p是指向一个指针数组,而数组名相当于常量,不能重新赋值。B选项错误,赋值号两边的类型不匹配。D选项错误,a本身就是数组名,不需要再取地址。
二、简答题(共3小题,每题5分,共15分)
1. 下面程序段的运行结果是( )
main()
{
char x[ ]= "the teacher";
int i = 0;
while (x[++i]!= '\0')
if (x[i-1] = = 't')
printf("%c",x[i]);
}
答案:he
解析:程序输出的是数组元素的前一个元素的值为 't'的元素的值,所以输出第一个字符为 'h',第二个为 'e'。
2.阅读以下程序段,写出输出结果( )
#include <stdio.h>
main()
{ int a=28,b;
char s[10],*p;
p = s;
do { b=a%16;
if(b<10) *p = b+48;
else *p=b+55;
p++;
a=a/5;
}while (a>0);
*p='\0';
puts(s);
}
答案:C51
解析:
1. 初始化'a=28',指针 'p' 指向字符数组 's' 的首地址。
2. 进入循环:
第一次:'b=28%16=12','*p=12+55=67'(对应字符 'C'),'p++','a=28/5=5'。
第二次:'b=5%16=5','*p=5+48=53'(对应字符 '5'),'p++','a=5/5=1'。
第三次:'b=1%16=1','*p=1+48=49'(对应字符 '1'),'p++','a=1/5=0'。
3. 循环结束后,在 'p' 当前位置添加字符串结束符 '\0',此时 's' 中的内容为 '"C51"'。
4. 调用 'puts(s)' 输出字符串 '"C51"'。
3.阅读以下程序段,写出输出结果( )
#include <stdio.h>
main() {
int i, j, k = 0;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= i; j++) {
k += i * j;
if (k % 5 == 0)
continue;
k--;
}
k += 2;
}
printf("k = %d
", k);
}
答案:
k=25
解析:初始化:k = 0
当 i = 1:内层循环 j 从 1 到 1:
j = 1:k += i * j → k = 0 + 1 * 1 = 1
k % 5 == 0?1 % 5 = 1,不为 0,条件假。
执行 k-- → k = 1 - 1 = 0
内层循环结束。
执行 k += 2 → k = 0 + 2 = 2
i++ → i = 2
当 i = 2:内层循环 j 从 1 到 2:
j = 1:k += i * j → k = 2 + 2 * 1 = 4
k % 5 == 0?4 % 5 = 4,不为 0,条件假。
执行 k-- → k = 4 - 1 = 3
j = 2:k += i * j → k = 3 + 2 * 2 = 7
k % 5 == 0?7 % 5 = 2,不为 0,条件假。
执行 k-- → k = 7 - 1 = 6
内层循环结束。
执行 k += 2 → k = 6 + 2 = 8
i++ → i = 3
当 i = 3:内层循环 j 从 1 到 3:
j = 1:k += i * j → k = 8 + 3 * 1 = 11
k % 5 == 0?11 % 5 = 1,不为 0,条件假。
执行 k-- → k = 11 - 1 = 10
j = 2:
k += i * j → k = 10 + 3 * 2 = 16
k % 5 == 0?16 % 5 = 1,不为 0,条件假。
执行 k-- → k = 16 - 1 = 15
j = 3:k += i * j → k = 15 + 3 * 3 = 24
k % 5 == 0?24 % 5 = 4,不为 0,条件假。
执行 k-- → k = 24 - 1 = 23
内层循环结束。
执行 k += 2 → k = 23 + 2 = 25
i++ → i = 4,不满足 i <= 3,循环结束。
三、案例分析题(共3小题,每题5分,共15分)
1. 下面程序的功能是用do-while语句求1~1000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印5个数。
#include <stdio.h>
main()
{ int i = 1, j = 0;
do {
if ( ① )
{ printf (" %4d ", i);
j = j + 1;
if ( ② ) printf ("
");
}
i = i + 1;
}
while (i < 1000);
}
答案:
①i%3==2&&i%5==3 && i%7==2
②j%5==0
2. 统计整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。
例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2。
#include <stdio.h>
int c1,c2,c3;
void fun(long n)
{
c1 = c2 = c3 = 0;
while (n)
{
switch( ③ )
{
case 1: c1++; break;
case 2: c2++; ④ ;
case 3: c3++;
}
n /= 10;
}
}
main()
{ int n=123114350;
fun(n);
printf("
n=%d c1=%d c2=%d c3=%d
",n,c1,c2,c3);
}
答案:
③n % 10
④break
3. 下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中,请填空。
main ()
{ int a[2][3] = {{1,2,3},{4,5,6}};
int b[3][2], i, j;
printf ("array a:
");
for (i = 0; i < = 1; i++)
{ for (j = 0; ⑤ j++)
{ printf ("%5d", a[i][j]);
⑥ ;
}
printf ("
");
}
printf ("array b:
");
for (i = 0; ⑦ ; i++)
{ for (j = 0; j<= 1; j++)
printf ("%5d",b[i][j]);
printf ("
");
}
}
答案:
⑤j<=2;
⑥b[j][i]=a[i][j]
⑦i<=2
四、综合应用题(共2小题,每题10分,共20分)
1. 求方程ax2+bx+c=0的根,用2个函数分别求当b24ac大于0和等于0时的根并输出结果,从主函数中输入a,b,c的值。
答案:
参考程序:
#include <stdio.h>
void result1(float a,float b,float c)
{
float x;
if(b*b-4*a*c==0)
x=-b/(2*a);
printf("b*b-4*a*c=0,方程的根是%f
",x);
}
void result2(float a,float b,float c)
{
float x1,x2;
if(b*b-4*a*c>0)
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("b*b-4*a*c>0,方程的根是x1=%f,x2=%f
",x1,x2);
}
main( )
{
float a,b,c;
printf("输入a,b,c的值:
");
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
if(b*b-4*a*c<0) printf("方程无根
");
else
if(b*b-4*a*c>0) result2(a,b,c);
else result1(a,b,c);
}
2. 从键盘输入若干整数(个数应少于50个),其值在0~4的范围内,用-1作为输入结束的标志。统计每个整数的个数。试编程序完成。
答案:
参考程序:
#include <stdio.h>
main( )
{
int a[50],b[5]={0},i;
printf("输入若干整数,以-1作为结束标志
");
for(i=0;i<50;i++)
{
scanf("%d",&a[i]);
if(a[i]==-1) break;
else
switch(a[i])
{
case 0: b[0]++; break;
case 1: b[1]++; break;
case 2: b[2]++; break;
case 3: b[3]++; break;
case 4: b[4]++; break;
}
}
for(i=0;i<5; i++)
printf("%d的个数:%d
",i,b[i]);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$