见导学例
9. 由n个学生,每个学生考m门课程,要求编一函数,能检查n个学生有无不及格的课程,如果由某一学生有一门或一门以上课程不及格,就输出该学生的号码(学号从0开始)和其全部课程成绩。 见导学例
习题十一 结构体、共用体和用户定义类型
一、选择题
1—10: AABDD BDDDC 11-20: CBBCC
二、填空题
1.若有下面的定义:
struct
{int x;int y;}s[2]={{1,2},{3,4}},*p=s;
则表达式 ++p->x 的值为_____2______; 表达式(++p)->x的值为____3_____。
2.为了建立如图所示的链表,结点的正确描述形式是:
data data
图 链表的结点 struct node
{ int data; struct node *next; };
3.已知head 指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。下面的sum函数是求出链表中所有结点数据域值的和,作为函数值返回。请填空完善程序。
struct link
{ int data; struct link *next;} main()
{ struct link *head; int s; ┆
s=sum(head);
┆ }
int sum( struct link *head )
{ struct link *p; int s=0; p=head->next; while(p)
{ s+= p->data ; p= p->next ; } return(s); }
4.设有共用体类型和共用体变量定义如下:
union Utype
{ char ch; int n; long m; float x; double y; };
union Utype un; 并假定un的地址为ffca。
则的地址是__ffca_, 的地址是__ffca__。执行赋值语句:=321; 后,再执行语句:printf(\其输出值是__A_。
(进一步提示:0100 0001B=65D,char与int的比特位分布关系参见课本P30。) 三、编程题
1.编写程序,进行两个复数的相减。
#include <> struct Complex{ double m_r,m_i; };
struct Complex sub(struct Complex c1,struct Complex c2) { struct Complex c; = = return c; }
void main()
{ struct Complex c1 ={,},c2={,}; struct Complex c; c=sub(c1,c2);
printf(“c=%g+i%g\\n”,,; }
2.定义一个包括年、月、日的结构体。输入一个日期,计算该日在本年中是第几天注意闰年问题。
#include<> struct ymd
{
int day; int month; int year; };
int dayof[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int days(struct ymd *p) {
int i,d;
if(p->year%4==0&&p->year0!=0||p->year@0==0) dayof[2]=29; d=p->day;
for(i=1;i
void main() {
struct ymd date; int d; for (;;) {
printf(\ scanf(\ if==0) break;
d=days(&date);
printf(\ } }
3.有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。从键盘输入10个学生的数据,要求输出3门课程的总平均成绩,以及最高分的学生的学号、姓名、3门课程成绩、平均分数。
#include<> #define N 10 struct student { char num[6]; char name[8]; float score[3]; float avr; }stu[N]; void main() { int i,j,maxi;
float sum,max,average; for(i=0;i { printf(\ printf(\ scanf(\ printf(\ scanf(\ for(j=0;j<3;j++) { printf(\ scanf(\ } } average=0; max=0; maxi=0; for(i=0;i for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/; average+=stu[i].avr; if(sum>max) { max=sum; maxi=i; } } average/=N; printf(\ No. name scorel score2 score3 average\\n\ for(i=0;i printf(\ for(j=0;j<3;j++) printf(\ printf(\ %\\n\ } printf(\ printf(\highest score is : student %s,%s.\\n\ printf(\ stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr); } 4.设单向链表head1和head2已建立。编写将单向链表head2连接到单向链表head1之后的函数,以head1返回,如图所示。 /* 结点结构 Node */ struct Node { int data; struct Node *next;