C语言习题~day33
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 输出: 4int 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 个节点。