C程第十一章结构体上机习题

合集下载

C语言第11章结构体

C语言第11章结构体

29
【例】30张选票,对三名侯选人之一投票选举,输 入得票人名字,按名字计数,输出最后选举结果。 #include "stdio.h" #define N 30 struct person { char name[20]; int count; };
Li
0 Zhang 0 Wang 0
led[0].name
第十一章 结构体与பைடு நூலகம்用体
本章目标
1.理解结构体,共用体的数据类型
2.学会定义结构体、共用体的数据类型 的变量 3.能够正确使用结构体、共用体的成员
§11.1
已了解的数据类型:
引言
整型 浮点型 字符型 数组
简单数据类型
用户定义的数据类型
特点:所有的元素都是同一种类型
指针型 存在的问题:难以处理较复杂的数据
18
圆点运算符
引用形式:结构体变量名 . 成员名 其中:成员运算符’ . ‟ : 一级,自左而右;
stu1.num 引用结构体变量stu1的num成员; 引用stu1的name成员(字符指针); [i] 引用name成员的第i个元素; stu1.birthday.y 只能对最低级成员进行引用;
二、定义完结构体后,定义结构变量并初始化 struct student x2={0002, "Li Ming ", 85.5};
16
§11.4 访问结构成员
访问结构变量实质上是引用其成员 有两种运算符可访问结构成员
17
struct date { int m; int d; iny y; }; struct student { long num; char name[20]; char sex; struct date birthday; float score; char tel[15]; } stu1, stu2;

C语言程序设计习题集(可以很好的帮助语言的学习)

C语言程序设计习题集(可以很好的帮助语言的学习)

[1.3] 结构化程序由 种基本结构组成 。
2011-8-22
顺序

选择(分支) 选择(分支)

循环

4
第二章 C程序设计的初步知识
一、选择题
[2.1] 以下选项中正确的整型常量是 A) 12. B) -20 C) 1,000 [2.2] 以下选项中正确的实型常量是 A) 0 B) 3. 1415 C) 0.329*102 [2.3] 以下选项中不正确的实型常量是 A) 2.607E-1 B) 0.8103e 2 C) -77.77 。 D) 4 5 6 D).871 ) D) 456e-2
[2.10] 以下叙述中正确的是 A)在 程序中无论整数还是实数 程序中无论整数还是实数, A)在C程序中无论整数还是实数,只要在允许的范围内 都能准确无误的表示。 都能准确无误的表示。 B)C程序由主函数组成 程序由主函数组成。 B) 程序由主函数组成。 C)C程序由函数组成 程序由函数组成。 C) 程序由函数组成。 D)C程序由函数和过程组成 程序由函数和过程组成。 D) 程序由函数和过程组成。
2011-8-22 3
第一章 程序设计基本概念
[1.1] 在TURBO C环境中用 环境中用RUN命令运行一个 程序 命令运行一个C程序 环境中用 命令运行一个 时,所运行的程序的后缀是 .EXE 。 [1.2] C语言源程序文件的后缀是 ______, 经过编译 语言源程序文件的后缀是 .C , .OBJ ,经过连接后, 后, 生成文件的后缀是 ______,经过连接后, 生成文 件的后缀是______。 件的后缀是 .EXE 。
2011-8-22 7
[2.11] TURBO C中int 类型变量所占字节数是 中 A) 1 B) 2 C) 3 [2.12] 不合法的八进制数是 A) 0 B) 028 [2.13] 不合法的十六进制数是 A) oxff B) 0Xabc C) 077

第11章c语言课后答案

第11章c语言课后答案
般使用字符文件,他们可以方便,快捷的通过显示器或打印机直接输出。
2: /*打开文件,关闭文件的含义是什么?为什么要打开关闭文件?*/
答: 打开文件的含义:要把文件使用方式写入FILE结构体变量中;返回一个FILE结构体指针,指向该文件的FILE结构
体变量,通过该文件指针可以对文件进行操作。
关闭文件的含义:文件指针不再指向原来指向的文件。
为什么要打开文件:(1)要确定文件的使用方式;(2)要得到一个指向文件的指针;(3)还需检测文件是否存在,
磁盘是否出故障等。
为什么要关闭文件:(1)防止文件被误用;(2)具体系统中同时打开的文件的数目是有限的。
{ k=i;
for(j=i+1;j<n;j++)
if(stu1[i].ave<stu1[j].ave)k=j;
if(k!=i)
{ change=stu1[i];stu1[i]=stu1[j];stu1[j]=change;}
}
fp=fopen("stu2","wb");
exit(1);
}
printf("\nInput char: ");
while((str=fgetc(stdin))!='#')
fputc(str,fp);
fclose(fp);
fp=fopen("text.txt","r");
while((str=fgetc(fp))!=EOF)
for(i=0;i<n;i++)
{ printf("Input the message of %d student\n",i+1);

第十一章结构体的试题

第十一章结构体的试题

(1)()是关于C语言数据类型的正确叙述。

A) 枚举类型不是基本类型B) 变量使用前应定义相应的数据类型C) 不允许使用空类型D) 数组不是构造类型(2) 下列()对结构类型变量定义是错误的。

A) struct teacher{ int num;int age;};struct teacher teach1;B) struct{ int num;int age;} teach1, teach2;C) struct{ int num;int age;} teacher;struct teacher teach1;D) struct teacher{ int num;int age;} teach1;(3) 若有定义:char ch;int j,k;enum day {sun, mon, tue, wed, thu, fri, sat};int a[sat];则()对下列语句是否符合语法规则的判断是正确的。

sun=0; /*语句1*/j=mon+tue; /*语句2*/if (a[mon]>0) j++; /*语句3*/A) 语句1、2、3均正确B) 语句2正确,语句1和语句3错误C) 语句1错误,语句2和语句3正确D) 语句1、2、3均错误(4) 若有定义:struct teacher{ int num;char sex;int age;} teacher1;则下面叙述错误的是()。

A) teacher1是结构类型名B) struct teacher是用户定义的结构类型C) num、sex、age都是结构变量teacher1的成员D) struct是结构类型的关键字(5) 下列程序段运行后,表达式()的值为3。

struct point{ int x;int y;} *p;struct point a[3]={1,2,3,4,5,6};p=a;A) p[1].xB) *(p+2)C) p[3].xD) p[2].x(6) 若有定义:typedef int NUM[100];NUM n;则()语句是正确的。

C语言程序设计(姜学峰版)PPT课件第十一章

C语言程序设计(姜学峰版)PPT课件第十一章

8
5)定义结构体类型仅仅声明了一种数据结构,编译 系统不会为类型分配存储空间的;此时可用已定 义的结构体类型去定义结构体变量或数组,编译 系统将为结构体变量分配存储空间;
9
2. 定义结构体类型的变量 有三种方法: 1)先定义结构体类型,再用类型标识去定义变量 struct student stu1, stu2; struct student是已定义的结构体类型标识符; stu1、stu2是所定义的结构体变量;编译时将为 结构体变量分配各自的存储空间; 2)定义类型的同时定义变量 struct student { …; …; } stu1, stu2;
18
5. 结构体变量的指针、结构体成员的指针 注:&优先级为2级,低于.和[ ]; stu1 变量stu1的指针:&stu1 图示: num
num成员指针:&stu1. num
4
20 1
name第i个元素指针:&stu1. name[i]
name sex m

birthday d 最低级成员y的指针:&stu1.birthday.y y score
5
例:定义可表示学生基本情况的结构体类型。
项目: 学号 姓名 性别 出生日期 成绩 电话号码 数据: 010510 Li Feng M 1981.5.4 680 029-8482500
类型: 长整/字串 字串
字符
字串
整型
字串
struct student /*结构体类型标识*/ { long num; char name[20]; char sex; char birthday[12]; float score; char tel[15]; };

C语言程序设计第九-十一章习题参考答案

C语言程序设计第九-十一章习题参考答案

C语言第九章参考答案1.选择题:12345 67890 12ADCDB BCDDC BB2.填空题:(1)指针或者地址(2)110(3)①char *p; ②p=&ch; ③scanf("%c",p); ④*p='a'; ⑤printf("%c",*p);(4)10 (5)0、7 (6)ab (7)abcdcd (8) 7ㄩ1(9)void (*p)(int * ,int*); (10)r+b[k] (11) '\0' 、n++; (12)aegi 3.改错题:(1) 第一处改正:* sub=x-y第二处改正:scanf("%f%f",&x,&y);第三处改正:calc(x,y,&add,&sub);(2)第一处:char swap (char *p1,char*p2)改为void swap (char *p1,char*p2)第二处:strcpy(p,p1)改为strcpy(p,p2)(3)第一处:p1=p1+m改为p1=p1+m-1第二处:*p1=*p2改为*p2=*p1第三处:*p2="\0"改为*p2='\0'(4)第一处:char *fun(char *str,char t)改为char *fun(char *str,char *t)第二处:s=NuLL改为s=NULL;第三处:if(r==p)改为if(*r==*p)(5)第一处:fun(int **b,int n)改为fun(int (*b)[N],int n)第二处:b[j][k]=k*j 改为b[j][k]=(k+1)*(j+1)4编程题(1)/*习题9-4-1 */void move(int array[20],int n,int m) ;main(){ int number[20],n,m,i;printf("How many numbers?"); /*共有多少个数*/scanf("%d",&n);printf("Input %d numbers:\n",n); /*输入n个数*/for(i=0;i<n;i++)scanf("%d",&number[i]);printf("How many place you want to move?"); /*后移多少个位置*/scanf("%d",&m);move(number,n,m); /*调用move函数*/ printf("Now,they are:\n");for(i=0;i<n;i++)printf("%d ",number[i]);}void move(int array[20],int n,int m) /*循环后移函数*/{ int *p,array_end;array_end=*(array+n-1);for(p=array+n-1;p>array;p--)*p=*(p-1);*array=array_end;m--;if(m>0) move(array,n,m); /*递归调用,当循环次数m减至0时,停止调用*/}(2)/*习题9-4-2 */#include<stdio.h>#include<string.h>#define TOTAL 6int mseek(char*str[],char xstr[],int n){ int i;for(i=0; i<n; i++){ if(strcmp(str[i],xstr)==0)return 1;}return 0;}main(){ char*name[TOTAL]={"Lining","Linshan","Tianyuan","Zhangqiang","Haipo","Fangbing"};char xname[20];printf("enter a name:");gets(xname);if(mseek(name,xname,TOTAL))printf("Found!\n");elseprintf("Not found!\n");}(3)/*习题9-4-3 */#include <stdio.h>#include <string.h>void fun(char *str,int num[4]){ int i;for(i=0; i<4; i++) num[i]=0;while(*str!='\0'){ if(*str>='a' && *str<='z' || *str>='A' && *str<='Z')num[0]++;else if(*str==' ')num[1]++;else if(*str>='0' && *str<='9')num[2]++;elsenum[3]++;str++;}}#define N 80main(){ int string[N];int n[4],i;gets(string);fun(string,n);for(i=0; i<4; i++)printf("%d\t",n[i]);}(4)/*习题9-4-4 *//* 调试时,可这样输入数据:*//*11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55 */#include <stdio.h>main(){ int a[5][5],*p,i,j;void change(int *p);printf("Input matrix:\n");for(i=0;i<5;i++) /*输入矩阵*/for(j=0;j<5;j++)scanf("%d",&a[i][j]);p=&a[0][0]; /*使p指向0行0列元素*/ change(p); /*调用函数, 实现交换*/ printf("Now, matrix: \n");for(i=0;i<5;i++) /*输出已交换的矩阵*/{ for(j=0;j<5;j++)printf("%4d",a[i][j]);printf("\n");}}void change(int *p) /*交换函数*/{ int i,j,temp;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++) /*找最大值和最小值的地址,并赋给pmax,pmin*/ for(j=0;j<5;j++){ if(*pmax<*(p+5*i+j)) pmax=p+5*i+j;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}temp=*(p+12); /*将最大值换给中心元素*/*(p+12)=*pmax;*pmax=temp;temp=*p; /*将最小值换给左上角元素*/*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i<5;i++) /*找第二最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第二最小值换给右上角元素*/*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第三最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j; /*将第三最小值换给左下角元素*/ temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i<5;i++) /*找第四最小值的地址赋给pmin*/ for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;temp=*pmin; /*将第四最小值换给右下角元素*/*pmin=*(p+24);*(p+24)=temp;}(5)/*习题9-4-5 *//*可以专门编写一个函数求各学生的平均分,存到aver[4]数组*/#include <stdio.h>void avcour1(float score[][5]);void fali2(int num[4],float score[4][5]);void good(int num[4],float score[4][5]);main(){int i,j,num[4];//数组num代表学号float score[4][5];printf("Input NO. and scores: \n");for(i=0;i<4;i++){ printf("NO.");scanf("%d",&num[i]);printf("scores:");for(j=0;j<5;j++)scanf("%f",&score[i][j]);}printf("\n\n");avcour1(score); /*求出第一门课的平均成绩*/ printf("\n\n");fali2(num,score); /*找出2门课不及格的学生*/printf("\n\n");good(num,score); /*找出成绩好的学生*/}void avcour1(float score[][5]) /*第一门课的平均成绩的函数*/{ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+score[0][i]; /*累计每个学生的得分*/ average1=sum/4; /*计算平均成绩*/printf("course 1 average score: %6.2f. \n",average1);}void fali2(int num[4],float score[4][5])/*找两门以上课程不及格的学生的函数*/{ int i,j,k,label;float sum=0;printf("= = = = = = = =Student who is fail = = = = = = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ label=0;for(j=0;j<5;j++)if((score[i][j])<60.0) label++;if(label>=2){ printf("%5d",num[i]);for(k=0;k<5;k++){ printf("%10.2f",score[i][k]);sum+=score[i][k];}printf("%10.2f\n",sum/5);}}}void good(int num[4],float score[4][5])/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数*/ { int i,j,k,n;float sum=0,aver[4];printf("= = = = = = = =Student whose score is good= = = = = = = =\n");printf(" NO.");for(i=0;i<5;i++)printf("%10d",i+1);printf(" average\n");for(i=0;i<4;i++){ n=0;sum=0;for(j=0;j<5;j++){if((score[i][j])>85.0) n++;sum+=score[i][j];}aver[i]=sum/5;if((n==5)||(aver[i]>=90)){ printf("%5d",num[i]);for(k=0;k<5;k++)printf("%10.2f",score[i][k]);printf("%10.2f\n",aver[i]);}}}(6)/*习题9-4-6*/#include <math.h>double sigma(double (*fn)(double),double l,double u){ double sum=0,d;for(d=l; d<u; d+=0.1)sum+=fn(d);return sum;}void main(){ double sum;sum=sigma(sin,0.1,1.0);printf("sum of sin from 0.1 to 1.0 is: %f\n",sum);sum=sigma(cos,0.5,3.0);printf("sum of cos from 0.5 to 3.0 is: %f\n",sum);}(7)/*习题9-4-7 */main(){ int i;char *month_name(int n);printf("input Month No.:\n");scanf("%d",&i);printf("Month No.:%2d --> %s\n",i,month_name(i)); /*调用指针函数month_name()*/ }char *month_name(int n)/*定义一个指针函数month_name(),返回一个指向字符串的指针*/{ static char *name[]={"Illegal Month","January", "February", "March", "April","May", "June", "July", "August","September", "October", "November", "December"};return((n<1||n>12)?name[0]:name[n]);}(8)/*习题9-4-8 */#include <stdio.h>#include <string.h>#define N 10main(){ void sort(char *p[]);int i;char *p[N],str[N][20];for(i=0;i<N;i++)p[i]=str[i]; /*将第i个字符串的首地址赋予指针数组p的第i个元素*/ printf("Input strings:\n");for(i=0;i<N;i++)scanf("%s",p[i]);sort(p);printf("Now, the sequence is:\n");for(i=0;i<N;i++)printf("%s\n",p[i]);}void sort(char *p[]){ int i,j;char *temp;for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(strcmp(*(p+j),*(p+j+1))>0){ temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}(9)/*习题9-4-9 */#include <stdio.h>#define LINEMAX 20 /*定义字符串的最大长度*/main(){ void sort(char **p);int i;char **p,*pstr[5],str[5][LINEMAX];for(i=0;i<5;i++)pstr[i]=str[i]; /*将第i个字符串的首地址赋予指针数组pstr的第i 个元素*/printf("Input 5 strings:\n");for(i=0;i<5;i++)scanf("%s",pstr[i]);p=pstr;sort(p);printf("strings sorted:\n");for(i=0;i<5;i++)printf("%s\n",pstr[i]);}void sort(char **p) /*冒泡法对5个字符串排序的函数*/ { int i,j;char *temp;for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(*(p+i),*(p+j))>0) /*比较后交换字符串地址*/{ temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}}}(10)void StrOR(char xx[][80],int maxline){ int i,righto,j,s,k;char temp[80];for(i=0; i<maxline; i++)for(j=strlen(xx[i])-1; j>=0; j--){ k=0; memset(temp,0,80);if(xx[i][j]=='o'){ righto=j;for(s=righto+1; s<strlen(xx[i]); s++)temp[k++]=xx[i][s];for(s=0;s<righto;s++)if(xx[i][s]!='o') temp[k++]=xx[i][s];strcpy(xx[i],temp);}else continue;}}C语言第十章参考答案1. 选择dccda cab2..填空(1)struct studentstrcmp(str,stu[i].name)==0break;(2)p=personp-person<3old=p->age;q->name,q->age(3)p!=NULLc++p->next(4)&per[i].body.eye&per[i].body.f.height&per[i].body.f.weight3.编程题(1)#include <stdio.h>struct data{ int year;int month;int day;};main(){ struct data a;int monthnum[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,sum=0;scanf("%d%d%d",&a.year,&a.month,&a.day);for(i=0;i<a.month-1;i++)sum+=monthnum[i];sum+=a.day;if(a.year%4==0 && a.year%100!=0 ||a.year%400==0)sum+=1;printf("%d年%d月%d日is the %d day",a.year,a.month,a.day,sum); }(2)#include <stdio.h>#include <stdlib.h>struct study{ float chinese;float maths;float english;float avg;};main(){ struct study student;scanf("%f%f%f",&student.chinese,&student.maths,&student.english);student.avg=(student.chinese+student.maths+student.english)/3;printf("average score is %f\n",student.avg);}(3)#include <stdio.h>#include <stdlib.h>struct study{ int num;float chinese;float maths;float english;float avg;};main(){ struct study s[3];struct study *p;for(p=s;p<s+3;p++){ scanf("%d%f%f%f",&(p->num),&(p->chinese),&(p->maths),&(p->english));p->avg=(p->chinese+p->maths+p->english)/3;}for(p=s;p<s+3;p++)printf("%d %3.1f %3.1f %3.1f %3.1f\n",p->num,p->chinese,p->maths,p->english,p->a vg);}(4)#include <stdio.h>#include <string.h>#define N 3typedef struct{char dm[5]; /*产品代码*/char mc[11]; /* 产品名称*/int dj; /* 单价*/int sl; /* 数量*/long je; /* 金额*/} PRO;void SortDat(PRO sell[],int n){ int i,j;PRO xy;for(i=0; i<N-1; i++)for(j=i+1; j<N; j++)if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je) { xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}void main(){ PRO sell[N];int i;for(i=0; i<N; i++){scanf("%s%s",sell[i].dm,sell[i].mc); //可这样输入,如:101 aaascanf("%d%d",&sell[i].dj,&sell[i].sl); //可这样输入,如:10 20sell[i].je=sell[i].dj*sell[i].sl;}SortDat(sell,N);printf("dm\t\tmc\t\tdj\tsl\tje\n");for(i=0; i<N; i++){printf("%s\t\t%s\t\t%d\t%d\t%ld\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}}(5)#include <stdio.h>#include <stdlib.h>main(){int *pi;int i,j,t,n;printf("输入整数个数:");scanf("%d",&n);pi=(int *)malloc(n*sizeof(int));printf("输入整数:");for(i=0; i<n; i++)scanf("%d",&pi[i]);for(i=0; i<n-1; i++)for(j=i+1; j<n; j++)if(pi[i]>pi[j]){t=pi[i]; pi[i]=pi[j]; p i[j]=t;}for(i=0; i<n; i++)printf("%d ",pi[i]);printf("\n");free(pi);}#include <stdio.h>#include <stdlib.h>struct stu{ int num;char name[20];int age;struct stu *next;};void list(struct stu *head){ struct stu *p;printf("The list records are:\n");p=head;if(head!=NULL)do{ printf("%d\t%s\t%d\n",p->num,p->name,p->age);p=p->next;}while(p!=NULL);elseprintf("The list is null");}struct stu * insert(struct stu *head,struct stu *stud){ struct stu *p0,*p1,*p2;p1=head; /*p1指向链表第一个节点*/ p0=stud; /*p0指向要插入的节点*/if(head==NULL) /*原链表是空表*/{ head=p0;p0->next=NULL; /*p0作为头指针*/ }else{ while((p1!=NULL)&&(p0->num>=p1->num)){ p2=p1;p1=p1->next;} /*p1指针后移*/if(p1!=NULL){ if(head==p1) head=p0;/*插入链表开头*/else p2->next=p0; /*插入到p2节点之后*/p0->next=p1;}else{ p2->next=p0;p0->next=NULL;}/*插入到最后*/return head;}main(){ struct stu *newstu,*head;head=NULL;int num;scanf("%d",&num);while(num!=0){ newstu=(struct stu *)malloc(sizeof(struct stu));newstu->num=num;scanf("%s",newstu->name);scanf("%d",&newstu->age);head=insert(head,newstu);scanf("%d",&num);}list(head);}(7)#include <stdio.h>void partition(unsigned long int num){ union a{ unsigned short int part[2];unsigned long int w;}n,*p;p=&n;n.w=num;printf("long int=%lx\n",num);printf("low part num=%0x,high part num=%0x\n",p->part[0],p->part[1]); }main(){ unsigned long int x;x=0x23456789; //这是为了调试方便,应改为scanf函数partition(x);}C语言第十一章参考答案一、选择1.B2.A3.B4.C5.B6.C7.D8.C9.C、D 10.A 11.A 12.C 13.B二、填空1 :fopen(fname,"w")ch2:"r"fgetc(fp) 或getc(fp)3:"bi.dat"&jfp4:==NULLflag==1s[strlen(s)-1]=='\n'三、改错题1:第一处改为:long num=0;第二处改为: !feof(fp) 或!=0改为==02: 第一处改为:rewind(fp)第二处改为: fgetc(fp)!= '\n' '\0'后面加上&& feof(fp)!=1四、编程题(1)#include<stdio.h>#include <stdlib.h>#include <string.h>main(){FILE *fp;char str[100];int i=0;if((fp=fopen("myfile","w"))==NULL){ printf("Can not open the file.\n");exit(0);}printf("Input a string:\n");gets(str);while(str[i]!='!'){ if(str[i]>='a'&& str[i]<='z')str[i]=str[i]-32;fputc(str[i],fp);i++;}fclose(fp);fp=fopen("myfile","r");fgets(str,strlen(str)+1,fp);printf("%s\n",str);fclose(fp);}(2)#include<stdio.h>struct student{ char num[10];char name[8];int score[3];float ave;}stu[5];main(){int i,j,sum;FILE *fp;for(i=0;i<5;i++){ printf("\nInput score of student %d:\n",i+1);printf("NO.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);sum=0;for(j=0;j<3;j++){ printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/3.0;}fp=fopen("stud","w");for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("File write error\n");fclose(fp);fp=fopen("stud","r");for(i=0;i<5;i++){ fread(&stu[i],sizeof(struct student),1,fp);printf("%s,%s,%d,%d,%d,%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);}}(3)#include<stdio.h>#include <stdlib.h>main(){char s[80];int a;FILE *fp;if((fp=fopen("test","w"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(stdin,"%s%d",s,&a); //相当于scanffprintf(fp,"%s %d",s,a);fclose(fp);if((fp=fopen("test","r"))==NULL){ printf("Cannot open file.\n");exit(1);}fscanf(fp,"%s %d",s,&a);fprintf(stdout,"%s %d\n",s,a); //相当于printf fclose(fp);}(4)#include<stdio.h>#include <stdlib.h>main(){FILE *fp;int i,j,n,i1;char c[100],t,ch;if((fp=fopen("A","r"))==NULL){printf("Can not open the file.\n");exit(0);}printf("\nfile A:\n");for(i=0;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);i1=i;if((fp=fopen("B","r"))==NULL){ printf("\n Can not open the file.");exit(0);}printf("\nfile B:\n");for(i=i1;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}fclose(fp);n=i;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(c[i]>c[j]){ t=c[i];c[i]=c[j];c[j]=t;}printf("\n file C:\n");fp=fopen("c","w");for(i=0;i<n;i++){ putc(c[i],fp);putchar(c[i]);}fclose(fp);}(5)#include<stdio.h>main(){FILE *fp1,*fp2;char ch;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");ch=fgetc(fp1);while(!feof(fp1)){putchar(ch);ch=fgetc(fp1);}rewind(fp1);while(!feof(fp1))fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);}(6)#include<stdio.h>main(){FILE *fp; long position;fp=fopen("data.txt","w");position=ftell(fp);printf("position=%ld\n",position);fprintf(fp,"Sample data\n");position=ftell(fp);printf("position=%ld\n",position);fclose(fp);}第12章1.选择题(1)D (2)C (3)D (4)D (5)C(6)D (7)D (8)B (9)A (10).C2.填空题(1) //(2) public、private 、protected(3) 函数类型类名::函数名(形参表列) 或类型类名::函数名(参数表)(4) 内联函数(5) 构造函数(6) 类名, 创建对象时(7) 私有(8) 私有(9) 基类的构造函数成员对象的构造函数派生类本身的构造函数3.概念题(1)答:本质差别是C++是面向对象的,而C语言是面向过程的。

CPrimer 第11章泛型算法课后习题答案

CPrimer 第11章泛型算法课后习题答案

第11章-泛型算法1.algorithm头文件定义了一个名为count的函数,其功能类似于find。

这个函数使用一对迭代器和一个值做参数,返回这个值出现的次数的统计结果。

编写程序读取一系列int型数据,并将它们存储到vector对象中然后统计某个指定的值出现了多少次。

// 11.17_11.1_int_to_vector_count.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#include<vector>#include<iostream>#include<algorithm>using namespace std;int _tmain(int argc, _TCHAR* argv[]){cout << "\tInput some int numbers ( ctrl + z to end):\n\t ";vector<int> iVec;int iVal;while ( cin >> iVal )iVec.push_back( iVal );cout << "\n\tInput a num to search in the iVec: ";cin.clear();cin >> iVal;int iCnt = 0;if ( iCnt = count( iVec.begin(), iVec.end(), iVal )){cout << "\n\tThe value " << iVal << " occurs " << iCnt << " times." << endl;}system("pause");return 0;}2.重复前面的程序,但是,将读入的值存储到一个string类型的list对象中。

C语言第十一章习题答案

C语言第十一章习题答案

11.1#include <iostream>struct date{int year;int month;int day;}date;void main(){static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31};int i,day_sum;printf("输入年,月,日\n\n");scanf("%d%d%d",&date.year,&date.month,&date.day);day_sum=0;for(i=0;i<date.month-1;i++)day_sum+=day_table[i];day_sum+=date.day;if((date.year%4==0)&&(date.year%100!=0)||(date.year%400==0)&&(date.m onth>2))day_sum+=1;printf("\n\n该日在本年中是第%d天\n\n",day_sum);}11.2#include <iostream>struct date{int year;int month;}date;void main(){int days(int y,int m,int d);printf("输入年,月,日\n\n");scanf("%d%d%d",&date.year,&date.month,&date.day);printf("\n\n该日在本年中是第%d天\n\n",days(date.year,date.month,date.day));}int days(int y,int m,int d){static int day_table[]={31,28,31,30,31,30,31,31,30,31,30,31}; int i,day_sum;day_sum=0;for(i=0;i<m-1;i++)day_sum+=day_table[i];day_sum+=date.day;if((y%4==0)&&(y%100!=0)||(y%400==0)&&(m>2))day_sum+=1;return day_sum;}11.3#include <iostream>#define N 2struct stu{int num;char name[10];float score[3];}stu[N];void main(){void print(struct stu *p);int i,j;struct stu *p;p=stu;for(i=0;i<N;i++){printf("\n\n输入第%d个学生的成绩\n\n",i+1);printf("输入学号:");scanf("%d",&((p+i)->num));printf("\n输入姓名:");scanf("%s",(p+i)->name);for(j=0;j<3;j++){printf("\n输入成绩%d:",j+1);scanf("%f",&((p+i)->score[j]));}}print(stu);}void print(struct stu *p){int i,j;printf("学号姓名成绩1 成绩2 成绩3\n\n"); for(i=0;i<N;i++){printf("%-8d%-8s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++){printf("%-8f",(p+i)->score[j]);}printf("\n\n");}}11.4#include <iostream>#define N 2struct stu{int num;char name[10];float score[3];}stu[N];void main(){void input(struct stu *p);void print(struct stu *p);struct stu *p;p=stu;input(p);print(p);}void input(struct stu *p){int i,j;for(i=0;i<N;i++){printf("\n\n输入第%d个学生的成绩\n\n",i+1);printf("输入学号:");scanf("%d",&((p+i)->num));printf("\n输入姓名:");scanf("%s",(p+i)->name);for(j=0;j<3;j++){printf("\n输入成绩%d:",j+1);scanf("%f",&((p+i)->score[j]));}}}void print(struct stu *p){int i,j;printf("学号姓名成绩1 成绩2 成绩3\n\n"); for(i=0;i<N;i++){printf("%-7d%-7s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++){printf("%-9.2f",(p+i)->score[j]);}printf("\n\n");}}11.5#include <iostream>#define N 3struct stu{char num[10];char name[10];float score[3];float average;}stu[N];void main(){void input(struct stu *p);void aver(struct stu *p);float aver_total(struct stu *p);void print(struct stu *p);struct stu *p;p=stu;input(p);aver(p);print(p);}void input(struct stu *p){int i,j;printf("按顺序依次输入学生的学号,姓名,成绩1,成绩2,成绩3\n\n"); for(i=0;i<N;i++){scanf("%s%s",(p+i)->num,(p+i)->name);for(j=0;j<3;j++)scanf("%f",&((p+i)->score[j]));}}void aver(struct stu *p){int i,j;float sum;for(i=0;i<N;i++){sum=0;for(j=0;j<3;j++){sum+=(p+i)->score[j];}(p+i)->average=sum/3;}}float aver_total(struct stu *p){float sum=0;for(;p<stu+N;p++)sum+=p->average;return (sum/N);}void print(struct stu *p){int i,j;struct stu *q;float max=0;printf("三门课的总平均成绩为:%f\n\n",aver_total(p));for(i=0;i<N;i++){if((p+i)->average>max){max=(p+i)->average;q=p+i;}}printf("最高分学生的数据为:\n\n");printf("学号姓名成绩1 成绩2 成绩3 平均成绩\n\n"); printf("%-7s%-7s",q->num,q->name);for(j=0;j<3;j++){printf("%-8.2f",q->score[j]);}printf("%-8.2f",q->average);printf("\n\n");}11.8#include <iostream>#include <malloc.h>#define NULL 0#define LEN sizeof(struct student)struct student{long int num;float score;struct student *next;}list_a,list_b;int n,sum;void main(){struct student *creat(void);struct student *insert(struct student *ha,struct student *hb); void print(struct student *head);struct student *ahead,*bhead,*abh;ahead=creat();sum=n;bhead=creat();sum=sum+n;abh=insert(ahead,bhead);print(abh);}struct student *creat(void){struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);printf("输入学生的学号和成绩\n\n");printf("如果输入的学号为0,就停止输入\n\n");scanf("%ld%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf("%ld%f",&p1->num,&p1->score);}p2->next=NULL;return(head);}struct student *insert(struct student *ha,struct student *hb) {struct student *pa1,*pa2,*pb1,*pb2;pa1=pa2=ha;pb1=pb2=hb;if(ha==NULL&&hb!=NULL) ha=hb;else{while((pb1->num>pa1->num)&&(pa1->next!=NULL)){pa2=pa1;pa1=pa1->next;if(pb1->num<=pa1->num){if(ha==pa1) ha=pb1;else pa2->next=pb1;pb2=pb1;pb1=pb1->next;pa2=pa1;pa1=pb2;pb2->next=pa2;}}if((pb1->num>pa1->num)&&(pa1->next==NULL)) pa1->next=pb1;}return (ha);}void print(struct student *head){struct student *p;printf("\n\n共有%d条记录,分别为:\n\n",sum); p=head;if(head!=NULL)do{printf("%ld%8.2f\n",p->num,p->score);p=p->next;}while(p!=NULL);}11.9#include <iostream>#include <malloc.h>#define N 13struct person{int num;int next;}link[N+1];void main(){int i,count,h;for(i=1;i<=N;i++){if(i==N) link[i].next=1;else link[i].next=i+1;link[i].num=i;}printf("\n\n");count=0;h=N;printf("退出者依次是:\n\n");while(count<N-1){i=0;while(i!=3){h=link[h].next;if(link[h].num) i++;}printf("%d ",link[h].num);link[h].num=0;count++;}printf("\n\n最后的成员是:");for(i=1;i<=N;i++){if(link[i].num) printf("%d\n\n",link[i].num); }}11.10#include <iostream>#include <malloc.h>#define LEN sizeof(struct student)#define NULL 0struct student{long int num;char name[20];struct student *next;}a,b;int n;void main(){struct student *creat(void);struct student *dele(struct student *ahead,struct student *bhead); void print(struct student *head);struct student *p1,*p2;printf("输入a中同学的学号,姓名\n\n");p1=creat();printf("输入b中同学的学号,姓名\n\n");p2=creat();print(dele(p1,p2));}struct student *creat(void){struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);scanf("%d%s",&p1->num,p1->name);head=NULL;while(p1->num!=0){n+=1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf("%d%s",&p1->num,p1->name);}p2->next=NULL;return(head);}struct student *dele(struct student *ahead,struct student *bhead) {struct student *ah,*bh;struct student *ap1,*ap2,*bp1,*bp2;ap1=ap2=ahead;bp1=bp2=bhead;while(ap1->next){while(bp1->next){if(ap1->num!=bp1->num){bp2=bp1;bp1=bp1->next;}else{if(ap1==ahead) ahead=ap1->next;else ap2->next=ap1;ap2=ap1;ap1=ap1->next;break;}}}return(ahead);}void print(struct student *head){struct student *p;printf("删除后a中学生学号及成绩分别为:\n\n"); p=head;if(head!=NULL){do{printf("%ld%s",p->num,p->name);p=p->next;}while(p!=NULL);}}。

C程序设计(第三版)习题答案(11章) 谭浩强著(4)_官田

C程序设计(第三版)习题答案(11章) 谭浩强著(4)_官田
{printf("%8s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%7d",stu[i].score[j]);
printf("%6.2f\n",stu[i].avr);
}
11.2
struct dt
{int year;
int month;
int day;
}date;
main()
{
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
case 5:days=date.day+120;break;
case 6:days=date.day+151;break;
case 7:days=date.day+181;break;
case 8:days=date.day+212;break;
11.1
struct
{int year;
int month;
int day;
}date;
main()
{int days;
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
取消回复score\n");
scanf("%d",&stu[i].score[j]);
}
}
average=0;
max=0;

第11章 结构体练习题

第11章 结构体练习题

7. 下面程序的输出结果为 C ) 下面程序的输出结果为( #include <stdio.h> struct st { int x; int *y; } *p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2], 80,&dt[3]}; main() { p=aa; printf("%d\n",++p->x); printf("%d\n",(++p)->x); printf("%d\n",++(*p->y)); } A.10 B.50 C. 51 D.60 20 60 60 70 20 21 21 31
1、 以下程序的输出结果是 、 以下程序的输出结果是A A) 0 B) 1 C) 3 D) 6 main() { struct cmp { int x; int y; } cnum[2]={1,3,2,7}; printf(“%d\n”,cnum[0].x/cnum[1].y*cnum[1].x); “ ” } 2、根据以下定义 能输出字母 的语句是 能输出字母M的语句是 、根据以下定义,能输出字母 的语句是D A) printf("%c\n",class[3].name); B) printf("%c\n",class[3].name[1]); C) printf("%c\n",class[2].name[1]); D) printf("%c\n",class[2].name[0]); struct person { char name[9]; int age; }; struct person class[10]={ "John", 17, "Paul", 19, "Mary", 18, "Adam", 16, };

C++第11章习题解答

C++第11章习题解答

第十一章标准模板库(STL)习题一. 基本概念与基础知识自测题11.1填空题11.1.1 STL大量使用继承和虚函数是(1)(填对或错)。

因为(2)。

答案:(1)错(2)它使用的是模板技术,追求的是运行的效率,避免了虚函数的开销11.1.2 有两种STL容器:(1)和(2)。

STL不用new和delete,而用(3)实现各种控制内存分配和释放的方法。

答案:(1)第一类容器(2)近容器(3)分配子(allocator)11.1.3 五种主要迭代子类型为(1)、(2)、(3)、(4)和(5)。

STL算法用(6)间接操作容器元素。

sort算法要求用(7)迭代子。

答案:(1)输入(InputIterator)(2)输出(OutputIterator)(3)正向(ForwardIterator)(4)双向(BidirectionalIterator)(5)随机访问(RandomAccessIterator)(6)迭代子(7)随机访问(RandomAccessIterator)11.1.4 三种STL容器适配器是(1)、(2)和(3)。

答案:(1)stack(栈)(2)queue(队列)(3)priority_queue(优先级队列)11.1.5 成员函数end()得到容器(1)的位置,而rend得到容器(2)的位置。

算法通常返回(3)。

答案:(1)最后一个元素的后继位置(2)引用容器第一个元素的前导位置。

实际上这是该容器前后反转之后的end()(3)迭代子11.1.6 适配器是(1),它依附于一个(2)容器上,它没有自己的(3)函数和(4)函数,而借用其实现类的对应函数。

答案:(1)不独立的(2)顺序(3)构造函数(4)析构函数11.1.7 返回布尔值的函数对象称为(1),默认的是(2)操作符。

答案:(1)谓词(predicate)(2)小于比较操作符“<”11.1.8C++标准库中给出的泛型算法包括(1)种算法。

ch11-13例题分析PPT课件

ch11-13例题分析PPT课件
当执行了以下语句后,
文件f1.dat和f2.dat长度分别是 1_6_ 和 8__字节。
fp1=fopen(“f1.dat”,”w”); fprintf(fp1,”%ld%ld”,a[0],a[1]; fclose(fp1); fp2=fopen(“f2.dat”,”wb”); fwrite(a,sizeof(long),2,fp2); fclose(fp2);
为:f f1 f2 f3<CR>后的输出结果是__b_b_b_c__c_c_d_d_d___。
#include <stdio.h>
main(int ac,char *av[])
{ FILE *fp; void s(); int k=1;
while(--ac>0)
if((fp=fopen(av[k++],"r"))==NULL)
7
}
11.填空:TC显示如下结果是一结构体数组存储的内容 Li,Wang,Chen 3位学生的学号、姓名、成绩1、成绩2,行首 是相对地址,而后输出16个字节的16进制数值。
0000: 39 00 00 4C 69 00 00 00 00 00 00 5A 00 50 00 31
0010: 30 00 57 61 6E 67 00 00 00 00 50 00 50 00 31 31
if(a&b)printf("***\n");
else printf("###\n");
的输出结果是___#_#_#_______。
2020/10/13
1
4.以下程序的运行结果是_______。 #include <stdio.h> main() {struct date {int year,month,day; }today; printf("%d\n",sizeof(struct date)); }

c语言第11章作业参考答案

c语言第11章作业参考答案

11.1 数组元素a[i]的用指针的间访表示为:*(a+i)。

请写出:b[i][j][k]的指针表示;u[i][j][k][l][m][n]用指针的间访表示。

b[i][j][k] -> (*(b+i))[j][k] -> (*(*(b+i)+j))[k] -> *(*(*(b+i)+j)+k)u[i][j][k][l][m][n] -> (*(u+i))[j][k][l][m][n] -> (*(*(u+i)+j))[k][l][m][n] -> (*(*(*(u+i)+j)+k))[l][m][n] -> (*(*(*(*(u+i)+j)+k)+l))[m][n]-> (*(*(*(*(*(u+i)+j)+k)+l)+m))[n] -> *(*(*(*(*(*(u+i)+j)+k)+l)+m)+n) 11.2 设有声明:int a[2][3][4], *p;请写出用p间访a[i][j][k]的表达式。

(1)p=a; *(p+3*4*i+4*j+k)(2)p=a[i]; *(p+4*j+k)(3)p=a[i][j]; *(p+k)#include <stdio.h>int main(){int i,j,k,a[2][3][4], *p;for(i=0; i<2; i++)for(j=0; j<3; j++)for(k=0; k<4; k++)*(*(*(a+i)+j)+k)=i*100+j*10+k;i=1;j=2;k=3;printf("%d\n",a[i][j][k]);p=a;printf("%d\n", *(p+3*4*i+4*j+k));p=a[i];printf("%d\n", *(p+4*j+k));p=a[i][j];printf("%d\n", *(p+k));return 0;}11.3 设有声明:int a[2][3][4]; 请写出关于p的声明语句,使得可以用:(*(*(*(p+i)+j)+k)) 表示a[i][j][k]。

C语言-习题集参考答案全部

C语言-习题集参考答案全部

目录- 1 -目录第一章C语言基础知识参考答案 ................................................................................ - 2 - 第二章顺序结构参考答案.......................................................................................... - 5 - 第三章选择结构参考答案.............................................................................................. - 7 - 第四章循环结构参考答案............................................................................................ - 11 - 第五章函数参考答案................................................................................................ - 15 - 第六章指针参考答案.................................................................................................... - 18 - 第七章一维数组参考答案............................................................................................ - 21 - 第八章二维数组参考答案.......................................................................................... - 28 - 第九章字符串参考答案.......................................................................................... - 31 - 第十章对C语言的深入讨论参考答案 ....................................................................... - 33 - 第十一章结构体与共用体参考答案............................................................................ - 34 - 第十二章文件参考答案........................................................................................ - 35 -全国计算机等级考试二级教程C 语言习题集参考答案- 2 - 第一章C语言基础知识参考答案一,选择题1 C2 D3 A4 C5 A6 D7 C 分析:C答案以数字开头了8 D 分析:int 是关键字9 C 10 D 11 B12 D 分析:Visual C++6.0中int类型的变量占的字节数为4。

C语言程序设计 – 第 11 章课后习题

C语言程序设计 – 第 11 章课后习题

C语言程序设计– 第十一章课后习题一、选择题1. C语言可以处理的文件类型是(B)A. 文本文件和数据文件B. 文本文件和二进制文件C. 数据文件和二进制文件D. 以上答案都不完全(解释:文本文件、数据文件、二进制文件等C语言都可以处理)2. 对文件操作的一般步骤是(A)A. 打开文件→操作文件→关闭文件B. 操作文件→修改文件→关闭文件C. 读写文件→打开文件→关闭文件D. 读文件→写文件→关闭文件(解释:对于缓冲文件系统,操作文件之前,需要在内存中建立一个“文件信息区”(称“打开文件”),对文件的操作都是对这个信息区操作,文件操作完毕后,需要将信息区清除以便释放内存(称“关闭文件”)。

)3. 要打开一个已存在的非空二进制文件“file”用于随机读写,正确的语句是(B)A. fp = fopen("file", "rb");B. fp = fopen("file", "rb+");C. fp = fopen("file", "wb");D. fp = fopen("file", "wb+");(解释:文件已经存在且非空,D会将文件原有的内容清空。

)4. 当顺利执行了文件关闭操作时,fclose函数的返回值是(C)A. -1B. TRUEC. 0D. 1(解释:文件顺利关闭时返回0,失败返回EOF(-1))5. 标准库函数fgets(s, n, f)的功能是(B)A. 从文件f中读取长度为n的字符串存入指针s所指的内存B. 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存C. 从文件f中读取n个字符串存入s所指的内存D. 从文件f中读取n-1个字符串存入指针s所指的内存(解释:在读出n-1个字符之前,如果遇到了换行符或EOF,则读出结束。

C++程序设计第三版(谭浩强)第十一章习题答案

C++程序设计第三版(谭浩强)第十一章习题答案

C++程序设计第三版(谭浩强)第十一章习题答案11.1 题#includeusing namespace std;class Student{public:void get_value(){cin>>num>>name>>sex;}void display( ){cout<<"num: "<<num<<endl;cout<<"name: "<<name<<endl;cout<<"sex: "<<sex<<endl;}private :int num;char name[10];char sex;};class Student1: public Student{public:void get_value_1(){get_value();cin>>age>>addr;}void display_1(){ cout<<"age: "<<age<的私有成员,正确。

cout<<"address: "<<addr<的私有成员,正确。

private:int age;char addr[30];};int main(){Student1 stud1;stud1.get_value_1();stud1.display();stud1.display_1();return 0;}11.2 题#includeusing namespace std;class Student{public:void get_value(){cin>>num>>name>>sex;} void display( ){cout<<"num: "<<num<<endl; cout<<"name: "<<name<<endl; cout<<"sex: "<<sex<<endl;} private :int num;char name[10];char sex;};class Student1: private Student {public:void get_value_1(){get_value();cin>>age>>addr;}void display_1() {display();cout<<"age: "<<age<私有成员,正确。

第11章 结构

第11章 结构

第11 章结构与联合一、单选题1 下列关于结构的说法错误的是:A:结构是由用户自定义的一种数据类型B:结构中可设定若干个不同数据类型的成员C:结构中成员的数据类型可以是另一个已定义的结构D:在定义结构时,可以为成员设置默认值答案:D2 以下关于结构体的叙述中,错误的是:A:结构体是一种可由用户构造的数据类型B:结构体中的成员可以具有不同的数据类型C:结构体中的成员不可以与结构体变量同名D:结构体中的成员可以是指向自身结构的指针类型答案:C3 以下结构体类型说明和变量定义中,正确的是:A:struct SS{ char flag;float x;}struct SS a,b;B:struct{ char flag;float x;}SS;SS a,b;C:struct ss{ char flag;float x;};D:typedef{ char flag;float x;}SS;SS a,b;答案:C4 以下对结构体类型变量st的定义中,不正确的是:A:struct{ char c;int a;}st;B:struct{ char c;int a;}TT;struct TT st;C:typedef struct{ char c;int a;}TT;TT stD:#define TT structTT{ char c;int a;}st;答案:B5 设有以下说明语句:struct stu{ int a;float b;}stutype;则下面的叙述不正确的是:A:struct是结构体类型的关键字B:struct stu是用户定义的结构体类型名C:stutype是用户定义的结构体类型名D:a和b都是结构体成员名答案:C6 在16位IBM-PC机上使用C语言时,若有如下定义:struct data{ int i;char ch;double f;}b;则结构变量b占用内存的字节数是:A:1B:2C:8D: 11答案:D7 以下程序的运行结果是:#include "stdio.h"main( ){ struct date{ int year;int month;int day:}today;printf("%d\n",sizeof(struct date) );}A:6B:8C:10D: 12答案:A8 下面程序的运行结果是:main( ){ struct cmplx{ int x;int y;}c[2]={1,3,2,7};printf("%d",c[0].y/c[0].x*c[1].x);}A:0B:1C:3D:6答案:D9 若有以下说明和语句,则对pup中sex域的正确引用方式是:struct pupil{ char name[20];int sex;}pup,*p;p=&pup;A:p.pup.sexB:p->pup.sexC:(*p).pup.sexD:(*p).sex答案:D10 已知职工记录描述为struct workers{ int no;char name[20];char sex;struct{ int day;int month;int year;}birth;};struct workers w;设变量w中的“生日”应是“1993年10月25日”,下列对“生日”的正确赋值方式是:A:day=25;month=10;year=1993;B:w.dat=25;w.month=10;w.year=1993;C:w.birth.day=25;w.birth.month=10;w.birth.year=1993;D:birth.day=25;birth.month=10;birth.year=1993;答案:C11 当定义一个结构体变量时系统分配给它的内存是:A:各成员所需内存量的总和B:成员中占内存量最大者所需的容量C:结构中第一个成员所需内存量D:结构中最后一个成员所需内存量答案:A12 以下定义结构体类型的变量st1,其中不正确的是: A:typedef struct student{ int num;int age;}STD;STD st1;B:struct student{ int num;int age;}st1;C:struct{ int num;int age;}st1;D:truct student{ int num;int age;}struct student st1;答案:D13 设有以下定义:struct sk{ int a;float b;} data,*p;若要使p指向data中的a域,正确的赋值语句是:A:p=(struct sk *)&data.a;B:p=(struct sk *)data.a;C:p=&data.aD:*p=data.a答案:A14 若有以下的定义、说明和语句,则值为101的表达式是:struct wc{ int a; int *b;}*p;int x0[]={11,12},x1[]={31,32};static struct wc x[2]={100,x0,300,x1};p=x;A:*p->bB:p->aC:++p->aD:(p++)->a答案:C15 根据下面的定义,能打印出字母M的语句是:struct person{ char name[9];int age;};struct person chass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};A:printf("%c",class[3].name);B:printf("%c",class[3].name[1]);C:printf("%c",class[2].name[1]);D:printf("%c",class[2].name[0]);答案:D16 若有以下定义:struct person{ int id;char name[10]:}per,*s=&per;则以下对结构体成员的引用中错误的是:A:B:s->name[0]C:(*per).name[8]D:(*s).id答案:C17 若有以下说明和语句,则下面表达式中值为1002的是()struct student{ int age;int num;};struct student stu[3]={ {1001,20},{1002,19},{1003,21} };struct student *p;p=stu;A:(p++)->numB:(p++)->ageC:(*p).numD:(*++p).age答案:D18 当说明一个共用体变量时,系统分配给它的内存是()A:各成员所需内存量的总和B:共用体中第一个成员所需内存量C:成员中占内存量最大者所需的内存量D:共用体中最后一个成员所需内存量答案:C19 以下对C语言中共用体类型数据的叙述正确的是()A:可以对共用体变量名直接赋值B:一个共用体变量中可以同时存放所有成员C:一个共用体变量中不能同时存放其所有成员D:共用体类型定义中不能出现结构体类型的成员答案:C20 若有以下定义和语句:union data{ int i;char c;float f;}a;则以下语句正确的是:A:a=5B:printf("%d\n",a.i);C:a={2,'a',1.2};D:n=a答案:B二、多选题1.若有以下说明和语句:struct student{ int age; int num;}std,*p;p=&std;则以下对结构体变量std中成员age的引用方式正确的是( )A.std.age B.p->age C.(*p).age D.*p.age 答案:ABC2.设有以下说明语句struct stu{ int a;float b; }stutype;则以下叙述正确的是( )A.struct 是结构体类型的关键字 B.struct stu 是用户定义的结构体类型C.stutype 是用户定义的结构体类型名 D.a 和 b 都是结构体成员名答案:ABD3.以下说法正确的是( )A.结构体变量的名称为该结构体变量的存储首地址B.结构体变量占用空间的大小为各成员项占用空间大小之和C.结构体类型定义时不分配存储空间D.同一结构体类型的不同变量的同名成员项数据类型相同答案:CD4.有以下语句:struct lie{ int a, float b;}st;则在下面叙述中,正确的是( )A.struct是结构类型的关键字B.struct lie是用户定义的结构类型C.st是用户定义的结构类型名D.a和b都是结构成员名答案:ABD5.在说明一个共用体变量时,系统分配给他的存储空间,描述不正确的是( )A.该共用体中第一个成员所需存储空间B.该共用体中最后一个成员所需存储空间C.该共用体中占用最大存储空间的成员所需存储空间D.该共用体中所有成员所需存储空间的总和答案:ABD6.若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中正确的是A.data的每个成员起始地址都相同B.变量data所占的内存字节数与成员c所占字节数相等C.程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000D.data可以作为函数的实参答案:ABD7.设有如下说明typedef struct ST{long a;int b;char c[2];}NEW;则下面叙述中不正确的是A.以上的说明形式非法B.ST是一个结构体类型C.NEW是一个结构体类型D.NEW是一个结构体变量答案:AD8.关于枚举类型,描述正确的是()A.枚举类型变量的取值范围只限于类型定义时所列出的值。

《精通C程序设计教程》第十、十一章部分习题答案-推荐下载

《精通C程序设计教程》第十、十一章部分习题答案-推荐下载
printf("Input %d students data\n",N); printf("xh xm s1 s2 s3\n"); for(i=0;i<N;i++) scanf("%ld%s%d%d%d",&a[i].xh,a[i].xm,&a[i].s1,&a[i].s2,&a[i].s3); } void out_stu(STU a[N],int p[N]) { int i; for(i=0;i<N;i++) printf("%ld %s %d %d %d\n", \
while(p&&p->quantity>s->quantity) { pr=p;p=p->next; } pr->next=s;s->next=p; } void Out(NodeTp *h) { NodeTp *p=h->next; while(p) { printf("%d,%d\n",p->no,p->quantity);p=p->next;} } void Ers(NodeTp *h) { NodeTp *p; while(h) { p=h;h=h->next;delete p;} } void main() { NodeTp *h,*s,*ps;int no,quantity; h=new NodeTp;h->next=NULL; while(1) { printf("Input no and quantity:");scanf("%d%d",&no,&quantity);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十一章结构体与共用体
问题与思考
1.下面程序的运行结果是___________.
main()
{
struct cmplx{int x;
int y;
}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);
}
:
a)0 b)1 c)3 d)6
2.以下对结构体变量stu1中成员age的非法引用是____b____.
struct student
{int age;
int num;
}stu1,*p;
p=&stu1;
a) b)
c)p->age d)(*p).age
/
3.以下scanf函数调用语句中对结构体变量成员的不正确引用是_____d___.
struct pupil
{char name[20];
int age;
int sex;
}pup[5],*p;
p=pup;
a)scanf("%s",pup[0].name);
b)scanf("%d",&pup[0].age);
\
c)scanf("%d",&(p->sex));
d)scanf("%d",p->age);
4.以下程序的运行结果是___10,x_____.
struct n{
int x;
char c;
};
main()
{struct n a={10,'x'};
|
func(a);
printf("%d,%c",,;
}
func(struct n b)
{
=20;
='y';
}
5.若有定义:

struct num
{int a;
int b;
float f;
}n={1,3,};
struct num *pn=&n;
则表达式pn->b/*++pn->b的值是___12_____,表达式(*pn).a+pn->f的值是.
6.以下程序的运行结果是____7,3____.
struct ks
·
{int a;
int *b;
}s[4],*p;
main()
{
int n=1;
printf("\n");
for(i=0;i<4;i++)
{
s[i].a=n;
·
s[i].b=&s[i].a;
n=n+2;
}
p=&s[0];
p++;
printf("%d,%d\n",(++p)->a,(p++)->a);
}
7.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名
和年龄。

请在_______内填入正确内容。

&
stati struct man{
char name[20];
int age;
}person[]={"li=ming",18,
"wang-hua",19,
"zhang-ping",20
};
main()
{struct man *p,*q;

int old=0
p=person;
for( ;p_____;p++)
if(old<p->age)
{q=p;______;}
printf("%s %d",______);
}
8.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点)。

请在______内填入正确内容。

~
struct link
{char data ;
struct link *next;
};
....
struct link *p,*first;
int c=0;
p=first;
while(_____)
#
{_______;
p=_______;
}
9.有以下程序输出结果是。

#include<>
struct stu
{int num;
char name[10];
int age;
<
};
void fun(struct stu *p)
{printf("%s\n",(*p).name);}
main()
{struct stu students[3]=
{{9801,"zhang",20},{9802,"Wang",19},{9803,"zhao",18}};
fun(students+2);}
10.根据下面的定义,能打出字母M的语句是 c 。

struct person
{ char name[9];
int age;
}
struct person class[10]={ 〞John〞,17, 〞Paul〞,19, 〞Mary〞,18,
〞Adam〞,16};
(〞%c\n〞,class[3].name);
(〞%c\n〞,class[3].name[1]);
(〞%c\n〞,class[2].name[1]);
(〞%c\n〞,class[2].name[0];。

相关文档
最新文档