C语言选择、填空、判断题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单项选择题(17道小题,共20分)
1、以下叙述中正确的是( C )。

(1分)
A、 C语言比其他语言高级
B、 C语言可以不用编译就能被计算机识别执行
C、 C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D、 C语言出现的最晚,具有其他语言的一切优点
2、以下说法正确的是( C )。

(1分)
A、C语言程序总是从第一个函数开始执行
B、在C语言程序中,要调用函数必须在main()函数中定义
C、C语言程序总是从main()函数开始执行
D、C语言程序中的main()函数必须放在程序的开始部分
3、下列可用于C语言用户标识符的一组是( B )。

(1分)
A、 void define WORD
B、 a3_b3 _123 Car
C、 For abc case
D、 2a DO sizeof
4、设int a=3,b=4,c=5;表达式(a+b)>c&&b==c的值是( C ) 。

(1分)
A、2
B、-1
C、0
D、1
5、以下关于循环体的描述中,( C )是错误的。

(2分)
A、循环体中可以出现break语句
B、循环体中还可以出现循环语句
C、循环体中不能出现continue语句
D、循环体中可以出现switch语句
6、While(x)中的x相当于( D )。

(2分)
A、x==0
B、x==1
C、x!=1
D、x!=0
7、以下关于switch语句和break描述中 , ( A ) 是正确的。

(2分)
A、在switch语句中,可以根据需要使用或不使用break语句
B、switch语句中必须用break语句
C、break语句只能用于switch语句
D、break语句是switch语句必须的一部分
8、以下对C语言函数的有关描述中,正确的是( B )。

(1分)
A、在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B、C函数既可以嵌套调用又可以递归调用
C、函数必须有返回值,否则不能使用函数
D、C程序中有调用关系的所有函数必须放在同一个源程序文件中、
9、在下面的函数声明中,存在着语法错误的是( A )。

(1分)
A、int BF(int x ; int y);
B、void BC(int a , int);
C、void BD(int , int);
D、void BE(int , int=5)
10、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( B )。

(1分)
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参传回实参
D、传递方式由用户指定
11、一个程序源文件中全局变量作用范围为( D )。

(1分)
A、本文件的全部范围
B、本程序的全部范围
C、本函数的全部范围
D、从定义该变量位置开始至文件结束
12、若有以下语句:static char x[ ]="12345";static char y[ ]={'1','2','3','4','5'};则正确的说法是( B )。

(1分)
A、 x数组和y数组的长度相同
B、 x数组的长度大于y数组的长度
C、 x数组的长度小于y数组的长度
D、 x数组与y数组等价
13、在C++语言中,定义数组后,使用数组元素时,数组下标可以是( C )。

(1分)
A、整型常量
B、整型表达式
C、整型常量或整型表达式
D、任何类型的表达式
14、在下面的一维数组定义中,哪一个( A )有语法错误。

(1分)
A、int a[ ];
B、int a[ ]={1,2,3};
C、int a[5];
D、int a[10]={0};
15、在声明语句const char *ps;中,ps表示( C )。

(1分)
A、指向字符串的指针
B、指向字符串的const型指针
C、指向const型字符串的指针
D、指向const型字符串的const型指针
16、若有语句: int x[]={1,2,3,4,5}; int *ptr; ptr=x; 则( C ) 是对数组元素x[1]的正确引用。

(1分)
A、ptr+1
B、*ptr+1
C、*(ptr+1)
D、*ptr++
17、在int k=8,*p=&k中,*p的值是( C )。

(1分)
A、指针变量p的地址值
B、变量k的地址值
C、 8
D、无意义
18、设int a=5,b=9,c=15,表达式(a+b)/c||(a<b)&&(a%b)的值为( C )。

(1分)
A、0
B、2
C、1
D、-1
19、若变量c为char类型,能正确判断出c为小写字母的表达式是( D ) 。

(1分)
A、'a'<=c<='z'
B、(c>='a')||(c<='z')
C、('a'<=c)and('z'>=c)
D、(c>='a')&&(c<='z')
20、以下 ( C )是不正确的描述。

(2分)
A、while循环先判断表达式,后执行循环体语句
B、do-while循环先执行循环语句,后判断表达式
C、while,do-while 循环效果完全一样,不会出现不一致情况
D、for循环可以用while语句代替
21、下列关于函数的参数的描述中,错误的是( D )。

(1分)
A、 C语言函数的参数可以是多个
B、 C语言函数参数可以0个
C、 C语言函数的形参可以是指针或引用
D、 C语言函数的形参与实参类型要求一致不是必需的。

22、以下叙述中不正确的是( D ) 。

(1分)
A、预处理命令都必须以#号开始
B、在程序中凡是以#号开始的语句行都是预处理命令行
C、宏替换不占用运行时间,只占编译时间
D、在以下定义是正确的:#define PI 3.1415926;
23、以下能正确定义一维数组的选项是( B )。

(1分)
A、 int a[5]={0,1,2,3,4,5};
B、 char a[]={'0','1','2','3','4','5','\0'};
C、 char a={'A','B','C'};
D、 int a[5]="0123";
24、下面程序段char *p="abcdefgh"; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")));的运行结果是( C )。

(1分)
A、 8
B、 12
C、 4
D、 7
25、由C/C++源程序文件编译而成的目标文件的缺省扩展名为( C )。

(1分)
A、 cpp
B、 exe
C、 Obj
D、 lik
26、下列语句哪个是正确的( B )。

(1分)
A、int a="a";
B、char c=105;
C、char c="abc";
D、char c="\n";
27、如执行以下语句,for (I=1;I<=100;I++){sum=sum+I;}循环结束后I值是( C )。

(2分)
A、100
B、99
C、101
D、102
28、下面有关for循环的正确描述是( D )。

(2分)
A、 for循环只能用于循环次数己经确定的情况
B、 for循环是先执行循环体语句,后判定表达式
C、在for循环中,不能用break语句跳出循环体
D、 for循环体语句中,可以包含多条语句,但要用花括号括起来
29、在C/C++中,函数原型不能标识( A )。

(1分)
A、函数的功能
B、函数的返回类型
C、函数参数的个数
D、函数参数类型
30、C语言中数组下标的下限是( B )。

(1分)
A、1
B、0
C、视具体情况
D、无固定下限
31、下列描述中不正确的是( C )。

(1分)
A、字符型数组中可以存放字符串
B、可以对字符型数组进行整体输入、输出
C、可以对整型数组进行整体输入、输出
D、不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值
32、在以下定义中,正确的说明语句为( D )。

(1分)
A、int a['a'];
B、int a[3,4];
C、int a[ ][ ];
D、int *a[10];
33、在声明语句int *fun();中,fun表示( B )。

(1分)
A、一个用于指向函数的指针变量
B、一个返回值为指针型的函数名
C、一个用于指向一维数组的行指针
D、一个用于指向int型数据的指针变量
34、若有语句:char *line[5];,以下叙述中正确的是( A )。

(1分)
A、定义line是一个数组,每个数组元素是一个基类型为char为指针变量
B、定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
C、定义line是一个指针数组,语句中的*号称为间址运算符
D、定义line是一个指向字符型函数的指针
35、for(int x=0; x <=5;x+=2){...}语句执行循环的次数是( A )。

(2分)
A、3
B、4
C、5
D、6
36、执行以下语句,for (I=10;I>=0;I--,I--){sum=sum+I;}循环结束sum和I的值分别是( D )。

(2分)
A、32 0
B、30 0
C、28 -1
D、30 -2
37、函数调用语句fun(a1,f(a,b),3+x);中fun函数的参数个数是( C ) 。

(1分)
A、 1
B、 2
C、 3
D、 4
38、设有数组定义:char array[]="China";,则数组array所占的空间为( C ) 。

(1分)
A、 4个字节
B、 5个字节
C、 6个字节
D、 7个字节
39、程序段char str[]="ABC"; *p=str; printf("%d\n",*(p+2));的运行结果是( A )。

(1分)
A、 67
B、 0
C、字符'C'的地址
D、字符'C'
40、下述关于break语句的描述中,( C )是不正确的。

(2分)
A、 break语句可用于循环体内,它将退出该重循环
B、 break语句可用于switch语句中,它将退出switch语句
C、 break语句可用于if体内,它将退出if语句
D、 break语句在一个循环体内可以出现多次
41、在C语言程序中,当while语句构成的循环中的条件为( A )时,结束循环。

(2分)
A、0
B、1
C、true
D、非0
42、有一个int型变量,在程序中频繁调用,最好把它定义为( A )。

(1分)
A、 register
B、 auto
C、 extern
D、 static
43、以下不能对二维数组a进行正确初始化的语句是( C )。

(1分)
A、 int a[2][3]={0};
B、 int a[][3]={{1,2},{0}};
C、 int a[2][3]={{1,2},{3,4},{5,6}};
D、 int a[][3]={1,2,3,4,5,6};
44、对于声明语句int *p[10]; 下列( B )描述是正确的。

(1分)
A、 p是指向数组中第10个元素的指针
B、 p是具有10个元素的指针数组,每个元素是一个int型指针
C、 p是指向数组的指针
D、 p[10]表示数组的第10个元素
45、对于指针的运算,下列说法( C )是错误的(1分)
A、可以用一个空指针赋值给某个指针
B、一个指针可以加上一个整数
C、两个指针可以进行加法运算
D、两个指针在一定条件下,可以进行相等或不相等的运算
46、一个函数无返回值时,应选择下列的说明符是( C )。

(1分)
A、 static
B、 extern
C、 void
D、无说明符
47、在C语言中,若对函数类型未加显式说明,则函数的隐含类型是( C )类型。

(1分)
A、void
B、double
C、int
D、char
48、以下定义语句中,错误的是( D )。

(1分)
A、int a[]={1,2};
B、char *a[3];
C、char s[10]="test";
D、int n=5,a[n];
49、下面程序int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf("%d\n",*(p+2));的输出结果是( A )。

(1分)
A、 3
B、 4
C、 1
D、 2
50、C语言中合法的字符常量是( C )。

(1分)
A、"ABC"
B、"$"
C、'\n'
D、95
51、已知int t=0;while (t=1){...}则以下叙述正确的是( B )。

(2分)
A、循环控制表达式的值为0
B、循环控制表达式的值为1
C、循环控制表达式不合法
D、以上说法都不对
52、下列关于函数值的说法中,正确的是( B ) 。

(1分)
A、定义函数时,函数名前必须指明类型,否则该函数值没有类型
B、定义函数时,若未指明函数的类型,则该函数值的类型为 int
C、函数值的类型只能是数值类型,如int、float等
D、定义函数时的函数体的最后必须有return语句,返回函数值
53、若有定义:int a[2][3];则对a数组的第i行第j列(假调i,j已正确说明并赋值)元素值的正确引用为( A )。

(1分)
A、 *(*(a+i)+j)
B、 (a+i)[j]
C、 *(a+i+j)
D、 *(a+i)+j
54、下面函数调用语句func((exp1,exp2),(exp3,exp4,exp5));中func函数有实参的个数为( B )。

(1分)
A、 1
B、 2
C、 4
D、 5
55、若有定义int a[9],*p=a;则p+5表示( B )。

(1分)
A、数组元素a[5]的值
B、数组元素a[5]的地址
C、数组元素a[6]的地址
D、数组元素a[0]的值加上5
56、以下叙述中不正确的是( D )。

(1分)
A、在不同的函数中可以使用相同名字的变量
B、函数中的形式参数是局部变量
C、在一个函数内定义的变量只在本函数范围内有效
D、在一个函数内的复合语句中定义的变量在本函数范围内有效
57、C语言中不合法的字符串常量是( B )。

(1分)
A、 "\121"
B、 'y'
C、 "\n\n"
D、 "ABCD\x6d"
58、已知char m[]="Convert",*p=m;则*(p+5)的值是( C )。

(1分)
A、 e
B、 Convert
C、 r
D、不确定
59、设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是( B )。

(1分)
A、 k=*p1+*p2;
B、 p2=k;
C、p1=p2;
D、k=*p1;
60、对语句float (*pf)(float x);的描述,正确的是( A )。

(1分)
A、一个用于指向函数的指针变量
B、一个返回值为指针型的函数名
C、一个用于指向float型数据的指针数组
D、一个用于指向float型数据的指针变量
二、填空题(25道小题,共34分)
1、C语言程序执行的入口点是主函数。

2、设y是int型变量,请写出判断y为奇数的关系表达式 y%2!=0 。

3、设x是int型变量,请写出x是偶数并且不能被3整除的表达式 x%2==0&&x%3!=0 。

4、设a,b为int型变量,x,y为float型变量,且设a=5,b=10,x=3.5,y=10.8。

为了得到以下的输出格式和结果,请将对应的输出语句补充完整。

//输出格式及结果:a=5,b=10,x+y=14.3
printf(" a=%d,b=%d,x+y=%4.1f”,a,b,x+y );
//或 cout<< ;
5、for(;;)语句相当于while( 1 )
6、C语言中结束一次循环的语句是 continue 。

7、如C程序中对一个函数的调用在前,定义在后,则必须在调用前对该函数进行声明。

8、在函数定义中,形式参数是被调函数接收调用者数据的主要途径。

9、若被调函数是标准库函数,则在使用前需在程序的开头用 #include 命令将被调函数的信息包含进来。

10、在语句 int fun(float f, int i); 中,变量f和i具有函数声明作用域。

11、标识符在程序中可引用的区域称为作用域。

12、比较两个字符串大小的函数是 strcmp() 。

13、array是一个一维整形数组,有10个元素,前6个元素的初值是9,4,7,49,32,-5,
请写出正确的说明语句 int array[10]={9,4,7,49,32,-5}; 。

14、字符串是以‘\0’为结束标志的一维字符数组。

15、若用数组名作为函数调用的实参,传递给形参的将是数组首地址。

16、若有定义int i;int *p=&i;则&*p等价于 &i 。

17、C语言程序设计包括编写源代码、编译、连接和运行等步骤。

18、C语言中唯一的三目运算符是条件运算符。

19、有一个函数原型如下所示:
abc(float x,float y);
则该函数的返回类型为 int 。

20、在C语言中,形参的缺省存储类是 auto 。

21、设int a[2][3]={{5},{6}}; 则数组元素 a[0][0] 的值为5。

22、已知有以下的说明,
int a[]={8,1,2,5,0,4,7,6,3,9};
那么a[*(a+a[3])]的值为 0 。

23、C源程序的扩展名是 .c 。

24、已知整型变量a=6,字符型变量ch='A',浮点数变量f=2.1,则表达式ch+a+f 的值为
73.1 。

(提示:'A'的ASCII码为65)
25、表示条件:10<x<100或x<0的c语言表达式是 x>10&&x<100||x<0 。

26、由顺序、选择和循环三种基本结构构成的算法称为结构化算法。

27、C语言中至少执行一次循环体的循环语句是 do{……} while 。

28、C语言程序的基本单位是函数。

29、程序中变量的生存期各不相同。

在程序运行前就分配存储空间的变量是静态变量。

30、C语言中构成数组的各个元素具有相同的数据类型。

31、如果在程序中调用了strcat函数,则需要预处理命令即头文件 #include <string.h> 。

32、有如下程序段 int *p,a=10,b=1; p=&a; a=*p+b; 执行该程序段后,a的值为 11 。

33、按照优先级从高到低的顺序写出C语言中的三种逻辑运算符 !,&&,|| 。

34、若要输出字段宽度为4的十进制数printf函数应使用格式说明"%4d",字段宽度为10实数应使
用 %10f 。

35、假定a和b为int型变量,则执行以下语句后b的值为 0 。

a=1; b=10; do { b-=a; a++; } while (b);
36、在一个函数体内调用另一个函数,称为嵌套调用;函数调用自身,称为递归调用。

37、函数可以嵌套调用,但是不可以嵌套定义。

38、全局变量在函数外部定义,作用域从定义点开始到文件的结束。

39、有如下语句 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则*(p+8)的值为 9 。

40、设有说明语句:char a= '\72';则变量a包含 1 个字符。

41、已知float x=2.5,y=4.7;int a=7;,表达式x+a/3*int(x+y)%2的值为 2.5 。

42、C语言是一种面向过程(选择面向对象或面向过程)高级程序设计语言。

43、字符串"ab\n\\012/\\\""的长度为 10 。

44、C语言中结束本层循环的语句是 break 。

45、程序根据判断条件是否成立,从而选择执行不同的程序段。

这样的程序结构叫分支结构。

46、调用函数和被调用函数之间交流信息的通道是参数。

47、函数的返回值是通过函数中的 return 语句获得的。

48、若有以下说明和语句,则p1-p2的值为 -5 。

int a[10], *p1, *p2;
p1=a;
p2=&a[5];
49、有语句char str1[10],str2[10]={"china"}; 则能将字符串china赋给数组str1的正确语句是
strcpy(str1,str2) ; 。

50、C语言程序编译的过程是以源程序文件为单位的。

51、当具有块作用域的局部变量与具有文件作用域的全局变量同名时,局部变量优先。

52、若有定义:static int a[3][4]={{1,2},{0},{4,6,8,10)); 则初始化后,a[1][2]的值为 0 。

53、函数strlen("China")返回的值为 5 。

54、在C语言程序设计中,生成可执行程序(.exe文件)的步骤是编辑、编译、连接。

54、C语言中基本的数据类型有整型、实型、字符型。

55、以下循环体的执行次数是 1 。

main() { int i,j; for(i=0,j=1; i<=j+1; i+=2, j--)printf("%d \n",i); }
56、若有声明语句char * pCh;则系统为变量pCh分配的内存单元字节数是 4 个。

1、下面的程序求区间[100,200]内10个随机整数中的最大数、最小数。

#include<stdio.h>//或 #include <iostream.h>
#include<stdlib.h>
void main( )
{
int max, min,x;
x= rand( )%101+100;
printf("%4d",x);//cout<<setw(4)<<x;
max = x; min =x;
for(int i=1;i<10;i++)
{
x= rand()%101+100 ;
printf("%4d",x);//cout<<setw(4)<<x;
if(x > max) max=x ;
if(x < min) min=x ;
}
printf("\n最大数:%4d,最小数: %4d\n",max,min);
//cout<<endl<<"最大数:"<<max<<",最小数:"<<min<<endl;
}
2、下面程序的功能是从键盘输入的10个整数中,找出第一个能被7整除的数。

若找到,打印此数后退出循环;若未找到打印“no exist”。

#include <stdio.h> //或 #include <iostream.h>
void main()
{
int i,a;
for(i=1;i<=10;i++)
{
scanf("%d",&a);//或cin>>a;
if( a%7==0 )
{
printf("%d",a); //或cout<<a;
break;
}
}
if( i>10 ) printf("no exist");//或cout<<"no exist";
}
3、下面这个程序打印出以下这个三角形.请填空。

11
222
3333
44444
555555
6666666
77777777
888888888
9999999999
void main()
{
int i,j;
for(i=0;i< 10 ;i++)
{
for(j=0;j< i+1 ;j++)
printf(“%d”, i ) ;
printf("\n"); //或 cout<<endl;
}
}
4、以下程序通过函数SunFun和F(x)求解x^2+1的累加和,x=0到10。

这里F(x)=x^2+1。

请填空。

(说明:x^n即x的n次幂)
#include <stdio.h> //或 #include <iostream.h>
void main()
{
printf("The sun=%d\n", SunFun(10) );
//或 cout<<"The sun="<< )<<endl;
}
SunFun(int n)
{ int x,s=0;
for(x=0;x<=n;x++) s+=F( x );
return s;
}
F(int x)
{ return ( x*x+1 );}
5、函数fun的功能是计算x^n。

主函数中已经正确定义m、a、b变量并赋值,并调用fun函数计算:m=a^4+b^4-(a+b)^3。

(说明:x^n即x的n次幂)
#include <stdio.h> //或 #include <iostream.h>
double fun(double x,int n)
{
int i; double y=1;
for(i=1;i<=n;i++)
y=y*x ;
return y ;
}
void main()
{
double m,a,b;
a=7.3;
b=5.1;
m= fun(a,4)+fun(b,4)+fun(a+b,3) ;
printf("m=%lf\n",m); //或 cout<<"m="<<m<<endl;
}
6、以下程序可计算10名学生1门课成绩的平均分。

float average(float array[])
{int i;
float aver,sum=array[0];
for(i=1; i<10 ;i++)
sum+= array[i] ;
aver=sum/10;
return(aver);
}
void main()
{
float score[10],aver;
int i;
printf("input 10 scores:");//或cout<<"input 10 scores:";
for(i=0;i<10;i++)
scanf("%f",&score[i]);//或cin>>score[i];
aver= average(score) ;
printf("the average score is:%f",aver);//或cout<<"the average score is"<<aver; }
7、下面程序的功能是检查一个二维数组是否对称(即a[i][j]是否等于a[j][i])。

#include <stdio.h> //或 #include <iostream.h>
void main()
{ int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};
int i,j,found=1;
for(i=0;i<4;i++)
{for(j=0; j<4 ;j++)
if( a[i][j]!=a[j][i] )
{
found=0 ;
break;
}
if(found==0)
break;
}
if(found==1)
printf("yes");//或cout<"no";
else
printf("no");//或cout<"yes";
}
8、以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。

和值通过形参传回主函数输出。

请填空。

#define M 2
#define N 4
void SumColumMin(int a[M][N],int *sum)
{ int i,j,k,s=0;
for(i=0;i<N;i++)
{ k=0;
for(j=1;j<M;j++)
if(a[k][i]>a[j][i])k=j;
s+= a[k][i] ;
}
*sum =s;
}
void main()
{ int x[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin( x, &s );
printf("%d\n",s); //或 cout<<s<<endl;
}
9、fun函数的功能是:首先实现在N行M列的二维数组a中,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。

请填空。

#define N 5
int fun(int a[N][N])
{int row,col,max,min;
for(row=0;row<N;row++)
{for(max= a[row][0] ,col=1;col<N;col++)
if( max<a[row][col] )
max=a[row][col];
if(row==0) min=max;
else if( min>max ) min=max;
}
return min;
}
10、下面程序输出1至100之间每位数的乘积小于每位数的和的数。

#include <stdio.h> //或 #include <iostream.h>
main()
{
int n,k=1,s=0,m;
for(n=1;n<=100;n++)
{
k=1;s=0;
m=n ;
while (m!=0)
{k*=m%10;
s+=m%10;
m= m/10 ;
}
if(k<s) printf("%d\n",n);//cout<<n<<endl;
}
}
11、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。

请填空。

int fun ( int n)
{
int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f= -f ;
}
return m ;
}
void main()
{
printf("m=%d\n", f(10) ); //或 cout<<"m="<< )<<endl;
}
12、斐波那契数列中的头两个数是0和1,从第三个数开始,每个数等于前两个数的和,即:0,1,1,2,3,5,8,13,21,...等。

下面这个程序就是求斐波哪契数列的前20个数。

请填空。

#include <stdio.h> //或 #include <iostream.h>
void main()
{
int f,f1,f2,i;
f1=0;f2=1;
printf("%d\n%d\n",f1,f2); //或 cout<<f1<<endl<<f2<<endl;
for(i=3;i<=20; i++ )
{
f= f1+f2 ;
printf("%d\n",f); //或 cout<<f<<endl;
f1=f2;
f2= f ;
}
}
13、下面程序的功能是求出用数字0至9可以组成多少个没有重复的三位偶数。

#include <stdio.h> //或 #include <iostream.h>
void main()
{int n,i,j,k;
n=0;
for(i=1;i<=9;i++)
for(k=0;k<=8; k+=2 )
if(k!=i)
for(j=0;j<=9;j++)
if( j!=k && j!=i )
n++;
printf("%d",n);//cout<<n;
}
14、以下程序的功能是:在主函数中输入一个整数n,调用函数fun计算n的所有因子(不包括1与自身)之和。

#include <stdio.h> //或 #include <iostream.h>
int fun(int x)
{
int s=0,i;
for(int i=2;i<=x-1;i++)
if( x%i==0 )
s+=i;
return s ;
}
void main()
{
int n, sum;
printf("请输入一个整数:"); //或 cout<<"请输入一个整数:";
scanf("%d", &n); //或 cin>>n;
printf("%d的所有因子(不包括1与自身)之和是%d", fun(n) );
//或 cout<< ;
}
15、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。

请填空:#define N 3
#define M 4
void LineMax(int x[N][M])
{ int i,j,p;
for(i=0;i<N;i++)
{ p=0;
for(j=1;j<M;j++)
if(x[i][p]<x[i][j]) p=j ;
printf("The max value in line %d is %d\n",i, x[i][p] );
//或 cout<<"The max value in line "<<i<<" is "<< )<<endl;
}
}
main()
{ int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1};
LineMax(x) ;
}
16、下面程序功能是计算100到1000之间有多少个其各位数字之和是5的数。

#include <stdio.h> //或 #include <iostream.h>
void main()
{ int i,s,k,count=0;
for(i=100;i<=1000;i++)
{
s=0;k=i;
while( k!=0 )
{s=s+k%10;
k= k/10 ;
}
if( s==5 )
{
printf("%4d",i);//或cout<<setw(4)<<i;
count++;
}
}
printf("\n%d\n",count);//或cout<<endl<<j<<endl;
}
17、下面程序的功能是打印100以内个位数为6且能被3整出的所有数。

#include <stdio.h> //或 #include <iostream.h>
main()
{
int i,j;
for(i=0; i<100 ;i++)
{
j= i ;
if( j%3!=0||j%10!=6 ) continue;
printf("%d,",j); //或cout<<j<<",";
}
}
18、以下search函数的功能是利用顺序查找法从数组a的10个元素中对关键字m进行查找。

顺序查找法的思路是:从第一个元素开始,从前往后依次与关键字比较,直到找到此元素或查找到数组尾部时结束。

若找到,返回下标,否则返回-1;
int search(int a[],int m)
{
int i;
for(i=0;i<10;i++)
if( a[i]==m )
return(i);
return(-1);
}
void main()
{
int a[10],m,i,no;
for(i=0;i<10;i++)
scanf("%d",&a[i]);//cin>>a[i];
scanf("%d",&m);//cin>>m;
no=search( a, m );
if( no!=-1 )
printf("found!%d",no+1);//cout<<"found!"<<no+1;
else
printf("not found!");//cout<<"not found!";
}
19、以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束,请填空。

#inlude <stdio.h> //或 #include <iostream.h>
void main()
{
float x,amax,amin ;
scanf("%f",&x); //或 cin>>x;
amax=x;
amin=x;
while( x>=0 )
{
if(x>amax)
amax=x;
if( x<amin )
amin=x;
scanf("%f", &x); //或 cin>>x;
}
printf("amax=%f, amin=%f\n", amax, amin);
//或 cout<<"amax="<<amax<<", amin="<<amin<<endl;
}
20、如图所示,该算式在四个字母所在处欠缺四个数位,下面这个程序用穷举法搜寻解法。

请填空。

1A8
* 3B
_________
C73D
#include <stdio.h> //或 #include <iostream.h>
void main()
{
int A,B,C,D;
int x,y,z;
for(A=1;A<=9;A++)
for(B=1;B<=9;B++)
for(C=1;C<=9;C++)
for(D=1;D<=9;D++)
{
x=100 + 10*A + 8;
y=30+B;
z= 1000*C +700 +30 +D;
if( x*y==z )
printf("A=%d,B=%d,C=%d,D=%d\n", A,B,C,D);
//或 cout<<"A="<<A<<",B="<<B<<",C="<<C<<",D="<<D<<endl;
}
}
21、主函数main定义如下:
void main()
{
int a,b;
cin>>a>>b;
if(b>a)
{
int t;
t=a; a=b; b=t;
}
}
其中t的作用域称作块作用域。

22、以下程序从读入的整数数据中,统计大于零的整数个数和小于零的整数个数.用输入零来结束输入,程序中用变量i 统计大于零的整数个数,用变量j统计小于零的整数个数.请填空.
#include <stdio.h> //或 #include <iostream.h>
// #include <iomanip.h>
main()
{
int n,i,j;
printf("输入非零的整数(输入零结束程序)"); //或 cout<<"输入非零的整数(输入零结束程序)";
i=j=0;
scanf("%d",&n); //或 cin>>n;
while ( n!=0 )
{
if(n>0)
i= i+1 ;
if(n<0)
j= j+1 ;
scanf("%d",&n); //或 cin>>n
}
printf("i=%4d j=%4d\n",i,j);//或 cout<<"i="<<setw(4)<<i<<" j="<<setw(4)<<j<<endl;
}
三、判断题(10道小题,共10分)
1、C语言程序的变量必须先定义再使用。

(1分)正确
2、如果x>y或者a<b为真,表达式(x>y&&a<b)就为真。

(1分)错误
3、运算符/和%要求参加运算的对象均为整型数据。

(1分)错误
4、在C语言中,5种基本数据类型的存储空间长度的排列顺序为:char<int<long int <=float<double 。

(1分)正确
5、do-while语句构成的循环只能用Break语句退出。

(1分)错误
6、函数的返回值是通过函数中的return语句获得的。

(1分)正确
7、C语言程序中的#include和#define均不是C语句。

(1分)正确
8、字符数组中的字符串可以整体输入或输出。

(1分)正确
9、同一结构体类型中的各成员项数据类型可以不相同。

(1分)正确
10、对于指向同一个数组的两个指针变量而言,两个指针变量相减的操作是有意义的。

正确
11、C语言源程序文件通过了编译、连接之后,生成一个后缀为 .EXE 的文件。

(1分)正确
12、若有运算符:>、*=、%,则他们按优先级(由低至高)的正确排列次序为:*=、>、%
正确
13、C语言认为名为Student和student的变量是不同变量。

(1分)正确
14、while语句构成的循环不能用其他语句构成的循环来代替。

(1分)错误
15、在C程序中,函数既可以嵌套定义,也可以嵌套调用。

(1分)错误
16、静态变量和外部变量都是全局变量。

(1分)错误
17、同一数组可以存储不同类型的值。

(1分)错误
18、若有语句:char *s1="string2";则语句strcpy("china",s1);是正确的。

(1分)错误
19、C程序总是从main()函数的第一条语句开始执行的。

(1分)正确
20、在C程序中,赋值号( = )运算优先级别最低。

(1分)正确
21、函数的形参可以是常量、变量或表达式。

(1分)错误
22、在定义二维数组时,可以将该数组的两个维数全部省略。

(1分)错误
23、字符串"The"小于字符串"the"。

(1分)正确
24、for循环只能用于循环次数已经确定的场合。

(1分)错误
25、int *p=150;语法错误。

(1分)正确
26、C语言是一种结构化程序设计语言。

(1分)正确
27、在switch-case语句中,不是每个case后都必须使用break语句,可以根据需要使用break语句。

(1分)
正确
28、C语言为所定义的数组在内存中分配一片连续的存储单元。

(1分)正确
29、char str[50]; str="I am a student."; 是合法语句。

(1分)错误
30、_ya是不合法的C语言标识符。

(1分)错误
31、若有定义:long int j,*p;则操作j=p;是合法操作。

(1分)错误
32、若有定义:double x[3][5];则x数组中行下标的下限为0,列下标的上限为4 。

正确
33、宏替换不占用程序运行时间,只需编译时间。

(1分)正确
34、Break语句用在循环体中,可使此循环结束。

(1分)错误
35、a-=7等价于a=a-7。

(1分)正确
36、若调用一个没有return语句的函数,则该函数也能返回一个用户所希望的函数值。

错误
*//计算下面级数前n项中(n=50)奇数项的和,并输出该级数最后两项之差的绝对值。

1*2*3+2*3*4+3*4*5+……
+n*(n+1)*(n+2)+…
#include <stdio.h>
int main()
{
int n=50,s=0,t,i;
for(i=1;i<=50;i+=2)
s=s+i*(i+1)*(i+2);
t=49*(49+1)*(49+2)-47*(47+1)*(47+2);
printf("前n项中(n=50)奇数项的和为:%d\n",s);
printf("最后两项之差的绝对值为:%d\n",t);
}
//从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+…(共n项)的和。

例a=2,n=4,则sum=2+22+222+2222. #include <stdio.h>
int main()
{
int n,sum=0,a,i,b=0;
scanf("%d %d",&a,&n);
for(i=1;i<=n;i++)
{
b=b*10+a;
sum=sum+b;
}
printf("sum=2+22+222+2222的和为:%d\n",sum);
//printf("最后两项之差的绝对值为:%d\n",t);
}
//编写程序,输出下列三角形:
// 1 2 3 4 5 6 7
// 1 2 3 4 5
// 1 2 3
// 1
//
#include <stdio.h>
int main()
{
int i,j;
for(i=4;i>=1;i--)
{
for(j=1;j<=4-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("%2d",j);
printf("\n");
}
}
//请编写一个函数fun,它的功能是:计算n门课程的最高分,计算结果作为函数值返回。

//例如:若有5门课程的成绩是:90,92,80,61,55,则函数的值为92。

//注意:部分源程序给出如下。

请在函数fun的花括号中填入所编写的若干语句。

double fun(int a[],int n)
{
int i;
double max;
max=a[0];
for(i=1;i<5;i++)
if(max<a[i])
max=a[i];
return max;
}
void main()
{
int c[5],i;double aver;
//cout<<"请输入5门课成绩:";
for(i=0;i<5;i++)
// cin>>c[i];
scanf("%d",&c[i]);
aver=fun(c,5);
//cout<<"所输入的所有成绩的最高分为:";
// cout<<aver;
printf("%f",aver);
// cout<<endl;
}
//计算下面级数前n项(n=20)的和。

1*2*3+2*3*4+3*4*5+……+n*(n+1)*(n+2)+…
#include <stdio.h>
int main()
{
int n=20,s=0,i;
for(i=1;i<=20;i++)
s=s+i*(i+1)*(i+2);
printf("前n项中(n=50)奇数项的和为:%d\n",s);
//有一头母牛,它每年年初生一头小母牛,每头小母牛从第四个年头起,每年年初也生一头小母牛,编写程序,求第20年时,共有多少头牛。

#include<stdio.h>
int main()
{
int N;
int fac(int n);
while(1)
{
scanf("%d",&N);
if(N==0)
break;
else
printf("%d",fac(N));
printf("\n");
}
return 0;
}
int fac(int n)
{
int static cow;
if(n==1||n==2||n==3) cow=1;
else if(n==4) cow=2;
else cow=fac(n-1)+fac(n-3);
return cow;
}
//请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。

合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。

//例如,当a=45,b=12,调用该函数后,c=4251。

//函数fun原型:int fun(int a,int b);
//注意:部分源程序给出如下。

请在函数fun的花括号中填入所编写的若干语句。

int fun(int a,int b)
{
int m,n,c,d,s;
m=a/10;
n=a%10;
c=b/10;
d=b%10;
s=m*1000+d*100+n*10+c;
return s;
}
void main()
int c;
c=fun(45,12);
printf("%d",c);//cout<<c;
}
//编写程序,输出下列三角形:
// 4 4 4 4 4 4 4
// 3 3 3 3 3
// 2 2 2
// 1
#include <stdio.h>
main()
{
int i,j;
for(i=4;i>=1;i--)
{
for(j=1;j<=4-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("%2d",i);
printf("\n");
}
}
//输出1至100之间每位数的乘积小于每位数的和的数#include <stdio.h>
void main ( )
{
int n,k=1,s=0,m ;
for (n=1 ; n<=100 ; n++)
{
k=1 ; s=0 ;
m=n;
while (m>=1)
{
k*=m%10;
s+=m%10;
m=m/10 ;
}
if(k<s) printf("%d\n",n);
}
}。

相关文档
最新文档