c语言题库(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题
1. C语言并不是非常严格的算法语言,在以下关于C语言的不严格的叙述中,错误的说法是_______。
A. 大写字母和小写字母的意义相同
B. 有些不同类型的变量可以在一个表达式中运算
C. 在赋值表达式中等号"="左边的变量和右边的值可以是不同类型
D. 同一个运算符号在不同的场合可以有不同的含义
【答案】A
2. 一个完整的c语言程序包含一个或多个函数,对于函数main(),哪种说法是不正确的是______。
A. 它是程序开始运行的第一个被调用的函数
B. 没有它程序就无法运行
C. 它是唯一不可缺少的函数
D. 有没有它都行
【答案】D
3. C语言程序中每一个语句和数据定义的最后必须有一个______。
A. 分号
B. 逗号
C. 空格
D.冒号
【答案】A
4. 要把高级语言编写的源程序转换为目标程序,需要使用_______。
A. 编辑程序
B. 驱动程序
C. 诊断程序
D. 编译程序
【答案】D
5. 一个C程序的执行是从________。
A. 本程序的main函数开始,到main函数结束
B. 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C. 本程序的main函数开始,到本程序文件的最后一个函数结束
D. 本程序文件的第一个函数开始,到本程序main函数结束
【答案】A
6. 结构化程序由三种基本结构组成,三种基本结构组成的算法______。
A. 可以完成任何复杂的任务
B. 用C只能完成部分复杂的任务
C. 用C只能完成符合结构化的任务
D. 用C只能完成一些简单的任务
【答案】A
7. 以下叙述中正确的是_____。
A. C程序中的注释只能出现在程序的开始位置和语句的后面
B. C程序书写格式严格,要求一行内只能写一个语句
C. C程序书写格式自由,一个语句可以写在多行上
D. 用C语言编写的程序只能放在一个程序文件中
【答案】C
8. 以下叙述中正确的是_____。
A. C程序的基本组成单位是语句
B. C程序的每一行只能写一条语句
C. 简单C语句必须以分号结束
D. C语句必须在一行内写完
【答案】C
9. C语言源程序名的后缀是_____。
A. .exe
B. .c
C. .obj
D. .cp
【答案】B
10. 以下叙述中错误的是_____。
A. C语言是一种结构化程序设计语言
B. 结构化程序有顺序、分支、循环三种基本结构组成
C. 使用三种基本结构构成的程序只能解决简单问题
D. 结构化程序设计提倡模块化的设计方法
【答案】C
二、判断题
1. C程序中注释部分可以出现在程序中任意合适的地方
【答案】T
2. 花括号"{"和"}"只能作为函数体的定界符
【答案】F
3. 构成C程序的基本单位是函数,所有函数名都可以由用户命名【答案】F
4. C语言严格区分大小写字母
5. 分号是C语句之间的分隔符,不是语句的一部分
【答案】F
6. 计算机不能直接执行用C语言编写的源程序
【答案】T
7. 一个C程序可以由多个函数组成,但必须有一个main函数。
【答案】T
8. 一个C函数由函数首部和函数体组成。
【答案】T
三、简答题
1. C语言程序的基本单位是什么?它的结构又如何?
【答案】
函数是c语言程序的基本模块单元。
任何函数(包括主函数main())都是由函数说明和函数体两部分组成。
其一般结构如下:
[函数类型] 函数名(函数参数表)
{ 说明语句部分;
执行语句部分;}
2. 算法的基本特征是什么?
【答案】
1) 有穷性:应含有有限的操作步骤,不能是无限的。
2) 唯一性:每一个步骤都是确定的,只有一个涵义,不可以为二义性。
3) 正确性:每一个步骤应当被有效的执行并得到确定的结果。
4) 输入:有零个或多个输入,在执行算法时需要从外界获取必要的信息。
5) 输出:有一个或多个输出,算法执行的目的就是为了求解,“解”就是输出的信息,没有输出的算法没有意义。
3. C语言程序的总体结构是怎样的?
【答案】
一个完整的C语言程序,是由一个、且只能由一个main()函数(又称主函数)和若干个其他函数结合而成的,或仅由一个main()函数构成。
基本数据类型
一、选择题
1. 在C语言中,错误的int类型的常数是_______。
A. 32768
B. 0
C. 037
【答案】A
2. 以下是正确的C语言标识符是_______。
A. #define
B._123
C.%d
D.\n
【答案】B
3. C语言中字符型(char)数据在内存中的存储形式是_______。
A. 原码
B. 补码
C. 反码
D. ASCII码
【答案】D
4. 在C语言中,整数-8在内存中的存储形式是_______。
A. 1111 1111 1111 1000
B. 1000 0000 0000 1000
C. 0000 0000 0000 1000
D. 1111 1111 1111 0111
【答案】A
5. 以下能正确定义整型变量x. y和z并为其赋初值5的语句是_______。
A. int x=y=z=5;
B. int x,y,z=5;
C. int x=5,y=5,z=5;
D. x=5,y=5,z=5;
【答案】C
6. 下列四组选项中,均不是C语言关键字的选项是_________。
A. define IF type
B. getc char printf
C. include scanf case
D. while go pow
【答案】A
7. 合法的c语言字符常量是_______。
A. “M”
B. ‘\n’
C. M
D. 29
【答案】B
8. 设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是_______。
A. 0~255
B. 0~65535
C. -32768~+32767
D. -256~+255
【答案】B
9. C语言提供的合法的数据类型关键字是________。
A. Int
B. long
C. Char
D. integer
【答案】B
10. 在C语言中,数字029是一个________。
A. 八进制数
B. 十进制数
C. 非法数
D. 十六进制数
【答案】C
二、判断题
1. 在C程序中,APA和apa是两个不同的变量。
【答案】T
2. 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。
【答案】F
3. int型数据(2byte)可表示的数值范围为-32767~32767。
【答案】F
4. C语言的标识符只能由三种字符组成,它们是字母. 数字. 下划线。
【答案】T
5. 在C语言中的实型变量分为两种类型,它们是单精度型(或float型)和双精度型(或:double型)。
【答案】T
三、简答题
1. 字符(char)型数据在微机内存中以什么形式存储?
【答案】
将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。
2. 字符串常量与字符常量的区别。
【答案】(1)书写格式不同:字符常量用‘’括起来表示,字符串常量用“”表示;
(2)表现形式不同:字符常量是用单引号括起的单个字符;字符串常量是用双引号括起的一串字符。
(3)存储方式:字符常量在内存中占一个字节;字符串常量除了每个字符各占一个字节外,其字符串结束符‘\0’也要占一个字节。
运算符及表达式
一、选择题
1. 以下能正确定义整型变量x. y和z并为其赋初值5的语句是_______。
A. int x=y=z=5;
B. int x,y,z=5;
C. int x=5,y=5,z=5;
D. x=5,y=5,z=5;
【答案】C
2. 已知ch是字符型变量,则不正确的赋值语句是_______。
A. ch=5+9;
B. ch='\0';
C. ch='7'+'9';
D. ch='a+b';
【答案】D
3. 设x,y是float型变量,则不正确的赋值语句是_______。
A. ++x;
B. y=int(5);
C. x*=y+1;
D. x=y=0;
【答案】B
4. 若a为int类型变量,则执行以下程序段后a的值为_______。
a=5;
a*=a/=a++;
A. 2
B. 1
C. 40
D. 3
【答案】A
5. 若a和b均为int型变量,则执行以下程序段后x的输出是_______。
x=15;y=15;
printf("%d\n",x%=(y%=2));
A. 0
B. 1
C. 6
D. 12
【答案】A
6. 判断char型变量c1是否为大写字母的正确表达式是_______。
A. 'A'<=c1<='Z'
B. (c1>='A')&(c1<='Z')
C. (c1>='A')&&(c1<='Z')
D. ('A'<=c1) AND ('Z'>=c1)
【答案】C
7. 设i. j. 和k是int型变量,且i=3,j=4,k=5,则以下值为0的表达式是_______。
A. 'i'&&'j'
B. i<=j
C. i || j + k && j-k
D. !((i<j) && !k || 1)
【答案】B
8. 设ch是char类型变量,其值是A,则表达式ch=(ch>='A'&&ch<='Z')?(ch+32):ch的值是_______。
A. Z
B. A
C. a
D. z
【答案】C
9. 若希望当num的值为奇数时,表达式的值为“真”,num的值为偶数时,表达式的值为“假”。
则以下不能满足要求的表达式是_______。
A. num%2==1
B. !(num%2==0)
C. !(num%2)
D. num%2
【答案】C
10. 若有说明:int a=1,b=2,c=3,d=4;则表达式a<b?a:c<d?c:d的值是_______。
A. 4
B. 3
C. 2
D. 1
【答案】D
二、判断题
1. 在C程序中,逗号运算符的优先级最低。
【答案】T
2. 在C程序中,%是只能用于整数运算的运算符。
【答案】T
3. 有变量说明:int a=0,b=0,c=0;则表达式a=9+b++=a+7是符合C语言语法的赋值表达式。
【答案】F
4. sizeof(float)是一个整型表达式。
【答案】T
5. 若有定义int m=5,y=2;,则执行表达式y+=y-=m*=y后y的值是-16。
【答案】T
三、分析程序题(根据执行过程,给出执行结果。
)
1. 下面程序的输出结果是_____。
main()
{
int a=3,b=5,c;
c=(b==a)&&(a+b!=20);
printf("%d,%d,%d\n",a,b,c);
}
【答案】3,5,0
2. 下面程序的输出结果是_____。
main()
{
int a=5,b=4,c=6,d;
printf("%d\n",d=a>c?(a>c?a:c):(b));
}
【答案】4
输入输出
一、选择题
1、下面语句中,正确的是_____。
A、printf("%c\n","student");
B、printf("%c\n","c");
C、printf("%s\n",&a);
D、printf("%s\n","hello");
【答案】D
2、阅读以下程序,当输入的数据形式为:25,13,10<CR>时,正确的输出结果为______。
main()
{
int x,y,z;
scanf(""%d%d%d"",&x,&y,&z);
printf(""x+y+z=%d\n"",x+y+z);
}
A、x+y+z=48
B、x+y+z=25
C、x+y+z=10
D、不能确定
【答案】D
3、下列描述中,正确的是_____。
A、所有的输入/输出都是通过调用库函数处理的
B、所有的输入/输出都是通过输入/输出语句实现的
C、getchar和putchar可以省略#include<stdio.h>
D、在输入/输出格式中的*表示跳过数据的含义
【答案】A
4、有如下程序
void main()
{
int y=3,x=3,z=1;
printf(“%d %d\n”,(++x,y++),z+2);
}
运行该程序的输出结果是_____。
A、3 4
B、4 2
C、4 3
D、3 3
【答案】D
5、已知a,b,c为int类型变量,若有输入语句:scanf("a=%db=%dc=%d",&a,&b,&c);为使a值为1,b 值为3,c值为2,从键盘输入的正确形式应当是______。
A、132<回车>
B、a=1b=3c=2<回车>
C、1<回车>3<回车>2<回车>
D、a=1<回车>b=3<回车>c=2<回车>
【答案】B
6、执行下面程序段后,x的值是______。
int x;
printf("%d\n",(x=3*5,x+5));
A、10
B、15
C、20
D、5
【答案】C
7、设c1、c2均是char类型变量,则以下不正确的函数调用为______。
A、scanf("c1=%cc2=%c",&c1,&c2);
B、getchar()
C、putchar(c2)
D、putchar(c1,c2)
【答案】D
8、以下叙述中正确的是________。
A、调用printf函数时,必须要有输出项
B、使用putchar函数时,必须在之前包含头文件stdio.h
C、在C语言中,整数可以以十二进制、八进制或十六进制的形式输出
D、调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码
【答案】B
9、设a,b,c,d均是int类型变量,为了使以下程序段的输出为:1234+123+12+1,正确的输入形式应当是______。
scanf("%4d+%3d+%2d+%1d",&a,&b,&c,&d);
printf("%4d+%3d+%2d+%1d",a,b,c,d);
A、1234123121<回车>
B、1234123412341234<回车>
C、1234+1234+1234+1234<回车>
D、1234+123+12+1<回车>
【答案】D
10、已知int a,b;用语句scanf("%d%d",&a,&b);输入a,b的值,不能作为输入数据分隔符的是______。
A、回车
B、空格
C、,
D、[tab]
【答案】C
二、判断题
1. 已有定义int x; float y;且执行scanf("%3d%f",&x,&y);语句时,从第一列开始输入数据12345□
678<CR>,则x的值为12345,y的值为678.00000(注:□表示空格,<CR>表示回车)
【答案】F
2. 有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c); 为使用变量a、b、c的值分别为1、2、3,从键盘输入数据的正确形式应当是a=1,b=2,c=3<CR>。
【答案】T
3. 下面程序段
int a,b;
a=13;b=5;
printf("%d",a%=(b/=2));
运行后的输出结果是1。
【答案】T
4. 调用printf函数时,必须要有输出项。
【答案】F
5. gerchar函数只能接收一个字符,可以不赋值给任何变量。
【答案】T
6. 调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码。
【答案】F
7. 有以下程序
main()
{
int a=0,b=0;
a=10; /*给a赋值
b=20; 给b赋值*/
printf("a+b=%d\n",a+b); /* 输出计算结果*/
} 程序运行后的输出结果是30。
【答案】F
8. 有以下程序
#include <stdio.h>
main()
{
int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d\n”,a=2*b);
}
程序运行后的输出结果是1,2
【答案】T
三、简答题
1. 下面程序的输出结果是_____。
main()
{
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);
}
【答案】
2,1
2. 下面程序的输出结果是_____。
main()
{
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
【答案】
2,3,1
程序控制结构
一、选择题
1、以下4个选项中,不能看作一条语句的是_____。
A、{;}
B、a=0,b=0,c=0;
C、if(a>0);
D、if(b==0) m=1;n=2;
【答案】D
2、关于if语句中,圆括号内的表达式,以下叙述正确的是:______。
A、只能用逻辑表达式
B、只能用关系表达式
C、只能用关系表达式或逻辑表达式
D、可以用任意表达式
【答案】D
3、与下面语句等价的语句是_____。
nC = nA < nB ? nB:nA;
A、if(nA < nB) nC = nB;
B、if(nA >= nB) nC = nA;
else nC = nB;
C、if(nA > nB) nC = nB;
else nC = nA;
D、if(nA < nB) nC = nB;
else nC = nA;
【答案】B
4、在下列选项中,没有构成死循环的程序段是____。
A、int i=100;
while (1)
{ i=i%100+1;
if (i>100) break;
}
B、for( ; ; );
C、int k=1000;
do {++k;} while (k>=1000);
D、int s=36;
while (s) --s;
【答案】D
5、设有程序段_______。
int x=10;
while (x=0) x=x-1;
A、while循环执行10次
B、循环是无限循环
C、循环体语句一次也不执行
D、循环体语句只执行一次
【答案】C
6、以下关于do-while循环不正确的描述是_______。
A、do-while的循环体至少执行一次
B、do-while循环由do开始,用while结束,在while (表达式)后面不能写分号
C、在do-while循环体中,一定要有能使while后面表达式的值变为零("假")的操作
D、do-while的循环体可以是复合语句
【答案】B
7、以下关于for循环的正确描述是_______。
A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、在for循环中,不能用break语句跳出循环体
D、for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
【答案】D
8、若k为整型变量,则以下for循环的执行次数是_______。
for (k=2; k==0; )
printf("%d",k--);
A、无限次
B、0次
C、1次
D、2次
【答案】B
9、若有以下程序段:
for (m=1; m<=100; m++)
{ scanf("%d", &y);
if (y<0)
continue;
printf("%3d", m);
}
正确的描述是_______。
A、当y<0时整个循环结束
B、y>=0时什么也不输出
C、printf函数永远也不执行
D、最多允许输出100个非负整数
【答案】D
10. 若输入字符串:abcde<回车>,则以下while循环体将执行______次。
while((ch=getchar())=='e') printf(""*"");
A、1次
B、死循环
C、0次
D、5次
【答案】C
二、分析程序题(根据执行过程,给出执行结果。
)
1. 下面程序的输出结果是_____。
main()
{
int a=1,i=a+1;
do
{ a++;
}while(!~i++> 3);
printf("%d\n",a);
}
【答案】2
2. 下面程序的输出结果是_____。
main( )
{ int a=0,b=1,c=0,d=20;
if(a)
d=d-10;
else if(!b)
if(!c) d=15;
else d=25;
printf("d=%d\n",d);
}
【答案】d=20
3. 下面程序的输出结果是_____。
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;
}
}
【答案】**0****2**
4. 下面程序的输出结果是_____。
main()
{ int i,j,k=10;
for (i=0;i<2;i++)
{ k++;
{ int k=0;
for (j=0;j<=3;j++)
{
if (j%2) continue;
k++;
}
}
k++;
}
printf ("k=%d\n",k);
}
【答案】k=14
三、程序设计题
1. 已知银行整存整取存款不同期限的月息利率分别为:0.315% 期限一年;0.330% 期限二年;月息利率=0.345% 期限三年;0.375% 期限五年;0.420% 期限八年。
要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。
【参考答案】
#include <stdio.h>
main( )
{ int year;
float money,rate,total; /* money:本金rate:月利率total:本利合计*/
printf("Input money and year = ");
scanf("%f%d", &money, &year); /* 输入本金和存款年限*/
if(year==1) rate=0.00315; /* 根据年限确定利率*/
else if(year==2) rate=0.00330;
else if(year==3) rate=0.00345;
else if(year==5) rate=0.00375;
else if(year==8) rate=0.00420;
else rate=0.0;
total=money + money * rate * 12 * year; /* 计算到期的本利合计*/
printf(" Total = %.2f\n", total);
}
2. 求∑n!(n=1->20),(即求1!+2!+3!+4!+5!+…+20!)
【参考答案】
main()
{ int n,i=1;long sum=0,s=1;
scanf("%d",&n);
while(i<=n)
{ s=s*i;sum=sum+s;i++;
}
printf("sum=%ld\n",sum);
}
3. 输入两个正整数m和n,求其最大公约数和最小公倍数。
【参考答案】
main()
{ long m,n,i=1,j,s;
scanf("%ld,%ld",&m,&n);
for(;i<=m&&i<=n;i++)
{ if(m%i==0&&n%i==0) s=i;}
if(m>=n) j=m;
else j=n;
for(;!(j%m==0&&j%n==0);j++);
printf("s=%ld,j=%ld\n",s,j);
}
4. 一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程序找出1000之内的所有完数,并按下面格式输出其因子:6 its factors are 1、2、3
【参考答案】
main()
{ int m,i,j,s;
for(m=6;m<10000;m++)
{ s=1;
for(i=2;i<m;i++)
if(m%i==0) s=s+i;
if(m-s==0)
{ printf("%5d its fastors are 1 ",m);
for(j=2;j<m;j++)
if(m%j==0)
printf("%d ",j);
printf("\n");
}
}
}
数组
一、选择题
1. 在C语言中,数组名代表了______。
A、数组第1个元素的首地址
B、数组第2个元素的首地址
C、数组所有元素的首地址
D、数组最后1个元素的首地址
【答案】A
2. 下列一维数组定义正确的是________。
A、x=6;int num[x];
B、const int x=6;float a[x];
C、const float x=6;int b[x];
D、int x=6;int c[x];
【答案】B
3. 下面程序执行后输出结果是_____。
main()
{
int a,b[5];
a=0; b[0]=3;
printf("%d,%d\n",b[0],b[1]);
}
A、3,0
B、3 0
C、0,3
D、3,不定值
【答案】D
4. 若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为________。
(假设a[0][0]位于数组的第一个位置上。
)
A、i*m+j
B、j*m+i
C、i*m+j-1
D、i*m+j+1
【答案】D
5. 有两个字符数组a、b,则以下正确的输入语句是________。
A、gets(a,b);
B、scanf("%s%s",a,b);
C、scanf("%s%s",&a,&b);
D、gets("a"),gets("b");
【答案】B
6. 下面程序段的运行结果是________。
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,b);
printf("%c",a[5]);
A、空格
B、\0
C、e
D、f
【答案】D
7. 判断字符串s1是否大于字符串s2,应当使用________。
A、if(s1>s2)
B、if(strcmp(s1,s2))
C、if(strcmp(s2,s1)>0)
D、if(strcmp(s1,s2)>0)
【答案】D
8. 以下能对二维数组a进行正确初始化的语句是________。
A、int a[2][]={{1,0,1},{5,2,3}};
B、int a[][3]={{1,2,3},{4,5,6}};
C、int a[2][4]={{1,2,3},{4,5},{6}};
D、int a[][3]={{1,0,1},{},{1,1}};
【答案】B
9. 若有说明:int a[][4]={0,0};则下面不正确的叙述是________。
A、数组a中的每个元素都可得到初值0
B、二维数组a的第1维大小为1
C、因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1
D、只有数组元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
【答案】D
10. 以下能正确进行字符串赋值操作的是_____。
A、char s[5]={"12345"};
B、char s[5]={'1', '2', '3', '4', '5'};
C、char *s; *s="12345";
D、char *s="12345"; 、
【答案】C
二、判断题
1. int a[3][];可以对二维数组a的正确说明。
【答案】F
2. 声明语句int a[]={0};可以对一维数组a进行正确初始化。
【答案】T
3. 声明语句int a[][3]={{1,0,1},{},{1,1}};能对二维数组a进行正确初始化。
【答案】F
4. 声明语句char s[5]="abcdef";可对字符串s的初始化。
【答案】F
5. 判断字符串s1是否大于字符串s2,应当使用if(strcmp(s1,s2>0))。
【答案】T
6. char s[10]="abcd";可以将字符串赋初值给数组s。
【答案】T
三、程序设计题
1、将一个数的数码倒过来所得到的新数叫原数的反序数。
如果一个数等于它的反序数,则称它为对称数。
求不超过2000的最大的二进制的对称数。
【参考答案】
main( )
{ int i,j,n,k,a[16]={0};
for(i=1;i<=2000;i++)
{ n=i;
k=0;
while(n>0) /* 将十进制数转变为二进制数*/
{ a[k++]=n%2;
n=n/2;
}
for(j=0;j<k;j++)
if(a[j]!=a[k-j-1]) break;
if(j>=k)
{ printf(" %d: ",i);
for(j=0;j<k;j++)
printf("%2d",a[j]);
printf("\n");
}
}
}
2. 求100以内的素数。
【参考答案】
main()
{ int i,j,a[100];
for(i=2;i<100;i++)
{ a[i]=i;
for(j=2;j<=i;j++)
{ if(j<i) if(a[i]%j==0) break;
if(a[i]-j==0) printf("%5d",a[i]);
}
}
printf("\n");
}
函数
一、选择题
1、以下叙述中不正确的是_______。
A、在C程序中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B、在C程序的函数中,最好使用全局变量
C、在C程序中,形参只是局限于所在函数
D、在C程序中,函数体内可以有多个return语句
【答案】B
2、有以下程序
int fun(int a)
{ return a%2; }
main()
{ int a[8]={1,3,2,4},i,d=0;
for (i=0;fun(a[i]);i++) d+=a[i];
printf("%d\n",d);
}
程序运行后的输出结果是_______。
A、1
B、4
C、6
D、10
【答案】B
3、有以下程序
#include <stdio.h>
#define f(x) x*x*x
main()
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf(“%d,%d\n”,s,t);
}
程序运行后的输出结果是_______。
A、10,64
B、10,10
C、64,10
D、64,64
【答案】A
4、以下正确的描述是_______。
A、定义函数时,形参的类型说明可以放在函数体内
B、eturn后面的值不能为表达式
C、如果函数值的类型与返回值类型不一致,以函数值类型为准
D、如果实参与形参的类型不一致,以实参类型为准
【答案】C
5、C语言规定:简单变量做实参时,它和对应形参之间的数据传递方式是_______。
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参传回实参
D、由用户指定传递方式
【答案】B
6、若使用一维数组名作函数实参,则以下正确的说法是_______。
A、必须在主调函数中说明此数组的大小
B、实参数组类型与形参数组类型可以不匹配
C、在被调函数中,不需要考虑形参数组的大小
D、实参数组名与形参数组名必须一致
【答案】A
7、若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是_______。
A、调用可以作为独立的语句存在
B、调用可以作为一个函数的实参
C、调用可以出现在表达式中
D、调用可以作为一个函数的形参
【答案】D
8、在一个源文件中定义的全局变量的作用域为_______。
A、本文件的全部范围
B、本程序的全部范围
C、本函数的全部范围
D、从定义该变量的位置开始至本文件结束
【答案】D
9、以下正确的描述是_______。
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用可以嵌套
C、函数的定义和函数的调用均不可以嵌套
D、函数的定义和函数的调用均可以嵌套
【答案】B
10. 以下正确的函数形式是_______。
A、double fun1(int x, int y)
{ z=x+y; return z; }
B、fun1(int x, y)
{ int z;
return z; }
C、fun1(x, y)
{ int x, y; double z;
z=x+y;
return z; }
D、double fun1(int x, int y)
{ double z;
z=x+y;
return z; }
【答案】D
二、分析程序题(根据执行过程,给出执行结果。
)
1. 下面程序的输出结果是_____。
#include <stdio.h>
main( )
{ int a=1, k;
for(k=0; k<3; k++)
printf("%4d",f1(a));
}
f1(int x)
{ static int z=3,y=0;
y++;
z++;
return(x+y+z);
}
【答案】6 8 10
2. 下面程序的输出结果是_____。
#include <stdio.h>
void ff1( )
{ extern int x, y;
int a=15, b=10;
x=a-b;
y=a+b;
}
int x, y;
main()
{ int a=7,b=5;
x=a+b;
y=a-b;
ff1( );
printf("%d, %d\n", x, y);
}
【答案】5, 25
3. 下面程序的输出结果是_____。
#include <stdio.h>
func(int a,int b)
{ int c;
c=a+b;
return(c);
}
main()
{
int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
【答案】21
4. 下面程序的输出结果是_____。
#include <stdio.h>
void fun(int *s)
{ static int j=0;
do
{ s[j]+=s[j+1];
}while(++j<2);
}
main()
{ int k,a[10]={1,2,3,4,5};
for (k=1;k<3;k++)
fun (a);
for(k=0;k<5;k++)
printf("%d",a[k]);
}
【答案】35745
三、程序设计题
1. 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
【参考答案】
#include "stdio.h"
int sushuis(int m)
{
int i,t;
for(i=2;i<=m;i++)
if(m%i==0&&i<=m)
break;
if(m-i==0)
t=1;
else t=0;
return t;
}
main()
{ int a,s;
printf("enter number is: \n");
scanf("%d",&a);
s=sushuis(a);
if(s==1) printf("a 是素数!\n");
else printf("a 不是素数!\n");
}
2. 编写函数fun,功能是计算下列级数的和,返回值为计算结果。
在主函数中作相应调用并输出结果。
【参考答案】
#include "stdio.h"
#include "math.h"
double fun(double x,int n) /* 计算级数的和并返回计算结果*/
{ double s=1,p=1,t=1;
int i,j;
for(i=1;i<=n;i++)
{ t*=i; /* 求分母*/
p*=x; /* 求分子*/
s+=p/t; /* 本项累加到和变量*/
}
return s;
}
main()
{
printf("\n%f\n",fun(0.3,10)); /* 将函数的返回值输出*/
}
3. 现有m个学生的成绩存放于整型数组score中。
编写函数int fun(int score[],int m,int below[]),其功能是将低于平均分的人数作为函数值返回主函数,并将低于平均分的分数存放在主函数定义的数组below中。
要求:在main函数中定义初始化数组score并输出该数组的数据,调用函数后,输出统计的人数以及below数组的数据。
【参考答案】
#include "stdio.h"
int fun(int score[],int m,int below[])
{
int i,k=0,aver=0;
for(i=0;i<m;i++)
aver+=score[i];/* 计算总分*/
aver/=m; /* 计算平均分*/
for(i=0;i<m;i++)/* 逐个判断分数值*/
if(score[i]<aver) /* 如低于平均分*/
{ below[k]=score[i];/*存放到以below为首地址的数组中*/
k++; /* 统计低于平均分的人数*/
}
return k; /* 返回人数*/
}
main()
{
int i,n,below[9];
int score[9]={10,20,30,40,50,60,70,80,90};
n=fun(score,9,below);
/* 调用函数,低于平均分的人数赋给n */
printf("\nbelow the average are:");
for(i=0;i<n;i++)
printf("%4d",below[i]); /* 输出below数组中n个值*/
}。