??? ____??__?__?__线__?__?号?位?座?__?__?__?__?__?__?_ _?号题?场答?试要?_不_?_内_?_线_?_订订__装?_ _?__?__?__?名?姓? ? ? ? ? ? ? ? ? ? ? ?号?考? ? 装 ? ? ? ? ? 级?班?? ????沅江市职业中专计算机专业《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 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 #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;k 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页