大数据与人工智能实验室|机器学习组|第一次考核订正

1.

A选项成员name是字符串类型,无需添加取址符

BC选项gender一个是数组,一个是指向gender的指针,都是字符型,有必要添加取址符

D选项是整型数据,也有必要添加取址符。

2.

先对双向链表做解释:

上图对应如下代码:

pnode->prev = pindex->prev;
 pnode->pNext = pindex;
 pindex->prev->pNext = pnode;
 pindex->prev = pnode;

一、双向链表的概念

    双向链表基于单链表。单链表是单向的,有一个头结点,一个尾结点,要访问任何结点,都必须知道头结点,不能逆着进行。而双链表添加了一个指针域,通过两个指针域,分别指向结点的前结点和后结点。这样的话,可以通过双链表的任何结点,访问到它的前结点和后结点。

    在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点的地址,一般称为右链域;一个存储直接前驱结点地址,一般称之为左链域。

    双向链表结构示意图

    

表头为空,表头的后继节点为"节点10"(数据为10的节点);"节点10"的后继节点是"节点20"(数据为10的节点),"节点20"的前继节点是"节点10";"节点20"的后继节点是"节点30","节点30"的前继节点是"节点20";...;末尾节点的后继节点是表头。

双链表删除节点

删除"节点30"
删除之前:"节点20"的后继节点为"节点30","节点30" 的前继节点为"节点20"。"节点30"的后继节点为"节点40","节点40" 的前继节点为"节点30"。
删除之后:"节点20"的后继节点为"节点40","节点40" 的前继节点为"节点20"。

对于这道题:

struct node {
struct node* prev;
struct node* next;
}*p, *q;
// 这里指针p和q的赋值操作省去
q->prev = p->prev; // -- 1
q->next = p; // -- 2
p->prev->next = q; // -- 3
p->prev = q; // -- 4
这里因为没有存下p的前一个指针,所以有顺序要求:
1. 语句4必须在1和3之后。(因为4中将p->prev赋新值之后,就无法得到原来p前的那个节点,所以这句留在最后)
2. 其他顺序任意

3.


c语言中实际参数和形式参数之间采用单向值传递的方式来传递数据。
 

4.

转义字符表如下

注意背记知识即可 

4.

 使用strlen函数运行结果,y[]由于缺少\0,所以一直未停止运行,实际读到的值为21,大于char x[]="hello"所对应的5

具体为什么结果会是21暂时仍不明白为什么

6.

5.

结构体可以同时存储多种变量类型,而共同体同一个时间只能存储和使用多个变量类型的一种,当另一时间,变量类型被改变后,原来的变量类型和值将被舍弃。共用体的作用是同一个数据项可以使用多种格式,可以节省空间。比如,对商品进行标识时可以用整数和字符串中的一个。

struct product
{
	int type;
	int amount;
	union id
	{
		long id_long;
		char id_char[20];
	}id1;
};
//Using union
int main() {
	product p;
	p.id1.id_long = 123456; //store a long number
	cout << p.id1.id_long<<endl; //print 123456
	cin>>p.id1.id_char; //store a char array, long value is lost
	cout <<"p.id1.id_char: "<< p.id1.id_char<<endl;
	cout << "p.id1.id_long: " << p.id1.id_long;
}

6.

 根据解释,首当其冲的是三个本质就不一样:第一个是char*   ,const p就是常量指针p的意思,p的值是不可以被修改的,所以它是一个常量指针

第二个是char const*  ,这个指针已经被定义为指向常量,指向谁?p!

第三个和第二个等价

详见:

C++中const char*、char const*、char * const的区别有哪些 - 开发技术 - 亿速云这篇文章主要介绍C++中const char*、char const*、char * const的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、const...https://www.yisu.com/zixun/612478.html

#include<stdio.h>
int main()
{
    int a[20][20];
    int i, j, k, n;
    int i1, j1;
    int input;
    scanf_s("%d %d %d", &n,&i1,&j1);
    k = 1;
    for (i = 0; i < n / 2; i++)
    {
        for (j = i; j < n - i - 1; j++)//竖着走
        {
            a[i][j] = k;
            k++;
        }

        for (j = i; j < n - i - 1; j++)//横着走
        {
            a[j][n - i - 1] = k;
            k++;
        }

        for (j = n - i - 1; j > i; j--)//竖着走
        {
            a[n - i - 1][j] = k;
            k++;
        }

        for (j = n - i - 1; j > i; j--)//横着走
        {
            a[j][i] = k;
            k++;
        }
    }
            printf("%d", a[i1][j1]);
    
}

上面是螺旋矩阵具体位置输入输出的实现方法

#include<stdio.h>
int main()
{
	int h1, m1, s1, h2, m2, s2;
	int huansuan1, huansuan2;
	scanf("%d:%d:%d", &h1, &m1, &s1);
	scanf("%d:%d:%d", &h2, &m2, &s2);
	huansuan1 = s1 + m1 * 60 + h1 * 3600;
	huansuan2 = s2 + m2 * 60 + h2 * 3600;
	int delta = huansuan1- huansuan2;
	printf("%d",delta);
}

上面是花耶妹赶时间的解决方法

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值