标题:2019下期C语言题目
一、数组
1、函数strcmp从头至尾顺序地将其对应字符比较,遇到两个字符不等时,两个字符相减得到一个int型值,两个字符串完全相同时,则返回0。(正确)
【按ASCLL码值大小比较、直到出现不同的字符或遇到 ’ \ 0 ’ 为止、如果出现不相同的字符,则以第一对不同的字符的比较结果为准、在英文字典中位置在后面的为“大”,小写字母比大写字母大、相同—函数值为0;字符串1>字符串2—正整数;字符串1<字符串2—负整数】
2、指向数组元素的指针只可指向数组的首元素。(错误)
【不一定】
3、对于已正确定义的二维数组a, *(a[i]+j)与a[i][j]的含义相同。(正确)
【两种不同的写法,本质都是取那个地址存在的值】
4、如果strcmp(s1,s2)返回的结果为0,表示字符串s1和s2不相同。(错误)
【strcmp返回0是相同】
5、数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。(错误)
【array是数组首元素的首地址(和&array[0]一样),&array是整个数组array的首地址。array和&array的值是一样的。array[0]和array一样,都是数组首元素的首地址,所以+1后的结果也相同。数组名的值是个指针常量,也就是数组第一个元素的地址。】
6、在C语言中能逐个地使用下标变量,也能一次引用整个数组。(错误)
【不能引用整个数组,只能用里面的元素】
7、int a[5];
the 5 elements of a are a[1],a[2],a[3],a[4],a[5] (错误)
【没有a[5],但有a[0]】
8、假设有定义如下: int array[10]; 则该语句定义了一个数组array。其中array的类型是整型指针(即: int *)。(错误)
【整型指针不对】
9、一维数组定义的一般形式如下,其中的类型名指定数组中每个元素的类型。
类型名 数组名[数组长度];(正确)
【一维数组的元素的类型靠类型名】
10、一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。
类型名 数组名[数组长度];(错误)
【类型名指定数组中每个元素的类型】
11、以下定义了一个一维数组str,该数组可以存放81个字符型数据。
char str[81]; (正确)
【char 类型占一个字节】
12、在定义数组之后,根据数组中元素的类型及个数,在内存中分配一段连续存储单元用于存放数组中的各个元素。(正确)
【数组的存储空间一定是连续的,而且每个元素的类型都是所声明的类型。随机分配空间,然后用指针将其联合起来是有点像线性表的链式存储结构(就是链表),但是数组的空间都是连续的,即每个元素的地址是连续的,但是元素存储的还是数据,是对象】
13、数组定义后,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。(正确)
【数组名表示该数组所分配连续内存空间中的第一个单元的地址,即首地址。(由于数组空间一经分配之后再运行过程中不会改变,因此数组名是一个地址常量,不允许修改)】
14、数组定义后,只能引用单个的数组元素,而不能一次引用整个数组。
(正确)
【只能引用单个元素,不能引用整个数组】
15、若有定义int a[]={2,4,6,8,10},a[1]和a++表示的含义相同。(错误)
【不相同,a[1]是初始化中的‘‘4’’是引用单个元素,a++是首地址加1】
16、数组初始化时,初始值个数小于数组元素的个数,C语言自动将剩余的元素初始化为初始化列表中的最后一个初始值。(错误)
【自动将未赋初值的元素化为0】
17、对于定义int a[5];可以通过语句scanf("%d",a);输赋入全部元素的值。(错误)
【整型数组输入要加地址符】
1、有说明语句int a[4][5];,则a[2]+3表示__。 (A)
A、a数组行下标为2、列下标为3的元素的地址
B、a数组行下标为2、列下标为3的元素的值
C、a数组第2行的首地址
D、a数组第3行的首地址
【a[2]为第2行的首地址,+3成了a[2][3】
2、对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是: (C)
A、12 ,13
B、3 ,11
C、3 ,9
D、3 ,4
【size遇到\0 结束】
3、以下哪个定义中的p不是指针,请选择恰当的选项: (C)
A、char **p;
B、char (*p)[10];
C、char *p[6];
D、给出的三项中,p都是指针
【C为定义一个指针数组,也就是数组里的元素为指针】
4、有两个字符数组a,b,则以下正确的输入语句是(B)
A、gets(a,b);
B、scanf("%s%s",a,b);
C、scanf("%s%s",&a,&b);
D、gets(“a”),gets(“b”);
【“字符数组” 数组名“a、b”就表示地址,所以不需要用“&”地址符。】
5、若用数组名作为函数调用的实参,则传递给形参的是 (A)
A、数组的首地址
B、数组第一个元素的值
C、数组中全部元素的值
D、数组元素的个数
【数组名是数组的首地址】
6、如果变量定义如下,则正确的语句是(E )。
int i, j, tab[3][4];
A、tab[0][ ] = 0;
B、tab[ ][3] = 3;
C、tab = 100;
D、for(i = 1; i <= 3; i++){
for(j = 1; i <= 4; j++){
scanf(“%d ”, &a[i][j];
}
}
E、for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
printf("%4d", tab[i][j]);
}
printf("\n");
}
【A 不能省略列数,B初始化不能这样,C中tab是数组名】
7、若有定义char str[]={“Python”, “SQL”, “JAVA”, “PHP”, “C++”}; 则表达式str[1] > *str[3]比较的是:(D)
A、字符P和字符J
B、字符串SQL和字符串PHP
C、字符串Python和字符串JAVA
D、字符S和字符P
【‘‘’’中的是一个元素,比较首地址,此题出现三次】
8、选项(A B C D )与以下字符数组定义等价。
static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, ‘\0’};
A、static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’};
B、static char s[6] =“Happy”;
C、static char s[6] ={“Happy”};
D、static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, 0};
【全对,都行】
1、.阶乘计算升级版
本题要求实现一个打印非负整数阶乘的函数。
输入样例:15
输出样例:1307674368000
#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
void Print_Factorial ( const int N )
{
double product=1;
int i;
if(N<0)
printf("Invalid input\n");
else
{
for(i=1;i<=N;i++)
product=product*i;
printf("%.0f\n", product);
}
}
【循环,阶乘的定义】
2、.数组循环右移本题要求实现一个对数组进行循环右移的简单函数:一个数