好文档 - 专业文书写作范文服务资料分享网站

C语言程序设计(第3版)何钦铭 颜 晖 第9章 结构

天下 分享 时间: 加入收藏 我要投稿 点赞

第9章 结构

【练习9-1】定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个部分。 解答:

struct complex{ float real;

float imaginary; };

【练习9-2】人的出生日期由年、月、日组成,请在例 9-1 中的通讯录结构中增加一个成员:出生日期,用嵌套定义的方式重新定义该结构类型。 解答:

struct date{ int year; int month; int day; };

struct student{ int num;

char name[10];

struct date birthday; int computer,english,math; double average; };

【练习9-3】例 9-1 中,如果要计算的是三门课程的课程平均成绩,应该如何改写程序? 解答:

#include struct student{ int num;

char name[10];

int computer,english,math; double average; };

int main(void) {

int i, n;

double math_sum,english_sum,computer_sum; struct student s1;

printf(\ scanf(\

精选文库

printf(\ math_sum=english_sum=computer_sum=0; for(i=1;i<=n;i++){

printf(\

scanf(\ter);

math_sum+=s1.math;

english_sum+=s1.english; computer_sum+=s1.computer; }

printf(\math_sum/n,english_sum/n,computer_sum/n);

return 0; }

【练习9-4】定义一个包含 5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。 解答:

struct student{ int num;

char name[10];

int computer, english, math; };

struct student s[5]={{30101, \张一\李二\5,90},{40231, \王三\赵四\刘五\

【练习9-5】参考例 9-2,输入并保存 10 个学生的成绩信息,分别输出平均成绩最高和最低的学生信息。 解答:

#include struct student{ int num;

char name[10];

int computer,english,math; double average; };

int main(void) {

int i,n,max,min;

struct student students[50];

printf(\ scanf(\

2

精选文库

for(i=0;i

printf(\ printf(\

scanf(\ printf(\

scanf(\ printf(\

scanf(\ printf(\

scanf(\ printf(\

scanf(\

students[i].average=(students[i].math+students[i].english+stu

dents[i].computer)/3.0; }

max=min=0;

for(i=1;i

if(students[max].averagestudents[i].average) min=i; }

printf(\

printf(\%.2lf\\n\ents[max].english,students[max].computer,students[max].average); printf(\

printf(\%.2lf\\n\ents[min].english, students[min].computer, students[min].average);

return 0; }

【练习9-6】定义一个 struct student 类型的结构指针,用其实现一个学生信息的输入和输出。 解答:

struct student{ /* 学生信息结构定义 */

int num; /* 学号 */ char name[10]; /* 姓名 */

int computer, english, math ; /* 三门课程成绩 */ double average; /* 个人平均成绩 */ }s, *p; p = &s;

scanf(\&p->num, p->name, &p->math, &p->english, &p->computer);

【练习9-7】改写例 9-3 中的函数 update_score( ),将第一个形参改为结构

3

精选文库

数组形式。 解答:

int update_score(struct student s[],int n,int num,int course,int score) {

int i,pos;

for(i=0;i

switch(course){

case 1:s[i].math=score; break; case 2:s[i].english=score; break; case 3:s[i].computer=score; break; }

pos = i; }

else

pos = -1; return pos; } 习题9

一、选择题

1.下面定义结构变量的语句中错误的是 D 。

A.struct student{ int num; char name[20]; } s; B.struct { int num; char name[20]; } s;

C.struct student{ int num; char name[20]; }; struct student s; D.struct student{ int num; char name[20]; }; student s;

2.如果有定义语句: struct {

int x, y; } s[2] = { { 1, 3 }, { 2, 7 } };

则语句:printf(“%d\\n”, s[0].y/s[1].x ); 输出结果为 B 。

A.0 B.1 C.2 D.3

3.根据下面的定义,能打印出字母 M 的语句是 C 。 struct person{

char name[10]; int age;

} c[10] = { “John”, 17, “Paul”, 19, “Mary”, 18, “Adam”, 16 };

4

精选文库

A.printf(“%c”, c[3].name); B.printf(“%c”, c[3].name[1]); C.printf(“%c”, c[2].name[0]); D.printf(“%c”, c[2].name[1]);

4.设有如下定义,则对 data 中的 a 成员的正确引用是 B 。

struct sk{ int a; float b; } data, *p=&data;

A.(*p).data.a B.(*p).a C.p->data.a D.p.data.a

5.对于以下结构定义,(*p)->str++中的++加在 D 。 struct { int len; char *str; } *p;

A.指针 str 上 B.指针 p 上 C.str 指向的内容上 D.语法错误 二、填空题

1.“.”称为 成员_(分量)_运算符,“->”称为_指向_运算符。

2.完成下列程序,该程序计算 10 名学生的平均成绩。 #include #include struct student { int num;

char name[20]; int score; };

struct student stud[10]; int main(void) {

int i , sum = 0 ;

for(i = 0; i < 10; i++){ scanf(\\&stud[i].num,_stud[i].name_,&stud[i].score);

sum += stud[i].score;

}

printf(\

return 0; }

3.下列程序读入时间数值,将其加 1 秒后输出,时间格式为:hh: mm: ss,即小时:分钟:秒,当小时等于 24 小时,置为 0。 #include struct {

int hour, minute, second;

5

C语言程序设计(第3版)何钦铭 颜 晖 第9章 结构

第9章结构【练习9-1】定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个部分。解答:structcomplex{floatreal;floatimaginary;};【练习9-2】人的出生日期由年、月、日组成,请在例9-1中的通讯录结构中增加一个成员:出生日期
推荐度:
点击下载文档文档为doc格式
41sbf7efyp9da6a52gje3fmdy9ulfu00gg2
领取福利

微信扫码领取福利

微信扫码分享