1.以下程序运行时,若输入1abcedf2df输出结果是()
#include <stdio.h> int main() { char a = 0, ch; while ((ch = getchar()) != '\n') { if (a % 2 != 0 && (ch >= 'a' && ch <= 'z')) ch = ch - 'a' + 'A'; a++; putchar(ch); } printf("\n"); return 0; }
A.1abcedf2df
B. 1ABCEDF2DF
C.1AbCeDf2dF
D.1abceDF2DF
输入“1abcedf2df”,分析如下:
首先读入“1”,不满足条件,直接输出“1”,此时 a 变为 1。
然后读入“a”,满足 a 为奇数且是小写字母,将“a”转换为“A”输出,此时 a 变为 2。
接着读入“b”,不满足条件,输出“b”,a 变为 3。
读入“c”,满足条件,输出“C”,a 变为 4。
读入“e”,不满足条件,输出“e”,a 变为 5。
读入“d”,满足条件,转换为“D”输出,此时 a 变为 6。
读入“f”,不满足条件,转换为“f”输出,a 变为 7。
读入“2”,输出“2”,a 变为 8。
读入“d”,不满足条件,输出“d”,a 变为 9。
读入“f”,满足条件,输出“F”。
所以最终输出结果为:1AbCeDf2dF。
2.下面两个结构体
struct One{ double d; char c; int i; } struct Two{ char c; double d; int i; }
在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是()
A.16 24,16 24
B. 16 20,16 20
C.16 16,16 24
D.16 16,24 24
C
在#pragma pack(4)的情况下,结构体One和结构体Two的大小均为16字节;在#pragma pack(8)的情况下,结构体One的大小为16字节,结构体Two的大小为24字节。
3.实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
int kthToLast(struct ListNode* head, int k){ struct ListNode* fast=head,*slow=head; while(k--) { fast=fast->next; } while(fast!=NULL) { fast=fast->next; slow=slow->next; } return slow->val; }
定义两个指针 fast 和 slow,让 fast 先向前移动 k 步。然后同时移动 fast 和 slow指针,当 fast 到达链表末尾时,slow就正好指向倒数第 k 个节点。