2017/12/28C语言作业

1、设有下面的结构体和结构变量定义:

关于结构体类型变量赋值正确的是(A)

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";

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

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

A.       正确

B.       错误

3、当说明一个结构体变量时系统分配给它的内存是(A

A.       各成员所需内存的总和

B.       结构中第一个成员所需内存量

C.       成员中占内存量最大者所需的容量

D.       结构中最后一个成员所需内存量

4、在结构体中,成员的缺省存取权限是 1 有的.

5、在32位cpu上选择缺省对齐的情况下,有如下结构体定义:

struct A{

    unsigned a : 19;4

    unsigned b : 11;4

    unsigned c : 4;4

    unsigned d : 29;4

    char index;4

};

则sizeof(struct A)的值为(20)

     9

·       12

·       16

·       20

6、下列代码的功能包括:定义一个x数组,说明一个结构体,同时对变量t进行初始化,使得t的a成员的值为50,b成员的值为x数组的首地址。

请在空白处(方框内)填入合适的内容,一完成上述功能。

1

2

3

4

5

int x[5]={1,2,3,4,5};

struct {

 int a;

 int *b;

}t{ (50),(&x) };

7、开发C代码时,经常见到如下类型的结构体定义:

1

2

3

4

5

typedef struct list_t

{

struct list_t *next;

struct list_t *prev;

char data[0];

}list_t;

请问在32位系统中,sizeof(list_t)的值为? 8byte

4byte
·        8byte
·        5byte
·        9byte

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

#include <stdio.h>

typedef struct data

{

   int year;

   int month;

   int day;

}S;

int days(struct data p)

{

   intarr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

   if(p.year%4==0&&p.year%100!=0||p.year%400==0)

   {

     arr[2]=29;

   }

   int i=1;

   int a=0;

   for(i;i<p.month;i++)

   {

     a=a+arr[i];

   }

   a=a+p.day;

   return a;

}

int main(void)

{

   printf("请输入你要计算的年月 日:\n");

   struct data date;

   scanf("%d %d%d",&date.year,&date.month,&date.day);

   int day=0;

   day=days(date);

   printf("计算所得天数为:%d",day);

   return 0;

}

9、假设有如下的关于职工信息的结构体:

struct  Employee

{

long eID;

char eName[10];

struct Employee *pNext;

};

其中eID表示职工编号,请编写一个函数:

struct  Employee *eIDSequence(int eID, char *sName)

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct Employee

{

long eID;

char eName[10];

struct Employee *pNext;

};

struct Employee *eIDSequeue(long eID,char *sName)

{

struct Employee *p;

p=(struct Employee *)malloc(sizeof(struct Employee));

p->eID=eID;

strcpy(p->eName,sName);

p->pNext=NULL;

return p;

free(p);

}

int main(void)

{

long eID=0;

char sName[10];

printf("请输入成员eID\n");

scanf("%d",&eID);

printf("请输入成员的姓名:\n");

scanf("%s",sName);

struct Employee *p;

p=(struct Employee *)malloc(sizeof(struct Employee));

p=eIDSequeue(eID,sName);

return 0;

}


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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
   char sex;
   int id;
   char name[5];
}S;
void creat_infor(struct student arr[],int lenth)
{
   S *p=arr;
   int i=0;
   for(i=0;i<lenth;i++)
   {
     printf("请输入学生性别:\n");
     scanf("%d",&p->sex);
     printf("请输入学生id:\n");
     scanf("%d",&p->id);
     printf("请输入学生姓名:\n");
     scanf("%s",&p->name);
     p=p+1;
   }
}
void show_infor(struct student arr[],int lenth)
{
   S *p=arr;
   int i=0;
   for(i=0;i<lenth;i++)
   {
     printf("sex=%d,id=%d,name=%s\n",p->sex,p->id,p->name);
     p=p+1;
   }
}
void id_max_show_infor(struct student arr[],int lenth)
{
   S *p=arr;
   int i=0;
   for(i=0;i<lenth;i++)
   {
     if(p->id<arr[i].id)
     {
        p=&arr[i];
     }
   }
   printf("sex=%d,id=%d,name=%s\n",p->sex,p->id,p->name);
}
int main(void)
{
   struct student arr[10];
   creat_infor(arr,10);
// show_infor(arr);
   id_max_show_infor(arr,10);
   return 0;
}

11、编程计算两点间的直线距离。

要求:点坐标采用结构体类型,屏幕获取输入两点,并输出距离(小数点后保留两位)。

 

#include <stdio.h>

#include <math.h>

typedef struct zuobiao

{

double x;

double y;

}S;

double juli(struct zuobiao a,struct zuobiao b)

{

double temp=pow((b.x-a.x),2)+pow((b.y-a.y),2);

return sqrt(temp);

}

int main(void)

{

struct zuobiao a,b;

printf("请输入你要计算的坐标(xy):\n");

scanf("%lf,%lf",&a.x,&a.y);

printf("请输入你要计算的坐标(xy):\n");

scanf("%lf,%lf",&b.x,&b.y);

double temp=juli(a,b);

printf("%.2lf",temp);

//sqrt开根号 //pow求平方 

}

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

{

   charname[20];

   charnum[10];

}U;

void creat_infor(struct user arr[])

{

   U*p=arr;

   inti=0;

   for(i=0;i<5;i++)

   {

     printf("请输入用户信息\n");

     scanf("%s",&p->name);

     printf("请输入用户电话:\n");

     scanf("%s",&p->num);

     p=p+1;

   }

}

void paixu(struct user arr[])

{

   inti=0,j=0;

   structuser temp;

   for(i=0;i<4;i++)

   {

     for(j=0;j<4-i;j++)

     {

        if(arr[j].name[0]>arr[j+1].name[0])

        {

          temp=arr[j];

          arr[j]=arr[j+1];

          arr[j+1]=temp;

        }

       

     }

   }

}

void show_infor(struct user arr[])

{

   U*p=arr;

   inti=0;

   for(i=0;i<5;i++)

   {

     printf("name=%s\nnum=%s\n",p->name,p->num);

     p=p+1;

   }

}

int main(void)

{

   structuser arr[5];

   creat_infor(arr);

// show_infor(arr);

   paixu(arr);

   show_infor(arr);

   return0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值