c面试题12.28

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

正确

错误

3、当说明一个结构体变量时系统分配给它的内存是(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数组的首地址。

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

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>  

    struct Date  

    {  

        int year;  

        int month;  

        int day;  

    };  

int days(int year,int month,int day);  

int main()  

{  

  struct Date p;  

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

    

  days(p.year,p.month,p.day);  

   

}  

    

int days(int year,int month,int day)  

{  

    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};    

            int sum,i;  

            sum=day;  

            for(i=0;i<month-1;i++)  

            sum+=a[i];   

  if(((year%4==0&&year%100!=0)||year%400==0)&&month>2)  

       printf("该日是在%d年中的第%d天", year,sum+1);     

  else   

   printf("该日是在%d年中的第%d天", year,sum);     

}  

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

struct  Employee

{

long eID;

char eName[10];

struct Employee *pNext;

};

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

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

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

 

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

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

#include <iostream>  

#include <cmath>  

using namespace std;  

void main()  

{  

    int x1,y1,x2,y2;//定义变量  

    double distance;  

    cout<<"请依次输入坐标x1,y1,x2,y2"<<endl;//提示输入坐标  

    cin>>x1>>y1>>x2>>y2;//输入坐标  

    distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//计算距离  

    cout<<"这两点之间的距离是"<<distance<<endl;//输出两点间的距离  

    cin.get();//任意键继续  

}  

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>

#include <string.h>

#include<stdlib.h>

struct tele

{

char name[20];

char tel[12];

char career[10];

char add[10];

};

 void chaxun(struct tele su[300],int M)

 {

char n[12];

int i;  

printf("请输入要查询的姓名或电话:\n");

scanf("%s",n);

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

{     

if(strcmp(su[i].name,n) == 0||strcmp(su[i].tel,n) == 0)   

{   

printf("result:\t%s\t%s\t%s\t%s\n",su[i].name,su[i].tel,su[i].career,su[i].add);    

break;        

}

}

if(i==M+1)

printf("没有该联系人!\n");

 }  

 

 

 int scan(struct tele su[],int i)

 {

while(1)

{

i++;

printf("请输入第%d位联系人姓名 电话 职业 住址:\n",i);

scanf("%s",su[i].name);

if((su[i].name[0])=='#')  //输入以#结束

break;

scanf(" %s %s %s",su[i].tel,su[i].career,su[i].add);

}

return i-1;

 }

void print(struct tele su[],int n)

 {

int j;

for(j=1;j<=n;j++)

printf("%d:\t%s\t%s\t%s\t%s\n",j,su[j].name,su[j].tel,su[j].career,su[j].add);

 }

 

 

void change(struct tele su[],int M)

{

char n[12];

int i;  

printf("请输入要修改成员的姓名或电话:\n");

scanf("%s",n);

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

{     

if(strcmp(su[i].name,n) == 0||strcmp(su[i].tel,n) == 0)     

break;        

}

if(i>M)

printf("没有该联系人!\n");

else

{

printf("请输入要修改成员的信息:\n");

scanf("%s %s %s %s%*c",su[i].name,su[i].tel,su[i].career,su[i].add);

printf("修改完成!\n");

}

}

 

 

 int main()

 {  

int i=0,a,n;    

struct tele su[300];

n=scan(su,i);

while(1)

{

system("cls");//执行控制台命令cls,就是CMD下面的cls,功能是清屏,清除所有显示的信息

printf("  请输入通讯录菜单选项(1--显示通讯录成员)(2--查询通讯录成员)(3--修改通讯录成员)(0--关闭):\n");

fflush(stdin);//用来清空输入缓存,以便不影响后面输入的东西

scanf("%d",&a);

if(a==0) break;

switch(a)

{

case 1:

printf("通讯录成员:\n");

print(su,n);

break;

case 2:chaxun(su,n);

break;

case 3:change(su,n);

break;

}

system("pause");

}

return 0;

 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值