union { char aStr;short sNum;int nmu;} MsgType; char str[ ] = "Hello";char *p = str ; 请计算: sizeof(MsgType)= 【 】 sizeof(str) = 【】 ;strlen(p) = 【 】 ;
时间: 2023-06-18 08:02:26 浏览: 47
根据联合体的定义,它的大小应该等于其最大成员的大小,即 $sizeof(MsgType) = sizeof(int) = 4$。
由于字符串 "Hello" 由 6 个字符组成,包括一个空字符 '\0',所以数组 str 的大小应该为 $sizeof(str) = 6$。
指针变量 p 指向字符串 "Hello" 的首字符,所以 strlen(p) 应该返回字符串的长度,即 $strlen(p) = 5$。注意,不包括空字符 '\0'。
相关问题
#include<stdio.h>#include<string.h>struct student{int snum;char name[8];int score[3];float sum;}void sumScore(struct student temp){ struct student *p; p=&temp; (*p).snum=0; for(int i=0;i<3;i++) { (*p).snum+=(*p).score[i]; }}main(){ struct student a[5]; printf("请输入五个学生的学号,姓名和三门课成绩\n"); for(int i=0;i<5;i++) { scanf("%d%s",&a[i].snum ,a[i].name); printf("%d %s ",a[i].snum ,a[i].name); for(int j=0;i<3;i++) { scanf("%d",&a[i].score[j] ); printf("%d ",a[i].score[j]); } printf("\n"); } for(i=0;i<5;i++) { sumScore(a[i]); }}
这段代码存在一些问题,可能会导致编译错误或者运行错误。
1. 在结构体定义中,需要在最后一个成员变量后面加上分号。
2. 在 sumScore 函数中,传入的参数是一个结构体,应该使用指针来进行操作。因此,应该将函数定义改为 void sumScore(struct student *temp)。
3. 在 sumScore 函数中,应该使用指针箭头运算符 -> 来访问结构体成员变量。
4. 在 for 循环中,内部的循环变量应该是 j 而不是 i。
5. 在主函数中,i 没有进行声明。
下面是修改后的代码:
```
#include <stdio.h>
#include <string.h>
struct student {
int snum;
char name[8];
int score[3];
float sum;
};
void sumScore(struct student *temp) {
temp->snum = 0;
for (int i = 0; i < 3; i++) {
temp->snum += temp->score[i];
}
}
int main() {
struct student a[5];
printf("请输入五个学生的学号,姓名和三门课成绩\n");
for (int i = 0; i < 5; i++) {
scanf("%d%s", &a[i].snum, a[i].name);
printf("%d %s ", a[i].snum, a[i].name);
for (int j = 0; j < 3; j++) {
scanf("%d", &a[i].score[j]);
printf("%d ", a[i].score[j]);
}
printf("\n");
}
for (int i = 0; i < 5; i++) {
sumScore(&a[i]);
}
return 0;
}
```
CREATE PROCEDURE p_rank(IN snum char(12), OUT avg_grade FLOAT, OUT grade_level VARCHAR(20))
这是一个 MySQL 存储过程的语法,该存储过程接受一个输入参数 snum,表示学号,同时返回两个输出参数 avg_grade 和 grade_level。
具体实现如下:
```mysql
CREATE PROCEDURE p_rank(IN snum char(12), OUT avg_grade FLOAT, OUT grade_level VARCHAR(20))
BEGIN
DECLARE total_grade FLOAT;
DECLARE count_grade INT;
DECLARE rank FLOAT;
SELECT SUM(grade), COUNT(*) INTO total_grade, count_grade FROM scores WHERE s_id = snum;
SET avg_grade = total_grade / count_grade;
IF avg_grade >= 90 THEN
SET grade_level = '优秀';
ELSEIF avg_grade >= 80 THEN
SET grade_level = '良好';
ELSEIF avg_grade >= 70 THEN
SET grade_level = '中等';
ELSEIF avg_grade >= 60 THEN
SET grade_level = '及格';
ELSE
SET grade_level = '不及格';
END IF;
SELECT COUNT(*) INTO rank FROM (SELECT AVG(grade) AS avg_score FROM scores GROUP BY s_id) AS t WHERE avg_score > avg_grade;
SET rank = rank + 1;
SELECT CONCAT('你的平均成绩为:', avg_grade, ',属于', grade_level, '水平,班级排名第', rank, '名') AS result;
END;
```
该存储过程首先查询指定学号的成绩总分和总数,并计算出平均成绩。然后根据平均成绩的分数段给出对应的等级,最后查询出班级排名并返回结果字符串。