您的位置:首页 > 编程语言 > C语言/C++

2017/12/28C语言作业

2017-12-28 10:21 169 查看
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("请输入你要计算的坐标(x,y):\n");

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

printf("请输入你要计算的坐标(x,y):\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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: