结构体语句练习题
(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。
struct abc s1,s2;则会发生的情况是______。
A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。
A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。
A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。
A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。
动态及结构体习题答案

动态及结构体习题答案1. 有以下程序#include <stdio.h>#include <stdlib.h>int fun(int n){ int *p;p=(int*)malloc(sizeof(int));*p=n; return *p;}main(){ int a;a = fun(10); printf("%d\n", a+fun(10)); }程序的运行结果是()。
CA)0 B)10 C)20 D)出错2. 有以下程序#inctude<stdio.h>#include<stdlib.h>Main(){int *a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*a=1;*b=2,*c=3;a=b;printf(“%d,%d,%d\n”, *a,*b,*c);}程序运行后的输出结果是AA)3,3,3 B)2,2,3 C)1,2,3 D)1,1,33. 有以下程序段struct st{ int x; int *y;}*pt:int a[]={1,2},b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是( C )A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x4. 有以下定义struct complex{ int real, unreal ;} datal={1,8},data2;则以下赋值语句中的错误的是 BA)data2=data1; B)data2=(2,6);C)data2.real=data1.real; D)data2.real=data1.unreal;5. 有以下定义和语句struct workers{int num; char name[20];char c;srruct{int day;int month;intyear;} s;};struct workers w,*pw;pw=&w能给w中year成员赋1980的语句是DA)*pw.year=1980; B)w.year=1980;C)pw->year=1980; D)w.s.year=1980;6. 设有定义:struct {char mark[12];int num1;double num2;} t1,t2;,若变量均已正确赋初值,则以下语句中错误的是CA)t1=t2; B)t2.num1=t1.num1;C)t2.mark=t1.mark; D)t2.num2=t1.num2;7.有以下程序#include <stdio.h>main(){ struct STU { char name[9]; char sex; doublescore[2]; };struct STU a={"Zhao",'m',85.0,90.0), b={"Qian",'f',95.0,92.0);b=a;printf("%s,%c,%2.0f,%2.0f\n",,b.sex,b.score[0],b.score [1]);}程序的运行结果是()。
C语言(结构体与共用体)习题与答案

{ for ( ; *s==*t; s++, t++ )
if (!*s) return 0 ;
return (*t-*s) ;
}
B.int strcmp2(char *s,char *t)
{ for ( ; *s++=*t++; )
if (!*s) return 0 ;
1、指针的含义是()。
A.名
B.一个标志
C.地址
D.值
正确答案:C
2、若已定义a为int型变量,则下面的语句中正确的是()。
A.int *p=*a;
B.int *p=&a;
C.int *p=a;
D.int p=&a;
正确答案:B
3、若有定义:int x,*p;则以下正确的赋值表达式是()。
A.*p=&x
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
A.5,-2,-7
B.5,2,3
C.-5,-12,7
D.-5,-12,-7
正确答案:D
11、以下程序运行的结果是()。
#include<stdio.h>
void main()
D.char *s="china";等价于char *s; s="china" ;
正确答案:D
15、函数strcmp(char *s,char *t)功能是()。
C语言程序设计基础-结构体习题

1、把一个学生得信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生得信息。
#include <stdio、h>int main(){struct Student{long int num;char name[20];char sex;char addr[20];}a={10101,“Li Lin”,‘M’, “123 Beijing Road”};printf("NO、:%ld\nname:%s\n sex:%c\naddress:%s\n",a、num,a、name,a、sex,a、addr); return 0;}2、输入两个学生得学号、姓名与成绩,输出成绩较高学生得学号、姓名与成绩#include <stdio、h>int main(){ struct Student{int num;char name[20];float score;}student1,student2;scanf("%d%s%f",&student1、num,student1、name, &student1、score);scanf(“%d%s%f”,&student2、num,student2、name, &student2、score);printf("The higher score is:\n");if (student1、score>student2、score)printf("%d %s %6、2f\n",student1、num,student1、name, student1、score);else if (student1、score<student2、score)printf("%d %s %6、2f\n",student2、num,student2、name, student2、score);else{printf("%d %s %6、2f\n",student1、num,student1、name, student1、score);printf("%d %s %6、2f\n",student2、num,student2、name, student2、score);}return 0;}3、有3个候选人,每个选民只能投票选一人,要求编一个统计选票得程序,先后输入被选人得名字,最后输出各人得票结果。
结构体练习题

结构体练习题:第1 题:计算日期的差值(1)编写一函数,计算两个日期之间的时间差,并将其值返回。
日期以年、月、日表示。
“时间差”以天数表示。
注意考虑日期之间的闰年。
函数的输入参数为日期1和日期2,函数的返回值为时间差,单位为天数。
(2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。
为了计算简便,假设用户输入的日期1总是早于日期2。
参考代码:#include<stdio.h>struct date{int year;int month;int day;};int isLeap(int year);int dif(struct date a, struct date b);void main(){struct date a, b;printf("请输入日期1(空格分隔,年月日):\n");scanf("%d%d%d", &a.year, &a.month, &a.day);printf("请输入日期2(空格分隔,年月日,晚于日期1):\n");scanf("%d%d%d", &b.year, &b.month, &b.day);printf("相差天数为:");printf(" %d 天\n", dif(a, b));}int isLeap(int year) //判断一个年份是否是闰年的函数{if(year%400==0 || (year%4==0 && year%100!=0))return 1;elsereturn 0;}int dif(struct date a, struct date b){int i;long day=0, day1=0, day2=0;intd[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,3 1,31,30,31,30,31}};// day变量为年份a到年份b前一年的年份总天数for(i=a.year; i<b.year; i++)if(isLeap(i))day += 366;elseday += 365;// day1变量为年份a年初到当天的年内总天数for(i=1; i<a.month; ++i)day1 += d[isLeap(a.year)][i];day1 += a.day;// day1变量为年份b年初到当天的年内总天数for(i=1; i<b.month; ++i)day2 += d[isLeap(b.year)][i];day2 += b.day;return day + day2 - day1;}参考截图:第2 题:结构体数组应用请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。
结构体及位操作习题

(36)下面结构体的定义语句中,错误的是A)struct ord {int x;int y;int z;}; struct ord a;B)struct ord {int x;int y;int z;} struct ord a;C)struct ord {int x;int y;int z;} a;D)struct {int x;int y;int z;} a;(38)有以下程序#include <stdio.h>#include<string.h>struct A{ int a; char b[10]; double c;};struct A f(struct A t);main(){ struct A a={1001,”ZhangDa”,1098.0};a=f(a);printf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);}struct A f(struct A t)( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202. 0;return t; )程序运行后的输出结果是A)1001,ZhangDa,1098.0B)1001,ZhangDa,1202.0C)1001,ChangRong,1098.0D)1001,ChangRong,1202.0(39)若有以下程序段int r=8;printf(“%d\n”,r>>1);输出结果是A)16B)8C)4D)2(12)设有定义:struct person{ int ID;char name[12];}p;请将scanf(“%d”, 【12】);语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。
(14)有以下程序#include <stdio.h>typedef struct{ int num;double s}REC;void fun1( REC x ){x.num=23;x.s=88.5;} main(){ REC a={16,90.0 };fun1(a);printf(“%d\n”,a.num);}程序运行后的输出结果是【14】。
结构体习题1

1、在说明一个结构体变量时,系统分配给它的存储空间是。
A、该结构体中第一个成员所需的存储空间B、该结构体中最后一个成员所需的存储空间C、该结构体中占用最大存储空间的成员所需的存储空间D、该结构体中所有成员所需存储空间的总和2、结构体变量在程序执行期间。
A、所有成员一直驻留在内存中B、只有一个成员驻留在内存中C、部分成员驻留在内存中D、没有成员驻留在内存中3、设有以下说明语句:typedef struct{ int n;char ch[8];}PER;则下面叙述中正确的是。
A、PER是结构体变量名B、PER是结构体类型名C、typedef struct 是结构体类型D、struct 是结构体类型名4、有如下定义:struct date{ int year;int month;int day;};struct worklist{ char name[20];char sex;struct date birthday;}person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
A、year=1958B、birthday. year=1958C、person. birthday. year=1958D、person. year=19585、若有下面的说明和定义:struct test{int m1;char m2;float m3;union uu{char u1[5];int u2[2];}ua;}myaa;则sizeof(stuct test)的值是。
A、12B、16C、14D、96、以下对结构体类型变量td1的定义中,不正确的是。
A 、typedef struct aa{ int n;float m;} AA;AA td1; B 、struct aa { int n;float m;} td1;C 、struct { int n;float m;} aa;struct aa td1;D 、struct { int n;float m;} td1;7、设有如下定义:struct sk{int a;float b;} data;int *p;若要使p指向data中的a域,正确的赋值语句是。
结构体-练习题

结构体-练习题1:输⼊若⼲⼈员姓名电话,义字符“#”表⽰结束,输⼊姓名,查找该⼈电话scanf :当遇到回车,空格和tab键会⾃动在字符串后⾯添加'\0',但是回车,空格和tab键仍会留在输⼊的缓冲区中。
scanf()可以读取所有类型的变量 gets:可接受回车键之前输⼊的所有字符,并⽤'\n'替代'\0'.回车键不会留在输⼊缓冲区中。
gets()⽤到读取字符串,⽤回车结束输⼊使⽤ gets() 时,系统会将最后“敲”的换⾏符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换⾏符。
这就意味着,如果前⾯使⽤过 gets(),⽽后⾯⼜要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。
如果前⾯使⽤的不是 gets() ⽽是scanf,那么通过键盘给 ch 赋值前就必须先使⽤getchar() 清空缓冲区。
struct person{char name[10];char tel[20];};void search1(struct person a[],char *x,int j){int i=0;while(strcmp(a[i].name,x)!=0&&i<j)i++;if(i<j)printf("%s",a[i].tel);else printf("null");}int main(){struct person s[100];int i=0;char na[10],te[20];while(1){printf("输⼊姓名:");gets(na);if(strcmp(na,"#")==0){break;}printf("输⼊电话:");gets(te);strcpy(s[i].name,na);strcpy(s[i].tel,te);i++ ;}printf("输⼊查找姓名");gets(na);search1(s,na,i);return0;}2:1:根据输⼊⽇期(年⽉⽇)求出改天是该年的第⼏天 2:根据输⼊的年份和天数,求出对应⽇期1,3,5,7,8,10,12:31天闰年:2:29平年:2:28其余4,6,9,11:30天根据年份算出是闰年还是平年四年⼀闰,百年不闰,四百年再闰struct DATE{int year;int month;int day;}date;int main(){int run=0,curdays;int monthday[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};printf("输⼊年⽉⽇天数:");scanf("%d %d %d %d",&date.year,&date.month,&date.day,&curdays);if(date.year%4==0&&date.year%100!=0||date.year%400==0){run=1;}if(run==1){//润年monthday[2]=29;}else{monthday[2]=28;}//求天数int temp=0,j,num;switch(date.month){case1:for(j=0;j<1;j++)temp+=monthday[j];break;case2:for(j=0;j<2;j++)temp+=monthday[j];break;case3:for(j=0;j<3;j++)temp+=monthday[j];break;case4:for(j=0;j<4;j++)temp+=monthday[j];break;case5:for(j=0;j<5;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;case6:for(j=0;j<6;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;case7:for(j=0;j<7;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;case8:for(j=0;j<8;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;case9:for(j=0;j<9;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;case10:for(j=0;j<10;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;case11:for(j=0;j<11;j++)temp+=monthday[j];break;case12:for(j=0;j<12;j++)temp+=monthday[j];break;}num=temp+date.day;printf("%d",date.day);printf("\n第%d天\n",num);//求年⽉⽇int i,curM=0,curD=0;for(i=0;i<13;i++){curdays-=monthday[i];printf("curdays=%d\n",curdays);curM++;if(curdays<=31&&curdays>0){curD=curdays;break;}}printf("%d年%d⽉%d⽇",date.year,curM,curD);}//可以做成菜单再计算(后续⽅法不写了)int a[2][13]={{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}}; int main(){while(1){int m;printf("选择1:输⼊年⽉⽇,输出第⼏天;2:输⼊年,第⼏天,输出年⽉⽇\n");scanf("%d\n",&m);if(m==1){int n,y,r;printf("请输⼊年⽉⽇\n");scanf("%d %d %d",&n,&y,&r);searchdd(n,y,r);}else if(m==2){int n,tprintf("请输⼊年天数\n");scanf("%d %d",&n,&t);searchyr(n,t);}else break;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题
1、在C语言中,执行下面语句后,输出的结果是(?C )
int x=10,y=3; printf("%d\n",y=x/y);
A. 0
B. 1
C. 3 D、不确定的值
2、在C语言中,假定所有变量均已正确说明,下列程序段运行后x的值是( B )
a=b=c=0;x=99;
if(!a) x=9;
else x=3;
A. 99
B. 9
C. 100
D. 3
3、在C语言中,执行语句:for (i=1; i<4; i++);后,变量i的值是( B )
A. 3
B. 4
C. 5
D. 不定
4、设int k;则语句for(k=0;k=1;k++);和语句for(k=0;k==1;k++);执行的次数分别是 A
A. 无限和0
B. 0和无限
C. 都是无限
D. 都是0
5、对于for(表达式1;;表达式3)可理解为( B )
A. for(表达式1;0;表达式3)
B. for(表达式1;1;表达式3)
C. for(表达式1;表达式1;表达式3)
D.for(表达式1;表达式3;表达式3)
6、下列循环体执行( D )次
k=70;
while(k=0) k-=1;
A. 70次
B. 69次
C. 无限次
D.0次
7、下列循环体执行( D )次
for(i=1;i<5;i++)
for(j=1;j<5;j++) printf("*\n");
A. 4次
B. 5次
C. 8次
D.16次
8、下面的for循环最多可执行( A )次。
for(x=0,y=0;(y!=99)&&(x<4);x++);
A. 4次
B. 5次
C. 99次
D.0次
9、下列判断char类型变量C1是否为数字的表达式中,哪个表达式最简单且正确。
( B )
A. '0'<=C1<='9'
B. (C1>='0')&&(C1<='9')
C. (C1>=0)&&(C1<=9)
D. ('0'<=C1)||('9'>=C1)
二、编程题
1、 在一行连续显示50个字符’A’
2、求[100,5000]之间同时满足除以8余6,除以6余4,除以4余2的所有整数。
3、输入两个正整数m和n,求其最大公约数和最小公倍数。
4、求2000以内所有完数之和,"完数"是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。
5、一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第15次落地时,反弹多高?
6、用迭代法求x=。
求平方根的迭代公式为:x0=x; x=(x+a/x)/2; x的初值为a/2,直到fabs(x-x0)小于0.00001为止。
7、求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。
例如:2+22+222+2222+22222(n=5),n由键盘输入。
8、求解100到200之间的所有素数。
(循环嵌套,标志的使用)
9、两个乒乓球队比赛,各出3人。
甲队3人为A、B、C,乙 队3人为X、Y、Z。
已抽签决定比赛名单。
有人向队员打 听比赛名单,A说他不和X 比,C说他不和X、Z比,请编 程找出3对赛手的名单。
课后思考题:
1、30元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?输出所有的兑换方法。
2、求区间[20,3000]中所有回文数,回文数是正读与反读都是一样的数,如424,1551。