




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文专电:稻草人再版前言 本书一开始是由本人为对c语言爱好者及想了解c语言的人所写,也希望对班级期末考试有所帮助,但出版以来得到很多人的喜爱,说此书简单易懂,挺好的。所以我在此把它发放到百度文库供大家参考。若书中有错误之处,还请大家指正。 书中例题全部来自谭浩强教授的C程序设计(第三版)。 烟台大学文经学院 零九级电子信息工程技术 稻草人 2010-8-2317前言这种打扮的梦幻骑士,看见他那副样子上路,谁都要笑死的。很想大大方方地送给世界上每一个人一匹马,当然,是养在心里、梦里、幻想里的那种马。我有许多匹好马,是一个高原牧场的主人。至于自己,那匹只属于我的爱马,一生都在的。常常,骑着它,在无边的海边奔驰,马的毛色,即使在无星无月的夜里,也能发出一种沉潜又凝炼的闪光,是一匹神驹。我有一匹黑马,它的名字,叫做源。 节选自三毛送你一匹马在编辑过程中,赵琪、王至清及文专通刘阮星等等对本项工作给予了肯定与支持,另许老师对编辑进行了审查并提出了宝贵的意见,赵琪、程宁与张强提供了计算机资源,给编辑带来极大帮助。在此,对许老师,对所有对此表示肯定的同学表示感谢,谢谢你们!因作者水平有限,难免有错误之处,还望读者赐教指正。 作者邮箱: 注:书中出现的“关键字”即为计算机能认识的运算标记,是C语言中具有特定含义,专门用作语言特定成分的一类标识符。例1.2:求两数之和#include 预处理命令,所有程序都有,只是个数与内的内容不同,与下面读程无太大关系,可以不看;void main( ) 定义主函数,此句是说明下面紧跟的内是一个主函数体,此句在每个程序都有,记住即可。int a,b,sum; 定义了整型变量a,b,sum。关键字int。只要出现了int,float,char;全是定义变量,只是类型不同,最常见的是int,即整型,其次是float,单精度型(此类型带小数点,用来存放小数),再其次是char,即字符型。记住这几种格式a=123;b=456; 将123赋给a,同理将456赋给b。sum=a+b; 同上将a+b的值结果赋给sum。printf(“sum is %dn”,sum); 输出语句,关键字printf,输出()内“”内的内容,但当计算机读到%d时将“,”后面的sum与其替换。同理计算机也识别n,只执行换行但不在屏幕输出字符“n”,即换行。所以此句输出sum is 579。关于%d这种格式,经常出现的有%d、%f、%c、%s,分别代表整型、单精度型、字符型、字符串型,对应int、float、char、char。例1.3 求两个数中较大者。注:例8.2与此题类型相同,但释者从另一角度解释了函数调用,读者可结合理解。#include 预处理命令,所有程序都有,只是个数与内的内容不同,与下面读程无太大关系,可以不看。void main( ) 定义主函数,此句是说明下面紧跟的内是一个主函数体,此句在每个程序都有,且一模一样,记住即可。 int max( int x, int y ); 这是一个函数声明格式,全部在函数体内部且在“”紧后面,是给计算机看的,与读程无太大关系,可以不看;其常见形式有 int 函数名()、 char 函数名()、 void 函数名()。 int a, b, c; 定义了整型变量a,b,c; scanf( “ %d, %d ”, &a, &b); 输入语句,关键字scanf,即从键盘接收两个数,以“”内的%d的形式接受,明白此句的作用是将由键盘得到的两个数分别赋给a,b即可。 c = max(a, b); 函数调用语句,此语句易迷惑,记住其原始格式:变量名=函数名(); 看到此语句后应立即在程序中找叫做max的函数体,并将其()内的数据带过去,即将a,b的数据带过去处理,在此题中接收这两个字母的依次是x和y,在max的函数体内必有一个return()语句,将其()内的数据()内的数据为:函数的处理结果返回带回并赋给c。 printf(“ max = %dn”, c); 输出语句,关键字printf,此语句输出“”内的内容,但其识别%d,即用c将%d替换,n是换行,只执行换行但不在屏幕输出字符“n”,即换行。特别注意:到此为止此程序已读完,无须再往下看 int max( int x, int y ) 定义max函数,知道在此句中接收本题中的a和b分别赋给()内的x和y。 int z; 定义整型z。 if( x y ) 条件语句,关键字if,当()内的条件成立时执行下面的z=x,且不执行z=x后面的else语句。如果不成立,则执行下面的else语句,若无else语句,则直接往下读。 z = x; 将x的值赋给z; else z = y; 将y的值赋给z。 注意:此else语句包括: else z = y; return( z ); 返回值语句,关键字return,将()内的内容返回到调用此函数的地方。即返回到main函数中并执行c=z,即将z赋给c 。 提示:若发现一段程序由多个函数体构成,第一步先找到主函数, 即void main()后面的函数体,然后一步一步执行主函数体,主函数体读完即此程序已读完。例2.20 求5!(即5*4*3*2*1)#include 同上 ,预处理命令,对我们读程来说无太大含义。void main() 定义主函数,同上。int i,t; 定义整型变量i和t。t=1; 把1赋给t。i=2;把2赋给i。while(i=5) 循环语句,关键字while,判断()内的条件是否成立,若成立,则继续读内的内容;若不成立,则跳过及其里面的内容,往下读。t=t*i; 把t*i的值赋给t。i=i+1; 把i+1的值赋给i。此时,循环体执行完一遍,返回while(i=5)继续判断,判断是否成立,若成立再执行一遍内的循环体,直到不成立时跳出。printf(“%dn”,t);输出语句,即以%d的类型输出t,并换行。 例 3.7 大小写字母的转换。#include void main()char c1,c2; 定义字符型变量c1,c2。其实此句在上面已经介绍多次,注意举一反三。c1=a; 将字符a赋给c1,注意此句中的单引号,其说明a是作为一个字符赋给c1,而不是变量。下同。c2=b; 将字符b赋给c2。c1=c1-32; 将c1-32的值赋给c1。注意,此时运算的是c1的ASCII代码值减32。由ASCII表可知其减去32后的值恰是其对应的大写字母。可参考课本364页附录A。c2=c2-32; 同理,将c2-32的值赋给c2。注意,此时运算的是c2的ASCII代码值减32。由ASCII表可知其减去32后的值恰是其对应的大写字母。printf(“%c%c”,c1,c2);输出语句,以%c(即字符)的格式输出c1,c2。例4.11 从键盘输入一个大写字母,要求改用小写字母输出。#includevoid main()char c1,c2;定义字符变量c1,c2。c1=getchar();输入语句,关键字getchar,作用与scanf雷同,但没有scanf强大,只能接收一个字符,此句的作用是把从键盘上获得的字符(这里是一个大写字母)赋给c1。printf(“%cn”,c1); 输出语句,将c1以%c(字符)的形式输出。c2=c1+32;将c1+32的值赋给c2。同上题例3.7,这里运算的仍是c1的ASCII代码。printf(“%cn”,c2); 以%c的形式输出c2,然后执行n,即换行 注:此题与原题不同,删去一些原作者想展示的副功能,以便于理解。小结:至此,读者应该能读懂定义(即int、float、char)变量、printf输出语句,下面再遇到时不再做太多解释。例5.1 输入两个实数按由小到大输出这两个数#includevoid main()float a,b,t; 定义单精度变量a,b,t。 scanf(“%f,%f”,&a,&b);输入语句,关键字scanf,由键盘接收两个数以%f的形式分别赋给a,b。if(ab) 条件语句,关键字if,若()内的条件成立,则继续读内的内容;若不成立,则读后面的else语句,显然,此条件语句无else语句,则直接跳过及其内容继续往下读。 注意:条件语句只读一遍,自己不会循环。 t=a; 将a赋给t。a=b; 将b赋给a。b=t; 将t赋给b。printf(“%f,%fn”,a,b);以%d的形式输出a、b,并换行。注意:此题中的 t=a; a=b; b=t; 是交换a和b的值的经典算法。切不可用:a=b;b=a;来交换a和b的值,第一句a=b执行后把b的值赋给a,a的值被改为b,此时执行第二句b=a,把a的值赋给b,其实赋给b的还是b的值。注:为了好理解,此题最后一句printf语句被修改,原句是:printf(”%5.2f,%5.2fn”,a,b); 其实很好理解,即以%5.2f的形式输出a,b。而%5.2f的意思是输出的内容的长度为五个格,且保留两位小数。例5.2 输入三个数,按由小到大的顺序输出。#includevoid main()float a,b,c,t; 定义单精度型变量a,b,c,t。scanf(“%f,%f,%f”,&a,&b,&c);输入语句,关键字scanf。即从键盘上以%f的形式接收三个数字分别赋给a,b,c。if(ab) 条件语句,关键字if,在此题中,先判断()内的内容是否成立,若成立,执行下面内的内容:若不成立,则跳过此及其内容,继续向下执行。t=a; 将a赋给t。a=b; 将b赋给a。 b=t; 将t赋给b。if(ac) 同上,条件语句,关键字if,在此题中,先判断()内的内容是否成立,若成立,执行下面内的内容:若不成立,则跳过此及其内容,继续向下执行。t=a; 将a赋给t。a=c; 将c赋给a。c=t; 将t赋给c。if(bc) 同上,举一反三,现只要求举二反一,应该能读懂。t=b;b=c;c=t;printf(“%5.2f,%5.2f,%5.2fn”,a,b,c); 输出语句,以%5.2f的形式(即输出的数要占五个格且保留两个有效数字)输出a,b,c。析:此函数的算法思想: 若ab则将a和b互换 (此时a是a,b中的小者) 若ac则将a和c互换 (此时a是a、b、c中的最小者) 若bc则将b和c互换 (此时b是b、c中的小者,也是三者中的次小者) 经这三步后,目的达到。例5.4 输入一个字符,判别它是否是大写字母。如果是,将它转换成小写字母;如果不是,不转换,然后输出最后得到的字符。#includevoid main()char ch; 定义字符变量ch。scanf(“%c”,&ch); 输入语句,关键字scanf,即以%c的形式由键盘接收一个字符赋给ch。ch=(ch=A&ch=A&ch=Z),若成立,则将“?”与“:”之间的内容(即ch+32)赋给ch;若不成立,则将“:”后面的内容(即ch)赋给ch。注:此句中判断部分运算的其实是字母的ASCII代码。printf(“%c”,ch); 以%c的形式输出ch。小结:至此,应该对scanf语句较熟悉了,下面再出现时,不做太多解释。例5.7 运输公司对用户计算运费。路程(S)越远,运费越低。标准如下: s 折扣0250 无250500 2%5001000 5%10002000 8%20003000 10% 大于3000 15%设每吨每吨每千米的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f为:f=p*w*s*(1-d)编程求运费。#includevoid main()int c,s; 定义整型变量c,s。float p,w,d,f; 定义单精度型变量p,w,d,f。scanf(“%f,%f,%d”,&p,&w,&s); 输入语句,由键盘接收三个数字并分别以%f、%f、%d的形式赋给p、w、s。if(s=3000) 条件语句,判断()内的内容是否成立,若成立则执行c=12,且不执行else语句;若不成立则跳过c=12执行else后的语句,即c=s/250。c=12; 把12赋给c。else c=s/250; 把s/250赋给c。switch(c) switch语句,其分类属于选择语句,关键字switch,其作用是将()内的内容带到下面的内与里面的case后的内容比较,若符合,则从符合的那句开始往下执行,直到遇见break,否则一直执行到此句结束。若全不符合,则执行default后面的语句,显然本题无default语句。case 0: d=0;break; 若c的值是0时,由此向下执行,执行d=0,并继续往下执行,但显然,本题中下一句是break,break作用是跳出一层循环,本题只有一层循环,所以若c的值0,则执行完d=0后,跳出switch语句,继续向下读。case 1: d=2;break; 同上,若c的值是1时,由此向下执行,执行d=2,并继续往下执行,但显然,本题中下一句是break,break作用是跳出一层循环,本题只有一层循环,所以若c的值2,则执行完d=2后,跳出switch语句,继续向下读。case 2: 同上,若c的值是2,则由此开始向下执行,注意:当一个case符合时,下面的case不管符不符合,只要读到,一律放行,执行后面的语句。如:若此时c满足,则跳过下面的case 3直接读d=5,并继续向下执行,同上。case 3: d=5;break;举一反三。下面的语句应该都能读懂,一模一样。case 4: case 5:case 6:case 7: d=8;break;case 8:case 9:case 10:case 11: d=10;break;case 12: d=15;break;f=p*w*s*(1-d/100.0); 把p*w*s*(1-d/100.0)的值赋给f。printf(“freight=%15.4fn”,f); 将“”内的内容输出,并将%15.4f用后面的f以15个格保留4个小数的形式替换,同时输出换行。 注意:整型与整型运算后的结果仍是整型。如整型a=3,整型b=2,则a/b=1。习题5.4有三个整数a,b,c,由键盘输入,输出其中最大的数。#includevoid main()int a,b,c; 定义整型变量a,b,c。scanf(“%d,%d,%d”,&a,&b,&c);输入语句,从键盘上以%d的形式接收三个数字。if(ab) 条件语句,当()内的条件成立时,执行紧跟的语句,否则,执行它的else后面的语句。注意:紧跟的语句是:if(bc) printf(“max=%d”,c);else printf(“max=%d”,b); 它的else后面的语句是 if(ac) printf(“max=%d”,c);elseprintf(“max=%d”,a); if(bc) 条件语句,当()内的条件成立时执行紧跟的printf语句(即printf(“max=%d”,c);),否则,执行它的else后面的printf语句(即printf(“max=%d”,b);)。 printf(“max=%d”,c);else printf(“max=%d”,b);else if(ac) 同理,此句应明白。 printf(“max=%d”,c);elseprintf(“max=%d”,a);例6.2 求1+2+3+4+100#include void main()int i,sum=0; 定义整型变量i,sum,并把0赋给sum。i=1; 把1赋给i。while(i=100) 循环语句,当()内的条件成立时执行内的循环体,执行循环体的过程中i被改变,执行完一遍循环体后再次对()内的条件进行判断,若仍成立,则再次如上执行,直到条件不成立时跳出。sum=sum+i; 把sum+i的值赋给sum。i+; 把i的值加1。printf(“%dn”,sum); 以%d的形式输出sum。 例6.3 用dowhile语句求1+2+3+4+5+100。#includevoid main()int i,sum=0; 定义整型变量i,sum,并把0赋给sum。i=1;把1赋给i。do 计算机认识此字符,但不做任何运算。继续向下读内的循环体。sum=sum+i; 把sum+i的值赋给sum。i+;把i的值加1。while(i=100);循环语句,关键字while,当()内的条件成立时,再执行内的循环体,直到()内的内容不成立时跳出并继续向下读。printf(“%dn”,sum); 以%d的形式输出sum的值。例6.8 判断m是否素数。(只能被1和其本身整除的数称为素数)#include#include 预处理命令,计算机识别,不影响我们读程。void main()int m,i,k; 定义整型变量。scanf(“%d”,&m); 以%d形式由键盘接收一个数字赋给m。k=sqrt(m); 数学运算,此句等于k=,即把的值赋给k。for(i=2;i=k;i+) for循环语句,先执行i=2,然后执行下一句,即ik) 条件语句,若成立,执行下一句且不执行else语句,若不成立,则只执行else语句。printf(“%d is a prime numbern”m); 输出语句。else printf(“%d is not a prime numbern”,m) 输出语句。 习题6.5 求1!+2!+3!+10!的值#includevoid main()int s=0,t=1,n; 定义整型变量s,t,n,并把0赋给s,1赋给t。for(n=1;n=10;n+) 循环语句,先执行n=1,(注意:for循环()中第一句(本题中即n=1)只在一开始时执行一遍,在循环中此句不再执行),然后执行第二句即n=10,若成立则执行下面紧跟的内的循环体(注意不是紧接着执行n+),当循环体执行完一遍后,再执行n+,执行完n+后再进行判断(即判断n=10),若成立再执行一遍循环体,然后重复上述过程,直到判断条件n=10不成立时跳出,向下执行。t=t*n; 把t*n的值赋给t。s=s+t; 把s+t的值赋给s。printf(“1!+2!+3!+10!=%d”,s);例7.1 用一维数组存放0到9,并将其倒序输出。#includevoid main()int i,a10; 定义整型i,同时定义含有10个元素的整型数组a10for(i=0;i=9;i+) for循环,关键字for ,先执行i=0,然后执行下一句,即i=0;i-)for循环,应举一反三,同上。此循环实现的是数组的输出。printf(“%d”,ai); 输出语句。printf(“n”);输出换行。小结:数组的经典输入输出算法:1设一维整型数组a20:输入:for(i=0;i20;i+)scanf(“%d”,&ai);输出:for(i=0;i20;i+)printf(“%d”,ai);若是一维字符数组,只需将%d改为%c或%s即可。2 设二维整型数组a105: 输入:for(i=0;i10;i+) for(j=0;j5;j+)scanf(“%d”,&aij);输出:for(i=0;i10;i+) for(j=0;j5;j+)printf(“%d”,aij);若是二维字符数组,只需将%d改为%c或%s即可。注意:以上的输入输出语句非常重要,是基本语句,应理解背过。例7.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#includevoid main()char string81; 定义有81个元素的字符数组string81。 int i,num=0,word=0; 定义整型变量i,num,word,同时把0赋给num和word。char c; 定义字符变量c。gets(string); gets输入语句,关键字gets,()内是将要处理的字符数组名,此句的作用是由键盘获取字符串并将其赋给()内的字符数组,此题即将其赋给string81。注意:赋值结束后自动在字符串后加上0 ,0经常被用作判断字符串是否结束。for(i=0;(c=stringi)!=0;i+) for循环体,此循环体已出现多次,在此不再细讲。需提醒判断条件是(c=stringi)!=0。即判断字符串是否结束。其中“!=”是不等于。if(c= ) 注意此条件语句的条件是如果c等于空格word=0;else if(word=0)word=1;num+; 此句的作用是将num的值加1。printf(“There are %d words in the line.n”,num); 输出语句。其基本算法思想是:若当前字符是空格则说明未出现新单词,使word=0,mum不累加。若当前字符不是空格,则分两种情况: 1.前一字符为空格(word=0),新单词出现,是num累加,word=1。 2.前一字符为非空格(word=1),未出现新单词,num不累加。例8.2 输入两个数,输出其中较大者,要求运用函数调用。注:此题在例1.3出现过,与前者不同的是此题的子函数中条件语句不同,但本质相同。另释者从另一个角度解释了函数调用,以助读者理解。#includevoid main() int max(int x,int y); 注意:这是函数声明,不是定义,给计算机识别用的,与我们读程无太大关 系,可以跳过。函数声明全部出现在函数体的一开始,其常见形式有 int 函数名()、 char 函数名()、 void 函数名()。int a,b,c; 定义整型变量a,b,c。scanf(“%d,%d”,&a,&b); 输入语句,分别以%d的形式由键盘接收两个数字分别赋给a和b。c=max(a,b); 函数调用。其本质是把max(a,b)赋给c,看到max(a,b)后应立即在整个程序范围内寻找函数名为max的函数,并把此句中()内的量分别对应赋给找到的函数名后紧跟的()内的变量(在此题中即把a赋给x,b赋给y),然后执行找到的函数体,执行完后回到此语句,并继续向下执行。printf(“Max is %d”,c); 输出语句。注意:到此时,此程序已读完,无须再向下看。int max(int x,int y) 函数定义,对读程来说,此句最大的意义是让我们在运行到函数调用时很容易的根据函数名找到它。(此句中的函数名是max)int z; 定义整型变量z。z=xy?x:y; 条件运算语句,可由“?”和“:”识别它。其作用是先判断“?”前面的条件(即xy)是否成立,若成立,则将“?”与“:”之间的内容(即x)赋给z;若不成立,则将“:”后面的内容(即y)赋给z。return(z);将()内的内容(即z)返回到调用此函数的地方,在此题中的意义即是运行后主函数内max(a,b)的值为z。注意:读有多个函数体的程序时,先找到主函数,即开头是void main( )的函数体,执行它,当它执行完后,不用再继续读,即所有程序执行完。 经典算法举例:一交换a、b的值。#incl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版四年级数学上册第五单元平行四边形和梯形学业质量测评卷(含答案)
- 第六单元提优测试卷(含答案) 五年级数学上册(人教版)
- 农业市场风险预测-洞察及研究
- 2025年高校教师资格证之高等教育心理学考试题库附答案ab卷
- 社区党务笔试题及答案
- 中心厨房安全管理办法
- 警械培训机构管理办法
- 产品品牌评估管理办法
- 专项小组工作管理办法
- 中央外事接待管理办法
- 2024年出租车网约车司机从业资格证考试题库附参考答案【模拟题】
- “1+X”幼儿照护技能等级证书(中级)考试题库(多选、判断题)
- 摩托车的行车灯光与警示信号
- 中国石油天然气股份有限公司油气田站场目视化设计规定
- 核医学医学影像医技科室质量评估细则
- 观看《中国乒乓之绝地反击》观后感600字三篇
- 体育与健康(水平二)《投掷(18课时)》大单元教学计划
- 培训记录表(模板)
- 大学生创新创业(微课版 第3版)教学大纲
- 外来器械清洗消毒操作流程要点
- 初中物理“秒表的读数”专项练习题-专题同类题【含答案;详细解释,word版;可编辑】
评论
0/150
提交评论