第10次C练习

1、设有下面的结构体和结构变量定义:
关于结构体类型变量赋值正确的是()
A、 studl.id=1001;studl.name=”Tom”;
B、id=1001;*studl.name=”Tom”;
C、 studl.id=1001;studl.*name=”Tom”;
D、studl.id=1001L;*studl.name=”Tom”;
(A)

2、指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向()。
结构体成员

2.1结构体类型只有一种。请问这句话的说法是正确的吗?
A. 正确
B. 错误
(B)

3、当说明一个结构体变量时系统分配给它的内存是()
A. 各成员所需内存的总和
B. 结构中第一个成员所需内存量
C. 成员中占内存量最大者所需的容量
D. 结构中最后一个成员所需内存量
(A,以及字节对齐所填充的空间内存)

4、在结构体中,成员的缺省存取权限是 1 有的.
结构体中成员的默认存取权限是public公有的,类中默认是是private私有的

5、在32位cpu上选择缺省对齐的情况下,有如下结构体定义:
struct A{
unsigned a : 19;
unsigned b : 11;
unsigned c : 4;
unsigned d : 29;
char index;
};
则sizeof(struct A)的值为(16)
• 9
• 12
• 16
• 20
6、下列代码的功能包括:定义一个x数组,说明一个结构体,同时对变量t进行初始化,使得t的a成员的值为50,b成员的值为x数组的首地址。
请在空白处(方框内)填入合适的内容,一完成上述功能。
int x[5]={1,2,3,4,5};
struct {
int a;
int *b;
}t = { (50),( x)};
7、开发C代码时,经常见到如下类型的结构体定义:
typedef struct list_t
{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;
请问在32位系统中,sizeof(list_t)的值为?
• 4byte
• 8byte
• 5byte
• 9byte
8byte

8、定义一个结构体变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题),要求写一个函数days,实现上面的计算。由主函数将年月日传递给days函数,计算后将日子传递回主函数输出 。

#include <stdio.h>
typedef struct DATE
{
    int year;
    int month;
    int date;
}DATE;

int countDays(DATE date)
{
    int days = 0, i = 0;
    for(i = 1; i < date.month; i++)
    {
        if(i!=2 && i!=4 && i!=6 && i!=9 && i!=11)
            days += 31;
        else if(i != 2)
            days += 30;
        else
            if((date.year%100) ? (date.year % 4) : (date.year%400))
                days += 28;
            else
                days += 29;
    }
    return days + date.date;
}
int main(void)
{
    DATE date = {1995, 12,25};
    printf("%d\n", countdays(date));
    return 0;
}

9、假设有如下的关于职工信息的结构体:
struct Employee
{
long eID;
char eName[10];
struct Employee *pNext;
};
其中eID表示职工编号,请编写一个函数:
struct Employee *eIDSequence(int eID, char *sName)

struct  Employee *eIDSequence(int eID, char *sName)
{
    struct  Employee *p = (struct  Employee *)malloc(sizeof(struct  Employee));
    if(NULL == p){
        printf("malloc error!\n");
        return p;
    }
    memset(p, 0, sizeof(struct  Employee));
    p->eID = eID;
    strcpy(p->eID, sName);
    p->pNext = NULL;

    return p;
}

10、请设计一个名为student的结构体类型,该类型的成员有一个名为sex的字符类型变量,有一个名为id的int类型,有个名为name的字符数组的变量,请在主函数中创建一个sruc student类型的数组,数组长度为10,然后再设计一个自定义函数实现该结构体数组的输入,再设计一个自定义函数,求出该结构体数组中id值最大的元素并显示其各成员的值。

#define LEN 10
typedef struct student
{
    char sex;
    int id;
    char name[20];
}student;

void maxIdStu(student stu[], int len)
{
    student maxIdStu = stu[0];
    int i = 0;
    for(i = 1; i < len; i++)
        stu[i].id > maxIdStu.id ? (maxIdStu.id = stu[i].id) : (maxIdStu.id = maxIdStu.id);
    printf("id最大的学生信息:id = %d,sex = %d,name = %s\n", maxIdStu.id, maxIdStu.sex, maxIdStu.name); 
}
void inputInfor(student stu[], int len)
{
    int i = 0;
    for(i = 0; i < len; i++)
    {   
        printf("请输入第%d个学生的学号:", i);
        scanf("%d", &stu[i].id);
        printf("请输入第%d个学生的姓名:", i);
        scanf("%s", stu[i].name);
        printf("请输入第%d个学生的性别:(1表示女生,0表示男生)", i);
        scanf("%d", &stu[i].sex);
    }
}

int main(void)
{
    student stuArr[LEN] = {0};
    inputInfor(stuArr, LEN);
    maxIdStu(stuArr, LEN);
    return 0;
}

11、编程计算两点间的直线距离。
要求:点坐标采用结构体类型,屏幕获取输入两点,并输出距离(小数点后保留两位)。

#include <stdio.h>
#include <math.h>

typedef struct point
{
    int row;
    int col;
}point;

void setTwoPoints(point p[]);
float calculateDistance(point p[]);

float calculateDistance(point p[])
{
    float res = sqrt((p->row-(p+1)->row)*(p->row-(p+1)->row) + (p->col-(p+1)->col)*(p->col-(p+1)->col));
    printf("两点间距离为%.2f\n", res);
    return res;
}
void setTwoPoints(point p[])
{
    printf("请输入第一个点的横坐标和纵坐标:");
    scanf("%d%d", &p->col, &p->row);
    printf("请输入第二个点的横坐标和纵坐标:");
    scanf("%d%d", &(p+1)->col, &(p+1)->row);
}

int main(void)
{
    point p[2] = {0};
    setTwoPoints(p);
    calculateDistance(p);
    return 0;
}

12、题目标题:
电话薄管理
题目描述:
利用结构体类型数组输入五位用户的姓名和电话号码,按姓名的字典顺序排列后(姓名相同保持原位置),输出用户的姓名和电话号码。 已知结构体类型如下: struct user { char name[20]; char num[10]; };
输入描述:
输入姓名字符串和电话号码字符串。
输出描述:
输出按姓名排序后的姓名字符串和电话号码字符串。
样式输入:
aa
12345
dd
23456
cc
34567
bb
21456
ee
12456
样式输出:
aa
12345
bb
21456
cc
34567
dd
23456
ee
12456

#include <stdio.h>

typedef struct user 
{ 
    char name[20]; 
    char num[10]; 
}user;
#define LEN 5

void setInformation(user userInfor[], int len);
void sortByName(user userInfor[], int len);
void printInformation(user userInfor[], int len);
int stringCompare(char originalStr[], char compareStr[]);

int stringCompare(char originalStr[], char compareStr[])
{
    int i = 0;
    while(originalStr[i] && compareStr[i] && originalStr[i] == compareStr[i])
        i++;
    if(originalStr[i] > compareStr[i])
        return 1;
    return 0;
}
void printInformation(user userInfor[], int len)
{
    int i = 0;
    for(i = 0; i < len; i++)
    {
        printf("第%d个用户姓名:%s\n", i+1, userInfor[i].name);
        printf("第%d个用户号码:%s\n", i+1, userInfor[i].num);
    }
}   
void sortByName(user userInfor[], int len)
{
    int i = 0, j = 0, f = 1;
    user tmp = {0};
    for(i = 0; i < len-1; i++, f = 0)
        for(j = 0; f && j < len-i-1; j++)
            if(stringCompare(userInfor[j].name, userInfor[j+1].name))
            {
                tmp = userInfor[j];
                userInfor[j] = userInfor[j+1];
                userInfor[j+1] = tmp;
                f = 1;
            }
}
void setInformation(user userInfor[], int len)
{
    int i = 0;
    for(i = 0; i < len; i++)
    {
        printf("请输入第%d个用户姓名:", i+1);
        scanf("%s", userInfor[i].name);
        printf("请输入第%d个用户号码:", i+1);
        scanf("%s", userInfor[i].num);
    }
}

int main(void)
{
    user userInfor[LEN] = {0};

    setInformation(userInfor, LEN);
    sortByName(userInfor, LEN);
    printInformation(userInfor, LEN);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值