C++程序设计第3版(清华大学谭浩强)pdf
rqwf
《C++程序设计(第3版)》降低入门起点,不需要C语言的基础,从零起点介绍程序设计和C++。广大师生用后反映非常好,认为《C++程序设计(第3版)》定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C++的许多难懂的概念作了透彻而通俗的说明,大大降低了初学者学习的困难,是初学者学习C++的一本好教材。
按照题目要求:
1、实现文件写入功能,一次写入一个职工信息。
2、实现查询功能(包含4种条件查询)。
3、实现信息删除和修改并写入文件。
根据题意,数据用结构数组存储,且职工编号唯一性,因此单独两个函数计算信息长度和编号。
除条件查询函数和读取文件的函数,不会自行free释放内存。如你写代码调用,注意自行写free语句释放。
下面是代码:
#include <stdioh>
#include <malloch>
#include <stringh>
#include <windowsh>
#include <conioh>
#define PATH "C:\\workerdata"
typedef struct worker//职员
{
int id;
char name[20];
int sex;//0:女。1:男
int byy;
int bmm;
int bdd;
}WR;
int write2File(char path[]);//写入文件,成功返回1,失败返回-1
int getLen(char path[]);//重新计算信息长度,成功返回1,失败返回-1
int getMaxId(char path[]);//获取最大的id,避免ID重复,成功返回1,失败返回-1
WR readFormFile(char path[]);//读取文件内容到结构体数组,成功返回数组,失败返回NULL
void showWRS();//打印输出文件所有内容
WR selectBy(WR wrs,int n);//根据条件查询,查询成功返回查到的第一个节点(对于唯一的编号而言是精准查询),失败返回NULL。
//注意:该函数不会自动释放wrs内存,单独调用后需单独释放。单独调用n传0,在修改模块中调用n传1
int init();//初始化参数
int updateWr();//更新,成功返回1,失败返回-1
int showMenu();//菜单
int len=0;
int id=0;
int main()
{
init();
if(showMenu()==-1) return 1;
return 0;
}
int showMenu()
{
int n;
WR wrs=NULL;;
while(1)
{
n=0;
printf("职工档案管理系统\n1、输入一个职工信息\n2、查询所有职工信息\n3、条件查询职工信息\n4、修改删除职工信息\n");
while(n<1 || n>4) scanf("%d",&n);
switch(n)
{
case 1:if(write2File(PATH)==-1) return -1; break;
case 2:showWRS(); break;
case 3:
wrs=readFormFile(PATH);
selectBy(wrs,0);
free(wrs);
break;
case 4:if(updateWr()==-1) return -1;break;
}
fflush(stdin);
printf("按任意键继续。。。。。"),getch();
system("cls");
}
}
int init()
{
if(getLen(PATH)!=-1 && getMaxId(PATH)!=-1) return 1;
return -1;
}
int updateWr()
{
int i,del=-1;
WR wr=NULL,wrs=NULL;
FILE fp=NULL;
wrs=readFormFile(PATH);
if(!wrs) return -1;
wr=selectBy(wrs,1);
printf("请输入 *** 作(1、删除,2、修改):");
while(del!=2 && del!=1)scanf("%d",&del);
if(del==2)
{
printf("请输入修改后职工信息:\n");
printf("请输入职工姓名:"),scanf("%s",wr->name);
printf("请选择职工性别(0:女。1:男):"),scanf("%d",&wr->sex);
printf("请输入职工生日(年月日用空格分隔):"),scanf("%d%d%d",&wr->byy,&wr->bmm,&wr->bdd);
}
if(remove(PATH)==-1) return -1;
if(!(fp=fopen(PATH,"w"))) return -1;
for(i=0;i<len;i++)
if(del==2 ||(del==1 && wr!=&wrs[i]))
fprintf(fp,"%d %s %d %d %d %d%s",wrs[i]id,wrs[i]name,wrs[i]sex,wrs[i]byy,wrs[i]bmm,wrs[i]bdd,"\n");
printf("更新成功!\n");
fclose(fp);
free(wrs);
return 1;
}
WR selectBy(WR wrs,int n)
{
int i;
WR swr,sp=NULL;
if(!wrs) return NULL;
while(n<1 || n>4)printf("请输入筛选条件(1、编号,2、姓名,3、性别,4、出生日期):"),scanf("%d",&n);
switch(n)
{
case 1:printf("请输入要查找的编号:"),scanf("%d",&swrid);break;
case 2:printf("请输入要查找的姓名:"),scanf("%s",swrname);break;
case 3:printf("请输入要查找的性别(1、男,0、女):"),scanf("%d",&swrsex);break;
case 4:printf("请输入职工出生日期(年月日用空格分隔):"),scanf("%d%d%d",&swrbyy,&swrbmm,&swrbdd);break;
}
printf("%8s %8s %8s %10s\n","职工编号","职工姓名","职工性别","职工年龄");
for(i=0;i<len;i++)
if((n==1 && wrs[i]id==swrid) ||(n==2 && strcmp(wrs[i]name,swrname)==0) ||(n==3 && wrs[i]sex==swrsex) ||(n==4 && wrs[i]byy==swrbyy && wrs[i]bmm==swrbmm && wrs[i]bdd==swrbdd))
{
if(sp==NULL) sp=&wrs[i];
printf("%8d %8s %8s %04d-%02d-%02d\n",wrs[i]id,wrs[i]name,wrs[i]sex"男":"女",wrs[i]byy,wrs[i]bmm,wrs[i]bdd);
}
return sp;
}
void showWRS()
{
int i;
WR wrs=NULL;
wrs=readFormFile(PATH);
if(wrs)
{
printf("%8s %8s %8s %10s\n","职工编号","职工姓名","职工性别","职工年龄");
for(i=0;i<len;i++)
printf("%8d %8s %8s %04d-%02d-%02d\n",wrs[i]id,wrs[i]name,wrs[i]sex"男":"女",wrs[i]byy,wrs[i]bmm,wrs[i]bdd);
}
free(wrs);
}
int getLen(char path[])
{
FILE fp=NULL;
WR wr;
if(!(fp=fopen(path,"r"))) return -1;
len=0;
while((fscanf(fp,"%d%s%d%d%d%d",&wrid,wrname,&wrsex,&wrbyy,&wrbmm,&wrbdd))!=-1)
len++;
fclose(fp);
return 1;
}
int getMaxId(char path[])
{
FILE fp=NULL;
WR wr;
if(!(fp=fopen(path,"r"))) return -1;
len=0;
while((fscanf(fp,"%d%s%d%d%d%d",&wrid,wrname,&wrsex,&wrbyy,&wrbmm,&wrbdd))!=-1)
if(id<wrid) id=wrid;
fclose(fp);
return 1;
}
WR readFormFile(char path[])
{
int i;
FILE fp=NULL;
WR wrs=NULL;
getLen(path);
if(!(fp=fopen(path,"r"))) return NULL;
if(len==0) return NULL;
wrs=(WR )malloc(sizeof(WR)len);
if(!wrs) return NULL;
i=0;
while((fscanf(fp,"%d%s%d%d%d%d",&wrs[i]id,wrs[i]name,&wrs[i]sex,&wrs[i]byy,&wrs[i]bmm,&wrs[i]bdd))!=-1)i++;
fclose(fp);
return wrs;
}
int write2File(char path[])
{
FILE fp=NULL;
WR wr;
if(!(fp=fopen(path,"a"))) return -1;
wrid=id++;
printf("-----------------------------\n");
printf("请输入职工姓名:"),scanf("%s",wrname);
printf("请选择职工性别(0:女。1:男):"),scanf("%d",&wrsex);
printf("请输入职工生日(年月日用空格分隔):"),scanf("%d%d%d",&wrbyy,&wrbmm,&wrbdd);
printf("-----------------------------\n\n");
fprintf(fp,"%d %s %d %d %d %d%s",wrid,wrname,wrsex,wrbyy,wrbmm,wrbdd,"\n");
fclose(fp);
len++;
return len;
}
你既然喜欢编程,就应该认认真真的学习一门语言,先从VB开始,VB是比较好的入门语言,可视化的,比较简单,是非常好的入门语言。书籍最少应该准备两本,不可能一本书籍会包含VB的所有内容,在看书的时候,可以交叉的看,一本书籍中没有讲到的内容可以在另一本中看到,这样对学习是很有好处的,也能保证所学知识的完整性。学编程是一个很漫长的过程,不要着急,要理论与实践想结合,例程书籍也是很重要的,看源代码对学习也是很有帮助的,等你学完这门VB语言之后,学习别的语言是非常简单,可以尝试C语言,按照C——C++——VC的顺序学习,有助于知识的连贯性,我也希望你能学好的。
学习C语言,谭浩强的《C程序设计》是一部非常好的C语言书籍,学习程序设计是一个非常漫长的过程,不要着急,一本书多看两遍三遍,学会交叉学习法,在学习C的过程中,可以看看数据结构,编译原理, *** 作系统等书籍,对编成都是很有帮助的。最开始学习的时候,先不要编一些比较大的程序,多编一些小程序,比如数组运算,字符组合等等,指针是C语言的精华,是比较复杂的部分。如果有一天你能熟练驾驭指针的 *** 作了,我相信你,你一定能学习好C语言的。
我是2001年接触编程的,刚开始只是大概了解一下,并没有进行比较深入的学习,我是从VB开始入门的,学了1年多,然后转入C语言,按照C——C++——VC的顺序学习,C学了两年,现在开始学习C++,C++的学习是很有难度的,类,标准库,多态,继承等等比较抽象难道懂的概念,虽然他秉承了C语言的风格,但是有很多很多是C语言不具备的,要多看书,上机实践也是必不可少的。《C++编程思想》,《C++标准库》,这些书都非常好,内容也很全面,例程书籍也是必不可少的,多看源代码对编程是很有帮助的,也会少走很多弯路。总之,C++的学习是一个比较漫长的过程,大概需要两年的时间,这只是底限,如果想学通,学精,还需要更多的时间。
我向你推荐一些C++经典书籍:
c++程序设计教程
c++编程思想
c++大学教程
c++程序设计语言
数据结构算法与应用c++语言描述
c++标准模板库------自修教程与参考手册
泛型编程与STL
深度探索c++对象模型
设计模式---可复用面向对象软件的基础
重构---改善既有代码的设计
Essential c++
Effective c++
More Effctive c++
C++ primer
前五本应该属于入门书籍,后面的属于学习难度比较大的,想提高C++的编程能力,看看这些书籍有好处。建议你把编程思想这本书多看看。多做练习题,对提高编程水平的帮助是很大的。
其实语言是相通的,一门语言学会了,学习其他语言就比较容易了。
业界有这样一种说法,因为JAVA这门语言包含了C++的一些特性,掌握了C++,就等于掌握了JAVA的80%,
在掌握了C++之后(我说的掌握指的是,可以熟练用C++编程序了,并没有要求你完全掌握C++的所有部分,没有人能达到这一点,因为C++太庞大了,如果能坚持不懈的学习C++两年到三年的时间了,你就可以学习其他的语言了)可以试着学习一些其他的语言,如JAVA,VC++等等比较复杂的语言
这时候可以说你已经对程序设计语言有个大体的认识了,可以明确自己学习的方向,根据自己的学习情况而定,是学习一些自己比较感兴趣的语言啊(从兴趣出发),还是为了找工作啊,开始进行更深入的学习比如学习windows下的框架编程和net编程等等比较复杂的语言
如果是为了找工作的话我建议你学好C,C++,JAVA三门语言
在我国目前的软件开发行业中,北方C,C++,JAVA的需求量是非常大的南方以VB为主
关于英语对学习程序设计有没有帮助的文章这个话题已经有很多人议论过了,我个人建议把计算机专业术语弄明白了就可以了,你可以买一本计算机英语教程看一看,对程序设计是有帮助的。其实程序设计当中的英文都是一些非常简单的,如for,else,while并没有太高深的,而且学习程序设计不像学习网络,如CCNA这类认证需要掌握大量的英文。但是在学习程序设计的时候身边有两个工具应该足够了-----------金山词霸,计算机词典。相信你一定能学好程序设计的。
学习数学和学习程序设计有一个共同点------锻炼逻辑思维能力。在程序设计的学习中涉及到数学的地方并不多,所以也没有必要去认真的学习数学也可以学好程序设计的。
如果你是一个肯吃苦,肯用心学习程序设计的人,具有坚持不懈的精神的人,我相信,只要你认认真真去学,即使你的英语数学水平再差,你也一定能够学好程序设计的。
我是一名大三的学生,我也正在学习C++这门语言,一年多的时间,学习的感觉真的很累的,希望能和你成为朋友!
好了,说了这么多,可以参考一下,为自己做个学习计划,要对自己有信心,最后祝你在学习编程的道路上走的更好更远,祝你学有所成!!
1PLC ---- Programmable logic Controller,可编程逻辑控制器。是一种通用可编程控制器,应用于工业环境,具有代表性的西门子,三菱,欧姆龙这三种比较流行,国产的台达性价比比较高 ,永宏,和利时等也不错 ,另外还有 美国AB,ABB,松下,富士,施耐德,信捷等
2不同的PLC有不同的编程语言,PLC中有多种程序设计语言,如梯形图语言、布尔助记符语言、功能表图语言、功能模块图语言及结构化语句描述语言等。梯形图语言和布尔助记符语言是基本程序设计语言,它通常由一系列指令组成,用这些指令可以完成大多数简单的控制功能,例如,代替继电器、计数器、计时器完成顺序控制和逻辑控制等。这个是PLC厂家规定的,应用厂家提供的编程软件根据自己的控制要求写好程序后用专用地线缆下载到PLC内部,即可执行。
3你可以看到PLC种类很多,当然指令都不一样,可是有相通之处,您可以从一种PLC入手,再扩展到其他PLC ,三菱plc是入门首选。建议学习三菱fx2n系列plc ,好多国产的PLC跟三菱的指令很像,如台达,永宏PLC 。
4编程之前得明白自己所选plc的硬件。如主电源规格,输入输出类型。弄明白输入X ,Y软元件跟外部硬件是如何联系的?了解本plc内部M,S等软元件的作用,还有此plc的指令系统。
5PLC程序设计步骤
(1)根据控制要求进行I/O分配,对程序做全面规划,画出流程图。
(2)根据控制要求设计控制程序 。
(3)画出PLC外围接线图,(电气原理图和气路原理图)
(4)布置好元件;装好线槽,固定好电气元件;如漏电开关,空开,熔断器,热继电器,继电器,固态继电器,步进驱动器,伺服驱动器,变频器,温度控制器,开关电源,电容,滤波器,PLC,扩展模块,
(5)按装好传感器,如接近开关,感应开关,光电开关,微动行程开关。
(6)对设备进行调试;先手动,半自动,全自动,一步一步,调试
"1 单选 C语言中函数返回值的类型是由 ( A ) 决定的
A 函数定义时指定的类型
B return语句中的表达式类型
C 调用该函数时的实参的数据类型
D 形参的数据类型"
官网其实有考试题库的,可以去官网看看历年真题,如果找不到的话,利用百度文库、电大题酷小程序、上学吧等考试搜题工具会好很多的。帮你搜了一些题,希望能够帮到你~~~
"2 单选 在函数调用时,以下说法正确的是:( B )。
A 函数调用后必须带回返回值
B 实际参数和形式参数可以同名
C 函数间的数据传递不可以使用全局变量
D 主调函数和被调函数总是在同一个文件里"
"3 单选 语句int p;说明了( C )。
A p是指向一维数组的指针
B p是指向函数的指针
C p是指向int型数据的指针
D p是函数名,该函数返回一指向int型数据的指针"
"4 单选 下列指针的定义不正确的定义是( A )。
A int p=&i,i;
B int p,i;
C int i,p=&i;
D int i,p;"
"5 单选 有语句:int a[10],;则( B )是对指针变量p的正确定义和初始化。
A int p=a;
B int p=a;
C int p=&a;
D int p=&a;"
"6 单选 若有说明语句“int a[5],p=a;”,则对数组元素的正确引用是:( C )。
A a[p]
B p[a]
C (p+2)
D p+2"
"7 单选
有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},p=a;
则数值为9的表达式是:( B )。
A p+9
B (p+8)
C p+=9
D p+8"
"8 单选 被调函数调用结束后,返回到 :( D )。
A 主调函数中该被调函数调用语句处
B 主函数中该被调函数调用语句处
C 主调函数中该被调函数调用语句的前一语句
D 主调函数中该被调函数调用语句的后一语句"
"9 单选 能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是:( A )。
A return 这两个数
B 形参用两个元素的数组
C 形参用两个这种数据类型的指针
D 用两个全局变量 "
"10 单选 下列各语句定义了数组,其中哪一个是不正确的( C )。
A char a[3][10]={""China"",""American"",""Asia""};
B int x[2][2]={1,2,3,4};
C float x[2][ ]={1,2,4,6,8,10};
D int m[][3]={1,2,3,4,5,6}; "
"11 单选 # include <stdioh>int test(int b){ b=10;printf(“b=%d ”,b);return b/2;}void main(){ int b=60;b=test(b);printf(“b=%d ”,b);}程序的运行结果是:( D )。
A b=10 b=60
B b=10 b=30
C b=300 b=600
D b=600 b=300"
"12 单选 如果一个函数作为表达式被调用,则该函数必须是 ( A )。
A 有返回值的函数
B 无返回值的函数
C 有参函数
D 无参函数"
"13 单选 C语言程序由函数组成,它的( B )。
A 主函数必须在其它函数之前,函数内可以嵌套定义函数。
B 主函数可以在其它函数之后,函数内不可以嵌套定义函数。
C 主函数必须在其它函数之前,函数内不可以嵌套定义函数。
D 主函数可以在其它函数之后,函数内可以嵌套定义函数。"
4,c=5,x=12,y=24,z=-36,u=51274,n=128765,c1='a',c2='b',想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。要求输出的结果如下:
a=凵3凵凵b=凵4凵凵c=凵5
x=1200000,y=2400000,z=-3600000
x+y=凵360凵凵y+z=-120凵凵z+x=-240
c1='a'凵or凵97(ASCII)
c2='B'凵or凵98(ASCII)
解:
#include <stdioh>
main()
{ int a,b,c;
long int u,n;
float x,y,z;
char c1,c2;
a=3;b=4;c=5;
x=12;y=24;z=-36;
u=51274;n=128765;
c1='a';c2='b';
printf("\n");
printf("a=%2d b=%2d c=%2d\n",a,b,c);
printf("x=%86f,y=%86f,z=%96f\n",x,y,z);
printf("x+y=%52f y+z=%52f z+x=%52f\n",x+y,y+z,z+x);
printf("u=%6ld n=%9ld\n",u,n);
printf("c1='%c' or %d(ASCII)\n",c1,c1);
printf("c2='%c' or %d(ASCII)\n",c2-32,c2);
}
45 请写出下面程序的输出结果:
#include <stdioh>
main()
{ int a=5,b=7;
float x=678564,y=-789124;
char c='A';
long n=1234567;
unsigned u=65535;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b);
printf("%f,%f\n",x,y);
printf("%-10f,%-10f\n",x,y);
printf("%82f,%82f,%4f,%4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,%102e\n",x,y);
printf("%c,%d,%o,%x\n",c,c,c,c);
printf("%ld,%lo,%x\n",n,n,n);
printf("%u,%o,%x,%d\n",u,u,u,u);
printf("%s,%53s\n","COMPUTER","COMPUTER");
}
运行结果:(在TC20中)
57
凵凵5凵凵7
67856400,-789124023
67856400凵,-789124023
凵凵凵6786,凵-78912,678564,-7891240,67856400,-789124023
6785640e+Ol,凵凵-79e+02
A,65,10l,4l
1234567,4553207,d687
65535,177777,ffff,-1
COMPUTER,凵凵COM
46 用下面的scanf函数输入数据,使a=3,b=7,x=85,y=7182,c1='A',c2='a'。问在键盘上如何输入
#include <stdioh>
main()
{ int a,b;
float x,y;
char c1,c2;
scanf("a=%d凵b=%d",&a,&b);
scanf("%f凵%e",&x,&y);
scanf("凵%c凵%c",&c1,&c2);
printf("a=%d,b=%d,x=%f,y=%f,cl=%c,c2=%c\n,a,b,x,y,c1,c2);
}
解:可按如下方式在键盘上输入:
a=3凵b=7↙
85凵7182↙
A凵a↙
输出为:
a=3,b=7,x=8500000,y=71820000,cl=A,c2=a
请注意:在第三个scanf函数双引号中第一个字符为空格字符。如果没有这个空格字符,而写成:
scanf("%c%c,&c1,&c2);
按以上的输入,输出就会变成以下两行:
a=3,b=7,x=8500000,y=71820000,cl=
,c2=A
这是因为在输入完第二行数据后按的回车键被作为一个字符送到内存输入缓冲区中,因此第三个scanf函数中的第一个变量c1读人了回车符(实际上是回车符的ASCII码)。第三行输入的第一个字符A被c2读取,所以在执行printf函数输出cl时,就输出一个回车符,输出c2时就输出字符A。我们在程序第三个scanf函数双引号中第一个字符处放了一个空格字符,这样第二行末尾输入的回车符就不会输入给c1,而是与该空格字符对应,第三行输入的第一个字符A就被cl读取。也可以不在scanf函数中加空格,而在第三个函数前加一个getchar函数:getchar(); 用它将前面的回车符“吃掉”。
在一个函数中如果有几个scanf函数,在输人数据时往往会出现一些想象不到的情况(例如前面碰到的情况),其中一个重要的原因就是由回车符引起的。C语言很灵活,书上不可能把一切细节都讲到,读者在遇到类似情况时,上机多试验一下就可以找出规律来。
47 用下面的scanf函数输入数据,使a=10,b=20,c1='A',c2='a',x=15,y=-375,z=678,请问在键盘上如何输入数据
scanf("%5d%5d%c%c%f%f%f,%f",&a,&b,&c1,&c2,&x,&y,&z);
解:
#include <stdioh>
main()
{
int a,b;
float x,y,z;
char cl,c2;
scanf("%5d%5d%c%c%f%f%f,%f",&a,&b,&cl,&c2,&x,&y,&x);
printf("a=%d,b=%d,c1=%c,c2=%c,x=%62f,y=%62f,z=%62f\n",a,b,c1,c2,x,y,z);
}
运行情况如下:
凵凵凵10凵凵凵20Aa15凵-375凵15,678↙ (此行为输人的数据)
a=10,b=20,cl=A,c2=a,x=凵凵150,y=凵-375,x=凵6780 (此行为输出)
说明:按%5d格式的要求输入a与b时,要先键入三个空格,然后再键人10与20。%f是用来禁止赋值的。在输入时,对应于%f的地方,随意打人了一个数如15,该值不会赋给任何变量。
48 设圆半径r=15,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。
解:
#include <stdioh>
main()
{ float pi,h,r,l,s,sq,vq,vz;
pi=31415926;
printf("请输入圆半径r,圆柱高h:\n");
scanf("%f,%f",&r,&h);
l=2pir;
s=rrpi;
sq=4pirr;
vq=30/40pirrr;
vz=pirrh;
printf("圆周长为:1=%62f\n",l);
printf("圆面积为:s=%62f\n",s);
printf("圆球表面积为:sq=%62f\n",sq);
printf("圆球体积为:sv=%62f\n",vq);
printf("圆柱体积为:sz=%62f\n",vz);
}
运行结果:
请输入圆半径r,圆柱高h;
15,3↙
圆周长为:l= 942
圆面积为:s= 707
圆球表面积为:sq= 2827
圆球体积为:sv= 795
圆柱体积为:sz= 2121
49 输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要有文字说明,取2位小数。
解:
#include <stdioh>
main()
{ float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",&f);
c=(50/90)(f-32); /注意5和9要用实型表示,否则5/9的值为0/
printf("摄氏温度为:%52f\n",c);
}
运行结果:
请输入一个华氏温度:
78
摄氏温度为:2556
410 编程序,用getchar函数读入两个字符给cl、c2,然后分别用putchar函数和printf函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整型抑或二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整型变量与字符变量是否在任何情况下都可以互相代替?如char"c1,c2;" 与"int cl,c2;" 是否无条件地等价
解:
#include <stdioh>
main()
{ char c1,c2;
printf("请输入两个字符c1,c2:\n");
c1=getchar();
c2=getchar();
printf("用putchar语句输出结果为:\n");
putchar(c1);
putchar(c2);
printf("\n");
printf("用printf语句输出结果为:\n");
printf("%c,%c\n",c1,c2);
}
运行结果:
请输入两个字符c1,c2:
ab↙
用putchar语句输出结果为:
ab↙
用printf语句输出结果为:
a,b
请注意连续用两个getchar函数时怎样输入字符。不应当用以下方法输入:
a↙
b↙
因为第一行将a和回车符输入到内存的输入缓冲区,因此c1得到a,c2得到一个回车符。在输出c2时就会产生一个回车换行,而不会输出任何可显示的字符。在实际 *** 作时,只要输入了"a↙"后,屏幕显示马上从用户屏切换到TC窗口,程序接着执行下去。因为系统认为用户已输入了两个字符,所以我们连续输入ab两个字符然后再按回车键,就保证了c1和c2分别得到字符a和b。
回答思考问题:
(1) c1和c2可以定义为字符型或整型,二者皆可。
(2) 在printf函数中用%d格式符输出,即:
printf("%d,%d\n",c1,c2);
(3) 字符变量在计算机内占一个字节,而整型变量占两个字节,因此整型变量在可输出字符的范围内(ASCII码为0~255之间的字符)是可以与字符数据互相转换的。如果整数在此范围外,则不能代替,请分析以下三个程序。
程序1:(4-10-1c)
#include <stdioh>
main()
{ int c1,c2; /定义为整型/
printf("请输入两个整数c1,c2:\n");
scanf("%d,%d",&c1,&c2);
printf("按字符输出结果为:\n");
printf("%c,%c\n",c1,c2);
printf("按ASCII码输出结果为:\n");
printf("%d,%d\n",c1,c2);
}
运行结果:
请输入两个整数c1,c2:
97,98↙
按字符输出结果为:
a,b
按ASCII码输出结果为:
97,98
程序2:(4-10-2c)
#include <stdioh>
main()
{ char c1,c2; / 定义为字符型/
int i1,i2; / 定义为整型 /
printf("请输入两个字符c1,c2:\n");
scanf("%c,%c",&c1,&c2);
i1=c1; / 将字符型赋值给整型变量/
i2=c2;
printf("按字符输出结果为:\n");
printf("%c,%c\n",i1,i2); / 将整型变量按字符输出/
printf("按整数输出结果为:\n");
printf("%d,%d\n",c1,c2); / 将字符变量按整型输出/
}
运行结果:
请输入两个字符c1,c2:
a,b↙
按字符输出结果为:
a,b
按整数输出结果为:
97,98
程序3:(4-10-3c)
#include <stdioh>
main()
{ char c1,c2;/ 定义为字符型 /
char i1,i2;/ 定义为整型 /
printf("请输入两个整数i1,i2:\n");
scanf("%c,%c",&i1,&i2);
c1=i1; / 将整数赋给字符变量 /
c2=i2;
printf("按字符输出结果为:\n");
printf("%c,%c\n",c1,c2);
printf("按整数输出结果为:\n");
printf("%d,%d\n",c1,c2);
}
运行结果:
请输入两个整数i1,i2:
289,330↙
按字符输出结果为:
!,J
按整数输出结果为:
33,74
请注意c1和c2是字符变量,只占一个字节,只能存放0~255范围内的整数,而现在输入给i1和i2的值已超过0~255的范围,所以只将i1和i2在内存中两个字节的低8位赋给c1和c2。可以看到,289-255=33,330-255=74;而与ASCII码33和74相应的字符为"!"
另外,团IDC网上有许多产品团购,便宜有口碑
以上就是关于谁有《C++程序设计》(谭浩强)pdf格式的全部的内容,包括:谁有《C++程序设计》(谭浩强)pdf格式的、c语言程序大神帮忙设计一下、我想自学编程 求解答等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)