前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【旧文重发 | 07】IC基础知识

【旧文重发 | 07】IC基础知识

作者头像
空白的贝塔
发布2022-05-24 09:25:08
7140
发布2022-05-24 09:25:08
举报
文章被收录于专栏:摸鱼范式摸鱼范式

[121] 编写UNIX/Linux命令以列出目录中所有文件的名称(例如/usr/bin/dir/)(及其子目录),文件应该包含不区分大小写的“I am preparing for Interview”。

代码语言:javascript
复制
grep -ilr “I am preparing for Interview” /usr/bin/dir/*
[122] 有一个文件(例如/usr/home/file.txt)包含目录列表。编写一组UNIX/Linux命令,以查看该文件的内容,进入每个目录并运行一个进程(例如script.pl)。假设文件(/usr/home/file.txt)的每一行仅包含一个目录的路径。
代码语言:javascript
复制
foreach x (`cat /usr/home/file.txt`) 
foreach> cd $x 
foreach> script.pl 
foreach> end
[123] 编写UNIX/Linux命令,该命令将所有非空白行从文件(file1.txt)移至另一个文件(file2.txt)
代码语言:javascript
复制
grep -v “^$” file1.txt > file2.txt
[124] 编写一个UNIX/Linux命令(假设filename = file.txt):
  1. 查找当前目录或其子目录中是否存在某个文件
  2. 查找某个文件是否在目录“/usr/bin/DIR”或其子目录中
  3. 查找某个文件是否仅存在于当前目录中
  4. 查找当前目录或其子目录中是否包含名称中包含特定单词“dummy”的文件
  5. 查找当前目录或其子目录中是否存在不区分大小写的文件“file”
  6. 查找所有名称不是“file.txt”且存在于当前目录或其子目录中的文件
  7. 重新运行以前执行的find命令
代码语言:javascript
复制
find . -name “file.txt” OR find -name “file.txt” 
find /usr/bin/DIR -name “file.txt” 
find -maxdepth 1 -name “file.txt” 
find . -name “*dummy*” 
find . -iname “file” 
find -not -name “file.txt” 
! find
[125] 编写一个UNIX/Linux命令:
  1. 列出在计算机上以你的名字设置的所有Cron Jobs
  2. 列出用户在计算机上设置的所有Cron Jobs
  3. 删除计算机上以你的名字设置的所有Cron Jobs
  4. 删除用户在计算机上的所有Cron Jobs(如果你有权这样做)
  5. 在计算机上以您的名字编辑Cron Job。
  6. 设置每天下午6:30运行的Cron Jobs
  7. 设置每分钟运行一次的Cron Jobs。
  8. 设置一个Cron Jobs,该作业在每个月的前20天上午6:30运行
  9. 设置仅在每月的星期五的6:30 AM和6:30 PM运行的Cron Jobs
代码语言:javascript
复制
crontab -l 
crontab -u <user_name> -l 
crontab -r 
crontab -u <user_name> -r 
crontab -e 
30 18 * * * <command_to_invoke_your_process> 
* * * * * <command_to_invoke_your_process>
30 6 1-20 * * <command_to_invoke_your_process> 
30 6 18 * * 6 <command_to_invoke_your_process> (assuming Sunday is represented by 0)
[126] 列出下列shell中的快捷键
  1. 杀死进程
  2. 将在终端上运行的进程移至后台
  3. 将光标移至Shell上命令的开头
  4. 将光标移至Shell上命令的结尾
  5. Ctrl + c
  6. Ctrl + z
  7. Ctrl + a
  8. Ctrl + e

Programming in C/C++

[127] 编写C代码以检测计算机中的架构是little Endian 还是 big Endian

什么是大小端请参考问题[32]

代码语言:javascript
复制
#include <stdio.h> 
int main() {
    unsigned int i = 1;
    char *c = (char*)&i;
    if (*c)
        printf("Little Endian \n");
    else
        printf("Big Endian \n");
    return 0;
}
[128] 经过下列代码后,b和c的值是多少?
代码语言:javascript
复制
a = 10;
b = a++;
c = ++a;

b等于10,而c等于12。后置自增运算符仅在赋值后才进行自增,因此b得到的是自增前的值。前置增量运算符将首先进行自增,因此a将从11(在b = a++后变为11)增加到12

[129] 下列代码的输出是什么?
代码语言:javascript
复制
#include<stdio.h>
int xyz=10;
int main() {
    int xyz=20;
    printf("%d",xyz);
    return 0;
}

变量xyz定义了全局变量和局部变量,而在函数中,优先调用的是局部变量,所以将为打印出20.

[130] 下列代码中,y的值是多少?
代码语言:javascript
复制
int main() {
    int x=4;
    float y = * (float *) &x;
    return 0;
}

一个很小的值。一些编译器可能会将答案显示为0。“(float *)&x”,告诉编译器指针指向存储在内存位置的浮点数。 浮点数的存储方式不同于整数(对于浮点数,位[31]表示带符号的位,位[30:23]表示指数,位[22:0]表示分数)。因此,当解释为浮点数(00000000000000000000000000000100)时,值将为非常小。

[131] 下列C程序的输出是什么?
代码语言:javascript
复制
#include<stdio.h>
int main() {
    int i=0;
    for(i=0;i<20;i++)  {
        switch(i) {
            case 0:i+=5;
            case 1:i+=2;
            case 5:i+=5;
            default: i+=4;
            break;
        }
     printf("%d\n",i);
    }
    return 0;
}

输出是16,21。

注意两点,i在循环内进行了修改,case后没有跟着break。第一次进入循环,i将一次加5 2 5 4,然后打印输出16,最后再加1。第二次直接进入default,加4,然后输出21。

[132] 编写一个递归函数求n的阶乘,n为正整数
代码语言:javascript
复制
int factorial (int x) {
    if ( (x==0) || (x==1) )
        return 1;
    else
        return (x*factorial(x-1));
}
[133] 编写一个递归函数求斐波纳契数列
代码语言:javascript
复制
int fibonacci (int num){
    if( (num==0) || (num==1) )
        return num;
    else 
        return (fibonacci(num-1) + fibonacci(num-2));
}
[134] 下列代码在64位机上的输出是什么?
代码语言:javascript
复制
#include <stdio.h>
int main() {
    int x = 10000;
    double y = 56;
    int *p = &x;
    double *q = &y;
    printf("p and q are %d and %d", sizeof(p), sizeof(q));
    return 0;
} 

输出是p and q are 8 and 8 。

由于“p”和“q”是指针,因此它们只不过是64位计算机中的地址。无论它们指向整数还是双精度数据类型,两者的大小均为64位(8字节)。

[135] 什么是链表?何时使用链表?

链表是由一组节点组成的数据结构,这些节点一起代表一个序列。链表是由一组节点组成的数据结构,这些节点一起代表一个序列。如果我们不知道要存储的数据量,则首选链表。例如:我们可以在员工管理系统中使用链接列表,在这里我们可以轻松地添加新员工的记录(添加新节点-动态内存分配),删除旧员工的记录(删除节点),编辑 员工记录(在节点中编辑数据)。

在[136]-[140]中,使用下列变量和定义:

代码语言:javascript
复制
struct node;
typedef struct node NODE;
typedef int Element;
 
// A pointer to a node structure
typedef NODE *LINK;
 
// A node defined as having an element of data
// and a pointer to another node
struct node {  Element elem;   LINK next; };
 
// The Head or start of the List
typedef struct {  int size;  LINK start; } ListHead;
[136] 编写一个C程序用于创建单链表

要创建单链表,我们需要:

  1. 创建链表的HEAD(h)
  2. 初始化链表的大小(为零)
  3. 将起始指针指向NULL(在创建时为空)。

请参考以下函数来创建单链表:

代码语言:javascript
复制
ListHead createList() {
    ListHead h;
    h.size = 0;
    h.start = NULL;
    return h;
}
[137] 编写一个C程序用于在单链表的头部插入一个元素

在链表(h)的头部插入元素(e)时,我们需要:

  1. 为新节点动态分配内存。
  2. 为新节点中的元素分配值。
  3. 将新节点中的“next”指针指向HEAD先前指向的节点。
  4. 在链接列表HEAD中,增大“size”变量(随着添加了新节点),然后将“start”指针指向新节点。
代码语言:javascript
复制
ListHead InsertElementAtHead(Element e, ListHead h) {
    LINK nl= (LINK) malloc (sizeof(NODE));
    nl->elem = e;
    nl->next = h.start;
    h.start= nl;
    h.size++;
    return h;
}
[138] 编写一个C程序用于在单链表的尾部插入一个元素

在链接列表(h)的末尾插入元素(e)时,我们需要:

  1. 为新节点动态分配内存。
  2. 为新节点中的元素分配值。
  3. 将新节点中的“next”指针指向NULL(因为新节点代表链表的尾部)。
  4. 如果链表最初为空,则将HEAD中的“start”指针指向新节点,否则遍历链接列表以找出链接列表中的最后一个节点,并将最后一个节点中的“next”指针指向新节点。
  5. 在链表HEAD中增大“size”变量(随着添加了新节点)。
代码语言:javascript
复制
ListHead InsertElementAtTail(Element e, ListHead h) {
    LINK temp;
    LINK nl;
    nl=(LINK) malloc (sizeof(NODE));
    nl->elem=e;  nl->next=NULL;
    if(h.start==NULL)
        h.start=nl;
    else  {
        temp=h.start;
        while(temp->next!=NULL)
            temp=temp->next;
        temp->next=nl;
    }
    h.size++;
    return h;
}
[139] 编写一个C程序用于在单链表的pos处插入一个元素

在链表(h)中的pos处插入元素(e)时,我们需要:

  1. 为新节点动态分配内存,
  2. 为新节点中的元素分配值。
  3. 如果“pos”大于链表的大小,则返回错误消息(因为这是不可能的)。否则,如果“ pos”为“ 0”,则将元素插入头部(如上所示)。否则,将链表遍历到“ pos”之前的节点。将新节点中的“next”指针指向“pos-1”处的节点所指向的节点,并将节点中“pos-1”处的“next”指针指向新节点。
  4. 在链表HEAD中增大“size”变量(随着添加了新节点)。
代码语言:javascript
复制
ListHead InsertAtPos(Element e, ListHead h, int pos) {
    LINK temp;
    LINK nl;
    nl=(LINK)malloc(sizeof(NODE));
    nl->elem=e;
    int count=0;
    if(pos>h.size) {
        printf("Error: Wrong position \n");
        return h;
    }
    if(pos==0) {
        nl->next=h.start;
        h.start=nl;
    }  else {
        for (temp = h.start; count<(pos-2); temp = temp->next, count++) ;
        nl->next=temp->next;
        temp->next=nl;
    }
    h.size++;
    return h;
}
[140] 编写一个C程序用于删除单链表的一个元素

从链表(h)中删除元素(e)时,我们需要:

1.检查链表是否为空。如果为空,则无需删除任何内容。

2.如果链表不为空,则需要遍历链表以找到包含元素(e)的节点。找到节点之后,我们需要在要删除的节点之前更改节点中的“next”指针,以指向要删除的节点的“next”指针中存的值。

3.减小链表HEAD中的“size”变量(因为删除了节点)。

代码语言:javascript
复制
ListHead DeleteElement(Element e, ListHead h) {
    LINK cur, prev;
    cur=h.start;
    if(cur==NULL)  {
        printf ("Empty List \n");
        return h;
    }
    while(cur!=NULL)  {
        if(cur->elem==e)    {
            if(cur==h.start)
                h.start=cur->next;
            else
                prev->next=cur->next;
            free(cur);
            h.size--;
            break;
        } 
        prev=cur;
        cur=cur->next;
    }
    return h;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [122] 有一个文件(例如/usr/home/file.txt)包含目录列表。编写一组UNIX/Linux命令,以查看该文件的内容,进入每个目录并运行一个进程(例如script.pl)。假设文件(/usr/home/file.txt)的每一行仅包含一个目录的路径。
  • [123] 编写UNIX/Linux命令,该命令将所有非空白行从文件(file1.txt)移至另一个文件(file2.txt)
  • [124] 编写一个UNIX/Linux命令(假设filename = file.txt):
  • [125] 编写一个UNIX/Linux命令:
  • [126] 列出下列shell中的快捷键
  • Programming in C/C++
    • [127] 编写C代码以检测计算机中的架构是little Endian 还是 big Endian
      • [128] 经过下列代码后,b和c的值是多少?
        • [129] 下列代码的输出是什么?
          • [130] 下列代码中,y的值是多少?
            • [131] 下列C程序的输出是什么?
              • [132] 编写一个递归函数求n的阶乘,n为正整数
                • [133] 编写一个递归函数求斐波纳契数列
                  • [134] 下列代码在64位机上的输出是什么?
                    • [135] 什么是链表?何时使用链表?
                      • [136] 编写一个C程序用于创建单链表
                        • [137] 编写一个C程序用于在单链表的头部插入一个元素
                          • [138] 编写一个C程序用于在单链表的尾部插入一个元素
                            • [139] 编写一个C程序用于在单链表的pos处插入一个元素
                              • [140] 编写一个C程序用于删除单链表的一个元素
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档