2022年辽宁专升本C语言程序设计习题练习(2)
C语言(数组)一
设有程序:
main()
{ int i,a[11];
printf("给数组赋值:\n");
for (i=0;i<=10;i++)
scanf("%d",( ));
... ...
printf("输出数组:\n");
for(i=0;i<=10;i++)
printf("%d,",( ));
}
则在程序中的两个园括号中分别应填入:
A) &a[i]和&a[i]
B) a[i]和&a[i]
C) &a[i]和a[i]
D) a[i]和a[i]
设已定义:int a[15]; 则数组a占用的内存单元数是( ).
A) 15 B) 16 C) 30 D) 32
阅读程序:
main()
{ int a[2]={0},i,j,k=2;
for(i=0;i
for(j=0;j
printf("%d\n",a[k]);
}
以上程序的输出结果是( ).
A) 1 B) 3 C) 2 D) 不确定的值
阅读程序:
f(int b[],int n)
{ int i,r=1;
for(i=0;i<=n;i++) r=r*b[i];
return r;
}
main()
{ int x,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
printf("%d\n",x);
}
以上程序的输出结果是( ).
A) 720 B) 6 C)24 D) 120
以下定义语句中,错误的是( ).
A) int a[ ] = {6,7,8};
B) int n=5, a[n];
C) char a[ ]= "string";
D) char a[5 ]={'0','1','2','3','4'};
以下描述中正确的是( ).
A) 数组名后面的常量表达式用一对圆括弧括起来
B) 数组下标从1开始
C) 数组下标的数据类型可以是整型或实型
D) 数组名的规定与变量名相同
若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( ).
A) scanf("%c",a[0]);
B) scanf("%s",&a);
C) printf("%c",a[3]);
D) printf("%s",a);
若定义数组int a[10] ,其最后一个数组元素为( ).
A) a[0]
B) a[1]
C) a[9]
D) a[10]
若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( )?
A) a[8] 的值为0
B) a[1] 的值为1
C) a[3] 的值为4
D) a[9] 的值为0
指出以下错误语句( ).
A) int n=10,a[n];
B) int n,a[10];
C) int a[10]={1,2,3};
D) int a[10]={1,2,3,4,5,6,7,8,9,10};
请读程序:
main()
{int n[2],i,j,k;
for(i=0;i<2;i++) n[i]=0;
k=2;
for(i=0;i
for(j=0;j
printf("%d\n",n[k]);
}
上面程序的输出结果是( ).
A)不确定的值 B)3 C)2 D)1
若有以下的定义和语句:
int str[12]={1,2,3,4,5,6,7,8,9,10,11,12};
char c='e',
则数值为2的表达式是( ).
A)str['g'-c] B)str[2] C)str['d'-'c'] D)str['d'-c]
设有数组定义:int a[5];则下列给数组元素赋值错误的是( ).
A) a[3]=93;
B) scanf("%c",a[3]);
C) a[3]=getchar();
D) a[3]='a'+3;
以下数组定义中错误的是( ).
A) #define N 30
int a[N+30];
B) #define N 30
int a[N];
C) int a[30];
D) int a[N];
在定义一个一维数组时,不能用来表示数组长度的是( ).
A)常量 B)符号常量 C)常量表达式 D) 已被赋值的变量
若float型变量占用4个字节,有定义float a[20]={1.1,2.1,3.1};则数组a在内存中所占的字节数是( ).
A)12 B)20 C)40 D)80
设已定义:int x[2][4]={1,2,3,4,5,6,7,8}; 则元素x[1][1]的正确初值是( ).
A) 6 B) 5 C) 7 D) 1
设有定义:int a[][3]={{1,2,3},{4,5,6},{7,8,9}}; 则a[1][2]的初值为( ).
A) 2 B) 4 C) 6 D) 8
设有:int a[4][5]; 则数组a占用的内存字节数是( ).
A) 12 B) 24 C) 40 D) 20
以下数组定义中,不正确的是( ).
A) int b[3][4];
B) int c[3][ ]={{1,2},{1,2,3},{4,5,6,7}};
C) int b[200][100]={0};
D) int c[ ][3]={{1,2,3},{4,5,6}};
定义数组:int x[2][3]; 则数组x 的维数是( ).
A) 1 B) 2 C) 3 D) 6
若定义数组并初始化int b[2][3]= { 1,2,3,4,5,6},以下语句哪一个成立( )?
A) 表达式b[1][2]的值为1
B) 表达式b[1][2]的值为4
C) 表达式b[1][2]的值为6
D) 表达式b[1][2]的值为2
若定义数组并初始化int a[2][3]={{1,2,3},{4,5,6}};for(i=0;i<2;i++) for(j=0;j<3;j++)
printf("%d",a[i][j]);语句的结果是哪一个( )?
A) 1,2,3,4,5,6
B) 1 2 3 4 5 6
C) 123456
若定义数组并初始化int a[2][3]= {{1,2, 3},{4,5,6}};以下语句哪一个不成立( )?
A) a数组中有6个元素
B) a[2][3]是a数组的最后一个元素的引用
C) a数组中每个元素都为整数
D) a数组是整型数组
定义如下变量和数组:
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是( ).
for(i=0;i<3;i++) printf("%d",x[i][2-i]);
A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9
如有以下定义:double s[][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};则数值为2的元素是( ).
A) s[1][3] B) s[0][3] C) s[0][2] D) s[1][2]
以下程序的输出结果是( ).
main()
{int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++)
s+=a[i][j];
printf("%d",s);
}
A) 18 B) 19 C) 20 D) 21
若已有char b[10][50];则该二维字符数组在内存所占字节数为( ).
A) 10 B)50 C)60 D)500
A)int a[2][3]; B)int b[][3]={0,1,2,3};
C)int c[5][5]={0}; D)int d[3][ ]={{1,2},{1,2,3},{1,2,3,4}};
设有:char a[10]; 下列语句那个是正确的( )?
A) scanf("%s",a[0]);
B) scanf("%s",&a);
C) printf("%s",a[0])
D) printf("%s",a)
阅读程序:
main()
{ char a[10];
int i;
for(i=1;i<=5;i++)
scanf("%c",&a[i]);
printf("%c",a[0]);
}
设从键盘输入字符串:abcde,则程序的输出结果是( ).
A) a B)空格 C)不确定 D)0
设有:char a[4][5]; 则数组a占用的内存字节数是( ).
A) 12 B) 24 C) 40 D) 20
合法的数组定义是( ).
A) int a[ ] = "string";
B) int a[5]={0,1,2,3,4,5};
C) char a= "string";
D) char a[ ]={'0','1','2','3'};
设有数组定义:char string[ ]="China";则数组string所占的空间为( ).
A) 5个字节
B) 6个字节
C) 7个字节
D) 10个字节
定义字符数组c:char c[ ]={"c language"};数组c在内存中所占字节数是( ).
A) 9 B) 10 C) 11 D) 12
指出以下错误语句( ).
A) char a[10]={'0','1','2','3','4','5','6','7','8','9'};
B) char a[10]={'0','1 ','2','3'};
C) char a[2]= {"1","2"};
D) char a[2]= {'a’,'b’};
若定义数组并初始化char a[10]={"hello"},该数组的元素个数是( ).
A) 10
B) 5
C) 6
D) 7
若定义数组并初始化char a[10]={"HELLO"},该数组的元素中 a[2]是( ).
A) 'L'
B) 'E'
C) 'H'
D) 'O'
若定义数组并初始化int b[10]={ 1,2,3,4},以下哪几个语句成立( )?
A)b[8]的值为0
B)b[1]的值为1
C)b[3]的值为整数
D)b[10]不是b数组中的元素
若定义数组int a[10];指出下列错误语句:
A) a数组共有10个元素,其引用方法是:a[1],a[2]...a[10];
B) a数组是整型数组,其元素自动初始化为0;
C) a数组最后一个元素的引用方法是a[10];
D) a数组第一个元素的引用方法是a[1];
数组是数目固定的若干变量的有序集合,数组中各元素的类型可以不同。
数组是C语言的一种构造数据类型,其元素的类型可以是整型、实型、字符型甚至结构类型。
设需定义一个有15个元素的数组a,并对其前5个元素赋初值,可用如下语句实现:int a[]={1,2,3,4,5};
数组定义时,只允许使用常量表达式定义数组的大小,其值必须是正整数,而不能用变量来定义数组长度。
C语言数组的下标从0开始,下标必须是整数型的常量或变量。
数组是数目固定、类型相同的若干变量的有序集合。数组中的每一个数(变量)称为数组元素,数组中的所有元素都属于同一种数据类型。
数组元素下标的下界是固定的,总是为0。
一维数组在引用时下标的范围是:0 <= 下标 < 数组的长度 。
若有数组定义为:int a[100];则该数组的下界为0,上界为100。数组元素下标范围是: 下界 <= 下标 < 上界。
设已定义:double a[5][5]; 则数组a在内存中的存放顺序是:a[0][0],a[0][1],a[0][2], ... ,a[4][3],a[4][4] 。
C语言(数组)二
设已定义:float a[15]; 则数组a可引用的元素有( ).
A) a[1]~a[15]
B) a[0]~a[15]
C) a[1]~a[14]
D) a[0]~a[14]
以下程序段给数组所有元素输入数据:
main()
{ int a[10],i=0;
while(i<10) scanf("%d",( ));
... ...
}
应在园括号中填入的是:
A) a+(i++)
B) &a[i+1]
C) a+i
D) &a[++i]
若有以下定义:double w[100]; 则数组w的元素下标范围是( ).
A) [0,100]
B) [0,99]
C) [1,100]
D) [1,99]
若有以下说明:int a[10]={1,2,3,4,5,6,7,8,9,10}; char c='a'; 则数值为4的表达式是( ).
A) a['f'-c]
B) a[4]
C) a['d'-'c']
D) a['d'-c]
已知int类型变量在内存中占用2个字节,定义数组int b[8]={2,3,4};则数组b在内存中所占字节数为( ).
A) 3 B) 6 C) 8 D) 16
用数组名作为函数调用时的实参,实际上传送给形参的是( ).
A) 数组首地址 B) 数组的第一个元素值
C) 数组中全部元素的值 D) 数组元素的个数
若定义数组int a[10] ,其数组元素的下标下限为( ).
A) 1
B) 0
C) 9
D) 10
若定义数组int a[10],以下语句哪一个不成立( )?
A) a 数组在内存中占有一连续的存储区
B) a代表a数组在内存中占有的存储区的首地址
C) *(a+1)与a[1]代表的数组元素相同
D) a是一个变量
若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个成立( )?
A) 若引用a[10],编译时报错
B) 若引用a[10],连接时报错
C) 若引用a[10],运行时出错
D) 若引用a[10],系统不报错
若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( )?
A) a[10]是a数组的最后一个元素的引用
B) a数组中有10个元素
C) a数组中每个元素都为整数
D) a数组是整型数组
执行下面的程序段后,变量k中的值为( ).
int k=3,s[2];
s[0]=k;k=s[1]*10;
A)不定值 B)33 C)30 D)10
如已有定义:int a[4];若要把10,20,30,40分别赋值给数组a的4个元素,下面正确的赋值方式是( ).
A)scanf("%d%d%d%d",a[0],a[1],a[2],a[3]};
B)scanf("%s",a);
C)a={10,20,30,40};
D)a[0]=10;a[1]=a[0]+10;a[2]=a[1]+10;a[3]=a[2]+10;
下列数组定义正确的是( ).
A) int a[];
B) char a[100]={68,69,70};
C) int n=100,a[n];
D) char n=4,a[n]={"abc"};
一维数组初始化时,若对部分数组元素赋初值,则下面正确的说法是( ).
A)可以只对数组的前几个元素赋初值
B)可以只对数组的中间几个元素赋初值
C)可以只对数组的后几个元素赋初值
D)以上说法全部正确
决定数组所占内存单元多少的是( ).
A)数组的长度 B)数组的类型 C)数组在初始化时被赋值的元素的个数 D) 数组元素的个数及其类型
以下程序的输出结果是( ).
main( )
{int i , a[10]};
for (i=9;i>=0;i--) a[i]=10-i;
printf("%d%d%d",a[2],a[5],a[8]);
}
A)258 B)741 C)852 D)369
设有程序段:
#define N 3
#define M N+2
float a[M][N];
则数组a的元素个数和最后一个元素分别为( ).
A) 15,a[5][3] B) 15,a[3][5] C) 8,a[4][2] D) 15,a[4][2]
设有:int x[2][4]={1,2,3,4,5,6,7,8};printf("%d",x[2][4]); 则输出结果是( ).
A) 8 B) 1 C) 随机数 D) 语法检查出错
以下程序的输出结果是( ).
main()
{ int i,a[3][3]={ 1,2,3,4,5,6,7,8,9 };
for(i=0;i<3;i++) printf("%d,",a[i][2-i] );
}
A) 1,5,9 B) 1,4,7 C) 3,5,7 D) 3,6,9
以下数组定义中正确的是( ).
A) float f[3,4]; B) int a[ ][4];
C) char c(3); D) double d[3+2][4];
指出以下错误语句( ).
A) int a[2][3]= {{1,2,3},{4,5,6}};
B) int b[2][3]= {1,2,3,4,5,6};
C) int a[][]={{1,2,3},{4,5,6}};
D) int a[][3]= {{1,2,3},{4,5,6}};
若定义数组并初始化int b[][3]={{1,2,3},{4,5,6}};以下语句哪一个成立( )?
A) b[1][2]的值为1
B) b[1][2]的值为4
C) b[1][2]的值为6
D) b[1][2]的值为2
若定义数组并初始化int b[][3]={{1,2,3},{4,5,6}};以下语句哪一个成立( )?
A) b[1][2]的值为1
B) b[1][2]的值为4
C) b[1][2]的值为6
D) b[1][2]的值为2
若定义数组并初始化int a[2][3]={{1,2,3},{4,5,6}},b[2][3]={ 1,2,3,4,5,6};
以下语句哪一个不成立( )?
A) a和b数组中各有6个元素
B) b数组的初始化是错误的
C) a数组与b数组中每个对应元素相等
D) a、b数组都是整型数组
合法的数组初始化是( ).
A) int x[][]={{1,2,3},{4,5,6}};
B) int x[][3]={1,2,3,4,5};
C) int x[3][3]={1,2,3;4,5,6;7,8,9};
D) int x[3][3]={1,2,3};
在对二维数组初始化时,错误的说法是( ).
A)可对二维数组的全部元素赋初值
B)可对二维数组的部分元素赋初值
C)给二维数组的全部元素赋初值时,可以不指定第一维的长度但第二维的长度不能省略
D)给二维数组的全部元素赋初值时,可以不指定第二维的长度但第一维的长度不能省略
以下程序的输出结果是( ).
main()
{int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
}
A)0650 B) 1470 C) 5430 D)输出值不确定
在内存中,二维数组存放的顺序是( ).
A)按行顺序 B)按列顺序 C)按元素的大小 D)按元素被赋值的先后顺序
设定义了:char a[10]={'1','2','3','4','5'}; 则a[5]的正确初值是( ).
A) '5' B) 5 C) '\0' D) ' '
设有:char a[10]; 下列语句那个是正确的( )?
A) scanf("%c",a[0]);
B) scanf("%c",a);
C) printf("%c",a)
D) printf("%c",a[0])
设有定义:char a[][5]={{'*'},{'*',' ','*'},{'*',' ',' ',' ','*'},{'*',' ','*'},{'*'}};
则a[0][0]和a[4][4]的初值分别为( ).
A) *,*
B) 空格,空格
C) 空白符,*
D) *,空白符
设有:char a[]={"I am a student."}; 则a在内存中占用的字节数是( ).
A) 15 B) 12 C) 16 D) 32
给出以下定义:char u[ ]="abcdef"; char v[ ]={'a','b','c','d','e','f'}; 则下列正确的描述为( ).
A) 数组u和数组v等价
B) 数组u和数组v的长度相等
C) 数组u的长度大于数组v的长度
D) 数组u的长度小于数组v的长度
若有以下定义和语句,则输出结果是( ).
char string[ ]="Sunny";
printf("%.3s",string);
A) Su B) Sun C) Sunn D) Sunny
C语言中实现字符串输入的库函数是( ).
A) gets(字符数组) B) puts(字符数组)
C) strlen (字符串) D) strcmp(字符串1,字符串2)
若定义数组并初始化char a[]={"hello"},该数组的元素个数是( ).
A) 不知道
B) 5
C) 6
D) 7
若定义数组并初始化char a[10]={"hello"},该数组的元素中’\0’的个数是( ).
A) 10
B) 5
C) 6
若定义数组并初始化char a[10]={"hello"},该数组的元素中 a[5]是( ).
A) 'h'
B) 'o'
C) '\0'
D) 'l'
若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'},指出以下错误语句( ):
A)可以用scanf("%s",a[0]);语句对a[0]元素重新赋值。
B)可以用scanf("%s",&a);语句对a数组重新赋值。
C)可以用scanf("%c",a[3]);语句对a[3]元素重新赋值。
D)可以用scanf("%s",a);语句对a数组重新赋值。
数组初始化时,下面说法错误的是( ).
A)当对一维数组的全部元素赋初值时,可以不指定长度
B)当对二维数组的全部元素赋初值时,可以省略维数
C)用字符串对一维字符数组赋值时,可以不指定长度
D)用字符串对二维字符数组赋值时,可以省略维数
可以用如下的语句定义数组a:int n=10,a[n];
设已定义:int a[15]={1,2,3,4,5}; 则语句 printf("%d",a[5]); 的输出结果是5。
数组中的所有元素必须属于同一种数据类型。
数组名表示的是该数组元素在内存中的首地址。
C语言只能单个引用数组元素而不能一次引用整个数组。
定义数组:int a[10]; 则数组a的最后一个元素是a[9],数组 a共有9个元素。
C语言中数组元素用数组名后带圆括弧的下标表示。
C语言中数组所占存储单元的多少仅由数组的长度决定。
定义一维数组int a[10];则语句for(i=0;i<10;i++) scanf("%d",a[i]);是正确的。
给二维数组的全部元素赋初值,可以用如下的语句实现:int a[][]={{1,2,3},{4,5,6},{7,8,9}};
C语言(函数,变量作用范围)一
C语言程序的基本单位是( ).
A) 程序 B) 语句 C) 字符 D) 函数
下列函数定义不正确的是 ( )。
A)int max() B)int max(x,y)
{ int x,y,z; int x,y;
z=x>y?x:y; {int z;
} z=x>y?x:y;
C) int max(x,y) return(z);
{ int x,y,z; }
z=x>y?x:y; D) int max()
return (z); { }
}
以下叙述中正确的是( ).
A)在C语言中总从第一个开始定义的函数开始执行
B)在C语言中所有调用别的函数必须在main函数中定义
C)C语言总是从main函数开始执行
D)在C语言中,main函数必须放在最前面
以下说法中正确的是( ).
A) C语言程序是由一个或多个函数组成,其中至少有一个主函数
B)一个C语言文件至少应有一个主函数
C)所有C语言函数都有返回值
D)C程序中,main函数必须放在其他函数之后
以下正确的函数定义是( ).
A) double fun(int x,int y);
{int z;
z=x+y; return z;}
B) fun(int x,y)
{int z; return z;}
C) double fun(int x,int y);
{double z;
z=x+y; return z;}
D) double fun( x, y)
int x,y;
{double z; z=x+y; return z;}
以下正确的函数声明形式是( ).
A) float fun(int x,int y)
B) float fun(int x, y)
C) float fun(int x,int y);
D) float fun(int ,int )
C语言中,函数返回值的类型是由( )决定的。
A)调用函数时临时
B)return语句中的表达式类型
C)调用该函数的主调函数类型
D)定义函数时,所指定的函数类型
关于return语句,正确的说法是 ( )。
A)可以在同一个函数中出现多次
B)必须在每个函数中出现
C)在主函数和其它函数中均可出现
D)只能在除主函数之外的函数中出现一次
C语言中形式参数的作用范围是( ).
A) 其所在的函数内 B) 整个程序文件
以下正确的函数定义形式是( ).
A) double fun(int x,int y)
B) double fun(int x,int y);
C) double fun(int x, y)
D) double fun(int x, y);
以下函数f返回值是( ).
f(int x){return x;}
A)void类型 B) int类型 C) float类型 D) 无法确定返回值类型
以下说法中正确的是( ).
A)定义函数时,形参的类型说明可以放在函数体内
B)return后面的值不能为表达式
C)如果函数值的类型与返回值的类型不一致,以函数值类型为准
D)如果形参与实参的类型不一致,以实参为准
若用数组作为函数调用的实参,传递给形参的是( ).
A)数组的首地址
B)数组第一个元素的值
C)数组中全部元素的值
D)数组元素的个数
C语言中,调用一个函数时,当形参是变量名时,实参和形参之间的数据传递是( ) 。
A)单纯值传递
B)单纯地址传递
C)值传递和地址传递都有可能
D)由实参传给形参,然后由形参传回给实参,既是双向传递
下列函数调用中,不正确的是 ( )。
A)max(a,b); B)max(3,a+b);
C)max(3,5); D)int max(a,b);
若输入ab,程序运行结果为 ( )。
main()
{ char a[2];
scanf("%s",a);
printf("%c,%c",a[1],a[2]);
}
A)a,b B)a,
C)b, D)程序出错
在下面对C语言函数的有关描述中,正确的是( ).
A)在C语言中调用函数时,若函数参数为简单变量,则只能将实参的值传给形参,形参的值不能传给实参
B)函数必须有返回值,否则不能使用函数
C)C程序中有调用关系的所有函数必须放在同一源程序文件中
在C语言中以下正确的说法是( ).
A) 当函数的参数为简单变量时,实参和与其对应的形参各占用独立的存储单元;
B) 当函数的参数为简单变量时,实参和与其对应的形参共占用一个存储单元;
C) 形参是虚拟的,不占用存储单元。
若用数组名作为函数调用的实参,传递给形参的是( ).
A)数组的首地址
B)数组第一个元素的值
C)数组全部元素的值
D)数组元素的个数
程序
f(int x)
{
return x;
}
main()
{
float a=3.14;
a=f(a);
printf("%.2f\n",a);}
执行结果为( ).
A) 3 B) 3.14 C) 3.00 D) 0
执行下列程序后, 变量a的值应为( ).
f1(float x)
{return x+1.3;}
main()
{float a;
a=f1(2.4);
}
A) 3.7 B) 3 C) 4 D) 不确定
下列程序的执行结果为( ).
float f1(float x)
{
int k=2;
k=k*x;
return k;
}
main()
{
float b=4.3;
printf("%.1f",f1(b));
}
A) 8.6 B) 9.0 C) 8.0 D) 8
若有以下函数定义,则在主函数中正确的调用语句是
int fun(int array[3][5])
{ ………..}
main()
{ int a[3][5], b;
……..}
A)b=fun(a[3][5]);
B)b=fun(int a[3][5]);
C) b=fun(a);
E) b=fun(&a);
函数f的定义为:
f(int x)
{return x*x;}
以下程序是嵌套调用的有( ).
A)a=f(2)*f(2);
B)a=sqrt(f2(4)*f(4));
C)以上均不是
D)以上均是
对下列递归函数:
int f(int n)
{
return (n==0)? 1: f(n-1)+2;
}
函数调用f(3)的返回值是( ).
A) 5 B) 6 C) 7 D) 以上均不是
在一个源文件中定义的全局变量的作用域为( )。
A)本文件的全部范围。 B)本程序的全部范围。
C)本函数的全部范围。 D)从定义该变量的位置开始至本文件结束。
C语言中全局变量的作用范围是( ).
A) 其所在的函数内 B) 整个程序文件
如果在一个函数中的复合语句中定义了一个变量,则该变量的作用范围为( ).
A)在该函数中有效
B)在该复合语句中有效
一个函数一般由函数说明部分和函数体组成。
执行下列语句后,程序的运行结果为( ).
int a=10;
f( )
{a=12;
}
main()
{f();
printf("%d",a);
}
A) 10 B) 12 C) 0 D) 不确定
以下说法中正确的是( ).
A)主函数中定义的变量是全局变量,其作用范围仅限于函数内部
B)主函数中定义的变量是全局变量,其作用范围从定义之处到文件结束。
C)主函数中定义的变量是局部变量,其作用范围仅限于函数内部
D)主函数中定义的变量是局部变量,其作用范围从定义之处到文件结束。
调用C语言函数时,实参可以是:
A)常量
B)变量
C)表达式
D)void
下面程序段是否正确。
main()
{ void fun()
{ ...
}
}
形参应与其对应的实参类型一致。
C语言中,void类型的函数可以不用在主调函数中声明。
用数组名作函数形参和实参时,应在主调函数和被调函数中分别定义数组。
以数组名作为函数参数时,实参数组必须定义为具有确定长度的数组,而形参数组可以不定义长度。
Return语句后面的值不能为表达式。
对于不要求带返回值的函数,函数类型必须是void类型。
数组元素做函数的实际参数,传递的是整个数组。
形参不是局部变量。
在一个函数定义中只能包含一个return语句。
主函数和其它函数可以互相调用。
以下程序运行结果为1,3,5,7。
main()
{ int a[4]={1,3,5,7};
printf("%d,%d,%d,%d\n",a);
}
函数调用可以作为一个函数的实参。
函数的嵌套调用就是在调用一个函数的过程中,又调用另一个函数。
数组名作为函数参数时,传递的是数组第一个元素的值。
C语言中允许函数的递归调用。
下面程序段能否正确执行。
main()
{int m=n;
...
}
int n;
void func()
{int s=3;
n=s;
...
}
不同函数中定义的变量,其作用范围都限制在各自的函数内,在内存中占据的存储单元也各不相同。
在C语言中,如果不对函数作类型说明,则函数的隐含类型为【 】。
C语言(函数,变量作用范围)二
1 C语言程序由函数组成,以下说法正确的是( A ).
A)主函数可以在其它函数之前,函数内不可以嵌套定义函数
B)主函数可以在其它函数之前,函数内可以嵌套定义函数
C)主函数必须在其它函数之前,函数内不可以嵌套定义函数
D)主函数必须在其它函数之前,函数内可以嵌套定义函数
2 以下说法中不正确的是 ( A )。
A) 主函数main中定义的变量在整个文件或程序中有效
B) 不同的函数中可以使用相同名字的变量
C) 形式参数是局部变量
D) 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
3 下面函数
f(double x)
{printf(“%6d\n”,x);}
的类型为( C ).
A) 实型 B)void 类型 C)int 类型 D) A)、B)、C)均不正确
4 以下说法中正确的是( C ).
A)C语言程序总是从第一个定义的函数开始执行
B)在C语言程序中,要调用的函数必须在main函数中定义
C)C语言程序总是从main函数开始执行
D) C语言程序中,main函数必须放在程序的开始部分
5 以下正确的函数定义是( C ).
A) double fun(int x,int y);
{int z;
z=x+y; return z;}
B) fun(int x,y)
{int z; return z;}
C) double fun(int x,int y)
{double z;
z=x+y; return z;}
D) double fun( x, y)
{int x,y;
double z;
z=x+y; return z;}
6 定义为void类型的函数,其含义是( A ).
A)调用函数后,被调用的函数没有返回值
B)调用函数后,被调用的函数不返回
C)调用函数后,被调用的函数的返回值为任意的类型
D)以上三种说法都是错误的
7 设有如下定义:
int x=10,y=3,z ;
则语句
printf("%d\n",z=(x%y,x/y));
的输出结果是( D ).
A) 1 B)0 C) 4 D)3
8 在C语言的函数中,( C )。
A)必须有形参 B)形参必须是变量名
C)可以有也可以没有形参 D)数组名不能作形参
9 函数调用语句f((x,y),(a,b,c),(1,2,3,4));中,所含的实参个数是( C ).
A) 1 B) 2 C) 3 D) 4
10 如果函数的首部省略了函数返回值的类型名,则函数被默认为( C )。
A)void类型 B)空类型
C)int类型 D)char类型
11 用数组名做函数的参数,实际上传递给形参的是( A ).
A) 数组元素的首地址 B) 数组的第一个元素的值 C) 每一个数组元素 D)整个数组的个数
12 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B ).
A)float
B)int
C)long int
D)void
13 已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式是( B ).
int a[3][4];
f(a);
A)f(int array[ ][6])
B)f(int array[ 3][ ])
C)f(int array[ ][4])
D)f(int array[ 2][5])
14 下列说法中正确的是( D ).
A)调用函数时,实参变量与形参变量可以共用内存单元
B)调用函数时,实参的个数、类型和顺序与形参可以不一致
C)调用函数时,形参可以是表达式
D)调用函数时,将为形参分配内存单元
15 下列语句中,不正确的是 ( D )。
A)c=2*max(a,b); B)m=max(a,max(b,c));
C)printf("%d",max(a,b)); D)int max(int x,int max(int y,int z))
16 以下函数调用语句:
fun(x+y,x-y);中实际参数的个数是( B ).
A) 1 B) 2 C) 4 D)5
17 C语言可执行程序开始执行点为( C ).
A)程序中第一条可执行语句 B) 程序中第一个函数
C)程序中的main函数 D) 包含文件中的第一个函数
18 若调用一个函数,且此函数中无return语句,则正确的说法是( D ).
A) 没有返回值;
B) 返回若干个系统默认值;
C) 能返回一个用户所希望的函数值;
D) 返回一个不确定的值
19 执行下列程序后, 变量 i 的值应为( A ).
int ma(int x,int y)
{return x*y;
}
main()
{ int i;
i = 5;
i = ma(i,i-1)-7;
}
A) 13 B) 17 C) 19 D) 以上都错
20 下列程序的结果为( C ).
change(int x,int y)
{int t;
t=x;x=y;y=t;
}
main()
{
int x=2,y=3;
change(x,y);
printf("x=%d,y=%d\n",x,y);
}
A) x=3,y=2 B) x=2,y=3 C) x=2,y=2 D) x=3,y=3
21 执行下列程序后, 变量a的值应为( D ).
int f(int x)
{return x+3;}
main()
{int a=1;
while(f(a)<10)
a++;
}
A) 11 B) 10 C) 9 D) 7
22 若有以下函数定义,则在主函数中正确的调用语句是( C ).
void fun(int array[][5])
{ ………..}
main()
{ int a[3][5], b;
……..}
A)fun(a[3][5]);
B)b=fun(a);
C) fun(a);
D) fun(a)
23 C语言中的函数( D ).
A)可以嵌套定义。
B)不可以嵌套调用。
C)可以嵌套调用,但不能递归调用。
D)嵌套调用和递归调用均可。
24 C语言中( A )函数的递归调用.
A) 允许 B) 不允许
25 对于以下递归函数f, 调用f(4),其返回值为( B ).
int f(int n)
{ if (n)
return f(n-1)+n;
else
return n;
}
A) 8 B) 10 C) 11 D) 12
26 以下不正确的描述为( B ).
A)在函数之外定义的变量为外部变量,外部变量是全局变量。
B)在函数中既可以使用本函数中的局部变量,又可以使用全局变量。
C)若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。
27 以下正确的说法是:建立函数的目的之一是( B ).
A) 提高程序的执行效率; B) 提高程序的可读性
C) 减少程序的篇幅; D) 减少程序文件所占内存
28 执行下列语句后,a的值为( C ).
int a=12, b=7;
m(int a,int b)
{
a=b;
}
main()
{
m(a,b);
}
A) 0 B) 1 C) 12 D) 7
29 全局变量的有效范围为(D ).
A) 该程序的所有文件
B) 从本源文件的开始到结束
C) 该程序的主函数
D) 从定义变量的位置开始到本源文件结束
30 以下说法中正确的是( C ).
A)形参是全局变量,其作用范围仅限于函数内部
B)形参是全局变量,其作用范围从定义之处到文件结束。
C)形参是局部变量,其作用范围仅限于函数内部
D)形参是局部变量,其作用范围从定义之处到文件结束。
1 若使用一维数组名作为函数实参,则以下说法正确的是( AC )
A)必须在主调函数中说明此数组的大小
B)实参数组与形参数组类型可以不匹配
C)实参数组与形参数组的大小可以不一致
D)实参数组名与形参数组名必须一致
1 实参可以是常量、变量或表达式。 对
2 定义函数时,形参的类型说明可放在函数体内。
3 在有参函数中,定义函数中指定的形参变量在整个程序一开始执行时便分配内存单元。
4 数组名作函数参数时,也采用“值传送”方式。
5 在C函数中,当以数组名作为参数时,对形参变量的操作不会影响到调用函数中的实参变量,即形参值不能传回给实参。
6 函数调用可以作为一个函数的形参。
7 数组名做函数的参数时,可以只在主调函数中定义数组,被调用函数只需要确定名称就可以了。
8 数组元素做函数的实参,是双向传递,即“地址传递”方式。
9 形参和实参的变量名称可以一样。 对
10 除了利用实际参数和形式参数在各函数之间传递数据外,利用全局变量,也可以在各函数间传递数据。 对
11 函数的实参与形参的类型应一致。 对
12 在C中,形式参数只是局限于所在函数. 对
13 在一个函数定义中只能包含一个return语句。
14 C语言不允许在调用一个函数的过程中出现直接或者间接地调用该函数本身。
15 C语言中允许函数的嵌套定义和嵌套调用。
16 在同一源文件中,外部变量与局部变量同名时,则在局部变量的作用范围内,外部变量不起作用。 对
17 不同函数中使用相同名字的变量时,代表的是相同的变量。
18 全局变量在在程序的全部执行过程中都占用存储单元。 对
1 f( int m )
{
int i, j;
for( i=0; i for( j=m-1; j>=0; j--) printf("%1d%c",i+j, j?'*':'#'); } 如果调用f(3)将输出【 2*1*0#3*2*1#4*3*2# 】 C语言(函数,变量作用范围)三 1 下列定义不正确的有 ( C ) 。 A)#define PI 3.141592 B)#define S 345 C)int max(x,y); D)char c; int x,y ; { } 2 下列程序结构中,不正确的是 ( B )。 A)main() B) main() {float a,b,c; {float a,b,c; scanf("%f,%f",&a,&b); scanf("%f,%f",&a,&b); c=add(a,b); c=add(a,b); ...... ..... } } int add(float x,float y) float add(float x,float y) { ... } { ... } C)float add(float x,float y); D)float add(float x,float y) main() { ... } {float a,b,c; main() scanf("%f,%f",&a,&b); {float a,b,c; c=add(a,b); scanf("%f,%f",&a,&b); ...... c=add(a,b); } ..... float add(float x,float y) } { ... } 3 一个C语言的程序总是从( A )开始执行的. A)main函数 B)文件中的第一个函数 C)文件中的第一个子函数调用 D)文件中的第一条语句 4 以下正确的函数定义是( D ). A)double fun(int x,int y) {z=x+y; return z;} B) double fun(int x,int y); {int z; z=x+y; return z;} C) fun(int x,y) {int z; return z;} D) double fun(int x,int y) {double z; z=x+y; return z;} 5 以下正确的函数声明形式是( D ). A) double fun(int x,int y) B) double fun(int x;int y) C) double fun(int ,int ) D) double fun(int ,int ); 6 以下说法中正确的是( B ) 在C语言中 A)实参与其对应的形参各占用独立的存储单元 B)实参与其对应的形参占用同一个存储单元 C)只有当实参与形参同名时才占用同一个存储单元 D)实参占用存储单元,但形参是虚拟的,不占用存储单元 7 设有如下函数定义: int f(char *s) { char *p=s ; while(*p!='\0') p++; return(p-s) ; } 如果在主程序中用下面的语句调用上述函数,则输出结果为( A ). printf("%d\n",f("goodbye!")); 的输出结果是 A) 3 B) 6 C) 8 D) 0 8 下面程序段中,主函数中变量a被初始化为 ( C )。 int f() { return 3.5; } main() { int a=f(); } A)3.5 B)无确定值 C)3 D)程序出错 9 下面叙述不正确的是( D ). A) 在函数中,通常用return语句传回函数值; B) 在函数中,可以有多条return语句; C) 在C中,主函数main后的一对圆括号中也可以带有形参; D) 在C中,调用函数必须在一条独立的语句中完成; 10-C语言函数返回值的类型是由( C )决定的。 A) 调用该函数的主调函数类型 B) 定义函数时所指定的函数类型 C) return语句中的表达式类型 D) 以上都错 11-以下说法中正确的是( A ). A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型 D)形参应与其对应的实参类型一致 12-C语言中规定,简单变量做实参时,它和对应形参之间的数据传递方式是( B ). A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传给实参 D)由用户指定传递方式 13-以下程序的输出结果是 ( A ) 。 int power(int x,int y); main() {float a=2.6,b=3.4; int p; p=power((int)a,(int)b); printf("%d\n",p); } int power(int x,int y) {int i,p=1; for(i=y;i>0;i--) p=p*x; return p; } A) 8 B) 9 C) 27 D) 81 14-以下不正确的描述为( B ). A)调用函数时,实参可以是表达式 B)调用函数时,实参变量与形参变量可以共用内存单元 C)调用函数时,将为形参分配内存单元 D)调用函数时,实参与形参的类型必须一致 15-下列语句中,不正确的是 ( C )。 A)char a[]={"China"}; B)char a[]="China"; C)printf("%s",a[0]); D)scanf("%s",a); 16-若有以下函数调用语句fun(a+b, (x,y), fun(n+k,d,(a,b)));在此函数调用语句中实际参数的个数是( A ). A) 3 B) 4 C) 5 D) 6 17-下面程序 #include main ( ) { char *a="1234"; fun(a); printf("\n"); } fun ( char *s) { char t; if(*s) {t = *s++; fun(s); } if(t !='\0') putchar( t ); } 输出为( B ). A) 1234 B) 4321 C)1324 D) 4231 18-C规定,简单变量做实参时,它与对应形参之间的数据传递方式是( B ). A) 地址传递 B)单向值传递 C)有实参传递到形参,再由形参传回给实参。 19-执行完下列语句段后, i值为( C ). int i; int f(int x) { int k = x+1; int t; t=k; k=x; x=t; return x; } i=f(f(1)); A) 1 B) 2 C) 3 D) 以上都错 20-下列程序段的运行结果为( B ). float f(int x) { x=x+3.6; return x; } main() { printf("%.1f",f(2)); } A) 6.0 B) 5.0 C) 5.6 D) 以上都不对 21-执行下列程序后, 变量a的值应为( A ). int f(int x,int y) {return x*y;} main() {int a=2; a=f(f(a,a*a),f(a+a,a/3)); } A) 0 B) 2 C) 8 D) 16 22-若有以下函数定义,则在主函数中正确的调用语句是( B ). viod fun(int array[3][5]) { ………..} main() { int a[3][5], b; ……..} A)fun(a[3][5]); B)b=fun(a); C) fun(a); D) fun(&a); 23-若有以下变量说明和函数定义: int a=4,b=6,c,k; char ch='x'; float x,y,z; sub(int x, int y, char ch, float *z) { switch(ch) {case '+': *z=x+y;break; case '-': *z=x-y;break; case '*': *z=x*y;break; case '/': *z=x/y;break; } } 则以下合法的函数调用语句是( B ). A) sub(10,20,ch,y); B) sub(1,2+3,'+',&z); C) sub(sub(1,2,'+',&y), sub(3,4,'+',&x),'-',&y); D) sub(a,b,&x,ch); 24-下面程序 #include f ( int x ) { if ( x= = 0 || x = = 1 ) return ( 3 ) ; else return ( x–f(x–2)); } main () { printf ("%d\n", f(9)); } 输出结果是( A ). A) 7 B) 3 C) 6 D) 8 25-以下说法中正确的是( B ). A)一个函数在它的函数体内调用它自身称为嵌套调用。 B)一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。 C)一个函数在它的函数体内调用其它函数称为递归调用。这种函数称为递归函数。 D)一个函数在它的函数体内不能调用自身 26-以下叙述中不正确的是( D ). A) 在不同的函数中可以使用相同名字的变量 B) 函数中的形式参数是局部变量 C) 在一个函数内定义的变量只在本函数范围内有效 D) 在一个函数内的复合语句中定义的变量在本函数范围内有效 27-C函数返回值的类型由( D )决定. A)调用函数时临时 B)return语句中的表达式类型 C)调用该函数的主调函数类型 D)定义函数时指定的函数返回值类型 28-执行下列语句后,程序的运行结果为( A ). int a=10; f( ) {int a; a=12; } main() {f(); printf("%d",a); } A) 10 B) 12 C) 0 D) 不确定 29-以下说法中不正确的是( D ). A)主函数中定义的变量只在主函数内部有效 B)形式参数是局部变量 C)在函数内部定义的变量只在本函数范围内有效 D)当全局变量与局部变量同名时,局部变量不起作用 30-当全局变量与函数内部的局部变量同名时,则在函数内部( A ). A)全局变量有效 B)局部变量有效 C)全局变量与局部变量都有效 D)全局变量与局部变量都无效 1-设下面程序段中调用fun函数传送实参a和b: main( ) { char a[10],b[10]; …… fun(a,b); …… } 则在fun函数头部中,对形参正确的定义是:(BCD) A) fun(char a,b) B) fun(char a1[],char a2[]) C) fun(char p[10], char q[10]) D) fun(char *s1,char *s2) 1 形参可以是常量、变量或表达式。 2 如函数值的类型与返回值类型不一致,以函数值类型为准。 3 下面两种写法等价。 (1) int fun(int x,int y) (2) int fun(x,y) int x,y ; 4 在C语言中,最好使用全局变量. 5 以下说法是否正确:若调用C标准库函数,调用前必须重新定义。 6 形式参数和实际参数的个数可以不同。 7 数组名做函数的参数时,实参数组和形参数组大小一定要一致。 8 用数组名做函数参数,形参数组可以不指定大小。 9 C语言中函数的返回值类型是由return语句中的表达式类型决定的。 10 数组名作为函数参数,应该在主调函数与被调函数中分别定义数组,不能只在一方定义。 11 下面的程序是否有一个整型输出值。 main() {int a ; a=pp(); printf("%d",a); } void pp() { } 12 以数组名作为参数时,数据传送方向是“双向的”。即形参值可以传回给实参。 13 所有的函数都是平行的,一个函数并不从属于另一个函数。 14 只有主函数才可以调用其它函数。 15 在C语言中,函数可以递归调用或递归定义。 16 在同一文件中,外部变量与局部变量同名。在局部变量的作用范围内,外部变量的值等于局部变量的值。 17 main函数中定义变量是全局变量。 18 当全局变量与函数内部的局部变量同名时,则在函数内部全局变量有效。 1-执行完下列语句段后, i值为【 1 】。 int i; int f(int x) {int k = 0; x+=k++; return x; } i=f(f(1)); 指针一 对于类型相同的指针变量,不能进行哪种运算( )? A) - B) + C) = D) > 若有以下说明,则正确的赋值表达式是( )。 int x,*p; A) p=&x B) p=x C) *p=&x D) *p=*x 有如下语句int a=10,b=20,*p1,*p2;p1=&a;p2=&b;若要实现p1,p2均指向b,可选用的赋值语句是( )。 A) *p1=*p2; B) p1=p2; C) p1=*p2; D) *p1=p2; 以下程序的运行结果是( )。 sub(int x,int y,int *z) {*z=y-x;} main() {int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\n",a,b,c);} A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( )。 main() {int *p,*q,a,b; p=&a; printf("input a:"); scanf("%d",*p); …… } A) *p表示的是指针变量p的地址 B) *p表示的是变量a的值,而不是变量a的地址 C) *p表示的是指针变量p的值 D) *p只能用来说明p是一个指针变量。 变量的指针,其含义是指该变量的( )。 A) 值 B) 地址 C)名 D)一个标志 若有说明:int *p,m=5,n; 以下正确的程序段是( )。 A)p=&n; B)p=&n; C)scanf("%d",&n); D)p=&n; scanf("%d",&p); scanf("%d",*p); *p=n *p=m; 下面程序段运行结果是( )。 char *p="%d,a=%d,b=%d\n"; int a=111,b=10,c; c=a%b; p+=3; printf(p,c,a,b); A)1,a=111,b=10 B)a=1,b=111 C)a=111,b=10 D) 以上结果都不对。 执行下面程序段后,ab的值为( )。 int *var,ab; ab=100;var=&ab; ab=*var+10; A)120 B)110 C)100 D)90 若有定义:int x,*pb;则正确的赋值表达式是( )。 A)pb=&x B)pb=x C)*pb=&x D)*pb=*x 下面程序运行结果是( )。 void fun(int x) { printf("%d\n",++*x); main() {int a=25;fun(&a);} A)23 B)24 C)25 D)26 对于两个类型相同的指针变量,不能进行( )运算? A. + B. - C. = D. == 以下程序的输出结果是( )。 a. 4 b. 6 c. 8 d. 10 main( ) { int k=2,m=4,n=6; int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf("%d\n",n); } 若有int a[10]={1,2,3,4,5,,6,7,8,9,10};*p=a;则数值为9的表达式是( )。 A. *p+9 B. *(p+8) C. *p+=9 D. p+8 若有以下说明和语句,且0≤i<5,则下面哪个答案( )是对数组元素地址的正确表示? float a[]={1.6,3.0,-5.4,7.8,94.0},*p,i; p=a; A) &(p+i) B) a++ C) &p D) &p[i] 若有以下说明, 则a[*(a+a[3])]的值为( )。 int a[]={8,1,2,5,0,4,7,6,3,9}; A) 8 B) 3 C) 0 D) 不合法 以下程序运行后,输出结果是( )。 main( ) { int a[10]={19,23,44,17,37,28,49,36},*p; p=a; printf("%d\n",(p+=3)[3]); } A) 44 B) 17 C) 49 D) 运行时出错,无定值 以上就是关于2022年辽宁专升本C语言程序设计习题练习(2)的全部内容了,如果你还有专升本相关的疑惑(如专升本报名、考试动态、院校招生简章、统考动态、湖南专升本院校、历年真题、考试大纲、专升本等相关信息),可以在文章下方留下你的联系方式,老师会第一时间联系到你,为你答疑解惑哦! 部分内容来源于网络转载、学生投稿,如有侵权或对本站有任何意见、建议或者投诉,请联系邮箱(1296178999@qq.com)反馈。
未经本站授权,不得转载、摘编、复制或者建立镜像, 如有违反,本站将追究法律责任!