- 下面这个程序片段哪里出问题?
01 #include
02
03 int main()
04 {
05 struct student
06 {
07 char #name;
08 int number;
09 } *st;
10
11 st.name=”Justin”;
12 st.number=90;
13
14 return 0;
15 } - 设计一个程序,可以让老师输入学生学号、姓名与电话号码,并可以根据姓名进行数据的查询,学生的数据要求使用结构来存储。
- 汉字是由两个字节组成的,第一个汉字编码为0xA440,使用结构来存储前10个汉字,并显示出来。
- 一个初学结构的学生尝试同用户输入来设置结构成员的值,但是程序执行时发生了错误,请问哪里出了问题?
01 #include
02
03 int mai(void)
04 {
05 struct
06 {
07 int a;
08 int b;
09 }word;
10
11 printf(“输入两个整数:”);
12 scanf(“%d %d”,word.a, word.b);
13 printf(“%d %d”,word.a, word.b);
14
15 return 0;
16 } - 以struct设计一个成绩管理系统,可存储学号、姓名、语文成绩、英文成绩、数学成绩,班上人数有3人,输入这些数据并打印出来,其数据成员如下:
(1)定义Student结构。
(2)定义成员变量存放学号id,姓名name,语文成绩chinese,英文成绩english,数学成绩math。
(3)在main函数中声明结构变量kao_class,并由键盘输入各结构成员数据。
(4)将输入的数据打印出来。
- 下面这个程序代码片段哪里出了问题?
01 #include
02
03 int main(void)
04 {
05 struct
06 {
07 char *name;
08 int number;
09 }st
10
11 st.name=”Justin”;
12 st.number=90;
13
14 return 0;
15 } - 以下的声明有什么错误? struct student { char name[80]; struct student next; }
- 嵌套结构的成员存取方式是什么?
- 下面这个程序哪里有错误?
01 struct student
02 {
03 unsigned bit1:1;
04 unsigned bit2:1;
05 unsigned bit3:1;
06 unsigned bit4:1;
07 } a={1,0,1,1};
08
09 int main(void)
10 {
11 unsigned *ptr;
12 ptr+&a.bit1;
13 printf(“%u”, *ptr);
14
15 return 0;
16 } - 下列为一程序代码片段,说明为什么第07行会发生编译错误?
1 struct flower
2 {
3 /*花的名称*/
4 char *name;
5 };
6 struct flower fruit_flower[5];
7 fruit_rlower.name[0]= ” lotus”;
- 输入某月份第一天的星期数,并利用枚举(enum)结构,设计可打印连续3个月的月历。
- 结构体声明有哪两种方式?
-
试以结构的方式来算出成绩等级。键盘输入语文及数学成绩,然后计算总成绩及平均成绩,并依据平均成绩求出等级,最后在屏幕上显示语文、数学、总成绩、平均成绩以及成绩等级。其中平均成绩对应等级如表9-1所示。 表9-1
平均成绩 等级100分
A
90~99分
B
80~89分
C
70~79分
D
60~69分
E
60分以下
F
C语言结构体测试题(2)
结构st被声明为指针,所以必须使用“—>”运算符来存取结构成员。
#include
#include
#define NUM 50
struct student
{
char name[80];
char tel[20];
}st[NUM] ;
int main()
{
int select;
char name[80],tel[20];
int number;
int i;
do
{
printf(“(1) 输入 (2)搜索 (3)离开 =>”);
scanf(“%d”,&select);
switch (select)
{
case 1:
print(“>”);
scanf(“%d %s %s”,&number,name,tel);
strcpy(st[number],name,name);
strcpy(st[number].tel,tel);
break;
case 2:
print(“>”);
scanf(“%s”,name);
for(i=0;i < NUM;i++)
if(!strcmp(st[i].name, name) )
{
printf(“>%d %s %s\n”,i,st[i].name,st[i].tel);
break;
}
if(i = =NUM)
printf(“找不到符合的数据\n”);
break;
}
}while(select !=3);
return 0;
}
#include
int main()
{
struct
{
char h;
char l;
}word[9];
int i,j;
for(i=0,j=0xA440;i<9;i++,j++)
{
word[i].h=j/256;
word[i].l=j%256;
}
for(i=0;i<9;i++)
printf(“%c%c”,word[i].h,word[i].l);
putchar(‘\n’);
return 0;
}
第12行应修改如下:
scanf(“%d %d”,&word.a, &word.b);
01 #include
02 struct Student
03 {
04 int id;
05 char name[10];
06 int chinese;
07 int english;
08 int math;
09 };
10 int main()
11 {
12 struct Student kao_class[2];
13 int i;
14 for(i=0;i<5;i++)
15 {
16 printf(“请输入第%d位学生的数据...\n”,i+1);
17 printf(“学号:”);
18 scanf(“%d”,&kao_class[i].id);
19 printf(“姓名:”);
20 scanf(“%s”,kao_class[i].name);
21 printf(“语文:”);
22 scanf(“%d”,&kao_class[i].chinese);
23 printf(“英文:”);
24 scanf(“%d”,&kao_class[i].english);
25 printf(“数学:”);
26 scanf(“%d”,&kao_class[i].math);
27 }
28 printf(“------------------------------------\n”);
29 for(i=0;i<5;i++)
30 {
31 printf(“第%d位 %d %s\n”,i+1,kao_class[i].id,kao_class[i].name);
32 printf(“语文成绩:%d\n,kao_class[i].chinese”);
33 printf(“英文成绩:%d\n,kao_class[i].english”);
34 printf(“数学成绩:%d\n”,kao_class[i].math);
35 }
36 return 0;
37 }
第09行少了分号作为结束。
结构中不能有同名结构存在,且该声明最后没有以分号作为结束。
存取方式由外层结构对象加上小数点“.”存取内层结构对象,再存内层结构对象的成员,一层接着一层。
struct 结构名称B 变量名称b;
变量名称b.变量名称a.项目名称a;
最小可寻址的内存前一段单位为字节,使用位字段时,无法取得它的内存地址。
程序不知道要存取哪一个元素的结构成员,所以必须将索引值[0]放在flower后面。
请自行练习。
(1)结构与变量分开声明:先定义结构体,再声明结构体变量。
(2)结构与变量结合声明:直接定义结构体,并声明结构体变量。
请自行练习。
自我评价 答对0--2题 答对3--4题 答对5--6题 答对7--8题 答对9--10题
