第11章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程序设计教程》第十、十一章部分习题答案-推荐下载
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);

面向对象的C++程序设计 第六版 课后习题答案 第十一章

面向对象的C++程序设计 第六版 课后习题答案 第十一章
overload << and >> to allow writing to screen in form 325/430
and reading it from the keyboard in the same format.
Notes: either n or d may contain a negative quantity.
overload + - * / < <= > >= ==
Put definitions in separate file for separate compilation
Test program required.
// file rational.h
#ifndef RATIONAL_H_
#define RATIONAL_H_
{
return Pair(lhs.f + rhs.f, lhs.s + rhs.s);
}
Pair operator*(const Pair& lhs, int rhs)
{
return Pair(lhs.f * rhs, lhs.s * rhs);
}
istream& operator>> (istream& ins, Pair& second)
}
int Pair::accessFirst(){ return f; }
int Pair::accessSecond(){ return s; }
Sample run
0
0
2
3
4
0
x (0, 0)
y (2, 3)
z (4, 0)

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语言可移植性好;生成目标代码质量高,程序执行效率高。

ly_新标准C++程序设计教材11-20章课后题答案

ly_新标准C++程序设计教材11-20章课后题答案

新标准C++程序设计教材11-20章课后题答案第11章:1.简述结构化程序设计有什么不足,面向对象的程序如何改进这些不足。

答案:结构化程序设计的缺点:(1)用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。

(2)用系统开发每个阶段的成果来进行控制,不适应事物变化的要求。

(3)系统的开发周期长。

面向对象的程序设计如何改进这些不足:面向对象程序设计技术汲取了结构忧程序设计中好的思想,并将这些思想与一些新的、强大的理念相结台,从而蛤程序设计工作提供了一种全新的方法。

通常,在面向对象的程序设计风格中,会将一个问题分解为一些相互关联的子集,每个子集内部都包含了相关的数据和函数。

同时会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型的变量。

2.以下说怯正确的是( )。

A.每个对象内部都有成员函数的实现代码B.一个类的私有成员函数内部不能访问本类的私有成员变量C.类的成员函数之间可以互相调用D.编写一个类时,至少要编写一个成员函数答案:C3.以下对类A的定义正确的是( )。

A.class A{ B.class A{private: int v; int v; A * next;public: void Func() {} void Func() {}} };C.class A{ D. class A{int v; int v;public:public:void Func(); A next;}; void Func() {}A::void Func() { } };答案:B4.假设有以下类A:class A{public:int func(int a) { return a * a; }};以下程序段不正确的是( )。

A.A a; a.func(5);B.A * p = new A; p->func(5);C.A a;A&r =a ; r.func(5);D.A a,b; if(a!=b) a.func(5);答案:D5.以下程序段不正确的是(A)。

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

ly_新标准C++程序设计教材11-20章课后题答案

ly_新标准C++程序设计教材11-20章课后题答案

新标准C++程序设计教材11-20章课后题答案第11章:1.简述结构化程序设计有什么不足,面向对象的程序如何改进这些不足。

答案:结构化程序设计的缺点:(1)用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。

(2)用系统开发每个阶段的成果来进行控制,不适应事物变化的要求。

(3)系统的开发周期长。

面向对象的程序设计如何改进这些不足:面向对象程序设计技术汲取了结构忧程序设计中好的思想,并将这些思想与一些新的、强大的理念相结台,从而蛤程序设计工作提供了一种全新的方法。

通常,在面向对象的程序设计风格中,会将一个问题分解为一些相互关联的子集,每个子集内部都包含了相关的数据和函数。

同时会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型的变量。

2.以下说怯正确的是( )。

A.每个对象内部都有成员函数的实现代码B.一个类的私有成员函数内部不能访问本类的私有成员变量C.类的成员函数之间可以互相调用D.编写一个类时,至少要编写一个成员函数答案:C3.以下对类A的定义正确的是( )。

A.class A{ B.class A{private: int v; int v; A * next;public: void Func() {} void Func() {}} };C.class A{ D. class A{int v; int v;public:public:void Func(); A next;}; void Func() {}A::void Func() { } };答案:B4.假设有以下类A:class A{public:int func(int a) { return a * a; }};以下程序段不正确的是( )。

A.A a; a.func(5);B.A * p = new A; p->func(5);C.A a;A&r =a ; r.func(5);D.A a,b; if(a!=b) a.func(5);答案:D5.以下程序段不正确的是(A)。

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章位运算

第11章位运算第11章位运算11.1 选择题11.1 以下运算符中优先级最低的是【1】,优先级最高的是【2】。

A) && B) & C)||D)|11.2 若有运算符<<, sizeof ,^, &=,则它们按优先级由高至低的正确排列次序是____。

A) sizeof, &=, <<, ^ B) sizeof, <<, ^ , &=C) ^, <<, sizeof, &= D) <<, ^, &=, sizeof11.3 在C语言中,要求运行数必须是整型的运算符是____。

A) ^ B) % C) ! D) >11.4 在C语言中,要求运行数必须是整型或字符型的运算符是____。

A) && B) & C) ! D) ||11.5 sizeof(float)是____。

A) 一种函数调用B) 一个不合法的表示形式C) 一个整型表达式D) 一个浮点表达式11.6 表达式aA) ~, &, <, || B) ~, ||, &, <C) ~, &, ||, < D) ~, <, &, ||11.7 以下叙述不正确的是_____。

A) 表达式a&=b等价于a=a&b B) 表达式a|=b等价于a=a|bC) 表达式a!=b等价于a=a!b D) 表达式a^b等价于a=a^b11.8 表达式0x13&0x17的值是_____。

A) 0x17 B) 0x13 C) 0xf8 D) 0xec11.9 请读程序片段:char x=56;x=x&056;printf(“%d,%o\n”, x, x);以下程序片段的输出结果是_____。

A) 56, 70 B) 0, 0 C) 40, 50 D) 62, 7611.10 若x=2,y=3则x&y的结果是_____。

《C Primer Plus》第六版 第十一章编程练习答案

《C Primer Plus》第六版 第十一章编程练习答案

1#include<stdio.h>#include<string.h>#define SIZE 100void input(char *, int );int main(void){char arr[SIZE];int n;puts("input the number of n:");scanf("%d", &n);getchar();puts("input your string: ");input(arr, n);printf("%s\n", arr);getchar();return 0;}void input(char *Arr, int len){int i;for (i=0; i<len; i++){*(Arr+i)=getchar();}*(Arr+i)='\0';while(getchar() !='\n'){continue;}}2.#include<stdio.h>#include<string.h>#define SIZE 100void input(char *, int );int main(void){char arr[SIZE];int n;puts("input the number of n:");scanf("%d", &n);getchar();puts("input your string: ");input(arr, n);puts(arr);getchar();return 0;}void input(char *Arr, int len){int i;for (i=0; i<len; i++){*(Arr+i)=getchar();if (*(Arr+i) ==' ' || *(Arr+i)=='\t'|| *(Arr+i)== '\n'){break;}}*(Arr+i)='\0';while(getchar() !='\n'){continue;}}3.#include<stdio.h>#include<string.h>#define SIZE 100void input(char * );int main(void){char arr[SIZE];puts("input your string: ");input(arr);puts(arr);getchar();return 0;}void input(char *Arr){char ch;int i=1;do{ch=getchar();}while(ch ==' ' || ch =='\t' || ch =='\n');Arr[0]=ch;while( (ch=getchar()) &&( ch!=' '&&ch!='\t'&&ch!='\n')) {Arr[i]=ch;i++;}Arr[i]='\0';while (getchar()!='\n'){continue;}}4.#include<stdio.h>#include<string.h>#define SIZE 100void input(char *, int);int main(void){char arr[SIZE];int n;puts("input the number of n:");scanf("%d", &n);puts("input your string: ");input(arr, n);puts(arr);getchar();return 0;}void input(char *Arr, int len){char ch;int i=1;do{ch=getchar();}while(ch ==' ' || ch =='\t' || ch =='\n');Arr[0]=ch;while( (ch=getchar()) &&( ch!=' '&&ch!='\t'&&ch!='\n') &&i<len) {Arr[i]=ch;i++;}Arr[i]='\0';while (getchar()!='\n'){continue;}}5.#include<stdio.h>#include<string.h>#define SIZE 100char *find(char *, char);int main(void){char arr[SIZE];char ch;char *ps;while(1){puts("input a string:");fgets(arr, 100, stdin);puts("input a character:");ch=getchar();ps=find(arr, ch);if(ps){puts("Find the character!");}else{puts("Con't find the charcter!");}getchar();}getchar();return 0;}char *find(char *Arr, char c){int len=strlen(Arr);char *p=Arr;int i;for (i=0; i<len; i++){if (c== *p){return p;}p++;}if (i==len){return NULL;}return 0;}6.#include<stdio.h>#include<string.h>#define SIZE 100int is_within(char *, char);int main(void){char arr[SIZE];char ch;int re;while(1){puts("input a string:");fgets(arr, 100, stdin);puts("input a character:");ch=getchar();re=is_within(arr, ch);if(re){puts("Find the character!");}else{puts("Con't find the charcter!");}getchar();}getchar();return 0;}int is_within(char *Arr, char c){int len=strlen(Arr);char *p=Arr;int i;for (i=0; i<len; i++){if (c== *p){return 1;}p++;}if (i==len){return 0;}else{return -1;}}7.#include<stdio.h>#include<string.h>#define SIZE 20char *mystrncpy(char *, char *, int ); int main(void){char s1[SIZE];char s2[SIZE];char *ps;int n;while(1){puts("input string s2:");gets(s2);puts("input string s1:");gets(s1);puts("Input the number of n:");scanf("%d", &n);ps=mystrncpy(s1,s2, n );puts("After copy:");puts(ps);getchar();}getchar();return 0;}char *mystrncpy(char *dst, char *src, int len) {int i;char *p1, *p2;int L=strlen(src);p2=src;p1=dst;for (i=0; i<(L<len? L:len); i++){*(p1+i)=*(p2+i);}return p1;}8.#include<stdio.h>#include<string.h>#define SIZE 20char *string_in(char *, char * );int main(void){char s1[SIZE];char s2[SIZE];char *ps;while(1){puts("input string s2:");gets(s2);puts("input string s1:");gets(s1);ps=string_in(s1,s2);if (ps){puts("Find it!");}else{puts("Con't find it!");}getchar();}getchar();return 0;}char *string_in(char *s1, char *s2){int len1, len2;int i, j, temp;char *p1=s1;char *p2=s2;len1=strlen(s1);len2=strlen(s2);if (*p1=='\0' || *p2 =='\0') return NULL;for (i=0; i<=(len1-len2); i++){temp=i;j=0;while(p2[j]!='\0'&& p1[temp]==p2[j]){temp++;j++;}if (j==len2) return(p1+temp);}if (i>(len1-len2)) return NULL;}9#include<stdio.h>#include<string.h>#define SIZE 20void fun(char *);int main(void){char arr[SIZE];while(1){puts("input a string:");gets(arr);fun(arr);puts(arr);getchar();}getchar();return 0;}void fun(char *Arr){char *p=Arr;int len=strlen(Arr);int i;char ch;for (i=0; i<len/2; i++){ch=p[i];p[i]=p[len-i-1];p[len-i-1]=ch;}}10#include<stdio.h>#include<string.h>#define SIZE 20void fun(char *);int main(void){char arr[SIZE];while(1){puts("input a string:");gets(arr);if (arr[0]=='\n') break;fun(arr);puts(arr);getchar();}getchar();return 0;}void fun(char *Arr){int i, j;char temp[SIZE];i=j=0;while(Arr[i]!='\0'){if (Arr[i]!=' '){temp[j]=Arr[i];j++;}i++;}strcpy(Arr, temp);Arr[j]='\0';}11.#include<stdio.h>#include<string.h>#define SIZE 20#define LIM 3void display(char *String[]); void Ascii( char *String[]); void Length(char*String[]); void FirstC(char*String[]); int First_word(char String[]);int main(void){char input[LIM][SIZE];char ch;char*ptr[LIM];while (1){int ct=0;puts("please input 10 strings:");while (ct<LIM ){gets(input[ct]);ptr[ct]=input[ct];ct++;}puts("*********************************************");puts("a. print the original strings:");puts("b. print the strings with ASCII order:");puts("c. print the strings with length order:");puts("d. print the strings with first character order:");puts("e. quit.");puts("**********input your choice ***********");ch=getchar();switch (ch){case'a':display(ptr); break;case'b':Ascii(ptr); break;case'c':Length(ptr); break;case'd':FirstC(ptr); break;default:return 0;}getchar();}getchar();return 0;}void display(char *String[]){int i;for (i=0; i<LIM; i++){puts(String[i]);}}void Ascii(char *String[]){char *p;int i,j;for (i=0; i<LIM; i++){for (j=0; j<LIM-i-1; j++){if (strcmp(String[j], String[j+1])>0){p=String[j];String[j]=String[j+1];String[j+1]=p;}}}display(String);}void Length(char *String[]){char *p;int i,j;for (i=0; i<LIM; i++){for (j=0; j<LIM-i-1; j++){if (strlen(String[j])>strlen(String[j+1])){p=String[j];String[j]=String[j+1];String[j+1]=p;}}}display(String);int First_word(char String[]){int i=0;while (String[i] != ' '){i++;}return i;}void FirstC(char *String[]){char *p;int i,j;for (i=0; i<LIM; i++){for (j=0; j<LIM-i-1; j++){if (First_word(String[j])>First_word(String[j+1])){p=String[j];String[j]=String[j+1];String[j+1]=p;}}}display(String);}12#include<stdio.h>#include<string.h>#include<ctype.h>int main(void){int ch;int word, large, small, punctuation, num, begin;word=large=small=punctuation=num=begin=0;while( (ch=getchar()) != EOF){if (isdigit(ch)){num++;}if(ispunct(ch)){punctuation++;}if (isupper(ch)){large++;}if (islower(ch)){small++;}if ( isalpha(ch)){if (begin==0){word++;begin=1;}}else{begin=0;}}printf("words=%d, large=%d, small=%d, punc=%d, num=%d\n", word, large, small, punctuation, num);getchar();return 0;}13.#include<stdio.h>#include<string.h>void Reverse(char *, int );int main(void){char str[100];int len;puts("Enter a string:");gets(str);len=strlen(str);Reverse(str, len);getchar();return 0;}void Reverse(char *str, int n) {int i;char ch;for (i=0; i<n/2; i++){ch=str[i];str[i]=str[n-i-1];str[n-i-1]=ch;}for (i=0; i<n; i++){putchar(str[i]);}putchar('\n');}14.#include<stdio.h>#include<stdlib.h>#include<math.h>int main(int argc, char *argv[]) {double number, value;int p;printf("The command lines has %d arguments:\n", argc-1);number=atoi(argv[1]);p=atoi(argv[2]);value=pow(number, p);printf("the result=%lf\n", value);getchar();return 0;}15.#include<stdio.h>#include<math.h>#include<string.h>#include<ctype.h>int myatoi(char *);int main(int argc, char *argv[]){char str[50]={0};int re;while(gets(str)){re=myatoi(str);printf("number=%d\n", re);}getchar();return 0;}int myatoi(char *p){int len=strlen(p);int i;int n=0;for (i=0; i<len; i++){if (!isdigit(p[i])){return 0;}else{n=n*10+(p[i]-'0');}}return n;}16.#include<stdio.h>#include<math.h>#include<string.h>#include<ctype.h>int main(int argc, char *argv[]){char ch;if (argv[1][0]=='-'){if (argv[1][1]=='l'){while ((ch=getchar())!=EOF){putchar(tolower(ch));}}elseif (argv[1][1]=='u'){while ((ch=getchar())!=EOF){putchar(toupper(ch));}}else{while ((ch=getchar())!=EOF){putchar(ch);}}}getchar();return 0; }。

C++Primer第5版第十一章课后练习答案

C++Primer第5版第十一章课后练习答案

C++Primer第5版第⼗⼀章课后练习答案练习11.1map和vector相⽐是通过关键字⽽不是位置来查找值。

练习11.2list:需要在中间进⾏操作的情况。

vector:若没有必要使⽤其他容器则优先使⽤deque:只需要在头尾进⾏操作的情况map:字典set:key-value相同的集合练习11.3int main(int argc, char* argv[]){map<string, size_t> word_count;string word;while (cin >> word) {++word_count[word];}for (const auto& w : word_count) {cout << w.first << "" << w.second << endl;}}练习11.4int main(int argc, char* argv[]){map<string, size_t> word_count;string word;while (cin >> word) {word.erase(remove_if(word.begin(), word.end(), [](char& c) {if (isupper(c)) { tolower(c); } return ispunct(c); }));++word_count[word];}for (const auto& w : word_count) {cout << w.first << "" << w.second << endl;}}练习11.5map是关键字-值对的集合,set是关键字的集合,看使⽤场景需要key-value还是key集合练习11.6set是关联容器,进⾏查找、修改操作效率⾼list是顺序容器,插⼊删除操作效率低,随机访问速度慢练习11.7int main(int argc, char* argv[]){map<string, vector<string>> familys;string surname, name;while (cin >> surname>> name) {familys[surname].emplace_back(name);}for (const auto& f : familys) {cout << f.first << ":";for (const auto& n : f.second) {cout << n << "";}cout << endl;}}练习11.8int main(int argc, char* argv[]){vector<string> words;string word;while (cin >> word) {words.emplace_back(word);}auto it = unique(words.begin(), words.end());words.erase(it, words.end());}set查找速度快练习11.9map<string, list<size_t>> m;练习11.10不能,因为map所提供的操作必须在关键字类型上定义⼀个严格弱序,⽽迭代器之间是⽆法⽐较的练习11.11int main(int argc, char* argv[]){typedef bool (*Comp)(const Sales_data&, const Sales_data&);//和decltype(compareIsbn)*等价multiset<Sales_data, Comp>bookStore(Comp);}练习11.12int main(int argc, char* argv[]){vector<string>str_vec(10);vector<int> i_vec(10);vector<pair<string, int>> psi1;vector<pair<string, int>> psi2;vector<pair<string, int>> psi3;string str, int num;for (auto i = 0; i < 10; ++i) {cin >> str >> num;str_vec.emplace_back(str);i_vec.emplace_back(num);}for (auto i = 0; i < 10; ++i) {psi1.push_back({ str_vec[i],i_vec[i] });psi1.emplace_back(pair<string, int>(str_vec[i], i_vec[i]));psi1.emplace_back(make_pair(str_vec[i], i_vec[i]));}}练习11.13int main(int argc, char* argv[]){vector<string>str_vec(10);vector<int> i_vec(10);vector<pair<string, int>> psi1;vector<pair<string, int>> psi2;vector<pair<string, int>> psi3;string str, int num;for (auto i = 0; i < 10; ++i) {cin >> str >> num;str_vec.emplace_back(str);i_vec.emplace_back(num);}for (auto i = 0; i < 10; ++i) {psi1.push_back({ str_vec[i],i_vec[i] });//不能⽤emplace_back来进⾏pair的列表初始化psi1.emplace_back(pair<string, int>(str_vec[i], i_vec[i]));psi1.emplace_back(make_pair(str_vec[i], i_vec[i]));}}练习11.14int main(int argc, char* argv[]){map<string, vector<pair<string, string>>> familys;string surname, name, birthday;while (cin >> surname >> name>>birthday) {familys[surname].emplace_back(make_pair(name, birthday));}for (const auto& f : familys) {cout << f.first << ":";for (const auto& n : f.second) {cout << n.first << "'s birthday is "<<n.second<<"";}cout << endl;}}练习11.15mapped_type:vector<int>key_type:intvalue_type:pair<const int,vector<int>>练习11.16int main(int argc, char* argv[]){map<int, int>i_i_map;auto it = i_i_map.begin();(*it).second = 5;}练习11.17copy(v.begin(), v.end(), inserter(c, c.end()));//调⽤insert成员函数插⼊到multiset尾后迭代器之前copy(v.begin(), v.end(), back_inserter(c));//multiset没有push_back成员函数,因此⽆法使⽤copy(c.begin(), c.end(), inserter(v,v.end()));//调⽤insert成员函数插⼊到vector尾后迭代器之前copy(c.begin(), c.end(), back_inserter(v));//调⽤push_back成员函数插⼊到vector尾后迭代器之前练习11.18map<string,size_t>::iterator练习11.19int main(int argc, char* argv[]){typedef bool (*Comp)(const Sales_data&, const Sales_data&);//和decltype(compareIsbn)*等价multiset<Sales_data, Comp>bookStore(compareIsbn);multiset<Sales_data, Comp>::iterator it = bookStore.begin();}练习11.20int main(int argc, char* argv[]){map<string, size_t> word_count;string word;while (cin >> word) {auto ret = word_count.insert({ word,1 });if (!ret.second)++ret.first->second;}for (const auto& w : word_count) {cout << w.first << "" << w.second << endl;}}//下标操作更容易编写和阅读练习11.21输⼊word,并将其设置为关键字插⼊到容器中,对应的值为0,然后对值进⾏递增,若此时容器中已有重复关键字则直接对该关键字对应的值进⾏递增。

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)种算法。

11C语言程序综合实训

11C语言程序综合实训

返 回
11.2 应用程序设计实例
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n"); for(i=0;i<N;i++) {printf("%s\t%s\t",stu[i].num,stu[i].name); for(j=0;j<3;j++) printf("%d\t",stu[i].score[j]); printf("%.2lf\n\n",stu[i].av); } printf(" \t \t"); /*输出各科平均成绩*/ for(i=0;i<3;i++) printf("%.2lf\t",all[i]); printf("\n\n"); fclose(fp); } 上一页 下一页
for(i=0;i<N;i++) {printf("%s\t%s\t",s[i].num,s[i].name);
上一页
下一页
返 回
11.2 应用程序设计实例
for(j=0;j<3;j++) printf("%d\t",s[i].score[j]); printf("%.2lf\n",stu[i].av); printf("\n"); } fclose(fp); } void average() /*计算每个学生的平均成绩并输出*/ { int i,j,sum; FILE *fp; fp=fopen("stud","rb"); 上一页 下一页 返 回
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
般使用字符文件,他们可以方便,快捷的通过显示器或打印机直接输出。
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);
printf("\tsid:\t");scanf("%s",stu[i].sid);
printf("\tname:\t");scanf("%s",stu[i].name);
for(i=0;i<n;i++)
fwrite(&stu1[i],sizeof(struct student),1,fp);
fclose(fp);
}
12、

一般的说,二进制文件节省存储空间,并且在输入时不需要把字符代码先转化成二进制代码形式再送入内存,
在输出时也不需要把数据由二进制代码转化成字符代码再输出,因而输入输出速度快。用户程序在实用中,从
节省时间和空间的要求考虑,一般选用二进制文件。但是,如果用户准备的数据是作为文档使用阅读时,则一
if((p=fopen(file.c,"w"))==NULL)
{ printf("cannot open file.\n");
exit(1);
}
ch=getch();
while(ch!='#')
{ if(ch>=65&&ch<=90)ch+=32;fputc(ch,p);putchar(ch);ch=getchar();}
{ if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)/*该班各门课程总分还没有输入文件*/
printf("file write error.\n");
fclose(fp);
}
}
11、
#include<stdio.h>
fclose(p);
}
7、
#include<stdio.h>
void main()
{ FILE *fp;
int i,j,n,k;
char x[160],ch,t;
if((fp=fopen("file1","r"))==NULL)
{ printf("Can't open file1\n");
3: /*C语言标准的I/O接口操作提供了几种文件存取方式?每种方式各有什么特点?*/
答: 标准I/O提供了4种文件存取方法:
(1):读写一个字符。
(2):读写一个字符串,将多个字符组成的字符串写入文件或从文件中读出。
(3):格式化读写,根据格式控制指定的数据格式对数据进行转换存取。
int score[3];
float ave;
}stu[100];
void main()
{ int i,j,n,sum=0,all[3]={0};
FILE *fp;
printf("How many student you want to input?: ");
scanf("%d",&n);
文件返回一个FILE结构体指针,指向该文件的FILE结构体变量。所以,文件型指针就是指向文件的FILE结构体变量的
指针。
通过文件指针访问文件,也即用FILE结构体变量成员,比较方便。
5: (1) [1]: fopen(fname,"w")
[2]: ch
[3]: fclose(fp)
(2) [1]: "r+"
[2]: str[i]-32
[3]: "r"
6、
#include<stdio.h>
main()
{ FILE *p;
char ch;
struct student
{ char sid[15];
char name[15];
int score[3];
float ave;
}stu1[100],change;
main()
{ FILE *fp;
int i,j,n,k;
if((fp=fopen("stud1","rb"))==NULL)
if(k!=i)
{ t=x[i];x[i]=x[j];x[j]=t;}
}
if((fp=fopen("file3","w"))==NULL)
{ printf("Can't open file3\n");
exit(1);
}
for(i=0;i<n;i++)
(4):成块读写,也称做按记录读写。C语言的文件虽然是按字节流存放,但可以按记录存取多个字节的数据。
4:/*什么是文件型指针?通过文件指针访问文件有什么好处?*/
答: 系统定义FILE结构体类型,建立文件相当于定义了一个FILE结构体变量,该结构体变量存放文件的有关信息。打开
exit(1);
}
while((ch=fgetc(fp)!=EOF))
{ x[i]=ch;
i++;
}
n=i;
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if(x[i]>x[j]) k=j;
{ if(str>=97&&str<=122)
str-=32;
fputc(str,stdout);
}
fclose(fp);
}
10、
#include<stdio.h>
struct student
{ char sid[15];
char name[15];
}
stu[i].ave=sum/3.0;
}
if((fp=fopen("stud1","wb"))==NULL)/*文件以二进制形式打开*/
{ printf("Can't open stud file\n");
exit(1);
}
for(i=0;i<n;i++)
sum=0;
for(j=0;j<3;j++)
{ printf("%d score:\t",j+1);
scanf("%d",&stu[i].score[j]);
sum=sum+stu[i].score[j];/*各个同学的总分*/
all[j]+=stu[i].score[j];/*该班各门课程的总分*/
{ printf("Can't open file\n");
exit(1);
}
for(i=0;fread(&stu1[i],sizeof(struct student),1,fp)!=1;i++)
fclose(fp);
n=i;
for(i=0;i<n-1;i++)
1: /*c语言数据文件有几种存储形式?每种存储形式个有什么特点?*/
答:在C语言使用的文件系统中,数据文件的数据存储形式有两种:一种以字符形式存放,这种文件称为字符文件
,也称为文本文件或者是正文文件;另外一种是以二进制代码形式存放,这种文件称为二进制文件。
exit(1);
}
for(i=0;(ch=fgetc(fp))!=EOF;i+源自) { x[i]=ch;
相关文档
最新文档