第3章最简单的C程序设计_第1页
第3章最简单的C程序设计_第2页
第3章最简单的C程序设计_第3页
第3章最简单的C程序设计_第4页
第3章最简单的C程序设计_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

要编写C程序,需要两个方面的知识:一是根据所解问题的要求,设计出解题的具体步骤,这一步骤称为设计算法二是用C语言写出程序,以便计算机能正确地执行第3章最简单的C程序设计

——顺序程序设计

3.1算法是程序的灵魂3.2程序的三种基本结构3.3C语句综述3.4赋值表达式和赋值语句3.5数据输入输出的概念3.6字符数据的输入输出3.7简单的格式输入与输出3.8顺序结构程序设计举例3.9提高部分3.1算法是程序的灵魂3.1.1算法的概念3.1.2怎样表示算法P483.1.1算法的概念一个程序包括以下两个方面的内容:对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构对操作的描述。即操作步骤,也就是算法P48数据是操作的对象操作的目的是对数据进行加工处理,以得到期望的结果著名计算机科学家沃思(NikiklausWirth)提出一个公式:

算法

+数据结构=程序3.1.1算法的概念P48一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示算法、数据结构、程序设计方法和语言工具是一个程序设计人员应具备的知识3.1.1算法的概念P48算法是解决“做什么”和“怎么做”的问题程序中的操作语句,是算法的体现不了解算法就谈不上程序设计3.1.1算法的概念P483.1.2怎样表示算法用自然语言表示算法用流程图表示算法用N-S流程图表示算法用伪代码表示算法P50用自然语言表示算法自然语言就是人们日常使用的语言,可以是汉语、英语,或其他语言用自然语言表示通俗易懂,但文字冗长,容易出现歧义性用自然语言描述包含分支和循环的算法,不很方便除了很简单的问题外,一般不用自然语言用流程图表示算法流程图是用一些图框来表示各种操作用图形表示算法,直观形象,易于理解起止框输入输出框处理框判断框流程线连接点注释框m被2整除是否开始判断一个数是否偶数的算法输入m的值输出m是偶数输出m不是偶数结束输出1~10的算法结束n1开始n10输出n的值nn+1是否用N-S流程图表示算法N-S流程图用以下的流程图符号:ABAB成立不成立pA当p1成立顺序结构选择结构循环结构判断一个数是否偶数的算法输出m是偶数输出m不是偶数是否m能被2整除输入m输出1~100的算法输出n的值n的值10n=1n=n+1用伪代码表示算法伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用用伪代码表示算法“输出x的绝对值”的算法ifxispositivethenprintxelseprint-x若x为正

输出x否则

输出-xifx为正printxelseprint-x3.2程序的三种基本结构顺序结构。各操作步骤是顺序执行的顺序结构是最简单的一种基本结构P53AB3.2程序的三种基本结构选择结构又称判断结构或分支结构根据是否满足给定的条件而从两组操作中选择一种操作P53AB成立p不成立A成立p不成立3.2程序的三种基本结构循环结构。它又称重复结构在一定条件下反复执行某一部分的操作P53A成立p1不成立A成立p2不成立3.2程序的三种基本结构一个良好的程序,无论多么复杂,都可以由这3种基本结构组成用这三种基本结构构成的程序称为“结构化程序”P533.3C语句综述P54C程序源程序文件1源程序文件2源程序文件n…预处理命令数据声明函数1函数n函数首部函数体数据声明执行语句…3.3C语句综述P54C语句分为以下5类:(1)控制语句:if、switch、for、while、do…while、continue、break、return、goto等(2)函数调用语句(3)表达式语句(4)空语句(5)复合语句3.4赋值表达式和赋值语句3.4.1赋值表达式3.4.2赋值过程中的类型转换3.4.3赋值语句3.4.4变量赋初值P563.4.1赋值表达式赋值运算符“=”是赋值运算符作用是将一个数据赋给一个变量也可以将一个表达式的值赋给一个变量P563.4.1赋值表达式复合的赋值运算符在赋值符“=”之前加上其他运算符,可以构成复合的运算符a+=3

等价于

a=a+3P563.4.1赋值表达式赋值表达式一般形式为:

变量

赋值运算符

表达式对赋值表达式求解的过程:求赋值运算符右侧的“表达式”的值赋给赋值运算符左侧的变量P563.4.1赋值表达式赋值表达式赋值表达式“a=3*5”的值为15,对表达式求解后,变量a的值和表达式的值都是15“a=(b=5)”和“a=b=5”等价“a=b”和“b=a”含义不同P563.4.2赋值过程中的类型转换两侧类型一致时,直接赋值两侧类型不一致,但都是数值型或字符型,自动将右侧的类型转换为左侧类型后赋值定义变量时要防止数据溢出P593.4.3赋值语句赋值语句是由赋值表达式加上一个分号构成赋值表达式的末尾没有分号,而赋值语句有分号一个表达式可以包含赋值表达式,但决不能包含赋值语句P603.4.4变量赋初值程序中常需要对一些变量预先设置一个初值设置初值既可以用赋值语句去实现,也可以在定义变量的同时使变量初始化,后者更为方便inta,b,c=5;相当于:inta,b,c;c=5;P603.5数据输入输出的概念几乎每一个C程序都包含输入输出输入输出是程序中最基本的操作之一所谓输入输出是以计算机主机为主体而言的从计算机向输出设备输出数据称为输出,从输入设备向计算机输入数据称为输入P613.5数据输入输出的概念C语言本身不提供输入输出语句输入和输出操作是由C函数库中的函数来实现的printf、scanf、putchar、getchar、puts、gets不是关键字在使用系统库函数时,要在程序中使用预编译命令“#include”P613.6字符数据的输入输出3.6.1用putchar函数输出一个字符3.6.2用getchar函数输入一个字符P633.6.1用putchar函数输出一个字符从计算机向显示器输出一个字符putchar函数的一般形式为:putchar(c)例3.1先后输出几个字符。P63#include<stdio.h>voidmain(){chara,b,c;a='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');}向显示器输出字符B向显示器输出换行符BOY#include<stdio.h>voidmain(){chara,b,c;a='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');}改为inta=66,b=79,c=89;BOYputchar(’\101’)(输出字符A)putchar(’\’’)(输出单撇号字符’)3.6.2用getchar函数输入一个字符向计算机输入一个字符getchar函数的一般形式为:getchar()例3.2输入多个字符。P64#include<stdio.h>voidmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar('\n');}输入一个字符,送给变量aBOY↙BOY

B↙O↙BO

#include<stdio.h>voidmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());#include<stdio.h>voidmain(){chara,b,c;

a=getchar();b=getchar();c=getchar();

putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());putchar(getchar());#include<stdio.h>voidmain(){chara,b,c;

a=getchar();

b=getchar();c=getchar();

putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());putchar(getchar());putchar(getchar());#include<stdio.h>voidmain(){chara,b,c;

a=getchar();

b=getchar();

c=getchar();

putchar(a);putchar(b);putchar(c);putchar('\n');}putchar(getchar());putchar(getchar());putchar(getchar());3.7简单的格式输入与输出3.7.1用简单的printf函数输出数据3.7.2用简单的scanf函数输入数据P663.7.1用简单的printf函数输出数据在C程序中用来实现输出和输入的,主要是printf函数和scanf函数这两个函数是格式输入输出函数用这两个函数时,必须指定格式P661.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);格式声明1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);普通字符1.printf函数的一般格式printf(格式控制,输出表列)例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、变量或表达式2.基本的格式字符d格式符。按十进制整型数据的实际长度输出i格式符。作用与d格式符相同2.基本的格式字符c格式符。用来输出一个字符charch=’a’;printf(”%c”,ch);输出字符:a2.基本的格式字符c格式符。用来输出一个字符例3.3用printf函数输出字符数据。

#include<stdio.h>voidmain(){charc='a';inti=97;printf("c=%c,c=%d\n",c,c);printf("i=%c,i=%d\n",i,i);}c=a,c=97i=a,i=972.基本的格式字符s格式符。用来输出一个字符串printf(”%s”,”CHINA”);输出字符串:CHINA2.基本的格式字符f格式符。用来输出实数,以小数形式输出例3.4输出实数时的有效位数。#include<stdio.h>voidmain(){floata,b;a=111111.111;b=222222.222;printf("%f\n",a+b);}333333.3281252.基本的格式字符f格式符。用来输出实数,以小数形式输出例3.5输出双精度数时的有效位数。#include<stdio.h>voidmain(){doublea,b;a=11111111.11111111;b=22222222.22222222;printf("%f\n",a+b);}33333333.3333332.基本的格式字符f格式符。用来输出实数,以小数形式输出float型数据只能保证6~7位有效数字double型数据能保证15~16位有效数字计算机输出的数字不都是绝对精确有效的2.基本的格式字符e格式符。指定以指数形式输出实数VC++给出小数位数为6位指数部分占5列小数点前必须有而且只有1位非零数字printf(”%e”,123.456);

输出:1.234560

e+0021.scanf函数的一般形式scanf(格式控制,地址表列)含义同printf函数3.7.2用简单的scanf函数输入数据P701.scanf函数的一般形式scanf(格式控制,地址表列)可以是变量的地址,或字符串的首地址3.7.2用简单的scanf函数输入数据P70例3.6用scanf函数输入数据。#include<stdio.h>voidmain(){inta,b,c;scanf(“%d%d%d”,&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);}3.7.2用简单的scanf函数输入数据P70345↙a=3,b=4,c=52.scanf函数中的格式声明与printf函数中的格式声明相似以%开始,以一个格式字符结束,中间可以插入附加的字符scanf("a=%db=%dc=%d",&a,&b,&c);3.7.2用简单的scanf函数输入数据P70说明scanf(”%d,%d”,a,b);错scanf(”%d,%d”,&a,&b);对对于scanf("a=%d,b=%d,c=%d",&a,&b,&c);

122436↙

a=12,b=24,c=36↙

a=12b=24c=36↙

错3.7.2用简单的scanf函数输入数据P70说明对于scanf(”%c%c%c”,&c1,&c2,&c3);

abc↙

abc↙

错对于scanf(”%d%c%f”,&a,&b,&c);若输入

1234a123o.26↙3.7.2用简单的scanf函数输入数据P70说明对于scanf(”%c%c%c”,&c1,&c2,&c3);

abc↙

abc↙

错对于scanf(”%d%c%f”,&a,&b,&c);若输入

1234a123o.26↙3.7.2用简单的scanf函数输入数据P70说明对于scanf(”%c%c%c”,&c1,&c2,&c3);

abc↙

abc↙

错对于scanf(”%d%c%f”,&a,&b,&c);若输入

1234a123o.26↙3.7.2用简单的scanf函数输入数据P703.8顺序结构程序设计举例P73

例3.7输入三角形的三边长,求三角形面积。解题思路:假设给定的三个边符合构成三角形的条件找到求三角形面积的公式:

其中s=(a+b+c)/23.8顺序结构程序设计举例P73#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,s,area;scanf("%lf,%lf,%lf",&a,&b,&c);s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\nb=%f\n%f\n",a,b,c);printf("area=%f\n",area);}计算s计算area输入a、b、c的值#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,s,area;scanf("%lf,%lf,%lf",&a,&b,&c);s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\nb=%f\n%f\n",a,b,c);printf("area=%f\n",area);}数学函数,计算平方根调用数学函数加此行9.89,12.65,8.76↙a=9.890000b=12.65000c=8.760000area=43.165683

例3.8从键盘输入一个大写字母,要求改用小写字母输出。解题思路:关键是找到大、小写字母间的内在联系小写字母的ASCII码=大写字母的ASCII码+32#include<stdio.h>voidmain(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}将大写转小写A↙A,65a,97#include<stdio.h>voidmain(){printf(“%c”,getchar()+32);printf(“%c”,getchar()+32);printf("%c\n",getchar()+32);}

例:输入3个大写字母,输出相应的3个小写字母。#include<stdio.h>voidmain(){putchar(getchar()+32);putchar(getchar()+32);putchar(getchar()+32);putchar('\n');}

例:输入3个大写字母,输出相应的3个小写字母。例3.9求

方程的根。a、b、c由键盘输入

>0解题思路:首先要知道求方程式的根的方法。由数学知识已知:如果

≥0,则一元二次方程有两个实根:若记#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}程序中调用数学函数sqrt输入a,b,c的值#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}输入的是双精度型实数#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}a=1,b=3,c=2↙x1=-1.00x2=-2.00要求输入3个实数自动转成实数后赋给a,b,c#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,disc,x1,x2,p,q;

scanf(“a=%lf,b=%lf,c=%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%.2f\nx2=%.2f\n",x1,x2);}小数点后输出2列a=1,b=3,c=2↙x1=-1.00x2=-2.003.9提高部分3.9.1无符号数据与有符号数据之间的赋值3.9.2较复杂的输入输出格式控制3.9.3简单易用的C++的输入输出3.9.4C++用“//”作为注释的标识P763.9.1无符号数据与有符号数据之间的赋值将有符号整数赋值给长度相同的无符号整型变量:按字节原样赋值(连原有的符号位也作为数值一起传送)P76例3.10有符号整数赋值给无符号整型变量,数据会失真。#include<stdio.h>voidmain(){unsigneda;intb;b=-1;a=b;printf("%u\n",a);}1111111111111111ba1111111111111111输出无符号整数假设占2字节65535将无符号整数赋值给长度相同的有符号整型变量:不要超出有符号整型变量的数值范围,否则会出错例3.11无符号整数赋值给有符号整型变量,注意数值范围。#include<stdio.h>voidmain(){unsigneda;intb;a=65535;b=a;printf("%d\n",b);}1111111111111111ba1111111111111111补码形式假设占2字节-13.9.2较复杂的输入输出格式控制1.输出数据时的格式控制%md。用来指定输出数据的宽度,m是指定的宽度,如果数据实际的位数小于m,则左端补以空格,若大于m,按实际位数输出printf("%4d,%4d",123,12345);P78123,123453.9.2较复杂的输入输出格式控制1.输出数据时的格式控制%ld。对于int型数据占2字节的系统,在输出长整型数据时要在格式字符d前面加一个英文字母llonga=135790;printf(“%ld",a);printf(“%8ld",a);P781357901357903.9.2较复杂的输入输出格式控制1.输出数据时的格式控制%o。以八进制整数形式输出。由于是将内存单元中的各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数的一部分输出inta=-1;printf(″%d,%o″,a,a);P78-1,17777711111111111111113.9.2较复杂的输入输出格式控制1.输出数据时的格式控制%x。以十六进制数形式输出整数。同样不会出现负的十六进制数inta=-1;printf(″%d,%x″,a,a);P78-1,ffff11111111111111113.9.2较复杂的输入输出格式控制1.输出数据时的格式控制%u。用来输出无符号型数据,以十进制整数形式输出一个有符号整数也可用%u格式输出;反之,一个无符号型数据也可用%d格式输出按相互赋值的规则处理无符号型数据也可用%o或%x格式输出P78例3.12无符号数据的输出。#include<stdio.h>voidmain(){unsigneda=65535;intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%x,%u\n",b,b,b,b);}3.9.2较复杂的输入输出格式控制P78在TC2.0下(占2字节)的运行结果为:a=-1,177777,ffff,65535b=-2,177776,fffe,65534

在VC++6.0下(占4字节)的运行结果为:a=65535,177777,ffff,65535b=-2,37777777776,fffffffe,42949672943.9.2较复杂的输入输出格式控制%mc。用来指定输出字符数据的宽度charc=‘a’;printf(“%3c”,c);P78a3.9.2较复杂的输入输出格式控制%ms。指定输出的字符串占m列若串长大于m,则将串全部输出若串长小于m,则左补空格%-ms。如果串长小于m,则在m列范围内,字符串向左靠,右补空格。P78例3.13字符串的输出。#include<stdio.h>voidmain()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论