C语言结构体与共用体过关题 下载本文

内容发布更新时间 : 2024/5/18 19:08:23星期一 下面是文章的全部内容请认真阅读。

??? ____??__?__?__线__?__?号?位?座?__?__?__?__?__?__?_ _?号题?场答?试要?_不_?_内_?_线_?_订订__装?_ _?__?__?__?名?姓? ? ? ? ? ? ? ? ? ? ? ?号?考? ? 装 ? ? ? ? ? 级?班?? ????沅江市职业中专计算机专业《C语言》试卷

以下程序的输出结果是 。 main() 结构体与共用体过关题

{ union

{ int b[4]; long k;char c[4];} a,*s=&a; 考生注意:本试卷共5大题,总分150 分,考试时间 90 分钟。 s->b[0]=0x3738; 一、程序写结果题:本题共6题,每题5分,共30分。 s->b[1]=0x3635;

1. 下面程序的输出是_______。 printf(〞%c\\n〞,s->c[1]);}

main()

5.有以下程序输出结果是 { enum em{em1=3,em2=1,em3}x;

struct stu

char *aa[]={\{int num;char name[10];int age; }; x=em2;

void fun(struct stu *p) printf(\{ p++;

2. 下面程序的输出结果是________。 p->age=45;

struct ks

strcpy(p->name,”liming”); { int a; int *b;}; }

main()

main()

{ struct ks s[5],*p; {struct stu ss[3]={{01,\int n=1,i;

fun(ss+1);

for(i=0;i<5;i++) printf(“%d,%s,%d\\n”,ss[2].num,ss[2].name,ss[2].age);}

{ s[i].a=n; 6.设位段的空间分配由右到左,则以下程序的运行结果是 。s[i].b=&s[i].a; struct as

n=n+3; { unsigned a : 2 ; }

unsigned b : 3 ; p=&s[1];

unsigned c : 4 ; printf(\ } data ; 3.下面程序的输出是 main ( )

Struct ab{int a[2];char b;float c;}; { unsigned char x=45; typedef union { long x[2]; data.a=7 ; int y[7]; data.b=2 ; char z[8];

data.c=23; struct ab b[4]; data.i=68;

} MY; data.a=data.a&x; main()

data.c=data.b^x;

{ MY them[10];

printf(“%d\\n”,data.a+data.b+data.c) ; printf(\

}

4. 字符ˊ0ˊ的ASCII码的十进制数为48,且数组的第0个元素在低位,则

二、程序填空题:本题共3题,每题10分,共30分。

结构体与共用体过关题 共4页 第1页

1.以下函数creatlist用来建立一带头节点的单链表,链表的结构如下图所示,新的节点总是插入在链表的末尾。链表的头指针作为函数值返回。链表最后一个节点的next域放入NULL,作为链表结束的标志。data为字符型数据域,next为指针域。读入时字符以#表示输入结束(#不存入链表)。请填空。

0 h … struct node { char data;

struct node *next; }; ……

struct node * creatlist( ) { struct node *h,*s,*r; char ch;int i=1; ch=getchar(); while (ch!=’#’)

{ s=(struct node*)malloc(sizeof(struct node)); s->data= ; s->next=NULL; if(i==1) h=s;

else ; r=s; i++;

ch=getchar();} return h;}

2. 某学习小组有10个人,每个人的信息包括:学号、姓名、班级和成绩。要求从键盘上输入他们的信息,并求出总成绩以及最高成绩者的信息。 #define NUM 10

#include “conio.h” struct students

{ char no[7],name[9]; int class;

int score[5]; }; main() { struct student a[NUM],*stu; int count,max=0,sum=0,j; stu=a;

for(count=0;count

for(j=0;j<3;j++)

{ scanf(“%d”,&stu[count].score[j]); sum+=stu[count].score[j]; stu[count].score[4]=sum;

if( ) ; } }

printf(“no:%s\\n”,stu[max].no); printf(“name:%s\\n”,stu[max].name); printf(“class:%s\\n”,stu[max].class); for(j=0;j<5;j++)

printf(“%d ”,stu[max].score[j]); }

3.学生的记录由学号和成绩组成,N名学生的数据在主函数中输入结构体数组s中,函数fun(),的功能是,按分数的高低排列学生的记录,高分在前。 #include #define N 16

typedef struct{ char num[10]; int s ;}STREC; int fun (STREC a[]) {STU t; int i,j,k;

for(i=0;i

for(j=i+1;j

if( ) k=j;

if(k!=i) {t=a[i];a[i]=a[k];a[k]=t;} }}

结构体与共用体过关题 共4页 第2页

main ()

{ STREC s[N]; int i;

for(i=0;i

scanf( ); fun(s);

for (i=0; i

{if((i)%4==0) printf(\ printf(\ } }

三、程序改错题:本题共3题,每题10分,共30分。

1. 设有一个描述零件加工的数据结构为:零件号 pname;工序号 wnum;指针next; 下面程序建立一个包含100个零件加工数据的单项链表。 #include #include

#define LEN sizeof(struct parts) typedef struct parts{char pname[10]; int wnum; struct parts *next; }AS; void main()

{ AS *head, *p,*q; int i;

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

{ p=(AS *)malloc(sizeof(AS));

scanf(“%s%d”,p->pname,&p->wnum); p->next=NULL; if(i==0) head=p; else

p->next=q; q=p; }

p=head; while(p)

{printf(“%s,%d\\n”,p->pname,p->wnum); p++;} }

2. 定义一个日期结构变量(由年、月、日3 个整形数据组成),计算该日期是本年度的第几日。

typedef struct DATA {int year,month,day;}AB; int leap(int y) { int flag=0;

if(y%4==0&&y0!=0||y@0==0) flag=1; return(flag); } main()

{int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; struct AB data; int k,sum;

scanf(“%d,%d,%d”,&data.year,&data.month,&data.day); for(k=1,sum=0;k2)

sum+=leap(year); printf(“%d”,sum); }

3.下列给定程序中函数fun()的作用是求出已建立的单向链表结点(不包括头结点)数据域中(数据域中的值都大于0)的最大值,并且作为函数值返回。标记并改正fun()函数中的两处错误 #include

typedef struct aa{ int data; struct aa *next;} NODE; int fun (NODE h) { int max=-1; NODE *p; p=h->next; while(p!=NULL)

{ if(p->data>max) max=p->data; p=h->next; }

return max;}

NODE * createlink()/*建立返回头结点的链表*/ {……

结构体与共用体过关题 共4页 第3页