目录
1.已知函数的原型是: int fun(char b[10], int *a);
设定义: char c[10]; int d; ,正确的调用语句是()
A: fun(c,&d); B: fun(c,d);
C: fun(&c,&d); D: fun(&c,d);
解析:
本体考察的是函数的调用和传参;
数组名:
数组名就是地址,通常来说:数组名是数组首元素的地址
但是有2个例外:
- sizeof(数组名),这里的数组名表示的整个数组,计算的是整个数组的大小,单位是字节。
- &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
除此之外,所有遇到的数组名都是数组首元素的地址。
注:数组传参的本质是指针,传递的是数组首元素地址
但是形参也可以是数组接收,也可以指针接收。
正确答案:A
- int a = 248, b = 4;
- int const* c = 21;
- const int* d = &a;
- int* const e = &b;
- int const* const f = &a;
A: *c = 32; B: *d = 43 C: e=&a D: f=0x321f
解析:
考察的是对const的理解
const修饰指针
修饰指针有两种方法
counst int* p ;
int * counst p;
- const 放在的左边
限制的指针指向的内容,也就是说: 不能通过指针来修改指针指向的内容
但是指针变量是可以修改的,也就是指针指向其他变量的
- const 放在的右边
限制的是指针变量本身,指针变量不能再指向其他对象
但是可以通过指针变量来修改指向的内容
正确答案:ABCD
- int i;
- void prt()
- {
- for (i = 5; i < 8; i++)
- printf("%c", '*');
- printf("\t");
- }
- int main()
- {
- for (i = 5; i <= 8; i++)
- prt();
- return 0;
- }
A: ***
B: *** *** *** ***
C: *** ***
D: * * *
解析:
本题考察的是,转义字符和全局变量
转义字符:
'\t' 代表为水平制表符,简单来说就是在键盘上按了
TAB
的效果,也可以理解为缩进符
全局变量
:作用域为整个程序且生命周期与主函数相同,只有程序结束,它才会销毁
在进入prt()后出来时 i 被修改成了8,然后进行主函数的条件调整表达式; i++;i变成了9;
不满足主函数的条件判断表达式,推出循环
正确答案:A
-
- int main()
- {
- int a = 3;
- printf("%d\n", (a += a -= a * a));
- return 0;
- }
A: -6
B: 12
C: 0
D: -12
解析:
考察:运算符优先级,操作符(复合赋值符)的理解
查看操作符优先级表可以得知,'*'乘法的优先级高于赋值操作符;
所以先算后面的 a-=a*a -> a=a-a*a; a=-6;
再算前面的 a+=a-> a=a+a; a=-12;
正确答案:D
A: while(1){} B: for(;1;){} C: do{}while(1); D: for(;0;){}
解析:
考察:循环条件判断
C语言中规定:0为假,非0为真;
只有条件为真时才进行循环, ABC 中 1 为真, D 中 0 为假
正确答案:D
首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。
0即不是正整数,也不是负数,不计入计算。如果没有正数,则平均值为0。
- int main()
- {
- int n = 0;
- int arr[1000];
- scanf("%d", &n);
- int i = 0;
- //往数组输入元素
- for (i = 0; i < n; i++)
- {
- scanf("%d", &arr[i]);
- }
- //输出负数
- int num = 0; //记录负数个数
- //正整数的平均值
- double pos = 0; //记录正整数个数
- double temp = 0;
- double sum = 0; //平均数
- int zero = 0; //记录0的个数
- for (i = 0; i < n; i++)
- {
- if (arr[i] < 0)
- {
- num++;
- }
- else if (arr[i] == 0)
- zero++;
- else
- {
- temp = temp + arr[i];
- pos++;
- }
- }
- if (zero == n)
- {
- printf("%d 0.0\n",num);
- }
- else {
- {
- sum = temp / pos;
- printf("%d %.1lf",num, sum);
- }
- }
- return 0;
- }
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
- static int min = 10000;
- int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
- // write code here
- int i = 0;
- for(i = 0; i < rotateArrayLen;i++)
- {
- if(rotateArray[i]< min)
- {
- min = rotateArray[i];
- }
- }
- return min;
- }