暑假第六天之每天一些题系列
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第六天之每天一些题系列相关的知识,希望对你有一定的参考价值。
暑假第六天之每天一些题系列
一、选择题
-
以下程序的运行结果是
int fun(int a,int b) { if(a>b) return(a+b); else return(a-b); } int main() { int x = 3, y = 8, z = 6, r; r = fun (fun(x,y), 2 * z); printf(“%d\\n”,r); return 0; }
A. -48 B. 58 C. -58 D. -17
答案解析:
这个fun函数的调用,是一个嵌套调用,里面这个fun(x,y)执行的结果为-5,外面的就为fun(-5,12),返回的结果为-17
- 一个8位的二进制整数,采用补码表示,且由3个“1”和5个“0”组成,则最小值为
A. -127 B. -32 C. -125 D. -3
答案解析:
由3个“1”和5个“0”组成的补码,求最小值,因为是补码,这样组是最小的:10000011,因为最高位是符号位,先给个1,剩下两个1需要给在低位上,这样原码才会最小,它的反码为:10000010,原码为:11111101,该值为-125
- int a = 4 , 则对于表达式 ++(a++) 的结果说法正确的是
A. 结果为5 B. 结果为6 C. 结果为7 D. 以上都不是
答案解析:
a++是先使用后加加,故a++这个表达式的值为4,然后++(4),因为4是一个常量是不能修改的,故这是个错误的表达式。
- 已知 x >= y and y >= z 为真,那么 x > z or y == z 值为
A. 真 B. 假 C. 无法确定 D. x y z同为正数时为真
答案解析:
x >= y and y >= z 为真,那么x>=z也为真,那么x>z or x=z 就为真,又因为x=z等价于y=z,故x > z or y == z 值为真
- 式子 7*15 = 133 成立,则用的是几进制
A. 7 B. 8 C. 9 D. 11
答案解析:
首先不可能是7进制,7进制不可能有7出现,这种题就得一个一个试试,假如是8进制,那15化为十进制就是13,133化成十进制就是91,而13乘以7恰好就是91,故是8进制
- 一个8位的二进制整数,采用补码表示,且由3个“1”和5个“0”组成,则最小值为
二、填空题
- 下列程序执行后输出的结果是___
int f(int a)
{
int b = 0;
static int c = 3;
a = c++,b++;
return (a);
}
int main()
{
int a = 2, i, k;
for (i = 0; i < 2; i++)
{
k = f(a++);
}
printf(" % d\\n", k);
return 0;
}
答案解析:
首先将a++作为参数传给f函数,函数内部定义了变量b和静态变量c,而a=c++,b++;这个代码会将c++赋给a,而不是b++,因为c是后置加加,故函数第一次调用返回的是3,然后第二次调用,注意c是静态变量,它会保留上次调用后c最后的值,c此时是4,因为c是后置加加,故a=4,返回赋值到k,故k为4
- 写出函数指针,要求返回值是 void , 无参数
答案解析:
*void (Fun)()
因为是函数指针,它首先是一个指针,Fun先要和*结合,然后没有参数,故后面的括号什么而不写,返回值为void,在前面写void
想要多了解指针前往博主指针进阶的讲解:指针进阶
- 以下程序的输出的结果是
int x = 3;
void inc()
{
static int x = 1;
x *= (x + 1);
printf("%d",x);
return;
}
int main()
{
int i;
for (i = 1; i < x; i++)
{
inc();
}
return 0;
}
答案解析:
x=3,我们循环进行两次,第一次调用函数进去有一个静态变量x=1,x=(x+1)得x=2,第一次调用打印2,第二次调用,因为x是静态变量,会保留之前调用的值,x*=(x+1)得x=6,第二次调用打印6*
三、算法题
题目描述:
编写函数,要求逆置单链表(不带头结点)。
思路一:
思路一:
调整结点指针的方向,n1和n2倒方向,n3进行迭代当n2为NULL时,返回n1即可,但是这里有一个问题,将n2->next=n1,我们怎么找n2的下一个结点呢?这里我们还需要用一个n3结点保存之前n2的next
代码如下:
struct ListNode* reverseList(struct ListNode* head)
{
if(head==NULL)
{
return NULL;
}
struct ListNode* n1=NULL;
struct ListNode* n2=head;
struct ListNode* n3=head->next;
while(n2)
{
n2->next=n1;
n1=n2;
n2=n3;
if(n3)//n3不为空时,将n3=n3->next
{
n3=n3->next;
}
}
return n1;
}
思路二:
头插法,定义一个新链表,newhead=NULL,原链表定义cur和next,next记录cur的下一个结点
代码如下:
struct ListNode* reverseList(struct ListNode* head)
{
if(head==NULL)
{
return NULL;
}
struct ListNode* newhead=NULL;
struct ListNode* cur=head;
while(cur)
{
struct ListNode* next = cur->next;
cur->next=newhead;
newhead=cur;
cur=next;
}
return newhead;
}
以上是关于暑假第六天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章