c语言学习5

合集下载

高树芳C语言程序设计--第五章

高树芳C语言程序设计--第五章

VC程序代码
21
5.4
for循环结构
相关知识:
求解表达式1
1.for语句 见执行过程图。 2. for语句的说明 三个表达式均可省略, 但两个分号不可省略。
假 计算表达式2 真 循环体语句
求解表达式3
for语句的后续语句
22
5.2
while(当型)循环结构
[课堂训练5-4] 用for循环编程实现倒计时效果。即在屏幕上 固定位置显示10,然后清除之,再显示9,之后 是8……,至到1。
是成绩非-1等。
10
5.2
while(当型)循环结构
相关知识:
1.while语句的一般形式 2.while语句的说明 3.循环结构的构造方法 4.if语句与循环语句的区别
11
5.2
while(当型)循环结构
[课堂训练5-2] 计算s=1+1/2+1/3+1/4+„„+1/n,直到s大于或等 于3为止,输出n的值。 提示: 这是“标志”型循环。设置实型变量s并设初值为 0.0,设置整型变量i并设初值为1,循环条件是 s<=3,重复内容是s=s+1.0/i,注意要使用1.0实型 常量,或者将1或i作强制类型转换,将其转换为 实数,否则运算结果为0。
20
5.4 for循环结构 案例5-6 跳动的“O”
[案例任务]
编程实现字符“O”从屏幕的左端移动到右端。每一 秒种移动一下,形成跳动的效果。运算结果大致如 下。
[解决方案]首先显示一个O,延时片刻,然后光标
后退(用转义字符),再显示一个空格和一个O。循 环以上功能直到光标到屏幕最右端。
WIN-TC程序代码
[解决方案]该循环至少执行1次,使用do„while

C语言教案 第5章

C语言教案 第5章
char name[11];
int class;
char sex;
int age;
int score[MAX2];
}STUDENT;
声明新类型名STUDENT,它代表上面指定的一个结构体类型。这时可以使用STUDENT来定义变量。例如:
STUDENT stu;
归纳起来,声明一个新的类型名的方法是:
①先按定义变量的方法写出定义体(例如:inti;);
②将变量名换成新类型名(例如:将i换成COUNT);
③在定义结构体的最前面加typedef(例如:typedef int COUNT);
④最后用新类型名定义变量。
习惯上,常把用typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符相区别。
说明:
①用typedef可以声明各种类型名,但不能用来定义变量。typedef可以声明数组类型、字符串类型。例如要定义一维数组:
2、熟练运用结构体类型实现对学生信息的查询。
3、用结构体数组存储一个班级的学生信息。
教法
案例教学法
学法
思考,讨论,练习和巩固
教具使用
投影仪演示或教学机房
学内容
教师活动
学生活动
备注
导入
新课
上次课介绍了如何定义结构体类型,再运用新定义的结构体类型定义结构体变量,以及结构体变量的初始化。当类似的数据较多时,就要考虑用数组来解决,这就是结构体数组。
可以使用上面定义的student结构体类型来定义变量。例如:
struct student
{
char num[6];
char name[11];
int class;
char sex;
int age;

C语言程序设计-第5章全解

C语言程序设计-第5章全解
2018/10/21 华中科技大学计算机学院C语言课程组 22
函数返回的值,程序可以使用它, 也可以不使用它
while(…) { getchar(); c=getchar(); … } /* 返回值不被使用 */ /* 返回值被使用 */
2018/10/21 华中科技大学计算机学院C语言课程组 18
5.2.1
函数的定义
函数定义的一般形式为: 类型名 函数名(参数列表) { 声明部分 语句部分 }
2018/10/21 华中科技大学计算机学院C语言课程组 19


类型名说明函数返回值(即出口参数)的数据类型 (简称为函数的类型或函数值的类型),可以是除 数组以外的任何类型。当返回值类型为void,函数 将不返回任何值。 参数列表说明函数入口参数的名称、类型和个数, 它是一个用逗号分隔的变量名及其类型列表,它描 述了在调用函数时函数所接收的参数。一个函数可 能没有参数,在没有参数的情况下,参数列表说明 为void,否则必须明确地列出每一个参数的类型。
16

图5.1 C语言程序的基本结构
2018/10/21
华中科技大学计算机学院C语言课程组
17
5.2

函数的定义与函数的声明
程序中若要使用自定义函数实现所需的功能, 需要做三件事: ① 按语法规则编写完成指定任务的函数,即 定义函数; ② 有些情况下在调用函数之前要进行函数声 明; ③ 在需要使用函数时调用函数
2018/10/21
华中科技大学计算机学院C语言课程组
9



在函数的顶端用“/*……*/”格式包含的部分是函 数头部注释,包括函数名称、函数功能、函数参数、 函数返回值等内容,如有必要还可增加作者、创建 日期、修改记录(备注)等相关项目。虽然函数头 部注释在语法上不是必需的,但可以提高程序的质 量和可维护性,在程序设计时要遵从这一编程规范。 GetNum是函数名,其后的void说明函数调用时不 接收任何参数,即没有入口参数,函数执行完应该 返回所产生的随机数,即该随机数是函数的出口参 数,函数名前的int说明出口参数的类型为整型。 函数体内的rand是接口stdlib.h中的一个函数,它 返回一个非负并且不大于常量RAND_MAX的随机整 数,RAND_MAX的值取决于计算机系统。 MAX_NUMBER是用#define定义的符号常量,其 值为1000。当执行return语句时,其后表达式的值 被带回到调用函数中。

C语言基础 五、循环

C语言基础 五、循环

五、循环结构程序设计本章概述:以笔试和上机两种形式考核。

笔试中,多出现在选择题第20-23题。

填空题第8、9题。

分值约占12%。

上机中,三种题型中均有体现,抽中几率约为37%。

考生要熟练掌握。

大纲要求:1.for循环结构。

2.while和do-while循环结构。

3.continue语句和break语句。

4.循环的嵌套。

重点难点:1.for循环结构。

2.continue语句和break语句。

3.循环的嵌套。

考点分析:while 语句while 语句一般形式:while (条件表达式){循环体}while 语句执行过程:先判断条件是否成立,只要条件成立则一直执行循环体语句,直到条件不成立则结束循环,结束while语句。

说明:(1)while语句的特点是先判断,再执行。

因此,若条件表达式的值一开始就为“假”,那么循环体一次也不执行。

(2)当循环体为多个语句组成,必须用{}括起来,形成复合语句。

(3)在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。

试题解析1.要求通过while循环不断读入字符,当读入字母N时结束循环。

若变量已正确定义,以下正确的程序段是(A)A)while((ch=getchar())!=′N′)printf("%c",ch);B)while(ch=getchar()!=′N′)printf("%c",ch);C)while(ch=getchar()==′N′)printf("%c",ch);D)while((ch=getchar())==′N′)printf("%c",ch);解析:while语句的功能是:计算表达式的值,如为真,则执行循环体语句,执行完毕后,再计算表达式的值,若仍为真,则重复执行循环体语句。

直到表达式的值为假时,结束循环。

ch=getchar()应加一个括号,表示输入字符的函数。

C语言第五章

C语言第五章
T t=a a=b 开始 输入a,b a>b
学习提示: (1)算法包括输入、处理和输出三个部分 ,其中处理部分为选择结构。
b=t
F
输出a,b 结束
5
信息科学与技术学院 软件工程系
选择结构算法设计
South West Jiaotong University
【例5. 1】输入a、b值,如果a>b,那么交换a和b,使得a≤b。 解决该问题的主要步骤为: 开始
17
信息科学与技术学院 软件工程系
关系运算符和关系表达式
【例】编写以下程序,查看结果。 #include <stdio.h> void main() { int a,b,c; int d,e,f; a=4,b=5,c=6; d=a>b; e=a<b<c; f=c>b>a; printf("%d %d %d \n",d,e,f); }
South West Jiaotong University
20
信息科学与技术学院 软件工程系
逻辑运算符- 优先级
• 各类运算符的优先级关系:
South West Jiaotong University
– !(非)高于 &&(与) 高于 ||(或)。 – &&(与)和||(或)低于关系运算符 – !(非)高于 算术运算符
1)任何数值(字符、整数、实数、指针)都可以表示 逻辑意义,只要数值不等于0,就表示“真”,而0 表示“假”;
2)关系与逻辑运算表达式的运算结果为“真”,表达 式的值为int型整数1,运算结果为“假”,则表达 式的值为int型整数0。
由2)可知,C语言的关系运算表达式和逻辑运算表 达式应该属于整型表达式范畴。

C语言第5章

C语言第5章
= 1− 1 1 1 1 + − + −L 3 5 7 9
π
6
定义实型变量s=0; 整型变量n=1,k=-1;
1./(2*n-1)>=1e-4?
k=k*(-1); s=s+k*(1./(2*n-1)); n++; 输出4*s的值
程序如下: main() {int n=1,k=-1; float s=0; while(1./(2*n-1)>=1e-4) {k=-k; s=s+k/(2.*n-1); n++; } printf(“PI=%f”,s*4); } 运行结果为: PI=3.141397
1
一、什么是循环 所谓循环,就是重复执行某一程序段。 所谓循环,就是重复执行某一程序段。循环是所 有程序设计中都有的一种最重要的程序控制结构。 有程序设计中都有的一种最重要的程序控制结构。 正是有了循环,使得程序变得非常简单。 正是有了循环,使得程序变得非常简单。可用最 少的程序代码就可完成许多复杂的事情。 少的程序代码就可完成许多复杂的事情。同时循 环也是所有程序设计中最难的一种程序结构, 环也是所有程序设计中最难的一种程序结构,许 多同学对于其它程序结构都好理解, 多同学对于其它程序结构都好理解,但一遇到循 环就变糊涂了,不可理解了。 环就变糊涂了,不可理解了。这一点希望引起同 学们的极大注意。本书一共给出了三种循环: 学们的极大注意。本书一共给出了三种循环: 语句构成的循环; ⑴用while语句构成的循环; 语句构成的循环 语句构成的循环; ⑵用do-while语句构成的循环; - 语句构成的循环 语句构成的循环; ⑶用for语句构成的循环; 语句构成的循环
定义变量sum=0,i=1 接收用户的输入n sum=sum+i; i++; i<=n printf(“sum=%d\n”,sum); #include “stdio.h” main() { int i,sum,n; i=1;sum=0; printf(“\ninput n:”); scanf(“%d”,&n); do { sum=sum+i; i++; }while(i<=n); 9 printf(“sum=%d\n”,sum);}

C语言课件 第5章

C语言课件 第5章
如果x<y, max=y, min=x ③ 输出最大值max、 最小值min
第5章 选择结构程序设计
/*程序 5 - 3, 求两个数的最大值、 最小值*/ main( ) { float x, y; float max, min; printf(″请输入两个数x, y: ″); scanf(″%f, %f″, &x, &y); if (x>y) {max=x; min=y; } else {max=y; min=x; } printf(″max=%6.2f, min=%6.2f\n″, max, min); } 输入数据: 1.2, 2.54 运行结果: max= 2.54, min= 1.20
第5章 选择结构程序设计
5.1.3 多分支if语句
多分支if语句不是一条具体的语句,它通过if语句的嵌套实
现。其一般形式为: if (条件表达式1)
if (条件表达式2) 语句1
else 语句2 else if (条件表达式3) 语句3 else 语句4
第5章 选择结构程序设计
T T
条件表达式1 条件表达式2
}
第5章 选择结构程序设计
例 5 — 7 将例 5 — 5 用switch语句实现。
switch ((int)(cj/10)) { 10: 9: ch=′A′; break; /*注意选择表达式的构造*/
8: ch=′B′; break;
7: ch=′C′; break; 6: ch=′D′; break;
第5章 选择结构程序设计
例 5 –3 输入两个数, 求两个数的最大值、最小值。 数据分析:
输入量: 两个数x、 y, float

C语言基础知识五

C语言基础知识五
22
形式1 表达式) 形式1:if (表达式) 语句
功能:判断表达式是否为真( 功能:判断表达式是否为真(非0),是则 ),是则 执行“语句” 不是,则不执行“ 执行“语句”,不是,则不执行“语 往下执行。 句”,往下执行。 说明: 说明:表达式一般为关系表达式或逻辑表 达式,表达式值非0 则为真, 为假。 达式,表达式值非0,则为真,0为假。
的值为“ 若a=5, a>=3的值为“真” 的值为 的值为“ 若a=2, a>=3的值为“假” 的值为
11
C语言中没有逻辑型数据,以“1”代表 语言中没有逻辑型数据, 语言中没有逻辑型数据 代表 真,以“0”代表假。 代表假。 代表假 判断一个量是否为“ 判断一个量是否为“真”时,以0代表 代表 以非0代表真 代表真。 “假”,以非 代表真。
23
例:输入两个实数,按其数值,由小到 输入两个实数,按其数值, 大输出这两数。 大输出这两数。 分析: 分析: 1.定义: 定义: 定义 2.输入两个实数 输入两个实数 3.条件:a>b,则交换 b 条件: 条件 ,则交换a, 4.输出:a,b 输出: 输出
24
main( ) {float a, b , t ; printf(”输入两个数 输入两个数a,b:”); 输入两个数 scanf(“%f,%f ”,&a,&b); if (a>b) { t=a; a=b;b=t;} (a>b) if (a>c) { t=a; a=c;c=t; } if (b>c) {t=b; b=c;c=t; 复合语句 } {t=a;a=b;b=t;} /*复合语句 复合语句*/ printf(“%5.2f, %6.2f”, a,b);} ;
结果: 结果:0 结果:0赋给 结果:0赋给 a 结果: 结果:d=1

《C语言程序设计》第5章数组、字符串、指针

《C语言程序设计》第5章数组、字符串、指针

相当于声明了5个整型变量
说明: ① 数组的所有元素的数据类型都是相同的。 ② 数组取名规则应符合标识符的规定,数组 名不能与同一函数中其它变量名相同: int a; float a[10]; 是错误的。
③ C语言中规定数组的下标从0开始,方括号 中常量表达式表示数组元素的个数。
④ 不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如: int n=5,a[n]; 是错误的。
二维数组在内存的存放顺序是“先行后列”
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0]

a[2][3]
5.3.2 二维数组元素的引用
二维数组的元素的引用形式为: 数组名[下标][下标] 使用二维数组的情况举例: 学生多门功课的成绩,如: a[100][3]可以用来记录100个学生3门功 课的成绩。 矩阵,如: a[3][3]可以用来记录3×3的矩阵。一个 数组元素正好存放一个矩阵的元素。
5.2.2 一维数组的初始化
1、数组声明时初始化 在编译阶段进行的。这样将减少运行时间, 提高效率。 数组初始化的一般形式为: 类型符 数组名[常量表达式]={值,值…值}; 例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0; a[1]=1;... a[9]=9;

a[9]
#include <stdio.h> 声明有10个元素 void main() 的一维数组a {int n,i; float s=0, ave, a[10]; a[0] a[1] … a[9] for(i=0;i<10;i++) a[i] { scanf("%f",&a[i]); a[i] s=s+a[i]; } ave=s/10; for(i=0;i<10;i++) a[i] a[i] if (a[i]>ave) printf("%f ",a[i]); }

C语言 第五章新

C语言 第五章新

例1:任意输入十个数,求它们的和. 任意输入十个数,求它们的和.
main() { int i=0; float s=0,x; while (i<10) while(i<100) { scanf(“%f”,&x); s=s+x; i++; } printf(“s=%f\n”,s); }
例2:求1+2+3+...+100的和。 例3:输入一串字符,求字符个数。 1+2+3+...+100的和。 的和 输入一串字符,求字符个数。 main() {int i,sum; i=1;sum=0; ; while(i<=100) while(i<100) {sum=sum+i; i=i+1;} printf(“sum=%d”,sum);} ; main() {char i; int n=0; ; i=‘’; while(i!=‘\n’) {scanf(“%c”,&i); n=n+1;} printf(“n=%d”,n);}
例:将上面计算10!并输出结果的程序用do-while语句写出: 将上面计算10!并输出结果的程序用do-while语句写出: 10 do 语句写出 main() { int i=1; long int t=1; while (i<=10) { t=t*i; i++; } printf(“10!=%ld\n”,t); } “ ” main() { int i=1; long int t=1; do { t=t*i; i++; }while (i<=10); printf(“10!=%ld\n”,t); } “ ”

C语言程序设计知识点—第5章 循环控制

C语言程序设计知识点—第5章 循环控制

4. 比较 while 和 do-while
while 循环和 do-while 循环的区别 语法不同 while ( 循环条件 ) { 循环操作 } 先判断,再执行 do { 循环操作 } while( 循环条件 ); 先执行,再判断
初始情况不满足循环条件时 1. while 循环一次都不会执行 2. do-while 循环不管任何情况都至少执行一次 [注]通常情况 while,do—while 可互换,但以下情况例外 #include “stdio.h” int main() { n=101; while(n<100) { printf(“n=%d\n”,n); } return 0; } 代码填空: 实现整数反转 #include<stdio.h> void main( ) { ~4~ #include “stdio.h” int main() { n=101; do { printf(“n=%d\n”,n); }while(n<100); return 0; }
C 语言程序设计知识点
主讲教师:杨剑
int i = 0; while (i < 4 ){ printf(“欢迎同学"); i ++ ; } } 问:循环一直执行,不会退出,哪里出错了? 注:永远都不会退出的循环称为死循环 循环的次数原则上应该是有穷的,也就是说,循环要有出口,否则成为死循环 /* 打印 4 次“欢迎同学” */ void main(){ int i= 1; while ( i <4 ){ printf ( “欢迎同学学员"); i ++; } } 问:只打印了三次 ,哪里出错了? 注:注意检查循环次数是否满足需求 /* 打印 4 次“欢迎同学” */ void main(){ int i = 0; while ( i > 5 ){ printf("欢迎欢迎同学"); i ++; } } 问:一次都没有打印,哪里出错了? 注意:如果一开始条件就不满足,while 循环一次都不执行 [课堂练习]找出 100 以内的奇数。 #include <stdio.h> int main() { int sum=0,i=1; while(i<=100) { sum=sum+i; i=i+2; } return 0; } [练习] 2006 年在校学生 1 万人,每年增长 25%,请问按此增长速度,到哪一年在校 学生人数将达到 10 万人? 提示: ~2~

C语言第五章习题带答案

C语言第五章习题带答案

练习5-1答案一、选择题1.合法得数组说明语句就是( B )。

A.int a[]="string";B.int a[]={0,1,2,3,4,5};C.char a="string";D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a得说明正确得就是( D )。

A.int a(10);B.int n=10, a[n];C.int n;D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.已知:int a[10];,则对a数组元素得正确引用就是( D )。

A.a[10]B.a[3、5]C.a(5)D.a[10-10]4.以下对一维数组a进行正确初始化得语句就是( C )。

A.int a[10]=(0, 0, 0, 0, 0);B.int a[10]={};C.int a[]={0};D.int a[2]={10, 9, 8};5.对以下说明语句得正确理解就是( B )。

int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值得个数不相同,所以此语句不正确二、填空题6.求所有不超过200得N值,N得平方就是具有对称性质得回文数。

所谓回文数就就是将一个数从左到右与从右到左读都就是一样得,例如:34543与1234321都就是回文数。

例如:满足题意要求得数有:N=1,11*11=121;N=111,111*111=12321。

#include <stdio、h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③) printf("%2d:%10d %10d\n", ++count, n, n*n);}}则①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。

C语言第5章

C语言第5章

问题分析 可以使用多个赋值语句,完成把这些价格存入一个表格的任务。用嵌套for循环 打印输出结果。输出时用转移字符’\t’控制对齐,行号变化时必须插入一个’\n’ 以输出回车换行。为了在输出中增添描述性标题,只需简单地在首行数值打印之 前打印一行标题,在首列数值打印前打印一列标题即可。
程序实现
§5.3.4 多维数组的初始化和引用
#include <stdio.h> #include <stdlib.h> void main() { int i,j,nSum=0, nAverage,nAver[3]; int nScore[3][5]={{80,61,59,85,76},{75,65,63,87,77},{92,71,70,90,85}}; for(i=0;i<3;i++) { for(j=0;j<5;j++) nSum=nSum+nScore[i][j]; nAver[i]=nSum/5; nSum=0; } nAverage=(nAver[0]+nAver[1]+nAver[2])/3; printf("math:%d\nc languag:%d\ndFoxpro:%d\n",nAver[0],nAver[1],nAver[2]); printf("total:%d\n", nAverage); }
输出方法:
输出第i行第j列元素: printf(“%d”,a[i][j]); 输出整个数组元素:
for (i=0;i<2;i++) for(j=0;j<3;j++) printf(“%d”,a[i][j]);
例5-5 用二维数组实现如下表5-2所示的计算每门课的 平均分数。

C语言入门教程(精华版)

C语言入门教程(精华版)

C语言入门教程(精华版)C语言是一种广泛使用的计算机编程语言,它被广泛应用于操作系统、嵌入式系统、系统软件和应用程序等领域。

C语言具有高效、灵活和可移植性强的特点,是许多高级编程语言的基础。

本教程旨在帮助初学者快速入门C语言编程,我们将从C语言的基本语法、数据类型、运算符、控制结构等方面进行讲解。

通过本教程的学习,你将能够掌握C语言的基础知识,并能够编写简单的C语言程序。

第一部分:C语言的基本语法1. 预处理器指令:用于在程序编译之前执行一些特定的操作,如包含头文件、定义宏等。

2. 主函数:C语言程序的入口点,程序从这里开始执行。

3. 变量声明:用于声明程序中使用的变量,包括变量的类型和名称。

4. 语句:C语言中的执行单元,用于执行特定的操作,如赋值、输入输出等。

5. 函数:用于实现特定的功能,可以重复使用。

在C语言中,每个语句都以分号(;)结束。

C语言中的注释用于解释代码,单行注释以两个斜杠(//)开始,多行注释以/开始,以/结束。

C语言入门教程(精华版)C语言是一种广泛使用的计算机编程语言,它被广泛应用于操作系统、嵌入式系统、系统软件和应用程序等领域。

C语言具有高效、灵活和可移植性强的特点,是许多高级编程语言的基础。

本教程旨在帮助初学者快速入门C语言编程,我们将从C语言的基本语法、数据类型、运算符、控制结构等方面进行讲解。

通过本教程的学习,你将能够掌握C语言的基础知识,并能够编写简单的C语言程序。

第一部分:C语言的基本语法1. 预处理器指令:用于在程序编译之前执行一些特定的操作,如包含头文件、定义宏等。

2. 主函数:C语言程序的入口点,程序从这里开始执行。

3. 变量声明:用于声明程序中使用的变量,包括变量的类型和名称。

4. 语句:C语言中的执行单元,用于执行特定的操作,如赋值、输入输出等。

5. 函数:用于实现特定的功能,可以重复使用。

在C语言中,每个语句都以分号(;)结束。

C语言中的注释用于解释代码,单行注释以两个斜杠(//)开始,多行注释以/开始,以/结束。

C语言程序设计教程(第5版)_第5章_循环结构

C语言程序设计教程(第5版)_第5章_循环结构

b(a<b),求它们之间的几何级数的和,数学表达式

:i b
i
ia
分析:
①所求级数和的初值和终值由键盘任意输入;
②题目要求初值a<b,并且a>0,b>0;
③如果a>b,或者输入的值为负数,则程序提示输 入错误,不进行任何计算,直接退出程序。
5.1 for语句
程序流程图: 程序:example5_2.c 思考: ①该算法的缺点; ②设计更好的算法。 ③假如输入的数可以为任意整数,
2.判断<条件表达式>的值。该表达式就是循环条件,若该 表达式的值为“真”,则执行<循环体语句>; 若该表达式的值为“假”,则退出循环,执行循环结构外 的语句。
3.计算<循环表达式>的值。该表达式更新循环控制变量的 值。
4.转第2步。
5.1 for语句
for语句的流程图:
注意: ①若<循环体语句>中有多
ib
如果a≤b,计算i; ia ia
如果a>b,则计算i 。 ib
请设计算法并编写程序验证。
5.1 for语句
例3:编写程序,从键盘输入m和n的值,用符号“*”在屏幕 上打印出如下所示具有m行n列的矩形图案。 ******* ******* ******* ******* ******* ******* ******* *******
5.1 for语句
程序算法流程图如图所示: 程序:example5_4.c 程序特别处理:如果(a>b),
计算(a−b);否则计算(b−a)。 思考: 1.如果每次测试的题目不止10个,
需要怎样修改算法和程序? 2.如果要求程序在结束了一组测
试之后,可以继续进行测试,需 要怎样修改算法和程序? 3.如果要加入两位数的除法计算, 需要怎样修改算法和程序?

C语言第五课

C语言第五课

字符数组续
字符数组和字符串
1. 字符串:字符串是一个用双引号括起来的以‘\0’结束的字符序列,其 中的字符可以包含字母、数字、其他字符、转义字符、汉字(一个汉 字占2个字节)。
2. 用字符串可以初始化字符数组,用字符串初始化字符数组时最后自动 添加字符串结束标志‘\0’。 例:char c[6]={“CHINA”}; 或 char c[6]=“CHINA”;
二维数组的定义
不能使用变量!
1. 格式:类型说明符 数组名[常量表达式] [常量表达式]
例: float a[3][4];
a是数组名,float表示每个数组元素的数据类型是单精度
浮点型,本数组包含了3行(0~2)4列(0~3)共12个元素,分别 为a[0][0]、a[0][1]、……、a[2][3]
16
字符数组续
3. 字符串连接函数strcat 格式:char * strcat(char *str1, char *str2) 功能:将字符数组2中的字符串连接到字符数组1中的字符串的后面, 连接后的结果放在字符数组1中。 注意:字符数组1的存储单元必须足够大。
4. 字符串拷贝函数strcpy 格式:char * strcpy(char *str1, char *str2)
① 数组先定义后引用; ② 引用时,只能引用数组元素,一个数组元素就是一个变量,但不能
引用整个数组。
一维数组续
应用举例
用数组求Fibonacci数列的前40项,并打印输出。 用选择法对n个数排序符。 用冒泡法对n个数排序符。 对有序数组,用折半查找法查找数据x的位置(即下标)。
二维数组
应用举例
矩阵转置。
二维数组续
字符数组
字符数组的定义和使用

C语言-第5章 循环结构程序设计

C语言-第5章 循环结构程序设计

第5章循环结构程序设计一、单项选择题1.在C语言中,下列说法中正确的是()。

A) do-while语句构成的循环不能用其它语句构成的循环来代替。

B) do-while语句构成的循环只能用break语句退出。

C) do-while语句构成的循环在while后的表达式非零时结束循环。

D) do-while语句构成的循环,在while后的表达式为零时结束循环。

2. break语句不能出现在语句中()A) switch B)for C) while D) if…else3.对于break语句和continue语句的说法错误的是()A) break语句不能用于循环语句和switch语句之外的任何其他语句中。

B) break和continue也可以用于if语句中C) continue语句只结束本次循环,而不是终止整个循环的执行。

D) break语句是结束整个循环过程,不再判断执行循环的条件是否成立。

4. 语句while(!y);中的表达式!y等价于A)y==0 B)y=1 C)y=!0 D) y==15. 若有“int a=1,x=1;”,则循环语句“while(a<10) x++; a++;”的循环执行()。

A)无限次B)不确定次C)10次D)9次6. 有以下程序段int k=0while(k) k++;则while循环体执行的次数是A) 无限次B) 有语法错,不能执行C) 一次也不执行D) 执行1次7. 下列循环语句中有语法错误的是( )A while(x=y) 5;B while(0) ;C do 2;while(x= =b);D do x++ while(x= =10);8. 当运行时输入:abcd$abcde ,下面程序的运行结果是。

#include<stdio.h>main(){char c;while(putchar(getchar())!='$');printf("end");}A)abcd$abcde B)abcd$end C)abcdend D)abcd$abcdeend 9. 以下程序段( )x=-1;do { x=x*x; }while(x>0);A) 是死循环B) 循环执行一次C) 循环执行二次D) 有语法错误10. 下面程序段执行后的结果为: ( )int sum=0, n=10;do { sum=sum+n;n++; }while(n<10);printf(“%d,%d”,sum,n);A. 0, 10 B) 10, 11C) 0, 11 D) 以上结果都不对12. 循环“for(i=0,x=1;i=10&&x>0;i++);”的循环执行()。

C语言入门经典(第5版)

C语言入门经典(第5版)

C语言入门经典(第5版)
#include<stdio.h>
Intmain(void)
{ printf(“Beginning c/n”);
return 0;
}
第1章C语言编程
C语言标准库学习C 创建C程序创建第一个程序编辑第一个程序处理错误剖析一个简单的程序预处理器用C语言开发程序函数及模块化编程常见错误要点小结习题
第2章编程初步
计算机的内存什么是变量存储整数的变量变量与内存使用浮点数浮点数变量较复杂的表达式定义命名常量选择正确的类型强制类型转换再谈数值数据类型赋值操作的op=形式数学函数设计一个程序
第3章条件判断。

C语言基础知识5---条件语句

C语言基础知识5---条件语句

一、if语句if(表达式) 语句1;如果表达式的值为非0,则执行语句1,否则跳过语句继续执行下面的语句。

如果语句1有多于一条语句要执行时, 必须使用{} 把这些语句包括在其中, 此时条件语句形式为:if(表达式){语句体1,2,3;}例如:if(x>=0) y=x;if(a||b&&c){z=a+b;c+=z;}if--else语句除了可以指定在条件为真时执行某些语句外,还可以在条件为假时执行另外一段代码。

在C语句中利用else语句来达到这个目的。

else 语句2;同样,当语句1或语句2是多于一个语句时,需要用{}把语句括起来。

例如:if(x>=0) y=x;else y=-x;if--else if--else结构if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;.else语句n;这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句, 并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else 语句n。

最后这个else常起着缺省条件的作用。

同样,如果每一个条件中有多于一条语句要执行时,必须使用{}把这些语句包括在其中。

条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪个else。

例如:if(x>20||x<-10)if(y<=100&&y>x)printf(Good);elseprintf(Bad);对于上述情况, Turbo C规定: else语句与最近的一个if语句匹配, 上例中的else与if(y<=100&&y>x)相匹配。

为了使else与if(x>20||x<-10)相匹配, 必须用花括号。

如下所示:if(x>20||x<-10){if(y<=100&&y>x)printf(Good);}elseprintf(Bad);下面举几个例子:1.输入一个数,如果大于0,输出plus;如果是负数,输出negative;如果正好是0,则输出zero。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章数组与字符串5. 1 一维数组5. 2 二维数组5. 3 字符串处理⏹1994年的微软电子百科全书(Microsoft Encarta)的一篇数学论文中这样说道:“如果a,b,c都是整数并且a=bc,那么我们称a是b和c的倍数,b和c是a 的约数或因数。

如果c不是+1或-1,b就被称之为a 的一个真因数。

包括0在内的所有偶数,都是2的倍数,比如-4,0,2,10;非偶的数称之为奇数,比如-5,1,3,9。

如果一个正整数等于它的所有正真因数的和,我们称这个数为一个完数(perfect)。

例如:6=1+2+3;28=1+2+4+7+14,所以6和28都是完数。

不是完数的正整数分为亏数(deficient)和冗数(abundant),依据这个数的所有真因数的和与其本身的大小来划分。

因此,9是亏数因为9>1+3;而12是冗数因为12<1+2+3+4+6。

”⏹请你写一个程序来判断读入的数是完数,亏数还是冗数。

“猴子吃桃”问题。

猴子第一天摘下若干个桃子,当即吃了一半,还多吃了一个。

第二天又将剩下的桃子吃掉一半,又多吃了一个。

以后每天都吃前一天剩下的一半零一个。

到第十天想吃时,见只剩下一个桃子。

求第一天共摘了多少个桃子。

这是个“倒推”问题。

设:第n天的桃子数为X n,它前一天的桃子数为X n-1则:X n=X n-1/2-1 可得到:Xn-1=2(Xn+1)已知:X10=1main() /*用while循环*/ { int i, a;i=10;a=1;while (i>1){ a=2*(a+1);i--;}printf("a=%d\n", a); }运行结果:a=1534main() /*用for循环*/ { int i, a;for(i=10, a=1; i>1; i--)a=2*(a+1);printf("a=%d\n", a); }概述C数据类型:基本类型——整型、实型、字符型;构造类型——数组、结构体、共用体;基本类型的特点:每个基本类型都是不可再分割的量,基本类型的变量在定义、存储、含义上都是独立的。

构造类型的特点:每种构造类型都是由若干基本类型的量按一定规则组织而成。

数组的构成:数组是同类型相关数据的集合;其中每个量称为数组元素,数组元素是访问数组的基本单位。

数组元素的表示:用数组名及下标来表示;a[0]、a[1]、a[2]、a[3]、a[4] …采用数组的意义:数组的下标可由变量来控制使其有规律地变化,这就使得对于一组相关数据的处理比采用多个简单变量更为简便和有效。

5. 1 一维数组1. 一维数组的定义一般形式:类型标识符数组名[常量表达式]数组说明指定数组元素个数;形式:整常数、符号常量命名方法同变量,但不能重名;说明元素类型;例:int a[5]; 定义了长度为5的一维整型数组a;2. 一维数组的引用引用单位:数组元素;或称为下标变量;引用形式:数组名[下标]其中:数组名指明要引用的数组;下标指明要引用元素的标号;下标形式:常量、变量、表达式;下标取值:0、1、2 … (数组长度-1)例:数组元素的引用和赋值int i, a[5]; /*数组、简单变量可同时定义*/ i=2;a[0]=5; /*给数组元素赋值*/ a[1]=a[2]=10;a[3]=a[i]*2; /*引用a[i]的值参与运算*/ a[i*2]=a[i+1]+a[0]%i; /*表达式作为下标*/ printf(“%d,%d,%d,%d,%d\n”,a[0], a[1], a[2] , a[3], a[4]);5,10,10,20,213. 一维数组的存储编译系统为定义的数组分配连续的存储区间;该区间字节数:元素类型长×元素个数例:int a[5];数组a 的指针→各元素存储顺序:按由小到大的下标顺序a 数组存储长度:2×5=10byte 1000 1002100410061008a[0]a[1]a[2]a[3]a[4]┇510102021┇说明:1)一维数组的指针即数组存储区间的起始地址;表示:数组名2) 一维数组元素的地址(指针)引用数组元素时,各元素的地址是由数组起始地址及下标换算得出。

如:a[2] 其中[ ]是下标运算符,1级;a[2]的地址:a+类型长×下标=1000+2×2=1004表示:&a[2]3) 应避免下标越界,因调试的各阶段对下标越界不做检查,越界将造成麻烦。

例如:有定义int a[5];若:sum=sum+a[8];将在1000+2×8=1016中引用一毫无意义的值;若:a[5]=100;将100存入1000+2×5=1010中,可能破坏程序代码或系统代码造成死机。

4. 一维数组的输入、输出1) 指定元素I/O:scanf(”%d%d%d%d%d”, &a[0], &a[1], &a[2], &a[3], &a[4]);printf(”%d,%d,%d,%d,%d\n”, a[0], a[1], a[2], a[3], a[4]);2) 利用循环控制下标变化实现I/O:int a[100], i;for(i=0; i<100; i++)scanf(”%d,”, &a[i]); /*下标变化:0~99*/ for(i=0; i<100; i++)printf(”%d,”, a[i]);例:将一维数组各元素顺序输出、倒序输出、选偶数项输出。

int a[100], i;for( i=0; i<100; i++) a[i]=i+1; /*生成数组*/ for(i=0; i<100; i++){ if( i%10==0) printf(“\n”); /*换行控制*/ printf(”%-5d”, a[i]);}for(i=99; i>=0; i--)printf(”%d,”, a[i]);for(i=1; i<=99; i=i+2)printf(”%5d”, a[i]);YS5. 一维数组的初始化指在定义数组的同时给数组元素赋值;例:int a[5]={1, 3, 5, 7, 9};初值表数组说明各元素按顺序分别获初值:a[0] a[1] a[2] a[3] a[4]13579初始化规则:1) 初值只能是常数,逗号分隔;2) 系统自动将静态存储类别的数组各元素赋初值0;如:static int a[5]; /*各元素自动为0*/ int b[10]; /*各元素初值不定*/3) 初值个数可少于数组长度;如:int a[5]={1, 3, 5};/*其余自动为0*/ float b[10]={0}; /*b各元素均为0*/ a[0] a[1] a[2] a[3] a[4]135004) 初值个数多于数组长度,编译出错;如:int a[5]={1, 3, 5, 7, 9, 11, 13};5) 系统可自动以初值的个数确定数组的长度;如:float b[ ]={1.1, 2.2, 3.3, 4, 5, 6, 7, 8};b数组长度自动为8;分配存储空间大小:32 bytes1.冒泡法⏹冒泡法排序的基本思想是:依次逐个比较相邻的的两个数,如不符合顺序要求,就交换这两个数的位置。

通过一轮比较,就能排定一个数的位置,对于n个数,进行n-1轮比较即可完成排序。

⏹实现:⏹要排序的数必须放入数组中⏹用二重循环控制比较趟数(n-1趟),内循环控制一趟比较的次数(n-i次)2.选择法选择法排序的基本思想是:通过比较找到最小数,如不是第1个数,则与第1个数交换,再在余下的数中找到最小数,如不是第2个数,则与第2个数交换位置,再在余下的数中找到最小数,如不是第3个数,则与第3个数交换位置,依此进行,n个数经过n-1轮比较即可完成排序。

3. 插入法插入法排序基本思想是:开始时第1个数已排好序,首先将第2个数按其与前1个已排好序的数的顺序关系插入到适当位置,然后将第3个数按其与前2个已排好序的数的顺序关系插入到适当位置,接着再将第4个数按其与前3个已排好序的数的顺序关系插入到适当位置,依次进行下去,直到最后一个数也按其与前面所有已排好序的数的顺序关系插入到适当位置。

对于n个数,经过n-1轮比较插入即可完成排序。

在未排序的数据中查找指定数据只能使用顺序查找的方法,顺序查找就是对数据依次逐个进行比对,直到找到指定数据或遇到末尾仍未找到指定数据。

当然,顺序查找也适用于已排序的数据,但明显不是一种高效的方法。

对已排序的数据可以采用效率较高的二分法查找也称折半查找的方法。

这种查找方法采用分而治之的办法,先在已排序的数据中找到中间位置的数据,如果它等于要找的指定数据,就完成查找;如果它小于要找的指定数据,则就在比中间数据大的那一半中继续查找,否则就在比中间数据小的那一半中继续查找。

重复这样的查找过程,直到找到指定数据或者没有数据可供查找为止。

6. 一维数组程序举例例:用数组求某班某门课平均成绩、最高、最低分。

#define N 10main( ){int a[N], i, max, min;float sum=0;for(i=0; i<N; i++)scanf("%d", &a[i]);for(i=0; i<N; i++)sum=sum+a[i];max=min=a[0];┇max=min=a[0];for(i=1; i<N; i++){ if(a[i]>max) max=a[i];if(a[i]<min) min=a[i];}printf("average=%8.2f\n", sum/N); printf("max=%d,min=%d\n", max, min); }例:用数组处理Fibonacci数列;按每行5项输出前20项。

YS main(){int f[20]={1,1},i;for(i=2;i<20;i++)/*生成数列*/f[i]=f[i-2]+f[i-1];printf("\n");for(i=0;i<20;i++)/*输出数列*/{printf("%12d",f[i]);if((i+1)%5==0)printf("\n");/*换行控制*/}}例:利用随机函数rand模拟投掷六面骰子600次,并用数组统计1~6点出现的次数。

rand函数:产生0~32767之间的一个随机整数;main( ){int i, fact , c[6]={0};for(i=1; i<=600; i++){ fact=1+rand( )%6; /*fact:1~6*/ c[fact-1]++; /*对应元素计数*/printf("%2d", fact);}for(i=0; i<6; i++)printf("%d:%d\n", i+1, c[i]);}例:用选择法对一数列按降序排序(由大到小)算法:若有定义int a[5]={12, 32, 4, 0, 56};1)将a[0]与其后的各元素a[1]~a[4]逐一比较,找出其后最大的数a[4],将a[0]与a[4]交换;a[0]变为最大。

相关文档
最新文档