暑假第十七天之每天一些题系列
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第十七天之每天一些题系列相关的知识,希望对你有一定的参考价值。
暑假第十七天之每天一些题系列
一、选择题
- 下列程序段的输出结果为
unsigned long pulArray[] = {6, 7, 8, 9, 10};
unsigned long *pulPtr;
pulPtr = pulArray;
*(pulPtr + 2) += 2;
printf("%d,%d\\n", *pulPtr, *(pulPtr + 2));
A. 8,10 B. 6,8 C. 7,9 D. 6,10
答案解析:
pulPtr指向数组的首元素,*(pulPtr + 2) += 2等价于*(pulPtr + 2) = *(pulPtr + 2)+2,*(pulPtr + 2)是第三个元素,将第三个元素改为了10,故打印的为6,10。
- switch(c) 中的 c 的数据类型可以是 char、long、float、unsigned、bool ,这种说法____
A. 正确 B. 错误
答案解析:
float不可以,c可以是任意整形
- 以下程序运行后,输出结果是
void main()
{
char *szStr = "abcde";
szStr += 2;
printf("%lu\\n",szStr);
return;
}
A. cde B. 字符 c 的 ASCLL 码值 C. “abcde” 这个常串中字符 c 所在的地址 D. 出错
答案解析:
szStr是一个字符指针,它指向字符串首字符,szStr += 2,szStr指向第三个字符c,以无符号的long形式打印szStr,这里打印的是它的地址
- 如下程序的输出结果是
int main()
{
int i;
char acNew[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for(i = 0; i < 10; i++)
{
acNew[i] = '0';
}
printf("%d\\n", strlen(acNew));
return;
}
A. 0 B. 10 C. 11 D. 不确定
答案解析:
这里需要注意字符0和数字0的区别,字符0的ascii码值为48,而ascii码值为0的就是\\0,strlen在计算时,遇到它就停下来了,故打印10
- 0x12345678 在采用 BigEndian 中内存的排列顺序是,在采用 LittleEndian 内存中的排列顺序是
A. 12 34 56 78 B. 34 12 78 56 C. 78 56 34 12 D. 56 78 12 34
大端存储是,高位在低地址,低位在高地址;而小端存储是高位在高地址,低位在低地址
故大端存储为:12 34 56 78 ; 小端存储为:78 56 34 12。
二、填空题
- 下列代码段打印结果是
void foo(int b[][3])
{
++b;
b[1][1]=9;
}
void main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf("%d",a[2][1]);
}
答案解析:
将a数组传进去,++b,b是数组名,是首元素的地址,即a[0]的地址,++b,b此时指向a[1],然后b[1][1]=9,等价于*(*(b+1)+1)=9,*(b+1)+1是指向a[2][1],将a[2][1]改为了9。
- 下面程序运行结果是____
int x = 0, y = 0, z = 0;
z = (x == 1) && (y = 2);
printf("%d ", y);
答案解析:
&&操作符在前面的表达式为假时,就不会运算后面的表达式了,x==1为假,故y=2不进行运算了,故打印的y为0。
- 以下代码段的结果是
int i=10;
long long t = sizeof(i++);
printf("%d", i);
答案解析:
sizeof里面的表达式不进行运算,故i还是10。
三、算法题
题目描述:
求一个有序数组中两个元素值相加为k的数字,返回这两个元素的下标。要求时间复杂度是O(n),空间复杂度O(1)
思路:
定义两个指针,一个头指针一个尾指针,计算头指针和尾指针指向内容的和,若大于k则尾指针向前移,若小于k则头指针向后移,否则就是等于,返回下标。
代码如下:
//两个数的下标结构体
typedef struct
{
int x;
int y;
}Array;
Array A;
void AddIsK(int* nums, int sz, int k)
{
int begin = 0;
int end = sz - 1;
while (begin < end)
{
if (nums[begin] + nums[end] > k)
{
end--;
}
else if (nums[begin] + nums[end] < k)
{
begin++;
}
else
{
A.x = begin;
A.y = end;
break;
}
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
AddIsK(arr, sz, 6);
printf("%d %d", A.x, A.y);
return 0;
}
以上是关于暑假第十七天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章