C语言第十一章习题答案

合集下载

C语言程序设计(第三版)谭浩强著 各章习题答疑

C语言程序设计(第三版)谭浩强著 各章习题答疑

以八、 /* 以八、十六进制输出 */
} ???? 是对应的带符号短整数。 输出结果是八进制整数 十六进制整数
2
3.9 计算某个表达式的值。 通用程序清单如下: stdio.h” #include ”stdio.h stdio.h void main() { ?????? x; 计算表达式值存入x x=( 表达式 );/* 计算表达式值存入x */ printf(”% printf( %?\n”,x); ,x); } ?????? 表达式对应的数据类型符(需事先判断) ? 表达式为整型,则为d 表达式为实型,则为f 3
第七章习题答疑(二)
折半查找法在排序数组中查找某个数。 上课时已有提示。 7.13 字符串连接(b[]中字符串连接到a[]中字符串后) 设:a[10]=”12 ,b[]=”abc 12”, abc” 12 abc (1)找到a串的’\0’的下标(i=2) ’ (2)j=0; 当型循环(b[j]!=’\0’) ’\ ’ a[i]=b[j],i++,j++ (3)a[i]=’\0’ \ 7.15 字符串复制(b[]中字符串复制到a[]中) 设:a[10]=”12”,b[]=”abc” (1)i=0; 当型循环(b[i]!=’\0’) a[i]=b[i],i++ (2)a[i]=’\0’ 7.9
18
第十章习题答疑(一)
输入3个整数,按照由小到大顺序输出。 int x,y,z,*px=&x,*py=&y,*pz=&x; 用以前的程序,其中的x、y、z换成*px、*py、*pz 10.3 输入10个整数存入一维数组a[10],将其中最小数与第1 个数交换,最大数与最后一个数交换。 要求编3个函数: 10 10 输入10个整数、交换、输出交换后的10个整数。 输入函数: void in(int *p,int n) 输出函数: void out(int *p,int n) 交换函数: void change(int *p,int n) 其中寻找最大最小数的方法: int *q,*max,*min; for (max=min=p,q=p+1;q<p+n;q++) { if(*max<*q) max=q; if(*min>*q) min=q; } 19 交换的方法:*p和*min,*(p+n-1)和*max 10.1

《精通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);

第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);

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语言是面向过程的。

C语言 习题十一 参考答案

C语言 习题十一 参考答案

3.已有一个存放数千种仓库物质信息的文件 CK,每个信息元素含两个内容:物质编号 kno 和库存量 KNOM。请编程通过检查全库物质的库存量,建立一个新的文件 XK,它包含所有库存量大于 100 的物质 的编号和库存量。 参考程序: /*p360_3.c*/ #include "stdio.h" main() {int n,m;
{scanf("%d%s",&n,xm); for(j=0;j<5;j++) scanf("%d",&sc[i][j]); }
fp=fopen("abc.txt","w"); for(i=0;i<N;i++)
fprintf(fp,"%5d%s%4d%4d%4d%4d%4d\n",n,xm,sc[i][0],sc[i][1],sc[i][2],sc[i][3],sc[i][4]); fclose(fp); } /*p360_1a.c*/ #include "stdio.h" main() {FILE *fp; int num,mark[5],i,sum,n=0; float av,t[5]={0}; char name[20]; if((fp=fopen("abd.txt","w"))==NULL)
FILE *fp1,*fp2; fp1=fopen("ck.txt","r"); fp2=fopen("xk.txt","w"); while(feof(fp1)==0) {fscanf(fp1,"%d,%d",&n,&m);

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语言程序设计教程》(第三版)课后习题参考答案(精选5篇)[修改版]

《C语言程序设计教程》(第三版)课后习题参考答案(精选5篇)[修改版]

第一篇:《C语言程序设计教程》(第三版)课后习题参考答案C语言程序设计课后习题参考答案习题一一、单项选择题1、C2、B3、B4、C5、D6、A7、C8、A二、填空题1、判断条件2、面向过程编程3、结构化4、程序5、面向对象方法6、基本功能操作、控制结构7、有穷性8、直到型循环结构9、算法10、可读性11、模块化12、对问题的分解和模块的划分习题二一、单项选择题1、B2、D3、C4、B5、A二、填空题1、主2、C编译系统3、结构化4、程序5、面向对象方法6、.OBJ7、库函数8、直到型循环结构习题三一、单项选择题1、D2、B3、A4、C9、B10、C11、A12、D13、C17、B18、C19、C20、D21、A25、D26、A二、填空题1、补码2、10^-138~10^1 38、15~166、A7、B6、D7、B14、B15、C22、D8、C8、D16、A24、D、A3、实4、单目运算符、自右向左5、函数调用6、65,89习题四一、单项选择题1、D2、C3、D4、A5、D6、B7、A8、C9、B10、B二、填空题1、两, ;2、5.1690003、-200 2500、i=-200,j=2500回车、i=-200回车j=2500回车4、a=98,b=765.000000,c=4321.0000005、100 25.81 1.89234、100,25.81,1.89234、100回车25.81回车1.89234回车6、0,0,37、38、scanf(“%lf %lf %lf”,&a,&b,&c);9、13 13.000000 13.00000010、c=b-a;a=b+c;习题五一、单项选择题1、B2、D3、C4、B5、B6、D7、A8、B二、填空题1、1 、02、k!=03、if(x>4||xelse printf(“error!”); 4、if(((x>=1&&x=200&&x Printf(“%d”,x);5、16、17、10! Right!8、a=09、2,110、0习题六一、单项选择题9、D1、B2、C3、C4、B5、C6、B7、C8、A二、填空题1、无穷次2、83、205、3.66、*#*#*#$7、828、d=1.0 、k++、k9、!(x习题七一、单项选择题1、B2、D3、C4、C5、A二、填空题1、1 2 4 8 16 32 64 128 256 5122、a[age]++、i=18;i3、break、i==84、a[i]>b[i]、i3、j5、b[j]=0、b[j]=a[j][k]习题八一、单项选择题1、B3、C4、A5、A9、D10、B11、A12、C13、A二、填空题1、return1、return n+sum(n-1)2、return1、n*facto(n-1)习题九一、单项选择题1、D2、C3、D4、A5、C9、B10、C11、A13、B17、C18、A19、B20、C二、填空题1、int 、return z2、*p++3、’\0’、++4、p、max*q6、A7、D6、A7、C14、C15、B6、C7、C14、A15、D8、A8、D8、C习题十一、单项选择题1、D2、D3、A4、5、B6、A7、C8、B9、D10、11、C12、D13、D14、C二、填空题1、34 122、ARRAY a[10],b[10],c[10];3、2 34、ab、cd5、(*b).day、b->day6、adghi mnohi no7、(struct node *)、!=’\n’、p=top;8、p1=p1->next9、(struct list *)、(struct list *)、return (n)习题十一一、单项选择题1、A2、A3、B4、A5、B9、A10、B11、B12、B13、C17、D二、填空题1、ASCII(文本)、二进制2、pf=fopen(“A:\zk04\data xfile.dat”,”w”);3、fputc()、fputs()、fscanf()、fread()4、(后两个空)文件结束符、非0值7、B14、C15、D8、A16、A第二篇:C语言程序设计教程课后习题参考答案《C语言程序设计教程》课后习题参考答案习题1 1. (1)编译、链接.exe (2)函数主函数(或main函数)(3)编辑编译链接2.(1)-(5):DDBBC (6)-(10):ABBBC 3.(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是高级语言,同时具备了低级语言的特征;C 语言是结构化程序设计语言,具有结构化的程序控制语句;C语言有各种各样的数据类型;C语言可移植性好;生成目标代码质量高,程序执行效率高。

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);}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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);}}。

相关文档
最新文档