谭浩强C入门教程文档6
c语言程序设计第6章(谭浩强)PPT版本
/*ch5_1.c*/ #include <stdio.h> main() { int i,sum=0; 循环初值 i=1; loop: if(i<=100) { sum+=i; 循环变量增值 i++; goto loop; } printf("%d",sum); }
循环条件 sum=0+1 sum==1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050 循环终值
例:#include<stdio.h> main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }
例:#include<stdio.h> 例:#include<stdio.h> 运行结果:abcdefghij main( main( ) ) { {intint i=0; i=0; for(;i<10;) for(;i<10;putchar(‘a’+i),i++) ; putchar(‘a’+(i++)); } }
while 假(0) expr 真(非0) …… break; …… 真(非0)
do
…… break; …... while expr
假(0)
for expr1 switch 假(0) expr2 真(非0) …… break; …... const 1 语句组1 break; expr case const 2 语句组2 break; …... const n 语句组n break; default 语句组 break;
谭浩强C语言教程Word版
文档供参考,可复制、编制,期待您的好评与关注!软件简介:1 C语言概述21.1 C语言的发展过程21.2 当代最优秀的程序设计语言21.3 C语言版本21.4 C语言的特点31.5 面向对象的程序设计语言31.6 C和C++31.7 简单的C程序介绍41.8 输入和输出函数51.9 C源程序的结构特点61.10 书写程序时应遵循的规则61.11 C语言的字符集61.12 C语言词汇71.13 Turbo C2.0集成开发环境的使用81.13.1 Turbo C2.0简介和启动81.13.2 Turbo C2.0集成开发环境81.13.3 File菜单91.13.4 Edit菜单101.13.5 Run菜单111.13.6 Compile菜单121.13.7 Project菜单131.13.8 Options菜单141.13.9 Debug菜单181.13.10 Break/watch菜单191.13.11 Turbo C2.0的配置文件202 程序的灵魂—算法12.1 算法的概念12.2 简单算法举例12.3 算法的特性42.4 怎样表示一个算法42.4.1 用自然语言表示算法42.4.2 用流程图表示算法42.4.3 三种基本结构和改进的流程图82.4.4 用N-S流程图表示算法92.4.5 用伪代码表示算法102.4.6 用计算机语言表示算法112.5 结构化程序设计方法1123 数据类型、运算符与表达式13.1 C语言的数据类型13.2 常量与变量33.2.1 常量和符号常量33.2.2 变量33.3 整型数据43.3.1 整型常量的表示方法43.3.2 整型变量53.4 实型数据73.4.1 实型常量的表示方法73.4.2 实型变量83.4.3 实型常数的类型93.5 字符型数据93.5.1 字符常量93.5.2 转义字符93.5.3 字符变量103.5.4 字符数据在内存中的存储形式及使用方法10 3.5.5 字符串常量113.5.6 符号常量123.6 变量赋初值123.7 各类数值型数据之间的混合运算133.8 算术运算符和算术表达式143.8.1 C运算符简介143.8.2 算术运算符和算术表达式153.9 赋值运算符和赋值表达式173.10 逗号运算符和逗号表达式183.11 小结193.11.1 C的数据类型193.11.2 基本类型的分类及特点193.11.3 常量后缀193.11.4 常量类型193.11.5 数据类型转换193.11.6 运算符优先级和结合性203.11.7 表达式204 最简单的C程序设计—顺序程序设计14.1 C语句概述14.2 赋值语句34.3 数据输入输出的概念及在C语言中的实现4 4.4 字符数据的输入输出44.4.1 putchar 函数(字符输出函数)44.4.2 getchar函数(键盘输入函数)54.5 格式输入与输出54.5.1 printf函数(格式输出函数)54.5.2 scanf函数(格式输入函数) 84.6 顺序结构程序设计举例1245 分支结构程序15.1 关系运算符和表达式15.1.1 关系运算符及其优先次序15.1.2 关系表达式15.2 逻辑运算符和表达式25.2.1 逻辑运算符极其优先次序25.2.2 逻辑运算的值35.2.3 逻辑表达式35.3 if语句45.3.1 if语句的三种形式45.3.2 if语句的嵌套75.3.3 条件运算符和条件表达式95.4 tch语句105.5 程序举例1156 循环控制16.1 概述16.2 goto语句以及用goto语句构成循环1 6.3 while语句26.4 do-while语句46.5 for语句66.6 循环的嵌套96.7 几种循环的比较96.8 break和continue语句96.8.1 break语句96.8.2 continue 语句106.9 程序举例1167 数组17.1 一维数组的定义和引用17.1.1 一维数组的定义方式17.1.2 一维数组元素的引用27.1.3 一维数组的初始化47.1.4 一维数组程序举例47.2 二维数组的定义和引用67.2.1 二维数组的定义67.2.2 二维数组元素的引用67.2.3 二维数组的初始化77.2.4 二维数组程序举例97.3 字符数组97.3.1 字符数组的定义97.3.2 字符数组的初始化97.3.3 字符数组的引用107.3.4 字符串和字符串结束标志107.3.5 字符数组的输入输出107.3.6 字符串处理函数127.4 程序举例147.5 本章小结178 函数18.1 概述18.2 函数定义的一般形式38.3 函数的参数和函数的值48.3.1 形式参数和实际参数48.3.2 函数的返回值58.4 函数的调用68.4.1 函数调用的一般形式68.4.2 函数调用的方式68.4.3 被调用函数的声明和函数原型78.5 函数的嵌套调用88.6 函数的递归调用108.7 数组作为函数参数128.8 局部变量和全局变量178.8.1 局部变量178.8.2 全局变量198.9 变量的存储类别208.9.1 动态存储方式与静态动态存储方式20 8.9.2 auto变量218.9.3 用static声明局部变量218.9.4 register变量228.9.5 用extern声明外部变量239 预处理命令19.1 概述19.2 宏定义19.2.1 无参宏定义19.2.2 带参宏定义49.3 文件包含89.4 条件编译99.5 本章小结1110 指针110.1 地址指针的基本概念110.2 变量的指针和指向变量的指针变量2 10.2.1 定义一个指针变量310.2.2 指针变量的引用310.2.3 指针变量作为函数参数710.2.4 指针变量几个问题的进一步说明10 10.3 数组指针和指向数组的指针变量13 10.3.1 指向数组元素的指针1310.3.2 通过指针引用数组元素1410.3.3 数组名作函数参数1610.3.4 指向多维数组的指针和指针变量2210.4 字符串的指针指向字符串的针指变量25 10.4.1 字符串的表示形式2510.4.2 使用字符串指针变量与字符数组的区别28 10.5 函数指针变量2910.6 指针型函数3010.7 指针数组和指向指针的指针3110.7.1 指针数组的概念3110.7.2 指向指针的指针3410.7.3 main函数的参数3610.8 有关指针的数据类型和指针运算的小结37 10.8.1 有关指针的数据类型的小结3710.8.2 指针运算的小结3710.8.3 void指针类型3811 结构体与共用体111.1 定义一个结构的一般形式111.2 结构类型变量的说明211.3 结构变量成员的表示方法411.4 结构变量的赋值411.5 结构变量的初始化511.6 结构数组的定义511.7 结构指针变量的说明和使用711.7.1 指向结构变量的指针711.7.2 指向结构数组的指针911.7.3 结构指针变量作函数参数1011.8 动态存储分配1111.9 链表的概念1211.10 枚举类型1411.10.1 枚举类型的定义和枚举变量的说明14 11.10.2 枚举类型变量的赋值和使用1511.11 类型定义符typedef 1612 位运算112.1 位运算符C语言提供了六种位运算符:1 12.1.1 按位与运算112.1.2 按位或运算212.1.3 按位异或运算212.1.4 求反运算312.1.5 左移运算312.1.6 右移运算312.2 位域(位段)412.3 本章小结613 文件113.1 C文件概述113.2 文件指针213.3 文件的打开与关闭213.3.1 文件的打开(fopen函数) 213.3.2 文件关闭函数(fclose函数)413.4 文件的读写413.4.1 字符读写函数fgetc和fputc 413.4.2 字符串读写函数fgets和fputs 813.4.3 数据块读写函数fread和fwtrite 913.4.4 格式化读写函数fscanf和fprintf 1113.5 文件的随机读写1213.5.1 文件定位1213.5.2 文件的随机读写1313.6 文件检测函数1413.6.1 文件结束检测函数feof函数1413.6.2 读写文件出错检测函数1413.6.3 文件出错标志和文件结束标志置0函数14 13.7 C库文件1413.8 本章小结15。
C语言谭浩强完整课件
着广泛的应用。
计算机系统基本概念
计算机系统的组成
计算机系统由硬件系统和软件系统两大部分组成,硬件系统包括运算器、控制器、存储器 、输入设备和输出设备等五大部分;软件系统包括系统软件和应用软件两大类。
计算机的工作原理
计算机的工作原理可以概括为存储程序控制和程序控制流,即计算机通过执行存储在内存 中的程序来控制各部件协调工作。
在定义数组时,可以直接 对数组进行初始化,也可 以定义后再进行赋值。
一维数组的使用
通过下标访问数组元素, 下标从0开始,最大下标为 数组长度减1。
二维数组与多维数组
二维数组的定义
二维数组可以看作是一个 表格,由行和列组成,每 个元素都有两个下标。
二维数组的初始化
在定义二维数组时,可以 直接对数组进行初始化, 也可以定义后再进行赋值 。
scanf和printf函数都支持 格式化输入输出,可以通 过格式控制符指定输入输 出数据的类型和格式。
格式化输入
格式控制符
C语言提供了一组格式控制符,用于 指定输入输出数据的类型和格式,如 %d表示输入输出整数,%f表示输入 输出浮点数等。
格式化输入
格式化输出
使用printf函数进行格式化输出时, 可以指定输出数据的格式和显示方式 ,如控制小数位数、显示宽度等。
类型。
枚举常量的说明
在枚举类型定义中,可以列 出多个枚举常量,每个常量 对应一个整数值。默认情况 下,第一个枚举常量的值为0 ,后续常量的值依次递增1。
枚举变量的使用
声明枚举类型的变量后,可 以为其赋值。枚举变量的值 只能是枚举常量中定义的值 。使用枚举类型可以提高代 码的可读性和可维护性。
08
文件操作与数据处理
C语言程序设计第四版谭浩强-2022年学习资料
习题5.4统计一串英文字符中的-大写字母、小写字母、数字、空-格、其他字符的个数。-问题扩展:输入一句英文 -统计并-输出每个字母使用的频数和频率
例5.8-Fibonacci数列-问题:如何使用数学中的下标变量-X1X2,…Xn.…形式表示一组相关的数 据
例5.8 Fibonacci数列用数组解决-int i,fibo[40];-fibo[o]=fibo[1] 1;-fori=2;i<40;i++-fibo[i]=fibo[i-1]+fibo[i-2];-for=0 i<40;i++-printf"%10d",fibo[i];-if i+1%5==0printf"\n";
数组的概念-有序数据的集合-用同一名称表示一组相同类型的相-关数据-·用下标区分各个元素-·相当于数学中的 标变量,如-X1,X2,...-a11ya12yy日21y…
维数组的定义-定义:类型说明-数组名[常量]-定义一个数组的名称、类型、元素
一维数组的定义-short int a[3];-a[2]=6;-存储单元-数组元素-00000000000 0110-说明:不能动态定义数组,-存储地址-见P.143说明3
一维数组的定义和引用-例:排序算法-算法演示-•冒泡排序-•选择排序-插入排序-快速排序
冒泡排序-基本思路:依次将数组中相邻两元-素比较,并按要求的顺序交换,从而-将最大/最小的数推至最前或最后 对-余下的数重复上述步骤,最终获得所-需的顺序
冒泡排序-对数组元素a[0]-a[5]升序排序-比较a[5]和a[4],若顺序不符则交换;-比较a[4和a 3],若顺序不符则交换;-比较a[3]和a[2],若顺序不符则交换-比较a[2]和a[1],若顺序不符则交 ;-比较a[1]和a[0],若顺序不符则交换。
C语言课件 清华大学谭浩强版c6
§6.5 函数参数及其传递方式
形参与实参
形式参数:定义函数时函数名后面括号中的变量名 实际参数:调用函数时函数名后面括号中的表达式 说明:
实参必须有确定的值 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换———函数 调用转换 形参在函数被调用前不占内存;函数调用时为形参分配内存; 调用结束,内存释放
运行结果:9,9
(main)
9 5 9 9 2000 2002
(swap)
2000 2002 ****
...
指针变量在使用前 必须赋值!
…...
整型变量a 整型变量b 指针pointer_1 指针pointer_2 指针p1 指针p2 指针p
函数说明
一般形式: 函数类型 函数名(形参类型 [形参名],….. ); 或 函数类型 函数名(); 作用:告诉编译系统函数类型,参数个数及类型,以便检验 函数定义与函数说明不同 函数说明位置:程序的数据说明部分(函数内或外) 下列情况下,可不作函数说明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前 有些系统(如Borland C++)要求函数说明指出函数返值类型和形 参类型,并且对void 和 int 型函数也要进行函数说明
无参函数 有参函数
使用库函数应注意: 1,函数功能 2,函数参数的数目和顺序,及各参数意义和类型 3,函数返回值意义和类型 4,需要使用的包含文件
Ch7_201.c
§6.2 函数的定义
一般格式
现代风格:
函数返回值类型 缺省int型 无返回值void
合法标识符
函数类型 函数名(形参类型说明表) { 说明部分 语句部分 } 例 例 有参函数(现代风格) 有参函数(现代风格) 例 无参函数 y) 例 x, int int max(int x,int y) max(int 空函数 printstar( ) dummy( ) { {int int z; z; { printf("**********\n"); } { } z=x>y?x:y; z=x>y?x:y; 或 return(z); return(z); printstar(void ) 函数体为空 } } { printf("**********\n"); }
谭浩强C语言程序设计入门课件-文档资料
[例1.3]程序演示
单击运行
弹出运行 结果窗口
运行结果
输入90和7,并以 空格作间隔符, 以回车作输入结 束符。
输入源程序
返回例题
返回本节目录
1.2.2 C程序的开发过程
《 C
(Visual C++ 6 0 环 境 ) .
20
1.编辑:Edit
(1)编辑指编辑创建源程序是将编写好的 C语言源程序代码录 入到计算机中,形成源程序文件(.c 或 .cpp的文件)。 (2)用Visual C++ 6.0环境提供的全屏幕编辑器。 (3)在VC 6.0环境中的源程序文件,默认的扩展名为.cpp,而 在Turbo C 2.0环境中的源程序文件的扩展名为.c。
#include "stdio.h" void main() { int a,b,c; scanf("%d%d",&a,&b); c=a+b; printf("c=%d\n",c); } 运行程序输入: 90<CR> 7 <CR> 程序结果: C=97 /*文件包含*/ /*主函数*/ /*声明定义变量a,b和c*/ /*输入变量a和b的值*/ /*计算c等于a与b的和值*/ /*输出变量c的值*/
二. 重点:
1. C程序的结构、特点、算法的概念。
7
1.1 C语言的简单历史
一. C语言的历史:C语言诞生于上个世纪的70年代.
① 1963年英国剑桥大学推出了CPL(Combined Programming
Language)语言. ② 1967年剑桥又推出 BCPL 语言。(Basic) ③ 1970年美国贝尔实验室的 Thompson(汤姆森)以BCPL为基础, 推出 B(取 BCPL的第一个字母)语言。 ④ 1972到1973年贝尔实验室的 Ritchie (里奇) 在B语言的基础 上设计出了C语言(取BCPL的第二个字母)。
C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案
C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includevoidmain(){inta,b,num1,num2,temp;printf(\请输入两个正整数:\\n\canf(\if(num1temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(\它们的最大公约数为:%d\\n\printf(\它们的最小公倍数为:%d\\n\}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includevoidmain(){charc;intletter=0,pace=0,degit=0,other=0;printf(\请输入一行字符:\\n\while((c=getchar())!='\\n'){if(c>='a'&&c<='z'||c>'A'&&c<='Z')letter++;eleif(c=='')pace++;eleif(c>='0'&&c<='9')digit++;eleother++;}printf(\其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\\n\digit,other);}6.3求(n)=a+aa+aaa++aaa之值,其中a是一个数字,n表示a的位数。
解:voidmain(){inta,n,count=1,n=0,tn=0;printf(\请输入a和n的值:\\n\canf(\printf(\while(count<=n){tn=tn+a;n=n+tn;a=a某10;++count;}printf(\\\n\}6.4求(即1+2!+3!+4!++20!)voidmain(){floatn,=0,t=1;for(n=1;n<=20;n++){t=t某n;=+t;}printf(\\\n\}阶乘利用递归,再求和:#includeuingnamepacetd;longFunc(intn){ if(1==n)returnn;if(n>1)returnn某Func(n-1);}main(){long=0;inti=1;while(i<=6){=+Func(i);i++;}cout<6.5求voidmain(){intk,N1=100,N2=50,N3=10;float1=0.0,2=0.0,3=0.0;for(k=1;k<=N1;k++)/某计算1到100的和某/{1=1+k;}for(k=1;k<=N2;k++)/某计算1到50各数平方和某/{2=2+k某k;}for(k=1;k<=N3;k++)/某计算1到10各数倒数之和某/{3=3+1.0/k;}printf(\总和=%8.2f\\n\}已通过intmain(){intk=1,i=11,j=51;float=0.0;while(k<=10){=+k+k某k+1.0/k;while(k==10&&i<=50){=+i+i某i;while(i=50&&j<=100){ =+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。
《C++面向对象程序设计》 谭浩强 第六章
C++
先声明基类point类,并调试之; 再声明派生类circle类,调试之; 最后声明cylinder类,调试之。
6- 5
① 先声明基类point
#include <iostream.h> class point //声明类point {public: point (float x=0, float y=0 ); //有默认值的构造函数 void setPoint (float, float); //设置点坐标 float getX ( ) const { return x; } // 读x 值 float getY ( ) const { return y; } // 读y 值 friend ostream & operator << ( ostream &, const point &); protected: float x,y; }; // 下面定义 point类的成员函数 point :: point (float a, float b) // point的构造函数 { x = a; y = b; } void point :: setPoint (float a, float b) { x =a; y = b; } ostream &operator << (ostream &output, const point &p) { // 重载运算符<< output<<“[x=“<<p.x<<“, y=“<<p.y<<“]”<<endl; return output; }
6Hale Waihona Puke 7③ 最后声明cylinder类
C++程序设计(谭浩强完整版)第六章PPT学习教案
程序模拟这个方法,开始时把a[0][0] 的值赋给变量max,max就是开始时的擂 主,然后让下一个元素与它比较,将二 者中值大者保存在max中,然后再让下 一个元素与新的max比,直到最后一个 元素比完为止。max最后的值就是数组 所有元素中的最大值。
第20页/共93页
max=a[0][0]; //使max开始时取a[0][0]的值 for (i=0;i<=2;i++) //从第0行到第2行 for (j=0;j<=3;j++) //从第0列到第3列 if (a[i][j]>max)//如果某元素大于max { max=a[i][j]; //max将取该元素的值 row=i; //记下该元素的行号i colum=j; //记下该元素的列号j }
static int a[2][3];
第17页/共93页
void main(void)
{ int a[3][3], i, j;
i=0 a[0][0]=0 a[0][1]=1 a[0][2]=2
for (i=0; i<3; i++) i=1 a[1][0]=0 a[1][1]=1 a[1][2]=2
数组必须先定义,具体引用时(赋值、运算、输出)其元
素等同于变量。
a
void main(void )
i=0, a[0]=0
{ int i, a[10]; 定义 i=1, a[1]=1
for ( i=0; i<10; i++) i=2, a[2]=2
赋值 a[i]=i; i=9, a[9]=9
for ( i=9; i>=0 ; i--)
其元素分别为:a[0][0], a[0][1], a[0][2], a[0][3],
清华大学谭浩强教授的C++教程第6章
行开头的int是指 第2行开头的 是指: 所定义的指针变量是指向整 行开头的 是指: 型数据的指针变量.也就是说,指针变量pointer_1 型数据的指针变量.也就是说,指针变量 只能用来指向整型数据(例如 和pointer_2只能用来指向整型数据 例如 和j),而 只能用来指向整型数据 例如i和 , 不能指向浮点型变量a和 .这个int就是指针变量 不能指向浮点型变量 和b.这个 就是指针变量 的基类型. 的基类型.指针变量的基类型用来指定该指针变量 可以指向的变量的类型. 可以指向的变量的类型. 定义指针变量的一般形式为
图6.6 (2) *&a的含义是什么?先进行 的运算,得a的 的含义是什么? 的运算, 的含义是什么 先进行&a的运算 的 地址,再进行*运算 运算, 所指向的变量, 地址,再进行 运算,即&a所指向的变量,*&a和 所指向的变量 和 *pointer_1的作用是一样的(假设已执行了 的作用是一样的( 的作用是一样的 ),它们等价于变量 "pointer_1=&a;"),它们等价于变量 .即*&a ),它们等价于变量a. 等价, 与a等价,见图 . 等价 见图6.7.
图6.7 输入a和 两个整数 按先大后小的顺序输出a 两个整数, 例6.2 输入 和b两个整数,按先大后小的顺序输出 和b(用指针变量处理 . 用指针变量处理). 用指针变量处理 解此题的思路是: 设两个指针变量p1和 , 解此题的思路是: 设两个指针变量 和p2,使它 们分别指向a和 . 指向a和 中的大者 中的大者, 指 们分别指向 和b.使p1指向 和b中的大者,p2指 指向 向小者,顺序输出*p1,*p2就实现了按先大后小的 向小者,顺序输出 就实现了按先大后小的 顺序输出a和 .按此思路编写程序如下: 顺序输出 和b.按此思路编写程序如下:
c++程序设计谭浩强第6章
第六章指针6.1 指针的基本概念(P164)一、地址1.内存单元的地址内存单元的基本单位是字节,为了方便对内存的访问,每一个内存单元都有一个编号,这个编号就称为内存单元的地址。
2.内存单元的内容内存单元中存放的数据即是内存单元的内容。
例:int i=9,j=6,k=5;说明:每当在程序中定义了变量,C编译系统就会根据变量的不同类型,在内存中为其分配相应字节数目的存储空间。
把变量在内存中所占存储单元的首地址,称为该变量的地址(Address)。
把变量在内存中所占存储单元中存放的数据,称为该变量的内容。
而在计算机内存中,对变量值的存取实质上是通过地址进行的。
134例6.1观察地址#include <iostream>using namespace std;int main(){ int x=55;cout<<"x="<<x<<endl;cout<<"x addres is :="<<&x<<endl;return 0;}3.“直接访问”与“间接访问”●按变量名存取变量值的方式称为“直接访问”。
●按变量地址的存放单元存取变量值的方式称为“间接访问”。
例如:(1) (直接访问)(2) (间接访问)二、指针与指针变量1.指针一个变量的地址称为该变量的“指针“。
说明:由于通过地址可以找到所需的变量单元,也即是说,地址“指向“该变量单元,因此,在C++中,将地址形象化地称为”指针“。
135136如:2000是变量i 的指针。
2.指针变量一种用来存放另一个变量地址值的特殊变量,....................其值是内存单元的地址。
........... 如:i_pointer所谓变量的指针就是变量的地址,而指针变量是用来存放变量的地址。
i_pointer i2000在指针变量与他所指向的变量之间存在着一种联系。
C语言程序设计--第六章(适于清华谭浩强版)PPT优秀课件
*/
printf("\n");
for (i=2;i<20;i++)
fib[i]=fib[i-1]+fib[i-2];
for (i=1;i<=20;i++)
{ printf("%10d",fib[i-1]);
if (i%5==0) printf("\n");
/*换行,每行输出5个
*/
}
}
15
例6.3 输入100个整数,求出最小的数以及第一个 最小的数在数组中的下标。
例如,int data[5]=1;
13
6.2.4 程序举例 例6.2用数组方式解决Fibonacci数列问题,求出 Fibonacci数列的前20项存储在数组中,并将数 组内容输出。
14
#include "stdio.h"
void main() { int i,fib[20]={1,1};
/*初始化
例6.4 输入100个整数,从小到大排列并输出 。 选择排序
例6.5 输入100个学生的“C程序设计”课程的期 中和期末成绩,算出总评成绩,总评成绩为 “30%×期中成绩+70%×期末成绩”,计算总
评 成绩的分Leabharlann 段情况。本题要使用三个平行的数组才能解决问题。 这三个数组的第i个元素记录了一个学生的期中
但不能是浮点型的变量或浮点型表达式;并且 下标不能大于[数组长度-1],因为超过部分没 有被定义过,是不能正确使用的。
图。 例如:data[4]、data[i+j]、data[i++]都是 合法的引用方式。
9
例6.1用数组方式读入5个整数,并求和。
谭浩强C语言教程Word
.软件简介:1C语言概括2C语言的展开过程2今世最优异的程序设计语言2C语言版本2C语言的特色3面向对象的程序设计语言3C和C++3简单的C程序介绍4输入和输出函数5C源程序的构造特色6书写程序时应按照的规那么6C语言的字符集6C语言词汇7TurboC集成开发环境的使用8TurboC简介和启动8TurboC集成开发环境8File菜单9Edit菜单10Run菜单11Compile菜单12Project菜单13Options菜单14Debug菜单18Break/watch菜单19TurboC的配置文件202程序的灵魂—算法1算法的观点1简单算法举例1算法的特征4如何表示一个算法4用自然语言表示算法4用流程图表示算法4三种根本构造和改进的流程图8用N-S流程图表示算法9用伪代码表示算法10用计算机语言表示算法11构造化程序设计方法1123数据种类、运算符与表达式 1C语言的数据种类 1常量与变量 3;..常量和符号常量3变量3整型数据4整型常量的表示方法4整型变量5实型数据7实型常量的表示方法7实型变量8实型常数的种类9字符型数据9字符常量9转义字符9字符变量10字符数据在内存中的储存形式及使用方法10字符串常量11符号常量12变量赋初值12各种数值型数据之间的混淆运算13算术运算符和算术表达式14C运算符简介14算术运算符和算术表达式 15赋值运算符和赋值表达式 17逗号运算符和逗号表达式 18小结 19C的数据种类19根本种类的分类及特色19常量后缀19常量种类19数据种类变换19运算符优先级和联合性20表达式204最简单的C程序设计—次序程序设计 1C语句概括 1赋值语句 3数据输入输出的观点及在C语言中的实现4字符数据的输入输出4putchar函数〔字符输出函数〕4getchar函数〔键盘输入函数〕5格式输入与输出5printf函数〔格式输出函数〕5scanf函数(格式输入函数)8次序构造程序设计举例1245分支构造程序1;..关系运算符和表达式1关系运算符及其优先序次1关系表达式1逻辑运算符和表达式2逻辑运算符极其优先序次2逻辑运算的值3逻辑表达式3if语句 4if语句的三种形式 4if语句的嵌套7条件运算符和条件表达式 9tch语句10程序举例1156循环控制 1概括 1goto语句以及用goto语句组成循环 1 while语句 2do-while语句 4for语句 6循环的嵌套9几种循环的比较9break和continue语句9break语句9continue 语句10程序举例1167数组 1一维数组的定义和引用 1一维数组的定义方式1一维数组元素的引用2一维数组的初始化 4一维数组程序举例 4二维数组的定义和引用6二维数组的定义6二维数组元素的引用6二维数组的初始化7二维数组程序举例9字符数组9字符数组的定义9字符数组的初始化9字符数组的引用10字符串和字符串结束标记10字符数组的输入输出10 ;..字符串办理函数12程序举例14本章小结178函数1概括 1函数定义的一般形式3函数的参数和函数的值4形式参数和实质参数4函数的返回值5函数的调用6函数调用的一般形式6函数调用的方式6被调用函数的申明和函数原型7函数的嵌套调用8函数的递归调用10数组作为函数参数12局部变量和全局变量17局部变量17全局变量19变量的储存类型20动向储存方式与静态动向储存方式20 auto变量21用static申明局部变量21register变量22用extern申明外面变量239预办理命令 1概括 1宏定义 1无参宏定义 1带参宏定义 4文件包括8条件编译9本章小结1110指针1地点指针的根本观点1变量的指针和指向变量的指针变量2定义一个指针变量3指针变量的引用3指针变量作为函数参数7指针变量几个问题的进一步说明10数组指针和指向数组的指针变量13指向数组元素的指针13;..经过指针引用数组元素14数组名作函数参数16指向多维数组的指针和指针变量22字符串的指针指向字符串的针指变量25字符串的表示形式25使用字符串指针变量与字符数组的差别28函数指针变量29指针型函数30指针数组和指向指针的指针31指针数组的观点31指向指针的指针34main函数的参数36相关指针的数据种类和指针运算的小结37相关指针的数据种类的小结37指针运算的小结37void指针种类3811构造体与共用体1定义一个构造的一般形式1构造种类变量的说明2构造变量成员的表示方法4构造变量的赋值4构造变量的初始化5构造数组的定义5构造指针变量的说明和使用7指向构造变量的指针7指向构造数组的指针9构造指针变量作函数参数10动向储存分派11链表的观点12列举种类14列举种类的定义和列举变量的说明14列举种类变量的赋值和使用15种类定义符t ypedef1612位运算 1位运算符C语言供给了六种位运算符: 1按位与运算1按位或运算2按位异或运算 2求反运算 3左移运算 3右移运算 3位域〔位段〕 4本章小结6;.谭浩强C 语言教程Word11 / 1111 / 1111 . 13文件1 C 文件概括1 文件指针2 文件的打开与封闭 2 文件的打开(fopen 函数)2 文件封闭函数〔fclose 函数〕4 文件的读写4字符读写函数 fgetc 和fputc4 字符串读写函数 fgets 和fputs8数据块读写函数 fread 和fwtrite9 格式化读写函数 fscanf 和fprintf11文件的随机读写 12 文件定位12 文件的随机读写 13 文件检测函数 14文件结束检测函数 feof 函数14 读写文件犯错检测函数14 文件犯错标记和文件结束标记置 0函数14 C库文件14 本章小结15 ;.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6 循环控制 (1)6.1 概述 (1)6.2 goto语句以及用goto语句构成循环 (1)6.3 while语句 (2)6.4 do-while语句 (4)6.5 for语句 (6)6.6 循环的嵌套 (9)6.7 几种循环的比较 (9)6.8 break和continue语句 (9)6.8.1 break语句 (9)6.8.2 continue 语句 (10)6.9 程序举例 (11)循环控制6.1 概述循环结构是程序中一种很重要的结构。
其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。
给定的条件称为循环条件,反复执行的程序段称为循环体。
C语言提供了多种循环语句,可以组成各种不同形式的循环结构。
1)用goto语句和if语句构成循环;2)用while语句;3)用do-while语句;4)用for语句;6.2 goto语句以及用goto语句构成循环goto语句是一种无条件转移语句, 与BASIC中的goto语句相似。
goto 语句的使用格式为:goto 语句标号;其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处, 执行goto语句后,程序将跳转到该标号处并执行其后的语句。
另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。
通常goto语句与if条件语句连用, 当满足某一条件时, 程序跳到标号处运行。
goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时, 用goto语句则比较合理。
【例6.1】用goto语句和if语句构成循环,∑=1001nn。
main(){int i,sum=0; i=1;loop: if(i<=100){sum=sum+i;i++;goto loop;}printf("%d\n",sum);}6.3 while语句while语句的一般形式为:while(表达式)语句其中表达式是循环条件,语句为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。
其执行过程可用下图表示。
【例6.2】用while语句求∑=1001nn。
用传统流程图和N-S结构流程图表示算法,见图:main(){int i,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}【例6.3】统计从键盘输入一行字符的个数。
#include <stdio.h>main(){int n=0;printf("input a string:\n");while(getchar()!='\n') n++;printf("%d",n);}本例程序中的循环条件为getchar()!='\n',其意义是,只要从键盘输入的字符不是回车就继续循环。
循环体n++完成对输入字符个数计数。
从而程序实现了对输入一行字符的字符个数计数。
使用while语句应注意以下几点:1)while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。
【例6.4】main(){int a=0,n;printf("\n input n: ");scanf("%d",&n);while (n--)printf("%d ",a++*2);}本例程序将执行n次循环,每执行一次,n值减1。
循环体输出表达式a++*2的值。
该表达式等效于(a*2;a++)。
2)循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。
6.4 do-while语句do-while语句的一般形式为:do语句while(表达式);这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。
因此, do-while循环至少要执行一次循环语句。
其执行过程可用下图表示。
【例6.5】用do-while语句求∑=1001nn。
用传统流程图和N-S结构流程图表示算法,见图:main(){int i,sum=0;i=1;do{sum=sum+i;i++;}while(i<=100)printf("%d\n",sum);}同样当有许多语句参加循环时, 要用"{"和"}"把它们括起来。
【例6.6】while和do-while循环比较。
(1)main(){int sum=0,i;scanf(“%d”,&i);while(i<=10){sum=sum+i;i++;}printf(“sum=%d”,sum);}(2)main(){int sum=0,i;scanf(“%d”,&i);do{sum=sum+i;i++;}while(i<=10);printf(“sum=%d”,sum);}6.5 for语句在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。
它的一般形式为: for(表达式1;表达式2;表达式3) 语句它的执行过程如下:1)先求解表达式1。
2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。
3)求解表达式3。
4)转回上面第2)步继续执行。
5)循环结束,执行for语句下面的一个语句。
其执行过程可用下图表示。
for语句最简单的应用形式也是最容易理解的形式如下:for(循环变量赋初值;循环条件;循环变量增量) 语句循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是一个关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化。
这三个部分之间用“;”分开。
例如:for(i=1; i<=100; i++)sum=sum+i;先给i赋初值1,判断i是否小于等于100, 若是则执行语句,之后值增加1。
再重新判断, 直到条件为假,即i>100时,结束循环。
相当于:i=1;while(i<=100){ sum=sum+i;i++;}对于for循环中语句的一般形式,就是如下的while循环形式:表达式1;while(表达式2){语句表达式3;}注意:1)for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项, 即可以缺省,但“;”不能缺省。
2)省略了“表达式1(循环变量赋初值)”, 表示不对循环控制变量赋初值。
3)省略了“表达式2(循环条件)”, 则不做其它处理时便成为死循环。
例如:for(i=1;;i++)sum=sum+i;相当于:i=1;while(1){sum=sum+i;i++;}4)省略了“表达式3(循环变量增量)”, 则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。
例如:for(i=1;i<=100;){sum=sum+i;i++;}5)省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。
例如:for(;i<=100;){sum=sum+i;i++;}相当于:while(i<=100){sum=sum+i;i++;}6)3个表达式都可以省略。
例如:for(;;)语句相当于:while(1)语句7)表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。
例如:for(sum=0;i<=100;i++)sum=sum+i;8)表达式1和表达式3可以是一个简单表达式也可以是逗号表达式。
for(sum=0,i=1;i<=100;i++)sum=sum+i;或:for(i=0,j=100;i<=100;i++,j--)k=i+j;9)表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。
例如:for(i=0;(c=getchar())!=’\n’;i+=c);又如:for(;(c=getchar())!=’\n’;)printf(“%c”,c);6.6 循环的嵌套【例6.7】main(){int i, j, k;printf("i j k\n");for (i=0; i<2; i++)for(j=0; j<2; j++)for(k=0; k<2; k++)printf(“%d %d %d\n", i, j, k);}6.7 几种循环的比较1)四种循环都可以用来处理同一个问题,一般可以互相代替。
但一般不提倡用goto型循环。
2)while和do-while循环,循环体中应包括使循环趋于结束的语句。
for语句功能最强。
3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。
6.8 break和continue语句6.8.1break语句break语句通常用在循环语句和开关语句中。
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。
break在switch 中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。
即满足条件时便跳出循环。
【例6.8】main(){int i=0;char c;while(1) /*设置循环*/{c='\0'; /*变量赋初值*/while(c!=13&&c!=27) /*键盘接收字符直到按回车或Esc键*/{c=getch();printf("%c\n", c);}if(c==27)break; /*判断若按Esc键则退出循环*/i++;printf("The No. is %d\n", i);}printf("The end");}注意:1)break语句对if-else的条件语句不起作用。
2)在多层循环中, 一个break语句只向外跳一层。
6.8.2continue 语句continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。