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