




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章C程序基本结构
本章知识要点
C语言程序的流程控制及简单程序设计标准库函数的分类及使用常用数学函数以及标准的输入输出函数使用随机函数rand()和srand()3.1简单程序设计
3.1.1流程控制概述流程控制是指程序中语句执行的顺序,在1960年末,理论上已经证明了任何复杂的算法都可以由顺序结构、选择结构和循环结构三种基本的流程控制结构组成。对于所有的程序而言,流程控制其实都是顺序结构,也就是说程序语句总体来看就是一条接着一条按照其在程序中的位置顺序执行的。C语言提供了多种语句来实现程序结构,程序的执行部分是由语句组成,功能也是由执行语句实现。C语句可分为:表达式语句、函数调用语句、控制语句、复合语句、空语句与类.介绍这些基本语句及其在顺序结构中的应用,可以使读者对C程序有一个初步的认识,为以后的学习打下基础(1)表达式语句:表达式语句由表达式加上分号“;”组成,运行结果可以得到表达式的值。其一般形式为:表达式;例如:x=y+z;赋值语句;i++;自增1语句,i值增1(2)函数调用语句:由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);函数语句的执行就可以调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句(在后面函数中再详细介绍)。例如:printf("thisisaCProgram");调用库函数,输出字符串。(3)控制语句:控制语句用于控制程序的流程,C语言由特定的语句定义符定义9种控制语句。可以实现程序的各种结构方式。它们可分成3类:条件判断语句:if语句、switch语句。循环执行语句:do…while语句、while语句、for语句。转向语句:break语句、goto语句、continue语句、return语句。(4)复合语句:把一组语句用括号{}括起来组成的一个语句称复合语句。在程序中把复合语句看成一个整体,相当于是单条语句,而不是多条语句。例如:{x=y+z;a=b+c;printf("%d%d",x,a);}是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在右大括号“}”外不能加分号。(5)空语句:只由分号“;”组成的语句称为空语句。其形式为;,不产生任何操作运算,只作为形式上的语句。例如:while(getchar()!='\n');本语句的功能是,只要从键盘输入的字符不是回车则重新输3.1.2简单程序设计举例一个简单的程序仅包含一个main()函数并且程序流程是顺序结构,程序的执行部分通常包含3种基本的语句:输入语句、输出语句、赋值语句,或用于计算的其他表达式语句。例3-1输入三角形的三边长,求三角形面积。分析:已知三角形的三边长a,b,c,则该三角形的面积公式为:其中s=(a+b+c)/2,所以只需要输入三个边,就可以得到三角形的面积。#include<math.h>#include<stdio.h>intmain(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);/*输入边长a,b,c*/s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));/*计算三角形面积*/printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);/*输出三角形面积*/return0;}程序的运行情况为:请输入三角形边(如3,5,6):3,4,5a=⊔⊔⊔3.00,b=⊔⊔⊔4.00,c=⊔⊔⊔5.00,s=⊔⊔⊔6.00area=⊔⊔⊔6.00例3-2将字符'C'、'h'、'i'组成的字符串Chi加密(将每位字符ASCII值加6后变成其他字符的ASCII值)后输出并显示。分析:利用字母的ASCII码值可以进行加减运算特性,在ASCII码运算后再进行输出即可将字母进行加密转换。本例题是将每位字符ASCII值加6后变成其他字符的ASCII值,然后利用printf()进行输出。#include<stdio.h>intmain(){/*定义字符型变量,并给它们赋初值*/charc1,c2,c3,c4,c5,c6,c7;c1='C';c2='h';c3='i';/*输出原码*/printf("原码是:%c%c%c\n",c1,c2,c3);/*对字符进行译码运算*/c1=c1+6;c2=c2+6;c3=c3+6;/*输出译码结果*/printf("密码是:%c%c%c\n",c1,c2,c3);return0;}运行情况如下原码是:Chi密码是:Ino3.2C语言标准库函数
C源程序是由函数组成的。虽然在前面程序中都只有一个主函数main(),但实际使用程序往往由多个函数组成。函数是C源程序的基本模块,相当于其他高级语言的子程序。C程序的全部工作都是由各式各样的函数完成的,所以通常也会把C语言称为函数式语言。C语言提供了极为丰富的库函数(如TurboC,MircosoftC都提供了三百多个库函数),库函数由C编译环境提供,用户无须定义,只需在程序的首部使用预处理命令#include包含有该函数原型的头文件,即可在程序中直接调用,3.2.1C标准库函数的分类C语言丰富的库函数,从功能角度分为以下7类。(1)数学函数。此类函数主要功能是用于数学函数计算。数学函数原型在头文件math.h,使用此类函数前,必须在程序首部将math.h头文件包含进来方可使用。本章3.2.2节常用数学库函数将详细讲解该类函数,在此不再赘述。(2)字符判断和转换函数。此类函数用于对字符按ASCII码分类为:字母、数字、控制字符、分隔符、大小写字母等,也可以使用字符转换函数将参数转换为需要的大小写格式。所有的字符函数都包含在ctype.h头文件中,使用字符函数前都必须在程序的首部将头文件ctype.h包含到程序中。(3)输入输出函数。此类函数主要功能是用于完成数据输入输出功能。函数原型都在头文件stdio.h中,使用此类函数前,必须在程序的首部将头文件stdio.h包含到程序中。本章3.2.3节、3.2.4节将详细讲解该类函数,在此不再赘述。(4)字符串函数。此类函数主要功能是用于字符串操作和处理。字符串函数原型都在头文件string.h中,使用此类函数前,必须在程序的首部将头文件string.h包含到程序中进来方可使用。(5)动态存储分配(内存管理)函数。此类函数主要功能是用于内存管理。内存管理函数原型在头文件alloc.h,使用此类函数前,必须在程序首部将alloc.h头文件包含进来方可使用。后面第9章指针的高级章节将详细讲解该类函数,在此不再赘述。(6)日期和时间函数。此类函数主要功能是获得系统时间或对得到的时间进行格式转化等操作。日期和时间函数原型在头文件time.h,使用此类函数前,必须在程序首部将time.h头文件包含进来方可使用。(7)其他函数。此类函数主要功能是用于其他各种功能。其他函数原型在头文件stdlib.h,使用此类函数前,首先必须在程序头部使用预处理命令#include<stdlib.h>将头文件包含进来方可使用。可以利用此类函数中的rand()函数和srand()函数来取得随机数,本章3.2.6节具体讲解随机函数使用方法。注意:在C语言程序中用预处理命令将头文件包含到程序的形式有两种,例如,针对头文件stdio.h来说预处理命令的形式可以为#include<stdio.h>或#include"stdio.h",使用尖括号表示编译时会先在系统的include目录里查找,若找不到才会到源代码所在目录进行搜索;使用双引号则相反。建议对系统提供的头文件使用尖括号,自己编写的头文件使用双引号。3.2.2常用数学库函数C语言提供的数学库函数可以解决一些只用算术运算符不能完成的问题。数学函数原型都包含在math.h头文件中。除了简单的数学函数,程序开发常用的三角函数和对数函数如表3-1所示。表3-1常用三角函数、对数数学库函数函数名函数和形参类型功能返回值说明sindoublesin(x)doublex;计算sinx的值计算结果x的单位为孤度cosdoublecos(x)doublex;计算cos(x)的值计算结果x的单位为孤度expdoubleexp(x)doublex;求ex的值计算结果logdoublelog(x)doublex;求logex,即lnx计算结果x>0log10doublelog10(x)doublex;求log10x计算结果x>0powdoublepow(x,y)doublex,doubley计算xy的值计算结果pow10doublepow10(x)intx计算10x的值计算结果例3-5打印出三角函数和对数函数的结果。
#include<math.h>#include<stdio.h>intmain(){printf("三角函数:\n");printf("三角函数cosineof1is%.3f\n",cos(1));printf("三角函数sineof1is%.3f\n",sin(1));printf("三角函数tangentof1is%.3f\n",tan(1));printf("\n");printf("\n");printf("对数函数:\n");printf("对数函数e的1次方is%.3f\n",exp(1));printf("2的自然对数函数is%.3f\n",log(2));printf("2的以10为底的对数函数is%.3f\n",log10(2));return0;}例3-6用pow()函数和pow10()函数,分别求10的3次幂的值。#include<math.h>#include<stdio.h>intmain(){doublep=3.0;printf("pow()函数10^%lfis%lf\n",p,pow(10,p));/*pow()函数输出10的3次方的值*/printf("pow10函数10^%lfis%lf\n",p,pow10(p));/*pow10()函数输出10的3次方的值*/return0;}运行结果:pow()函数10^3.000000is1000.000000pow10()函数10^3.000000is1000.0000003.2.3标准输出函数一般C语言程序可分为:数据输入、计算处理和输出处理结果3部分,其中数据的输入与输出是程序的重要组成部分,是程序与用户之间交互的界面如图3-1所示运算输入输出用户其他的高级语言都提供了输入与输出语句,而C语言本身没有输入和输出语句,为实现数据的输入和输出,其库函数提供了一组输入和输出函数,函数scanf()和printf()来完成数据的格式输入和输出操作,其作用是向默认的输入设备(键盘)和输出设备(终端或显示器)输入或输出若干个任意类型的数据。1.printf()函数的功能printf()函数称为格式输出函数,最末一个字母f即为“格式”(format)之意,格式输出函数printf()的一般调用形式为:printf("格式控制字符串",输出项表列);如:printf("a=%d,b=%d\n",a,b);printf("格式控制字符串",输出项表列);
printf()函数功能是按用户所指定“格式控制字符串”的格式,将指定的输出项表列数据输出到标准输出设备(通常为显示器)。格式控制字符串是使用一对双引号括起来的字符串,格式字符串用于指定后面各个输出项的输出格式。输出项表列用于指定输出内容,它通常由一个或多个输出项构成,当有多个输出项时,输出项之间应使用逗号“,”分隔,输出项可以是常数、变量或表达式。2.输出格式输出格式由格式控制字符串加以规定,将输出项表列相对应的输出项以指定的格式进行输出。格式控制字符串有“格式字符”和“普通字符(包括转义字符序列)”两种字符组成,普通字符串在输出时原样输出(或执行),普通字符主要是在显示中起提示作用。格式字符形式为:%[附加格式说明符]格式字符例如,%d,%10.2f等。(1)格式字符。最简单的格式说明符是以%开头后面跟上一个特定的字母,用来与输出项的数据类型相匹配如:“%d”表示按十进制整型输出。“%ld”表示按十进制长整型输出。“%c”表示按字符型输出一个字符。“%s”表示按实际宽度输出一个字符串表3-2格式说明符格式字符功能d输出带符号10进制形式整数(正数不输出符号)o输出无符号8进制形式整数(不输出前缀0)x,X输出无符号16进制形式整数(不输出前缀Ox)u输出无符号10进制形式整数f输出单、双精度小数形式实数(6位小数)c输出单个字符s输出一串字符串e,E以指数形式输出单、双精度实数(尾数含1位整数,6位小数,指数至多3位)g,G以%f或%e中输出宽度较小的格式输出单、双精度实数,不输出无意义的01)整型数据格式输出。%d:输出十进制基本整型数据。例如,设整型数据a=12;b=13;printf("%d,%d",a,b);%ld:输出十进制长整型数据。例如,longinta=1234567;printf("%ld",a);%u(或%lu):输出无符号十进制基本整型数据(或长整型数据)。%o(或%lo):以无符号八进制格式输出整型数据(或长整型数据)。%x(或%lx):以无符号十六进制格式输出整型数据(或长整型数据)。②实型格式格式输出C语言程序的浮点数有10进制小数和科学计数法两种输出形式,对于单精度和双精度浮点数来说,它们的格式说明符完全相同。%f:以10进制小数形式输出单精度、双精度浮点数。%e:以科学计数法形式输出单精度、双精度浮点数。%g:根据浮点数的大小,自动选用%f或%e格式中输出宽度较短的一种格式,且不输出无意义的零。【例3.7】以10进制小数形式输出单精度、双精度浮点数#include<stdio.h>intmain(){doublex=3.1415;floaty=15.725;printf("x=%f,y=%f\n",x,y);printf("x=%e,y=%e\n",x,y);printf("x=%f,x=%e,x=%g"x,x,x);return0;}程序运行结果为x=3.141500,y=15.725000x=3.141500e+000,y=1.572500e+001x=3.141500,x=3.141500e+000,x=3.1415③字符型格式说明符%c:输出一个字符。.charc;c=’s’;printf("%c,",c);则程序输出结果为:s④字符串格式说明符%s:按实际宽度输出一个字符串。printf("%s","hello);输出结果为:hello(2)转义字符转义字符作为格式控制字符串中的非格式字符,由“\”和一个特定的字母组成,用于输出某些特殊字符和不可见字符。常用的转义字符符如表3-3所示。表3-3转义字符转义字符形式功能\n换行\t横向跳格(即跳到下一个输出区-占8列)\v竖向跳格\b退格(不换行)\r回车\f走纸换页\\反斜杠字符“\”\’单引号(撤号)字符\dddl到3位8进制数所代表的字符\xdd1到2位16进制数所代表的字符(3)附加格式说明符在%和格式符之间的附加格式说明符,用于指定输出时的对齐方向、输出数据的宽度、小数部分的位数等要求,附加格式说明符可以是其中之一或多个字符的组合。常用的附加说明符如表3-4所示。表3-4附加格式说明符附加说明符意义m(m为正整数)为域宽描述符,数据输出宽度为m,若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0.n(n为正整数)为精度描述符,对实数,n为输出的小数位数,若实际位数大于所定义的精度数,则截去超过的部分;对于字符串,表示输出n前各字符,。l表示整型按长整型量输出如%ld,%lx,%lo,对实型按双精度型量输出如%lf,%le。h表示按短整型量输出,如%hd,%hx,%hdo,%hu-数据左对齐输出,右边填空格,无-时默认右对齐输出+输出符号(正号或负号)0表示数据不足最小输出宽度时,左补零;空格输出值为正时冠以空格,为负时冠以负号#对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点对于整型格式说明符其附加格式说明符一般形式为:其一般形式为:%[-]][m]整型格式说明符.-:依然表示数据输出时左对齐;m.:m表示整个数据的输出最小宽度。例如:设整型数据intx=18,y=-1;printf("%-5d,%4d\n",x,y);printf("%15o,%-10x\n",y,y);上面printf函数输出结果为:18⊔⊔⊔,⊔⊔-1⊔⊔⊔⊔37777777777,ffffffff⊔⊔对于浮点数格式说明符,其附加格式说明符一般形式为:"%[-][m.n]浮点格式说明符"。-:依然表示数据输出时左对齐;m.n:m表示整个数据的输出宽度,n表示小数部分输出的位数。【例3.8】以指定的格式输出10进制小数形式单精度浮点数#include<stdio.h>intmain(){ doublepi=3.1415; printf("%f,%6.2f,%.2f,%-6.2f\n",pi,pi,pi,pi);return0;}程序输出结果为:3.141500,⊔⊔3.14,3.14,3.14⊔⊔对于字符型格式说明符,其附加格式说明符一般形式为:"%mc":以宽度m输出一个字符,若m>1,则在输出字符前面补m-1个空格。例如:charc;c=’s’;printf("%3c",c);输出结果为:⊔⊔s对于字符串格式说明符,其附加格式说明符一般形式为:"%[-]ms"或"%[-]m.ns"。其中%[-]ms表示输出的字符串占m列,若字符串本身长度超过m列,则按实际宽度输出;若字符串长度小于m列,若m前有负号“-”,字符串左对齐,右补空格,否则字符串右对齐,左补空格。%[-]m.ns表示输出的字符串占m列,但只取字符串中左端n个字符。若m>n,若m前有负号“-”时,这n个字符左对齐,右补空格,当m前没有负号“-”时,这n个字符右对齐,左补空格;若m<n,则m自动取n值,以保证n个字符正常输出。【例3.9】以指定的格式输出字符串。#include<stdio.h>intmain(){printf("%s,%3s,%8s,%-8s,%8.3s","hello","hello","hello","hello","hello");return0;}程序输出结果为:hello,hello,⊔⊔⊔hello,hello⊔⊔⊔,⊔⊔⊔⊔⊔hel(4)普通字符格式控制字符串”中,除了以上三项字符以外的其他字符都是普通字符,在进行输出时在显示屏幕上将按原样输出显示。例如:inta=7,b=8;printf("输出a=%d,输出b=%d\n",a,b);上述程序段中,printf函数的“格式控制字符串”中,除了两个“%d”以外的其它字符均为普通字符,其中“输出a=,输出b=”是可打印字符,它们将在显示屏幕上原样输出,最后一个字符’\n’是一个转义字符,表示“换行符”,输出时光标将在屏幕上另起一行显示。上述程序段的输出结果为输出a=7,输出b=8
(光标另起一行闪烁)3、函数说明在使用格式输出函数时,需要注意以下问题。(1)整个格式控制字符串必须用双引号括住,如果有输出项目,则格式控制字符串与第一个输出项之间一定要用一个逗号隔开;(2)格式控制中的各格式说明符与输出项表列数量、顺序、类型等必须一一对应,否则会产生意想不到的后果;(3)格式说明符除一些大写字母具有特殊含义外,均要用小写字母,如%d不能写成%D;(4)数值范围在0-255之间的整数也可以用字符形式输出,首先将整数转换成相应的ASCII码字符,然后进行输出。反之,也可以将一个字符型数据转换为相应的ASCII码数值以整数形式输出。intx=83;chary='s';printf("x=%d,%c\n",x,x);printf("y=%d,%c\n",y,y);程序运行结果为:x=83,sy=83,s(5)若要输出符号“%”,应连用两个“%”。例如:printf("x=%f%%",1.0/3);输出结果为:0.333333%3.2.4标准输入函数C语言并没有配备专门输入语句来实现输入,所有的输入操作都是通过函数调用实现的。本节介绍标准的输入函数scanf()默认的标准输入设备通常为键盘,scanf()函数定义在头文件“stdio.h”中来完成,因此在使用这些函数之前应该使用预编译命令#include<stdio.h>将库函数包含到C程序中。1.scanf()函数的功能格式输入函数其一般调用形式如下:scanf("格式控制字符串",参数列表);scanf("格式控制字符串",参数列表);
scanf()函数的功能就是按照指定的格式(通常是键盘)输入数据,并将数据存入内存地址表所对应的内存单元中格式控制字符串由“%”和格式说明符组成,不同的格式说明符规定用不同的格式输入数据给相应的输入项;参数列表是接收输入数据的变量地址或字符串的首地址,而不是变量本身;列表中至少有一个输入项,每个输入项必须是变量名前加地址运算符“&”表示(如&x,&y分别表示变量x,y的变量地址),这与printf函数完全不同,多个地址输入项之间需要用逗号“,”分隔。
1.整型格式说明符格式输入函数的整型格式说明符及其含义如表3.5所示
表3.5scanf函数的整型格式说明符整型格式符意义%d输入10进制基本整型数据%ld输入10进制长整型数据%u输入无符号10进制基本整型数据%lu输入无符号10进制长整型数据%o(%lo)输入8进制基本(长)整型数据%x(%lx)输入16进制基本(长)整型数据%hd输入10进制短整型数据%ho输入8进制短整型数据%hx输入16进短整型数据%m整型格式说明符按整数m指定的宽度输入一个整型数据【例3.11】格式输入函数scanf()输入的整型格式数据。#include<stdio.h>intmain(){ inta,b,c; scanf("%d%d",&a,&b); c=a*a+b*b; printf("c=%d\n",c);return0;}程序运行时按如下方式输入a、b的值:4⊔5↙(输入a、b的值)z=41(输出z的值)利用键盘输入整型数据时,当格式说明符中没有宽度说明时应注意以下问题:(1)如果格式说明符之间没有其它字符,例如上述例3.6程序的scanf函数:scanf("%d%d",&a,&b);“%d”之间没有其它字符则输入时,数据之间用“空格”、“Tab”或“回车”来分隔;例如,上述例3.6程序在执行scanf函数时,按下面形式输入数据是正确的。①3⊔4↙②3↙4↙③3<按Tab键>4↙但按下面形式输入数据都是不合法的。①3,4↙②3、4↙③3;4↙(2)如果格式说明符之间包含有其它普通字符,则输入时,普通字符将按原样输入。例如,上述例3.6程序的scanf函数若改为如下形式scanf("a=%d,b=%d",&a,&b);则执行时,应按如下形式输入a、b的值a=3,b=4↙
普通字符,按原样输入2.实型格式说明符格式输入函数的单精度、双精度浮点数(实型数)的格式说明符不相同,这与格式输出函数printf略有差别。表3.6scanf函数的实型格式说明符实型格式符意义%f、%e用于输入单精度实型数据%lf、%le用于输入双精度实型数据注意:实型数据输入时输入的数据可以是整数(不带小数点)、带小数点的定点数或者指数形式(如3e-4,5.4e3)表示的实数;在输入函数scanf()没有%m.nf这种规定输入数据的精度格式。例如:Scanf(“%6.3f”,&y);是非法的,不能用此语句输入小数为3位的实数,当输入数据123456不能使得y的值为123.456。一般在执行scanf函数前,先执行printf函数,在显示屏幕上输出一行提示信息,然后光标在提示信息之后闪烁等待用户通过键盘输入数据。这种程序风格具有良好的用户界面,值得借鉴。例如下面程序段:
doublex,y,z; printf("请输入直角三角形边x,y:"); scanf("%lf,%lf",&x,&y); c=sqrt(x*x+y*y); printf("直角三角形边长z=%f\n"z);程序运行效果如下:请输入直角三角形边x,y:3.0,4.0↙(前边为提示信息,后边为输入数据)直角三角形边长z=5.000000(输出第三条边c的边长)注意:变量x、y为双精度浮点类型,因此scanf函数相应的格式说明符只能用“%lf”,而不能用“%f”。另外,“%lf,%lf”中的逗号“,”是普通字符,在输入时应按原样输入。3.字符型格式说明符用于输入字符型数据的格式说明符为:“%c”
或“%mc”m为整型数据,表示输入字符数据时的宽度。【例3.12】#include<stdio.h>intmain(){ charc; scanf("%c",&c); printf("%c,%d\n",c,c);return0;}程序运行时须输入一个字符型数据给变量cB↙(输入字符‘B’给变量c)B,66(输出变量c的值)4.字符串格式说明符用于输入字符串数据的格式说明符为:“%s”,输入的字符串不必加双引号,但遇到空格、制表符或换行将终止接收,详细情况将在后面章节讨论。下面就scanf函数使用说明几点:
(1)与printf函数一样,scanf函数的格式控制中的各格式说明符与内存地址表中的变量地址在个数、次序、类型方面必须一一对应。(2)参数列表中必须是变量地址,而不应是变量名。例如scanf("%d%d",x,y);是不对的,应将x,y,应为&x,&y。这是C语言特点,需要重点注意。(3)在%与格式说明符之间可以加上一个附加说明符星号“*”,如%*d,使对应的输入数据不赋给相应变量。(4)当整型或字符型格式说明符中有宽度说明时,按宽度说明截取数据。(5)在“格式控制字符串”中除了格式控制外还有其它非格式字符的普通字符,则在输入数据时按原样输入。(6)在使用“%c”输入字符时,空格和转义字符都作为有效字符输入。3.2.5字符的输出和输入格式化输入输出函数scanf()和prinf()
可以完成单个字符的输入和输出,但是由于C语言程序中经常用到单个字符的输入和输出,所以专门提供了对单个字符的输入输出函数getchar()和putchar(),函数原型在头文件stdio.h中,所以使用它们前应用预处理命令#include<stdio.h>将文件包含到程序文件中。1.单个字符输出函数putchar()调用格式:putchar(ch);参数说明:ch为字符型常量或者变量;也可以是整型数据。功能说明:当参数ch为字符型数据时,putchar函数在显示屏幕的光标闪烁处显示ch所表示的字符;当参数ch为整型数据时,则显示以整数ch为ASCII码值的字符。Putchar()函数除了能输出普通字符外,也可以输出控制字符和转义字符,如:‘\n’、‘\t’等。【例3.13】#include<stdio.h>intmain(){charc1,c2,=’h’,c3,c4,c5;c1=c2-5-32;/*c2-5是小写字母c,c2-5-32是大写字母c*/c3=c2+1;/*c2+1是小写字母i*/c4=c2+6;/*c2+6是小写字母n*/c5=c2-7;/*c2-7是小写字母a*/putchar(c1);putchar('\n');putchar(c2);putchar('\n');putchar(c3);putchar('\n');putchar(c4);putchar('\n');putchar(c5);putchar('\n');return0;}putchar(‘\n’)输出一个换行符,因此上面程序执行时,在输出每个变量所代表的字符后,紧接着输出一个换行符,所以程序运行结果为China另外,也可以将变量的值直接用字母的对应的ASCII码来赋值,若将上述程序的4个赋值语句改为:c1=67;c3=105;c4=110;c5=97;则putchar函数执行时,将分别显示以相应整型数据为ASCII码值的字符,因此运行结果与例3.8相同。2.单个字符输入函数getchar()调用格式:getchar();功能说明:接收从标准输入设备中读入一个字符,并返回该字符,getchar函数没有参数。下面程序段:charch1;printf("请输入一个字符::"); /*提示用户输入一个字符*/ch1=getchar();/*读入一个字符*/putchar(‘\n’)printf("输入的字符为:");/*将字符回显出来*/putchar(ch1);putchar(ch1+32);putchar(‘\n’) return0;}程序运行结果为:请输入一个字符:A↙(输入‘A’后,按“回车”键,字符才能送到内存)输入的字符为:Aa若程序运行时从键盘输入字符ABCD并按“回车”:请输入一个字符:ABCD↙(输入ABCD后,按“回车”键)输入的字符为:A(只接收到首字符‘A’并且赋值给变量ch1,然后输出)由此可见,执行字符输入函数时,尽管可以从键盘输入多个字符,但getchar只能接收一个字符。getchar函数与putchar函数一次只能输入、输出一个字符。而格式化输入、输出函数scanf和printf可以按照指定格式输入、输出若干个任意类型数据。3.2.6随机函数在进行程序设计时有时需要随机输入一些数,这时调用随机函数可以完成此功能。在C语言中要使用随机函数rand()和srand()时,必须包含以下头文件。#include<stdio.h>#include<stdlib.h>#include<time.h>/*需引用的头文件*/其中随机函数rand()函数和srand()函数包含在头文件stdlib.h中,需要在程序头部包含头文件stdlib.h。rand()函数原型:intrand(void);功能是返回0到rand_max之间的随机整数,rand_max至少是32767,C语言预生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。srand()函数原型:voidsrand(unsignedseed);功能:初始化随机数发生器,可以使随机数发生器rand()函数产生新的随机序列,一般配合time(NULL)函数使用,因为时间每时每刻都在改变,产生的seed值都不同,srand((unsigned)time(NULL));产生随机种子,因而程序头部应包含time.h头文件。利用随机函数要产生指定范围的随机数,其通常为公式"intx=1+(int)rand()%n;"可以生成1到n之间的随机数,如1+rand()%100表达式将产生1-100之间的数字,也可以使用公式a+(int)rand()%(b-a+1)来产生a~b之间的数字;还有一种比较好公式为:j=1+(int)(n*rand()/(RAND_MAX+1.0))产生一个1到n之间的随机数,这两者都可以实现产生指定范围的数字。【例3.14】利用随机函数rand()和srand()来产生一期体育彩票的中奖号码
分析:彩票号码是需要随机产生的,但是彩票号码的产生又要求在一定的范围内,所以此函数需要使用随机函数rand()。体育彩票要求6个红球为介于1到33的随机数值和蓝球为1到16间的随机数值#include<stdio.h>#include<stdlib.h>/*需引用的头文件*/intmain(){ /*产生本期中奖号码:其中红球6个范围为1-33,蓝球1个范围为1-16*/ inthq1,hq2,hq3,hq4,hq5,hq6,lq1; hq1=1+(int)rand()%33;/*产生1-33之间的红球*/ hq2=1+(int)rand()%33; hq3=1+(int)rand()%33; hq4=1+(int)rand()%33; hq5=1+(int)rand()%33; hq6=1+(int)rand()%33; lq1=1+(int)rand()%16;;/*产生1-16之间的蓝球*/ /*输出本期中奖号码:其中红球6个范围为1-33,蓝球1个范围为1-16*/ printf("本期中奖号码是:\n红球%02d%,%02d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论