struct student{ int id; char name[32]; }s1; 如下说法不正确的是 A. scanf("%s",&s1.name)实现给name成员赋值 B. sizeof(s1)与sizeof(struct student)的值相等 C. scanf("%s",s1.name)实现给name成员赋值 D. s1.id=100实现给id成员变量赋值
时间: 2024-03-15 22:42:00 浏览: 15
答案是 A. scanf("%s",&s1.name)实现给name成员赋值。
在使用scanf函数为字符串类型的变量赋值时,不需要取地址符&。因此,正确的写法应该是:scanf("%s",s1.name)。
其他说法都是正确的:
B. sizeof(s1)与sizeof(struct student)的值相等,因为s1是struct student类型的变量,它的大小就是struct student结构体的大小。
C. scanf("%s",s1.name)实现给name成员赋值,因为s1.name是一个字符数组,可以通过scanf函数来为其赋值。
D. s1.id=100实现给id成员变量赋值,因为s1是struct student类型的变量,它包含id成员变量,可以通过赋值语句来为其赋值。
相关问题
typedef struct { int num; char name[10]; char student[10];} Student;为结构体的二叉树
二叉树的结点应该包含一个指向该结构体的指针,以便于在二叉树中存储该结构体的实例。下面是一个简单的例子:
```
typedef struct Node {
Student *data; // 数据指针
struct Node *left; // 左子树指针
struct Node *right; // 右子树指针
} Node;
// 插入结点
void insertNode(Node **root, Student *data) {
if (*root == NULL) {
// 如果根节点为空,直接插入到根节点
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
*root = newNode;
} else {
// 如果不为空,递归插入到左子树或右子树
if (data->num < (*root)->data->num) {
insertNode(&((*root)->left), data);
} else {
insertNode(&((*root)->right), data);
}
}
}
// 中序遍历
void inorderTraversal(Node *root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d %s %s\n", root->data->num, root->data->name, root->data->student);
inorderTraversal(root->right);
}
}
// 测试代码
int main() {
Node *root = NULL;
Student s1 = {1, "Tom", "Math"};
Student s2 = {2, "Jerry", "English"};
Student s3 = {3, "Mike", "Computer Science"};
Student s4 = {4, "John", "History"};
insertNode(&root, &s1);
insertNode(&root, &s2);
insertNode(&root, &s3);
insertNode(&root, &s4);
inorderTraversal(root);
return 0;
}
```
这个例子中,我们定义了一个 `Node` 结构体,并且其中包含了一个指向 `Student` 结构体的指针,以及左右子树的指针。我们还定义了一个 `insertNode` 函数,用于将 `Student` 结构体插入到二叉树中。在插入时,我们首先判断根节点是否为空,如果为空,则直接将新结点插入到根节点;否则,我们就根据结点的 `num` 值(学号)递归地插入到左子树或右子树中。最后,我们定义了一个 `inorderTraversal` 函数,用于中序遍历整个二叉树,并输出每个结点的信息。在测试代码中,我们先定义了四个 `Student` 实例,然后分别将它们插入到二叉树中,并最终进行中序遍历。
如何去使用typedef struct student{ char * name; //名字 int age; //年龄 struct student * classmate; //同桌 }student, * pstudent;里的struct student * classmate;
在这个结构体中,`struct student *classmate`是一个指针类型的成员,它指向了另一个`student`类型的结构体,表示这个学生的同桌是谁。
如果需要使用这个成员,可以通过以下方式访问:
1. 定义一个`student`类型的变量,例如:
```
student s1;
```
2. 给这个变量的各个成员赋值,例如:
```
s1.name = "Tom";
s1.age = 18;
```
3. 为`s1`的`classmate`成员分配内存空间,并将其指向另一个`student`类型的结构体,例如:
```
student s2;
s2.name = "Jerry";
s2.age = 18;
s1.classmate = &s2;
```
这里使用了`&`符号取`s2`的地址,将这个地址赋值给`s1`的`classmate`成员。
4. 访问`s1`的`classmate`成员,例如:
```
printf("%s is %d years old and his/her classmate is %s.\n", s1.name, s1.age, s1.classmate->name);
```
这里使用了`->`符号来访问`s1`的`classmate`成员的`name`成员,即`s2`的名字。