《在屏幕上显示HelloWorld》由会员分享,可在线阅读,更多相关《在屏幕上显示HelloWorld(41页珍藏版)》请在金锄头文库上搜索。
1、在屏幕上显示HelloWorldStillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望例2-2 在屏幕上显示:Programming is fun!And Programming in C is even more fun!#include void main( ) printf(Programming is fun! n); printf(And Programming in C is even more fun! n); 根据要求在屏幕上显示文字: printf(要显示的文字);注:换
2、行符n的使用源程序:22.2 求华氏温度100F对应的摄氏温度 例2-3 求华氏温度100F 对应的摄氏温度计算公式 其中C为摄氏温度,F为华氏温度 2.2.1 程序解析#include void main( ) int celsius, fahr; /*变量定义*/ fahr=100; /*常量赋值于变量*/ celsius=5*(fahr-32)/9; /*表达式赋值于变量*/ printf(fahr=%d,celsius=%dn,fahr,celsius); /*输出结果*/输出: fahr=100, celsius=37程序中涉及语法点程序中涉及语法点: 常量、变量和数据类型常量、变量
3、和数据类型 运算符、表达式运算符、表达式 输出变量的值输出变量的值 3例2-3 程序中celsius = 5*(fahr-32)/9;2.2.2 常量、变量和数据类型其中 5、32 、9 为常量 1.常量常量:在程序运行过程中,其值不会被改变常量分常量分数据类型数据类型,由书写格式确定由书写格式确定整型:不带小数点的数,即整数 例 100、-10、5、0实型:带小数点的数 例 123.45、-0.5432142.变量变量:在程序运行过程中,其值可以被改例2-3 程序中int celsius, fahr; celsius = 5 * (fahr - 32) / 9;其中 celsius 、 fa
4、hr为变量 变量定义的一般形式: 类型名 变量名表;使用变量必须要定义。注:double型数据比float精度高(取值范围大 ,有效位数多)例如:int celsius, fahr; 定义整型变量,存放整数float _x; 定义单精度浮点型变量,存放实数double a1, b2; 定义双精度浮点型变量,存放实数5变量取名,按标识符取名,一般用小写字母,见名知义定义变量做了3件事:变量取名、确定数据类型、分配内存 标识符: 规定由字母、数字以及下划线组成, 第一个字符必须是字母或下划线。数据类型,由类型关键字确定,同时也确定数据的表示范围 int -32768 32767 或 -214748
5、3648 2147483648 float -10-381038 有效位数78 位 double -10-30810308 1516位分配内存,对定义的每一个变量分配对应的存储单元celsiusfahr而 fahr=100; 表示100存入fahr变量的存储单元即 fahr100例如, celsius, fahr,_x,a1,b1是标识符;而c1,b-a,2b不是标识符6注: C语言中的变量与数学上的符号含义不同例 x=x+1数学上无意义C语言表示把x变量存储单元的值取出加1,然后再保存到x变量存储单元中变量必须先定义,后使用。定义位置在程序的开始应该先赋值,后引用#include void
6、main( ) int celsius, fahr; fahr=100; celsius=5*(fahr-32)/9; printf(fahr=%d,celsius=%dn,fahr,celsius); 72.2.3 算术运算和赋值运算例2-3 程序中fahr=100; celsius=5*(fahr-32)/9;赋值运算1.算术运算+ - 加 减 双目运算 4级 从左到右* / % 乘 除 取余 双目运算 3级 从左到右先算术运算,后赋值运算计算通过表达式实现表达式:用运算符将运算对象及括弧按语法规则连接起来的式子例 数学式 C表达式 5*(fahr-32)/9 (-b+sqrt(b*b-4
7、*a*c)/2/a注:函数sqrt(x)计算,括弧改变计算顺序8注 整/整是取整 如 -5/3=-1 1/3=0取余%的两边运算对象必须是整型 如 565 10040 a%b 则 int a,b; +、- 又可作为正、负运算符 + - 正 负 单目运算 2级 从左到右 如 -10+10?5*(fahr-32)/9 和 5/9*(fahr-32) 等价吗92.赋值运算格式 变量 = 表达式例 fahr=100; celsius=5*(fahr-32)/9;操作 计算赋值运算符右侧表达式的值 将赋值运算符右侧表达式的值赋给左侧的变量注: = 是 赋值符,而不是等号 变量 = 表达式;称之赋值语句赋
8、值运算符: = 14级 从右到左赋值语句表达计算公式x1=(-b+sqrt(b*b-4*a*c)/2/a;102.2.4 格式化输出函数printf( )例2-3 程序中printf(fahr=%d, celsius=%dn, fahr, celsius);格式 printf(格式控制,输出表列);其中 格式控制是由双引号括起来的字符串,包括两种信息(1)普通字符 照原样输出字符 或 转义符 如 fahr= celsius= 例2-1 printf(Hello World! n); 中 Hello World! n是普通字符 按指定的格式输出数据,格式控制字符与被输出的数据类型有关 int型:
9、 %dfloat、double型:%f 或 %.nf %m.nf(2)格式说明 %格式控制符 保留小数位 6位 n位 整个数占m位11输出表列是输出的数据 ,可以是常数、变量和表达式, 每个输出数据之间用逗号分隔。如 printf(“%f %f %f “,123.45,x,2*a+b);printf(fahr = %d, celsius = %dn, fahr, celsius);操作 将输出表列中的数据按格式说明在显示屏输出例2-3 程序中 fahr=100; celsius=5*(fahr-32)/9; printf(fahr = %d, celsius = %dn, fahr, cels
10、ius);注:%格式控制符与输出数据的个数、类型、位置必须一一对应 输出表列12#include void main( ) int celsius, fahr; /*变量定义*/ fahr=100; /*常量赋值于变量*/ celsius=5*(fahr-32)/9; /*表达式赋值于变量*/ printf(fahr = %d, celsius = %dn, fahr, celsius); /*输出结果*/输出:fahr =100, celsius = 37例2-3 求华氏温度对应的摄氏温度程序缺陷:无通用性 只能求出fahr=100时的摄氏温度13#include void main( )
11、int celsius, fahr; scanf(%d,&fahr); /*用键盘键入数据赋值于变量*/ celsius=5*(fahr-32)/9; printf(fahr=%d,celsius=%dn,fahr,celsius); 改变例2-3 求华氏温度对应的摄氏温度运行程序: 键入: 100 输出: fahr=100,celsius=37键入: 120 输出: fahr=120,celsius=48142.2.5 格式化输入函数 scanf()格式 scanf(格式控制,地址表列); 地址列表是输入数据存入内存的地址,可以是变量的地址,每个内存地址之间用逗号分隔。格式控制是用双引号括起
12、来的字符串, 字符串由格式说明和普通字符构成怎么知道变量的地址?利用地址运算符求出变量的地址 格式 &变量名例 int a,b ; 则 &a,&b 表示取a,b变量的地址例 int a; float b; scanf(%d%f,&a,&b);格式说明由%和格式字符构成,与数据类型有关 int型 %d float型 %f double型 %lf15普通字符,在输入数据时需要原样输入的字符 例 scanf(x=%f,&x); 输入数据时, x=2.5 x=必须照原样输入操作 将键盘键入的数据按指定类型格式存入指定内存存储单元 #include void main()int a,b,c; scanf
13、(%d%d%d,&a,&b,&c); printf(%d,%d,%dn,a,b,c);例格式控制地址表列运行 输入 3 4 5 输出 3,4,5 一般 普通字符作为输入数据之间的分隔符使用。如 , 空格 例 scanf(%d,%f,&a,&b); 输入数据时 10,12.5无普通字符时输入数据之间用空格分隔符 例 scanf(%d%f,&a,&b); 输入数据时 10 12.516在格式说明中无普通字符时,键入数据之间可用空格、或分隔,即多各空格分割,上例输入可改为 3 4 5 一个跳8个空格或 3 4 5 在格式说明中用了普通字符,则普通字符作为数据之间的分隔符 如上例改用输入函数scanf
14、()为 scanf(%d,%d,%d,&a,&b,&c); 输入则为 3,4,5 scanf(a=%d, b=%d,c=%d,&a,&b,&c); 输入则为 a=3,b=4,c=5由此可见,为了减少不必要的输入,在scanf()函数的格式控制中尽量不要出现普通字符。注 %格式控制符与输入数据的个数、类型、位置必须一一对应 例 scanf(%d%d%d,&a,&b,&c);17对一般简单程序编程算法1.输入已知值2.按计算公式求值3.输出结果例 求二元一次方程ax2+bx+c=0的实根已知b*b-4ac0。分析 已知b*b-4ac0 则实根为算法1.输入已知值a,b,c2.代入公式求x1,x23
15、.输出x1,x2程序#include stdio.h#include math.hvoid main()float a,b,c,x1,x2; scanf(%f,%f,%f,&a,&b,&c); x1=-b/(2*a)+sqrt(b*b-4*a*c)/(2*a); x2 =-b/(2*a)-sqrt(b*b-4*a*c)/(2*a); printf(x1=%f x2=%fn,x1,x2); 喔!编程原来这么简单!顺序结构182.2.6 常用数学库函数库函数C语言系统提供事先编好的函数,供用户在编程时调用。如 scanf(), printf(), sqrt()平方根函数 sqrt(x): 指数函数
16、 exp(x):ex 绝对值函数 fabs(x):|x| 以e为底的对数函数 log(x):ln(x)幂函数 pow(x, n): xn 以10为底的对数函数 log10(x):log10(x)常用数学库函数函数调用格式 函数名(参数)例 1.12 pow(1.1,2) e2.3 exp(2.3) 注:参数的个数、类型一致#include命令用户调用库函数时,将相应的头文件包含到源程序中。例 调用scanf(), printf(),需要 #include 调用sqrt(),需要 #include 19例2-5 输入存款金额 money、存期 year 和年利率 rate,根据公式计算存款到期时
17、的本息合计sum(税前),输出时保留2位小数。sum=money(1+ rate)year使用xypow(x, y)函数 sum=money*pow(1+rate,year)#include #include void main( ) int money, year; double rate, sum; printf(input money, year and rate: n); scanf(%d%d%lf, &money, &year, &rate); sum = money * pow(1+rate, year); printf(sum = %.2f, sum);input money,
18、year and rate: 1000 3 0.025sum = 1076.89202.3 计算分段函数 例2-4 输入x,求分段函数 f(x) 的值,保留2位小数。2.3.1 程序解析#include void main( ) double x,y; printf(input x(x0): n); scanf(%lf,&x); if(x0):9.5y=f(9.500000)=12.67input x(x0):21.3y=f(21.300000)=42.75输入xx15y=4/3*xy=2.5x-10.5输出y分支结构假真程序中新语法点:x=15 关系运算if(x=15) y=4*x/3;el
19、se y=2.5x-10.5;ifelse语句212.3.2 关系运算1.关系运算符 小于 大于= 大于或等于= 等于!= 不等于6级7级从左到右 双目运算6种关系符2.关系表达式格式 用关系运算符将2个表达式连接起来式子操作 关系表达式将两边的表达式的值进行比较得到 逻辑值 1 为真 0 为假例 x=1当x=0.51当x=2.4022关系表达式用途:描述简单的条件判断例 判断 x 是否为负数 x0 判断 x 是否不为零 x!=02.3.3 ifelse语句格式 if(表达式) 语句1 else 语句2表达式语句1语句210操作 当表达式的值为1(真),执行语句1,否则执行语句2表达式 可以是
20、关系表达式语句i 单个语句或复合语句 复合语句: 语句1 ; 语句2 ; 23例 输入x,求分段函数f(x)的值,保留1位小数。输入xx!=0y=1/xy=0输出y假真#include void main( ) float x, y; printf(input x: n); scanf(%f, &x); if(x!=0) y=1/x; else y=0; printf(f(%.2f)=%.1fn, x, y); input x:2.5f(2.50)=0.4将if(x!=0)改为 if(x),运行结果相同说明:if(表达式)中的表达式可以是任意表达式 表达式的值非0为真,0为假24注:当ifel
21、se语句中语句2不存在允许else缺省格式 if(表达式) 语句1 表达式语句110#include void main( ) float x, y; printf(input x: n); scanf(%f, &x); y=0; if(x!=0) y=1/x; printf(f(%.2f)=%.1fn, x, y); 输入xx!=0y=1/xy=0输出y假真例,改写上例25例例 输入两个实数,按小大次序输出ab输入a,b10t=aa=bb=t输出a,b#include void main()float a,b,t; scanf(%f,%f,&a,&b); if(ab) t=a;a=b;b=t
22、; printf(%7.2f,%7.2f,a,b);注 不能写成if(ab) t=a;a=b;b=t;26例2-6 输出一张华氏摄氏温度转换表,将华氏温度从3035F之间的每一度,分别转换成相应的摄氏温度并输出。 fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.72.4 输出华氏摄氏温度转换表#include void main( ) float celsius,fahr; printf(fahr celsiusn); fahr=30; celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,
23、celsius);运行得表的第一行数据 例2-3程序2.4.1 循环概念27#include void main( ) float celsius, fahr; printf(fahr celsiusn); fahr=30; celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius); fahr=31; celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius); fahr=35; celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsi
24、us);fahr=_;celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius);重复30、31、 、3528fahr=_;celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius);重复30、31、 、45第一次 fahr=30第二次 fahr=31改写 fahr=fahr+1第三次 fahr=32同理 fahr=fahr+1第六次 fahr=35 同理 fahr=fahr+1fahr=30celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,
25、celsius);fahr=fahr+1;fahr=35真假goto无条件转移 格式 goto 语句标号; 其中,语句标号用标识符命名.停29#include void main( ) float celsius, fahr; fahr=30; printf(fahr celsiusn); loop: if(fahr=35) celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius); fahr=fahr+1; goto loop; else ;/*可省略*/ 注goto语句与if语句配合使用构成循环结构goto破坏程序的结构,可读性差,少
26、用或不用。构成循环的要素:循环体条件判断进入每次循环的准备循环体条件判断循环前准备下次循环前准备循环结构 根据条件的判断对某一段程序重复执行302.4.2 for语句格式 for(表达式1; 表达式2; 表达式3) 语句其中 语句是一个语句或复合语句,循环体 表达式1进入循环之前求值,为进入循环作准备 表达式2 是条件,求值得真(非0)做循环,假(0)退出循环 表达式3 做一次循环后,求值,为进下一次入循环作准备操作 (1)做表达式1 (2)求表达式2,若真(非0)做内嵌语句, 然后做(3);若假(0) 终止for循环。 (3)做表达式3;转到(2) 表达式2语句非00表达式1表达式3 loo
27、p:表达式1; if(表达式2) 语句;表达式3; goto loop; 等价于31例2-6 输出一张华氏摄氏温度转换表,#include void main( ) float celsius, fahr; printf(fahr celsiusn); for(fahr=30;fahr=35;fahr=fahr+1) celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius); fahr=30celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius);fahr=fahr+1;fahr=3
28、5真假停表达式1表达式2表达式3循环体for书写顺序和执行顺序不同 隐含循环32注:循环体是复合语句for(fahr=30;fahr=35;fahr=fahr+1) celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius); for(fahr=30;fahr=35;fahr=fahr+1) celsius=5*(fahr-32)/9; printf(%3.0f %6.1fn,fahr,celsius); 循环体空语句for(fahr=30;fahr=35;fahr=fahr+1); celsius=5*(fahr-32)/9; print
29、f(%3.0f %6.1fn,fahr,celsius); ?33即 求 1+2+3+4+.+100可以直接使用赋值语句 s=1+2+3+4+.+100; 但语句太长改写为 s=0; s=s+1; s=s+2; . s=s+100;同一计算步骤s=s+ii=1,2,3,.,100计算前s=0s=0i=1i100s=s+ii=i+1输出s流程图根据i100条件,重复执行s=s+i;i=i+1程序段100次但语句太多非00例2-7表达式1表达式2表达式3循环体34#include stdio.hvoid main()int i,s; s=0; for(i=1; i=100; i=i+1) s=s+
30、i; printf(s=%dn,s);程序s=0i=1i100s=s+ii=i+1输出s流程图非00表达式1表达式2表达式3循环体格式 for(表达式1; 表达式2; 表达式3) 语句运行 输出 s=5050352.4.3 指定次数的循环程序设计for(表达式1; 表达式2; 表达式3) 语句表达式2语句非00表达式1表达式3要用循环次数控制循环,引入概念循环变量、初值、终值、增量#include stdio.hvoid main()int i,s; s=0; for(i=1; i=100; i=i+1) s=s+i; printf(s=%dn,s);例2-7中循环变量初值终值增量i=100语
31、句非00i=1i=i+1表达式1表达式2表达式3当增量为1,循环变量作为循环次数控制循环36#include int main(void) int repeat, ri; int x, y; scanf(%d, &repeat); for(ri=1; ri=repeat; ri+) scanf(%d, &x); if(x0) y=-1; else if(x=0) y=0; else y=1; /*-*/ printf(sign(%d) = %dn, x, y); 实验题的测试循环输入一个整数 x,计算并输出下列分段函数 sign(x) 的值。 37例 求分析 s=0; i=1,s=s+1 i=
32、2,s=s+1/3; i=3,s=s+1/5 . i=n,s=s+1/(2n-1);s=s+1/(2*i-1)i=1,2,3,., n循环前 s=0i=ns=s+1/(2*i-1)非00i=1i=i+1s=0#include void main( ) int i, n; double s; scanf (%d, &n); s=0; for (i=1;i=n;i=i+1) s=s+1.0/(2*i-1); printf(s=%fn,s);i增量为1循环次数控制循环输入n循环变量初值终值增量前n项之和38例 求分析s=s+1/ii=1,3,5,., n循环前 s=0i=ns=s+1/i非00i=1
33、i=i+2s=0循环变量i、初值1、终值n、增量2#include void main( ) int i,n; double s; scanf (%d, &n); s=0; for (i=1;i=n;i=i+2) s=s+1.0/i; printf(s=%fn,s);i增量为2循环变量的值控制循环输入n前n项之和 s=0; i=1,s=s+1 i=2,s=s+1/3; i=3,s=s+1/5 . i=n,s=s+1/(2n-1);39例2-8 求前n项之和多项式求和 s=s+item(通项)i=1,2,3,., n引入变量flag表示s=sitem i: 1 2 3 4 .flag: +1 -
34、1 +1 -1 . item: 1 1/3 1/5 1/7 .flag=1flag=-flagitem=flag*1/ (2*i-1)#include void main( ) int i,n,flag; double item,s; scanf (%d, &n); s=0; flag=1; for (i=1;i=n;i=i+1) item=flag*1.0/(2*i-1); s=s+item;flag=-flag; printf(s=%fn,s);通项为1/(2*i-1)40例2-9 求n!即 1*2*3*4*n改写为 s=1; s=s*2; . s=s*n;同一计算步骤s=s*ii=1,2,3,4,.,n循环前 s=1#include void main( ) int i,n; double s; scanf (%d, &n); s=1; for(i=1;i=n;i=i+1) s=s*i; printf(s=%fn,s);多项式求积 s=s*item(通项)s=1; for(i=1;i=n;i=i+1) s=s*i;41