C程序设计第三版第十章题解
C程序设计(第三版)章 (10)

第十章 文件
在C语言中文件的含义更为广泛,不仅包含以上所述 的磁盘文件,还包括一切能进行输入/输出的终端设备,它 们被看成是设备文件。如键盘常称为标准输入文件,显示 器称为标准输出文件。
文件是由磁盘文件和设备文件组成的。作为磁盘文件 之一的数据文件是本章学习的主要对象。
第十章 文件
根据文件内数据的组织形式, 文件可分为文本(text) 文件和二进制文件。 文本文件又称为ASCII码文件, 这种文件在磁盘中存放时每个字节存放一个字符的ASCII 码。 ASCII码文件可在屏幕上按字符显示, 文件的内容可 以通过编辑程序(如记事本等)进行建立和修改, 人们能读 懂文件内容。 但是ASCII码文件所占存储空间较多, 处理 时要花费转换时间(内存中的二进制形式与ASCII码之间的 转换)。
缓冲文件系统中,关键的概念是文件指针。
第十章 文件
通常,由于文件中的数据很多,因此读/写时应该指明 对哪个数据进行操作。流式文件中采用的方法是设立一个 专门用来存放文件读/写位置的变量,称为当前工作指针。 在对某文件开始进行操作时,将当前工作指针的值设置为 0,表示文件从头开始读(写); 每次读(写)之后,自动将当 前工作指针的值加上本次读(写)的字节数,作为下次读(写) 的位置。从前面的介绍可以看出,要对一个文件进行操作, 除了要设当前工作指针,还必须管理缓冲区。实际上,在 头文件stdio.h中,定义了一个名为FILE的类型,包含了所 有与文件操作有关的数据成员,这个文件类型是文件处理 的基础。文件类型FILE不是C语言的新类型,它是用 typedef定义出来的有关文件信息的一种结构体类型。如 Turbo C的stdio.h文件中有如下的定义:
第十章 文件
数据流可分为文字流和二进制流。 一个文字流是一行行的字符,换行符表示这一行的结 束。文字流中某些字符的变换由环境工具的需要来决定。 例如一个换行符可以变换为回车换行两个字符。因此所读 /写的字符与外部设备中的数据没有一一对应的关系。 一个二进制流是由与外部设备中的数据一一对应的一 系列字节组成的。使用中没有字符翻译过程,而且所读/ 写的字节数目也与外部设备中的数目相同。
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语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
c语言程序设计教程第三版习题答案

c语言程序设计教程第三版习题答案C语言程序设计教程第三版习题答案第一章:C语言概述1. 简述C语言的特点。
C语言是一种结构化编程语言,具有高级语言的特点,同时支持底层硬件操作。
其特点包括:简洁、高效、可移植、丰富的运算符、数据结构支持、广泛的库函数等。
2. 什么是编译型语言?编译型语言是指源代码在执行前需要通过编译器转换成机器语言的程序设计语言。
C语言就是一种编译型语言。
第二章:数据类型、运算符和表达式1. 列出C语言的基本数据类型。
C语言的基本数据类型包括:整型(int)、字符型(char)、浮点型(float和double)。
2. 说明赋值运算符的用法。
赋值运算符(=)用于将右侧表达式的值赋给左侧的变量。
例如:`int a = 10;` 将整数值10赋给变量a。
第三章:控制结构1. 什么是条件语句?条件语句用于根据条件的真假来执行不同的代码块。
C语言中的条件语句主要有if语句和switch语句。
2. 循环语句有哪些?C语言中的循环语句主要有for循环、while循环和do-while循环。
第四章:数组和字符串1. 数组的声明和初始化方式。
数组声明的一般形式为:`type arrayName[arraySize];`。
初始化可以使用花括号一次性赋值,如:`int arr[5] = {1, 2, 3, 4, 5};`。
2. 字符串在C语言中的表示方法。
在C语言中,字符串以字符数组的形式存在,以空字符('\0')作为结束标志。
第五章:函数1. 函数的定义和调用。
函数定义的一般形式为:`returnTypefunctionName(parameterList) { /* function body */ }`。
调用函数时,使用其名称和必要的参数。
2. 函数的参数传递方式有哪些?C语言中函数的参数传递方式主要有值传递(pass by value)和引用传递(pass by reference)。
C#程序设计第十章课后习题答案

单选:(1).NET中的大多数控件都派生于(C)类A. ClassB. FromC. ControlD. Object(2)在以下控件中,可用于输入数据的是(B)A. LabelB. TextBoxC. ButtonD. PictureBox(3)在以下控件中,可实现多项选择的是(A)A. CheckBoxB.RadioButtonboBoxD.NumericUpDown(4)不属于容器控件的是(C)A. GroupBoxB.PanelC.MenuStripD.TapControl(5)(B)控件组合了TextBox控件和ListBox控件的功能。
belboBoxC.ProgressBarD.PictureBox(6)让控件不可以使用的属性是以下哪一个?BA. AllowDropB.EnabledC.BoundsD.Visible(7)让控件不可显示的属性是以下哪一个?DA. AllowDropB.EnabledC.BoundsD.Visible(8)不能用于设置控件布局位置的属性是(C)A.LeftB.TopC.SizeD.Location(9)可用来设置文字颜色的属性是(B)A. BackColorB.ForeColorC.TextD.Parent(10)TextBox控件的(B)属性将输入的字符代替显示为指定的密码字符。
A. TextB.PasswordCharC.TextAlignD.Multiline(11)所有控件都一定具有的属性是(D)A.TextB.BackColorC.Items(12)当用户鼠标左键单击窗体或控件系统将触发(D)事件A. ActivatedB.LoadC.DoubleClickD.Click(13)用户修改了文本框中的内容时,系统将触发(A)事件。
A .xtChanged B.CheckedChanfed C.SelectedIndexChanged D.SizeChanged(14)在列表框或组合框中,当用户重新选择另一个选项时,系统将触发(C)事件。
C语言程序设计第三版谭浩强课后习题答案完整版

C语言程序设计第三版谭浩强课后习题答案完整版第一章1.5请参照本章例题,编写一个C程序,输出以下信息:**************************Very Good!**************************解:mian(){printf(“**************************”);printf(“\n”);printf(“Very Good!\n”);printf(“\n”);printf(“**************************”);}1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。
解:mian(){int a,b,c,max;printf(“请输入三个数a,b,c:\n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf(“最大数为:“%d”,max);}第三章3.6写出以下程序运行的结果。
main(){char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);printf(“\t\b%c %c”,c4,c5);}解:aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabcAㄩN3.7要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E"."E"代替"A"。
因此,"China"应译为"Glmre"。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
C++程序设计第三版(谭浩强)第十章习题答案

void Complex::display()
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
int main()
{Complex c1(3,4),c2(5,-10),c3;
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
return 0;
}
10.3 题
#include <iostream> //用 VC++时改为∶ #include
Complex operator+(int &i,Complex &c)
{return Complex(i+c.real,c.imag);}
int main()
{Complex c1(3,4),c2(5,-10),c3;
int i=5;
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
《C语言程序设计教程》(第三版)李凤霞 主编——第十章习题答案

习题十一、单选题1~5 DDDCC6~10 AABDB11~14 CADC二、填空题1、34 122、ARRAY a,b,c;3、1 34、a c5、(*b).day=? b->day=?5、分析下列程序执行结果。
#include “stdio.h”main(){static struct s1{char c[4],*s;s1={“abc”,”def”};static struct s2{char *cp;struct s1 ss1;}s2={“ghi”,{“jkl”,”mno”}};printf(“%c%c\n”,s1.c[0],*s1.s); /*output ab */printf(“%s%s\n”,s1.c,s1.s); /*output abcdef */printf(“%s%s\n”,s2.cp,s2.ss1.s); /*output ghimno */printf(“%s%s\n”,++s2.cp,++s2.ss1.s); /* output hino */}6、以下程序的功能是:读入一行字符(如:a,...,y,z),按输入时的逆序建立一个链式的结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。
#define getnode(type)_________malloc(sizeof(type)) ( (struct node *))main(){struct node{char info;struct node *link;}*top,*p;char c;top=NULL;while((c=getchar())______________) (!='\n'){p=getnode(struct node);p->info=c;p->link=top;top=p;}while(top){_________________; (p=top)top=top->link;putchar(p->info);free(p);}}7、下面的函数将指针p2所指向的线性链表链接到p1所指向的的链表的末端。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十章指针10.1 输入3个整数,按照从小到大的顺序输出#include<stdio.h>void main(){void swap(int *p1, int *p2);int n1,n2,n3;int *p1,*p2,*p3;printf("input three integer:");scanf_s("%d,%d,%d",&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2) swap(p1,p2);if(n1>n3) swap(p1,p3);if(n2>n3) swap(p2,p3);printf("the order: %d,%d,%d\n",n1,n2,n3); }void swap(int *p1, int *p2){int temp;temp=*p1;*p1=*p2;*p2=temp;}NOTE:scanf的参数为地址,printf参数为参数10.2输入三个字符串,按照从小到大的顺序输出#include<stdio.h>#include<string.h>void main(){void swap(char *p1, char *p2);char str1[20],str2[20],str3[20];printf("input three string:");gets_s(str1);gets_s(str2);gets_s(str3);if(strcmp(str1,str2)) swap(str1,str2);if(strcmp(str1,str3)) swap(str1,str3);if(strcmp(str2,str3)) swap(str2,str3);printf("the order: %s,%s,%s\n",str1,str2,str3);}void swap(char *p1, char *p2){char temp[20];strcpy(temp,p1);strcpy(p1,p2);strcpy(p2,temp);}NOTE:gets()用于获取字符串输入。
strcmp() 和strcpy()的应用10.3 输入10个整数,将其中最小的数和第一个数对换,把最大的数和最后一个数对换,写三个函数:①输入十个数;②进行处理;③输出十个数#include<stdio.h>void main(){void input(int *);void output(int *);void proceed(int *);int number[10];input(number);proceed(number);output(number);}void input(int *number){int i;printf("input ten integer:\n");for (i=0;i<10;++i){scanf("%d",&number[i]);}}void proceed(int *number)int i,*min,*max,temp;min=max=&number[0];for (i=0;i<10;++i){if (*min>number[i])min = &number[i];if(*max<number[i])max= &number[i];}temp= number[0];number[0]=*min;*min= temp;temp= number[9];number[9]=*max;*max= temp;}void output(int *number){int i;printf("After Proceeding,these numbers are\n");for (i=0;i<10;++i){printf("%d\n",number[i]);}}NOTE:对于只是改变部分数值,而不是单单取出某个数值,必须要利用指针,获取对应的地址,在将地址对于的数据进行交换操作,交换一般用temp保存中间数据10.4 有n个整数,使前面各数顺序向后移m个位置,最后m个数字变成最前面的m个数字。
写一个函数实现此功能,在主函数中输入n个数字和输出调整后的n个数字#include<stdio.h>void main(){void move(int *number,int n,int m);int n,m,number[20];printf("input the total number(n<=20):êo");scanf("%d",&n);printf("input these %d numbers\n",n);for(int i=0;i<n;++i)scanf("%d",&number[i]);printf("input the number you want to move backward:");scanf("%d",&m);if (m>n)printf("m must <=n,input a new m:");scanf("%d",&m);}move(number,n,m);printf("After moving,these numbers are:");for (int i=0;i<n;++i)printf("%d ",number[i]);}void move(int *number,int n,int m){int *p,number_end;number_end = *(number+n-1);for (p=number+n-1;p>number;p--)*p=*(p-1);*number=number_end;m--;if(m>0) move(number,n,m);} //后移m位函数10.5有n个人围成一圈,顺序排号。
第一个人开始报数(从1到3报数),凡报道3的人退出圈子,问最后留下来的是原来的几号。
算法思路:先给n个数字标上号,当一个编号报数到3,则将其置零,不断报数,同时用一个数字记录推出人数,当退出人数m<n-1时候,则置零完成,在遍历,找到没有置零的那个,输出即可#include<stdio.h>void main(){int n,number[50],*p;printf("how many students? ");scanf_s("%d",&n);p=number;for (int i=0;i<n;++i)*(p+i)=i+1;int i=0;int baoshu=0;int number_quit=0;while (number_quit<n-1)if(*(p+i)!=0) baoshu++;if(baoshu==3){*(p+i)=0;baoshu=0;number_quit++;}i++;if(i==n) i=0;}while(*p==0) p++;printf("the last number left in the circle is:%d",*p);}10.6写一个函数,求一个字符串的长度,在main中输入字符串,并输出长度#include<stdio.h>void main(){void strlength(char *);char str[50];printf("input the string\n");scanf_s("%s",str);strlength(str);}void strlength(char *str){int count=0;char *p;p=str;while(*p != '\0'){count++;p++;}printf("%d",count);}10.7有一字符串,包含n个字符,写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串#include<stdio.h>void main(){void strcopy_from_m(char *str,int m);char str[50];int m;printf("input the string\n");gets_s(str);printf("input the number m:\n");scanf_s("%d",&m);strcopy_from_m(str,m);}void strcopy_from_m(char *str,int m){char *p,second_str[50];p=str+m-1;int i=0;while(*p != '\0'){second_str[i]=*p;p++;i++;}second_str[i]='\0';printf("%s",second_str);}10.8输入一行文字,找出其中大写字母,小写字母,空格,数字以及其他字符各有多少?#include<stdio.h>void main(){intA_count=0,a_count=0,space_count=0,number_count=0,other_count=0 ,i=0;char str[50];char *p;printf("input a string: ");//scanf("%s",str);while((str[i]=getchar())!='\n') i++;p=str;while (*p != '\n'){if(*p>='A'&&*p<='Z') ++A_count;else if(*p>='a'&&*p<='z') ++a_count;else if(*p==' ') ++space_count;else if(*p>='0'&&*p<='9') ++number_count;else ++other_count;p++;}printf("大䨮写¡ä字Á?母?%d 小?写¡ä字Á?母?%d 空?格?%d 数ºy字Á?%d 其?他?字Á?符¤?%d",A_count,a_count,space_count,number_count,other_count);}10.9写一个函数,将一个3*3整形矩阵转置#include<stdio.h>void main(){void transfer(int *p);void printfmetric(int *p);int init[3][3]={{1,2,3},{4,5,6},{7,8,9}};int *p;p=&init[0][0];printfmetric(p);transfer(p);printfmetric(p);}void printfmetric(int *p){for (int i=0;i<3;i++)printf("%d %d %d\n",*(p+3*i),*(p+3*i+1),*(p+3*i+2));}void transfer(int *p){int i,j,temp;for (i=0;i<3;i++)for(j=i;j<3;j++)//note:j==i,j!=0{temp=*(p+3*i+j);*(p+3*i+j)=*(p+3*j+i);*(p+3*j+i)=temp;}}10.10讲一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放,写一个函数实现之。