尚晋霞C程序设计第六章
C教案—第六章
第十七讲函数(1)学时:2学时授课形式:板书+多媒体讲解+实例程序演示主要内容及时间安排(课堂90分钟, 80分钟讲课,5分钟复习,5分钟总结):(1)模块化程序结构的概念、C语言程序结构回顾(5分钟);(2)函数调用简单例子分析(10分钟);(3)函数的定义方法(三种有参、无参、空函数)(10分钟)(4)函数参数和函数值(参数传递方法、参数类型对应关系、函数返回值的含义、返回值的类型等)(20分钟)(5)简单函数定义和调用举例(40分钟)(6)总结、习题布置和下一节知识点提要(习题8.1、8.3、8.4,下一节函数的使用深入、变量的作用域、变量的存储分类等)(5分钟)重点:函数定义方法、函数调用方法、函数参数传递方法、返回值的使用和类型确定;难点:函数调用方法、函数参数传递方法。
教学内容细节:一、以具体实例引出函数的优点及函数的作用例题:打印行列数不同的*号组成的多个矩形,比如打印3*4的、5*6、9*9的。
例题2:求连加和。
输入的数不同;例题3:程序规模方面考虑,如果有些题目太大,把所有程序都编在主函数中,主函数可读性会下降,规模结构也不尽合理。
所以可以考虑将部分程序功能做成功能包(函数),什么时候需要这个功能,什么时候调用这个功能包,这时只写功能包的名字就好了。
代码的重用性增强、程序结构简化、可读性强、结构性强。
二、函数的定义方法定义函数的一般形式如下:类型标识符函数名(形式参数列表){声明部分;执行部分;}说明:(1)类型标识符:C语言的数据类型,包括基本数据类型、指针、结构体等;(2)函数名:符合C语言用户标识符的命名规则;(3)形式参数列表:与从主调函数中传过来的参数相对应的形式参数列表,根据实际情况可有可无,但是小扩号必须要有;与形参对应的是实参,主调函数中变量成为实际参数,实际参数在程序运行时分配空间,直到程序结束,空间释放,而形式参数什么时侯调用什么时候分配空间,子函数调用结束空间就释放。
C语言程序设计教程第6章_北京邮电大学出版社
2013/7/9
C语言程序设计教程
11
[案例6-3] 定义一个函数,用于求两个数中的大数。 /*功能:定义一个求较大数的函数并在主函数中调用*/ int max(int n1, int n2) /*定义一个函数max()*/ { return (n1>n2?n1:n2); } main() { int max(int n1, int n2); /*函数说明*/ int num1,num2; printf("input two numbers:\n"); scanf("%d%d", &num1, &num2); printf("max=%d\n", max(num1,num2)); }
2013/7/9
C语言程序设计教程
20
2.函数类型
在定义函数时由类型标识符确定对函数类型的说明,应 与return语句中返回值表达式的类型一致。
如果不一致,则以函数类型为准,自动将数据转换成函 数的类型。如果缺省函数类型,则系统一律按整型处理。
案例6-4 返回值类型与函数类型不同
#include <stdio.h> void main() 输入:4.3 2.6 ↙ { int max(float,float); float a,b; 结果:Max is 4 scanf("%f%f",&a,&b); printf("Max is %d\n",max(a,b)); } int max(float x,float y) { return x>y?x:y; } 2013/7/9 C语言程序设计教程
(2)void类型的函数和有返回值类型的函数在定义时没 有区别,只是在调用时不同。 有返回值的函数可以将函数调用放在表达式中间,将返 回值用于计算。 而void类型的函数不能将函数调用放在表达式当中,只 能在语句中单独使用。 (3)void类型的函数多用于完成一些规定的操作,而主 调函数本身不再对被调函数的执行结果进行引用这样 就禁止在调用函数中使用被调函数的返回值。
C语言程序设计(第二版)课件第6章
6.2函数
❖ 运行结果:
main函数是主调函数,max是被调函数。其中x,y是实参,在数据传 递过程中x,y必须是确定的值。a,b是形参,用之前形参的数据类型 与实参相匹配。最后通过return语句返回a,b中较大值。
6.2函数
6.2.2 函数的声明
❖ 在本章例6.2中,如果被调函数的定义在main函数的后面,那么在 主函数main中需要对被调函数的进行声明。这种方式和变量相同, 先定义后使用。主要目的是使编译系统知道被调函数返回值类型, 以便在主调函数中对此类型的函数值作相应的处理。
❖ C程序的全部工作是由各种功能的函数完成的,C语言 称为函数式语言。采用函数模块式的结构,C语言实现 了结构化程序设计,使程序的层次结构清晰,方便程序 的编写、阅读、调试。
本章目录
6.1函数分类 6.2函数 6.3 函数调用 6.4函数和数组 6.5变量的作用域 6.6变量的存储类别 6.7内部函数和外部函数
其中第一,第二行对str函数和f函数预先作了说明。 因此在以后各 函数中无须对str和f函数再作说明就可直接调用。 ❖ 4. 对库函数的调用不需要再作说明, 但必须把该函数的头文件用 include命令包含在源文件前部。
6.2函数
❖ 6.2.3函数的参数
❖ 函数的参数分为形参和实参两种。 在本小节中,进一步介绍形参、 实参的特点和两者的关系。形参出现在函数定义中,在整个函数体 内都可使用,离开该函数不能使用。实参出现在主调函数中,进入 被调函数后,实参变量也不能使用。实参和形参之间的数据传递是 单项值传递,相当于实参的值复制到形参中,并且形参的任何变化 不影响实参。
6.1函数分类
C语言中可从不同的角度对函数分类。
❖ 1. 从函数定义的角度,函数分为库函数和用户定义函数。
Visual C 6.0程序设计(章 (6)
第6章 非客户区界面设计 (4) 在Messages列表框中选择消息,然后单击“Add Function…”按钮,增加消息处理函数。一般都是用 ClassWizard提供的缺省函数名。 (5) 单击“确定”按钮,关闭ClassWizard对话框,添加消 息处理函数。
第6章 非客户区界面设计
图6-3 为菜单项添加消息
第6章 非客户区界面设计
表 6-3 系统自动分配的 ID 号
标题
ID 号
显示系统时间
ID_SHOWTIME
禁止
ID_PREVENT
激活
ID_ACTIVE
பைடு நூலகம்
第6章 非客户区界面设计 (9) 运行该程序,可见应用程序菜单如图6-10所示。 需要注意的是,这里所有子菜单选项均为灰色,即无效状态。 要想对应的子菜单处于有效状态,就要为相应的菜单项添加消息 处理函数,即具体的操作功能。
第6章 非客户区界面设计
图6-6 菜单属性对话框
第6章 非客户区界面设计
图6-7 添加子菜单后菜单显示
第6章 非客户区界面设计
图6-8 菜单属性对话框
第6章 非客户区界面设计
图6-9 菜单属性对话框
第6章 非客户区界面设计 (7) 在“分隔符”菜单项下添加“禁止”菜单项,快捷键为 “Alt+P”,提示为“禁止菜单功能”。 (8) 在“禁止”菜单项下增加“激活”菜单项,快捷键为 “Alt+A”,提示为“激活菜单功能”。 请注意,在菜单中用鼠标左键双击新添加的子菜单项,在弹 出的属性窗口中的ID号为系统自动分配的ID号,为了便于寻找可 将其修改为便于记忆的ID号。 系统自动分配的ID号如表6-3所示。
第6章 非客户区界面设计
第6章 非客户区界面设计
程序设计教程(第6章)
学习目标:
熟悉过程的概念及其种类。掌握 Sub 过程的定义、 建立和调用,掌握 Function 过程的定义、建立和 调用。 掌握形参与实参的概念及其参数的两种传递方式
掌握过程的嵌套调用与递归调用 掌握过程和变量的作用域 掌握进制转换、素数等常用算法
6.1 Visual Basic的工程
2. Sub过程的建立
Sub过程可以在窗体模块(.frm)中建立,也可以在标准模块
(.bas)中建立。 1、在窗体模块(.frm)中建立可以在代码窗口中完成。 打开代码窗口后,在对象框中选择“通用”项,然后输入Sub 过程头,例如Sub Mysub1(n),按下回车键,窗口显示: Sub Mysub1(n) …… End Sub 此时可在Sub 和End Sub之间输入程序代码。 2、在标准模块(.Bas)中建立Sub过程,方法是: 选择“工程”菜单中的“添加模块”命令,打开“添加模块” 对话框;再选择“新建”或“现存”选项卡,,新建一个标准 模块获打开一个已有的标准模块。之后就可以在模块代码窗口 中编辑Sub过程了。
6.2.2 Function过程
1. 函数过程(Function过程)的定义
Visual Basic函数分为内部函数和外部函数,外部函数是用户根 据需要用Function关键字定义的函数过程,与子过程不同的是 函数过程将返回一个值 。 [Public|Private][Static]Function 函数名 ([< 参数列表 >])[As< 类 型>] <局部变量或常数定义> 是指函数返回值的 <语句块> 类型,如省略,返 [函数名=返回值] 回值是变体型的。 函数体 [Exit Function] <语句块> [函数名=返回值] End Function 函数返回值的处理
最新《c 程序设计基础》qa-第六章-c 程序设计基础
❖此课件下载可自行编辑修改,仅供参考! 感谢您的支持,我们努力做得更好!谢谢
整型的指针iptr,输出3个数中的最大值,编写相应的程 序。
Q&A
❖6.4 以下程序调用了四次strcpy()函数,请问哪些调用
在运行时会出现错误?为什么?
Q&A
❖6.5 编写一个函数get_average()获取整型数组元素
的平均值。
Q&A
❖6.7 编制程序,调用指针做作为参数的函数,实现下面
两个字符串变量的交换。
Q&A
❖6.8 定义一个字符型指针数组strArray[4],每个严肃
指向一个字符串,请通过键盘输入一首诗,数组的每个成 员指向一行诗,最后通过这个数组输出这首诗。
Q&A
❖6.10 修改例6-12,用指针的引用作为函数Move()的
形参,观察程序运行的结果,比较指针作形参和引用作形 参的差别。
❖《c 程序设计基础》qa-第六 章-c 程序设计基础
❖ P45
Q&A
❖ 字符型数组
参考答案
Q&A
❖6.1 你认为以下程序将显示什么结果?运行这个程序,
观察并解释为什么出现这样的结果?
4
Q&A
❖6.2 以下程序在VC环境下编译运行,出现什么结果?
Q&A
❖6.3 从键盘输入3个整型数va、vb、vc,通过一个指向
《Visual Basic 6.0程序设计》第6章:过程
/
6.3 调用过程时的参数传递
实参
实参
值
值
临时空间 值副本
形参
形参
图6.2 按值传递
图6.3 按址传递
/
6.3 调用过程时的参数传递
例6.4 按值、按址传递参数实例。
Private Sub example(ByVal x As Integer, y As Integer) x = x + 10 y=y+5 Print "x="; x, "y="; y End Sub Private Sub Form_Click() Dim a As Integer, b As Integer a = 10: b = 10 Print "a="; a, "b="; b Call example(a, b) Print "a="; a, "b="; b End Sub
/
第6章 过
6.1 6.2 6.3 6.4 6.5
程
通用过程 Function函数过程 函数过程 调用过程时的参数传递 递归 习题
/
6.1 通 用 过 程
通用过程,又叫 子程序过程, 通用过程,又叫sub子程序过程,结构与事 子程序过程 件过程类似,在程序中用语句显式调用。 件过程类似,在程序中用语句显式调用。
/
6.2.1 声明Function函数过程 声明Function函数过程
例6.3 要求定义一个求阶乘的函数过程 Private Function JC(n As Integer) As Long JC = 1 Do While n <> 0 JC = JC * n '对函数名的赋值 n=n-1 Loop End Function
C语言程序设计
二、goto语句及其构成的循环
一般形式:goto
语句标号
说明: (1)goto语句使控制无条件转到标号所指定的语句处开 始往下执行; (2)语句标号必须是标识符而不是常量。 如:goto abc 合法, 而goto 35 则非法; (3)与循环语句配合使用时,可从循环体内跳到循环体 外,而不能从循环体外跳到循环体内; (4)与if语句配合使用时可构成循环(一般不采用goto语 句执行循环)
四、do~while语句
do~while语句
一般形式:
do 循环体语句; while(表达式);
说明:do是C语言的关键字,必须和while联合使用。do-while循环由 do开始,用while结束;注意,在while结束后必须有分号,它表示该 语句的结束。其它同while循环语句。
执行流程:
printf("sum=%d\n",su m);
程序输出结果: sum=5050
1、注意给出循环的初始条件,如本例中“sum=0、i=1”。 2、循环体包含一个以上的语句时,用大括号括起来,形 成复合语句。 3、循环体中必须有使循环趋于结束的语句,否则程序进 入“死循环”(不结束)。 4、如果while的 (表达式) 值为0,则循环体一次也不执 行 (例如当i的初值=101) 。 5、在循环体中,语句的先后位置必须符合逻辑,否则会 影响运算结果。 问题的提出:(1)什么情况下循环体一句也不执行? (2)什么情况下出现死循环: while(1) (3)怎么样使循环结束 a:条件表达式不成立(为零) b:循环体内遇break. 循环三要素: 初始化、条件表达式、状态变化
思考程序段的输出? main( ) /*ex22.cpp*/ { int i,sum; i=1; sum=0; while (i<=100) {i++; sum=sum+i; } printf("sum=%d\n",sum); } 运行后,输出:
第6章程序设计基础1
§6.2 内存变量及赋值
§6.2.1 内存变量的定义和赋值 1.内存变量的定义
在程序或命令窗口中第一次给内存变量赋值, 则定义了内存变量名和数据类型。内存变量的命 名规则同字段变量。
系统的命令和函数名为保留字,不得作为变量名。 允许内存变量与字段变量重名,但优先使用字段 变量,若特指内存变量,应在内量前加前缀 “M.”,即 M.<内存变量名>。 内存变量的数据类型有:数值型、字符型、日期 型、日期时间型、货币型、逻辑型、对象型。
*4.删除内存变量
[格式一] RELEASE 〈内存变量表〉 [格式二] RELEASE ALL [ LIKE〈通配变量名〉| EXCEPT〈通配变量名〉] [功能] 删除指定的内存变量。
内 存 变 量
*5.保存内存变量
[格式] SAVE TO〈文件名〉| TO〈备注型字段 名〉[ ALL LIKE | EXCEPT〈通配变量名〉] [功能] 将当前内存变量存于一个内存文件 (.MEM)或备注型字段中。
内 存 变 量
*3.显示内存变量
[格式] LIST | DISPLAY 名〉][TO PRINTER | TO [功能] MEMORY [ LIKE〈通配变量 FILE〈文件名〉]
在屏幕上显示当前内存变量的名字、属性、类
型、内容及定义它们的过程或函数名,同时给出当前内
存变量的总数及可再定义的内存数量数目。
数组的定义及赋值
3.数组元素的表示方法
数组元素用数组名和用括号括起来的下标来表示。 下标即数组元素的顺序号,下标总是从1开始。 对于二维数组元素,可以用双下标(行,列)来 表示,也可以用单下标(顺序号)来表示。
例:DIMENSION A(3,5) 则 A(2,3) 与A(8) 表示同一元素。
C#程序设计经典教程第6章
6.1.3 哈希表
【实例6-2】利用Hashtable进行集合的增、删和 遍历。
6.1.4 栈和队列
1.栈Stack Stack类实现了先进后出的数据结构,这种数据结构在插 入或删除对象时,只能在栈顶插入或删除。 创建栈对象的一般形式如下: Stack 栈名 = new Stack();
6.1.2 ArrayList
6.遍历ArrayList中的元素 ArrayList可以使用和数组类似的方式对集合中的元素进行 遍历,例如: for (int i = 0; i < AlStudents.Count; i++) { Student stuFor = (Student)AlStudents[i]; lblShow.Text += "\n" + stuFor.ShowMsg(); } 也可以用foreach 方式进行遍历,例如: foreach (object stuo in AlStudents) { Student stuForeach = (Student)stuo; lblShow.Text += "\n" + stuForeach.ShowMsg(); }
6.1.2 ArrayList
3.访问ArrayList中的元素 ArrayList集合可以通过索引来访问其中的元素,其形式为 (类型) ArrayList[index] //按指定索引(下标)取得对象 下面的示例通过索引访问上面添加的Student对象,并调 用其ShowMsg方法。 Stud[0]; stu1.ShowMsg(); 需要注意的是,由于ArrayList中可以添加Object类型的对 象,在添加时,相当于一次装箱操作,所以在访问时,需 要一次需要类型转换,把Object类型的对象转换成指定类 型,这相当于一次折箱。
C++程序设计Y.Daniel Liang 第六章课后习题答案
Exercise6_2#include <iostream>using namespace std;int main(){// Prompt the user to enter the first numbercout << "Enter an integer: ";int max;cin >> max;int count = 1;// Prompt the user to enter the remaining five numbers for (int i = 1; i <= 5; i++) {cout << "Enter an integer: ";int temp;cin >> temp;if (temp > max) {max = temp;count = 1;}else if (temp == max)count++;}cout << "\n" <<"max is " << max << "\n" <<"the occurrence count is " << count;return 0;}Exercise6_4#include <iostream>using namespace std;int main(){double scores[100];double sum = 0;int count = 0;do{cout << "Enter a new score: ";cin >> scores[count];sum += scores[count];}while (scores[count++] >= 0);double average = (sum - scores[count]) / (count - 1);int numOfAbove = 0;int numOfBelow = 0;for (int i = 0; i < count - 1; i++)if (scores[i] >= average)numOfAbove++;elsenumOfBelow++;cout << "Average is " << average << endl;cout << "Number of scores above or equal to the average " << numOfAbove << endl; cout << "Number of scores below the average " << numOfBelow << endl;return 0;}Exercise6_6#include <iostream>#include <cmath>using namespace std;int main(){const int NUM_OF_PRIMES = 50;// Store prime numbersint primeNumbers[NUM_OF_PRIMES];int count = 0; // Count the number of prime numbersint number = 2; // A number to be tested for primenessbool isPrime = true; // Is the current number prime?cout << "The first 50 prime numbers are \n";// Repeatedly find prime numberswhile (count < NUM_OF_PRIMES){// Assume the number is primeisPrime = true;// Test if number is primefor (int i = 0; i < count && primeNumbers[i] <= sqrt(1.0 * number); i++) {//If true, the number is not primeif (number % primeNumbers[i] == 0){// Set isPrime to false, if the number is not primeisPrime = false;break; // Exit the for loop}}// Print the prime number and increase the countif (isPrime){primeNumbers[count] = number;count++; // Increase the countif (count % 10 == 0){// Print the number and advance to the new linecout << number << endl;}elsecout << number << "\t";}// Check if the next number is primenumber++;}return 0;}Exercise6_8#include <iostream>#include <cmath>using namespace std;int average(int array[], int size) {int sum = 0;for (int i = 0; i < size; i++)sum += array[i];return sum / size;}double average(double array[], int size) { double sum = 0;for (int i = 0; i < size; i++)sum += array[i];return sum / size;}int main(){int list1[] = {1, 2, 3, 4, 5, 6};double list2[] = {5.0, 4.4, 1.9, 2.9, 3.4, 3.5};cout << average(list1, 6) << endl;cout << average(list2, 6) << endl;return 0;}Exercise6_10#include <iostream>#include <cmath>using namespace std;int minIndex(int list[], int size){int min = list[0];int minIndex = 0;for (int i = 1; i < size; i++)if (min > list[i]){min = list[i];minIndex = i;}return minIndex;}int main(){int list[] ={1, 2, 4, 5, 10, 100, 2, -22};cout << "The index of the min is " << minIndex(list, 8) << endl;return 0;}Exercise6_12#include <iostream>using namespace std;void reverse(int list[], int size){for (int i = 0, j = size - 1; i < size / 2; i++, j--){int temp = list[i];list[i] = list[j];list[j] = temp;}}int main(){int myList[] ={1, 2, 3, 4, 5, 6, 7, 8};reverse(myList, 8);for (int i = 0; i < 8; i++)cout << myList[i] << " ";return 0;}Exercise6_14#include <iostream>#include "LinearSearch.h"#include "BinarySearch.h"#include "SelectionSort.h"using namespace std;int main(){int list[100000];for (int i = 0; i < 100000; i++){list[i] = rand();}int key = rand();long startTime = time(0);cout << linearSearch(list, key, 100000) << endl;long endTime = time(0);cout << "End time: " << endTime << endl;cout << "Start time: " << startTime << endl;long executionTime = endTime - startTime;cout << "Execution time for linear search is " << executionTime << endl; selectionSort(list, 100000);startTime = time(0);cout << binarySearch(list, key, 100000) << endl;endTime = time(0);executionTime = endTime - startTime;cout << "Execution time for binary search is " << executionTime << endl;return 0;}Exercise6_16#include <iostream>#include "LinearSearch.h"#include "BinarySearch.h"#include "SelectionSort.h"using namespace std;/** The method for printing numbers */void printList(double list[], int size){for (int i = 0; i < size; i++)cout << list[i] << " ";cout << endl;}void bubbleSort(double list[], int size) {bool changed = true;do{changed = false;for (int j = 0; j < size - 1; j++)if (list[j] > list[j + 1]){//swap list[j] wiht list[j+1]double temp = list[j];list[j] = list[j + 1];list[j + 1] = temp;changed = true;}}while (changed);}int main(){// Initialize the listdouble myList[] ={5.0, 4.4, 1.9, 2.9, 3.4, 3.5};// Print the original listcout << "My list before sort is: "; printList(myList, 6);// Sort the listbubbleSort(myList, 6);// Print the sorted listcout << "\nMy list after sort is: " << endl; printList(myList, 6);return 0;}Exercise6_18#include <iostream>using namespace std;int main(){int m[4] [4] ={{1, 2, 4, 5},{6, 7, 8, 9},{10, 11, 12, 13},{14, 15, 16, 17}};int sum = 0;for (int i = 0; i < 4; i++)sum += m[i] [i];cout << "Sum of diagonal is " << sum << endl;return 0;}Exercise6_20#include <iostream>using namespace std;/** The method for sorting the numbers */void sortAndKeepIndex(int list[], int indexList[], int size) { int currentMax;int currentMaxIndex;// Initialize indexListfor (int i = 0; i < size; i++)indexList[i] = i;for (int i = size - 1; i >= 1; i--) {// Find the maximum in the list[0..i]currentMax = list[i];currentMaxIndex = i;for (int j = i - 1; j >= 0; j--) {if (currentMax < list[j]) {currentMax = list[j];currentMaxIndex = j;}}// Swap list[i] with list[currentMaxIndex] if necessary;if (currentMaxIndex != i) {list[currentMaxIndex] = list[i];list[i] = currentMax;// Swap the index in indexList tooint temp = indexList[i];indexList[i] = indexList[currentMaxIndex];indexList[currentMaxIndex] = temp;}}}int main(){const int NUMBER_OF_WORKERS = 8;double workHours[NUMBER_OF_WORKERS][7] = {{2, 4, 3, 4, 5, 8, 8},{7, 3, 4, 3, 3, 4, 4},{3, 3, 4, 3, 3, 2, 2},{9, 3, 4, 7, 3, 4, 1},{3, 5, 4, 3, 6, 3, 8},{3, 4, 4, 6, 3, 4, 4},{3, 7, 4, 8, 3, 8, 4},{6, 3, 5, 9, 2, 7, 9}};// Create an array to store total weekly hoursint weeklyHours[NUMBER_OF_WORKERS] = {0, 0, 0, 0, 0, 0, 0, 0};for (int i = 0; i < NUMBER_OF_WORKERS; i++)for (int j = 0; j < 7; j++)weeklyHours[i] += workHours[i][j];int indexList[NUMBER_OF_WORKERS];// Sort weeklyHourssortAndKeepIndex(weeklyHours, indexList, NUMBER_OF_WORKERS);// Display resultfor (int i = NUMBER_OF_WORKERS - 1; i >= 0; i--)cout << "Employee " << indexList[i] << ": " <<weeklyHours[i] << endl;return 0;}Exercise6_22#include <iostream>using namespace std;const int COLUMN_SIZE = 5;/** The method for multiplying two matrices */void multiplyMatrix(int a[] [COLUMN_SIZE], int b[] [COLUMN_SIZE], int result[] [COLUMN_SIZE], int rowSize){for (int i = 0; i < COLUMN_SIZE; i++)for (int j = 0; j < COLUMN_SIZE; j++)for (int k = 0; k < COLUMN_SIZE; k++)result[i] [j] += a[i] [k] * b[k] [j];}/** Print result */void printResult(int m1[] [COLUMN_SIZE], int m2[] [COLUMN_SIZE], int m3[] [COLUMN_SIZE], char op, int rowSize){for (int i = 0; i < rowSize; i++){for (int j = 0; j < COLUMN_SIZE; j++)cout << " " << m1[i] [j];if (i == COLUMN_SIZE / 2)cout << " " << op << " ";elsecout << " ";for (int j = 0; j < COLUMN_SIZE; j++)cout << " " << m2[i] [j];if (i == COLUMN_SIZE / 2)cout << " = ";elsecout << " ";for (int j = 0; j < COLUMN_SIZE; j++)cout << " " << m3[i] [j];cout << endl;}}int main(){// Create two matrices as two dimensional arraysint matrix1[5] [5];int matrix2[5] [5];int result[5] [5];// Assign random values to matrix1 and matrix2for (int i = 0; i < 5; i++)for (int j = 0; j < 5; j++){matrix1[i] [j] = rand();matrix2[i] [j] = rand();}multiplyMatrix(matrix1, matrix2, result, 5);cout << "The multiplication of the matrices is " << endl; printResult(matrix1, matrix2, result, '*', 5);}Exercise6_24#include <iostream>using namespace std;int main(){int board[8] [8];for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){board[i] [j] = rand() % 2;cout << board[i] [j];}cout << endl;}// Check rowsfor (int i = 0; i < 8; i++){bool same = true;for (int j = 1; j < 8; j++){if (board[i] [0] != board[i] [j]){same = false; break;}}if (same) cout << "All " << board[i] [0] << "'s on row " << i << endl;}// Check columnsfor (int j = 0; j < 8; j++){bool same = true;for (int i = 1; i < 8; i++){if (board[0] [j] != board[i] [j]){same = false; break;}}if (same) cout << "All " << board[0] [j] << "'s on column " << j << endl; }// Check major diagonalbool same = true;for (int i = 1; i < 8; i++){if (board[0] [0] == board[i] [i]){same = false; break;}}if (same) cout << "All " << board[0] [0] << "'s on major diagonal" << endl;// Check subdiagonalsame = true;for (int i = 1; i < 8; i++){if (board[0] [7] == board[i] [7 - i]){same = false; break;}}if (same) cout << "All " << board[0] [0] << "'s on subdiagonal" << endl;return 0;}Exercise6_26#include <iostream>#include <cmath>using namespace std;int lcm(int number1, int number2);int pow(int a, int b);int getPrimeFactors(int number, int table[][2]);int main(){// Enter two integersint number1;cout << "Enter the first integer: ";cin >> number1;int number2;cout << "Enter the second integer: ";cin >> number2;cout << "The LCM for " << number1 << " and " << number2 << " is " << lcm(number1, number2) << endl;}int lcm(int number1, int number2){int table1[100][2];for (int i = 0; i < 100; i++)for (int j = 0; j < 2; j++)table1[i][j] = 0;int i1 = getPrimeFactors(number1, table1);int table2[100][2];for (int i = 0; i < 100; i++)for (int j = 0; j < 2; j++)table2[i][j] = 0;int i2 = getPrimeFactors(number2, table2);int result = 1;int i = 0;int j = 0;while (i < i1 && j < i2){if (table1[i] [0] < table2[j] [0]){result *= pow(table1[i] [0], table1[i] [1]);i++;}else if (table1[i] [0] == table2[j] [0]){result *= pow(table1[i] [0], max(table1[i] [1], table2[j] [1]));i++;j++;}else{result *= pow(table2[j] [0], table2[j] [1]);j++;}}while (i < i1){result *= pow(table1[i] [0], table1[i] [1]);i++;}while (j < i2){result *= pow(table2[j] [0], table2[j] [1]);j++;}return result;}int pow(int a, int b){int result = 1;for (int i = 1; i <= b; i++)result *= a;return result;}int getPrimeFactors(int number, int table[][2]) {int i = 0;int factor = 2;while (factor <= number){if (number % factor == 0){table[i] [0] = factor;while (number % factor == 0){number = number / factor;table[i] [1] ++;}i++;}else{factor++;}}return i;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
省略表达式1、3:完全等同于while语句。
三个表达式都省略:无初值,不判断条件,循环变 不增值,死循环。 量
/*省略表达式1、3*/ /*正常形式*/ /*省略表达式3*/ /*省略表达式1*/ void ) main(main( )) void main( void main( ) { { int i,sum=0; int i,sum=0; { int i ,sum=0; i=1; for(i=1;i<=100;) i=1; for(i=1;i<=100;i++) for(;i<=100;) for(;i<=100;i++) {sum=sum+i sum=sum+i; {sum=sum+i sum=sum+i i++;} printf("%d",sum); i++;} printf("%d",sum); } } printf("%d",sum); C程序设计(第三版) }
C程序设计(第三版)
(5) for( ; ;) { …… while() { …… } …... }
(6) do { …… for(; ;) { …… } …... } while();
循环可以互相嵌套,但不能相互交叉。
for for …… …... …... for for …… …... …...
C程序设计(第三版)
§6.8 break 语句与continue语句
Break语句 功能:在循环语句和switch语句中,终止并 跳出循环体或开关体。 说明:
break只能终止并跳出最近一层的结构。 break不能用于循环语句和switch语句之外的 任何其它语句之中。
一般形式:break;
if~goto 无条件循环
只知道结束条件 ① 循环变量初始化在循环体之前 while 而无法确定执行 次数的情况下。 ② 循环体中应包含使循环结束的语句 ③ 可以用 break 和continue 语句控制 do-while 至少执行一次时
for
已知执行次数或 者已知初值,终 值,步长时。
使用比较灵活
表达式1、3可以是与循环无关的表达式,也 可以是逗号表达式。 for ( s=0 , i=1 ; i<=100 ; i++ ) s=s+i; 表达式2可以是关系、逻辑、算术、字符表达式, 非0时,执行循环体,为0时退出循环。 /*表达式是逗号表达式*/ /*非关系表达式*/ void main() #include <stdio.h> { int i,j,k; void main() for(i=0,j=100;i<=j;i++,j--) { int i,c; { k=i+j; for(i=0;(c=getchar())!='\n';i+=c) printf("%d+%d=%d\n",i,j,k); printf("%d ",i+c); } } }
循环终值
循环条件
循环体 sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050 C程序设计(第三版)
例 从键盘输入一组数据,以0结束输入,求数据和。
#include <stdio.h> void main() { int number,sum=0; read_loop: scanf("%d",&number); if(!number) goto print_sum; sum+=number; goto read_loop; print_sum: printf("The total sum is %d\n",sum); }
C程序设计(第三版)
例 用while语句显示1~10的平方
#include <stdio.h> void main() { int i=1; while(i<=10) { printf("%d*%d=%d\n",i,i,i*i); i++; } }
1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=1 00
do-while 循环,循环体至少执行一次; while和do-while可以解决同一问题,两者可以互换。 while后的表达式一开始就为假时,两种循环结果不同。 C程序设计(第三版)
§6.5 for语句
for 语句是 C 语言中最为灵活,使用最广泛的循环语句, 可完全替代while,do-while语句。 一般形式为: for(表达式1;表达式2;表达式3) 循环体语句; 常用形式 for(循环变量赋初值;循环条件;循环变量增值) 循环体语句;
sum=sum+i i=i+1
C程序设计(第三版)
例6.2 用while语句构成循环,求
循环初值
循环变量增值
#include <stdio.h> void main( ) { int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("%d",sum); }
(7) for( ; ;) { …… do { …… } while(); …… while() { …… } …... }
C程序设计(第三版)
例 计算3组1~4累加的和
i 1 1 1 1 2 2 2 2 3 3 3 3 j 1 2 3 4 1 2 3 4 1 2 3 4 s=0 1 3 6 10 11 13 16 20 21 23 26 30
#include <stdio.h> void main() { int i,j,s=0; for(i=1;i<=3;i++) for(j=1;j<=4;j++) s=s+j; printf(“s=%d\n",s); }
结果:s=30
C程序设计(第三版)
§6.7 几种循环的比较
语句 适用范围 说 明 该循环不能用break 和continue 语句控制
循环终值
循环条件
循环体
C程序设计(第三版)
关于while循环语句:
while循环先判断表达式,后执行循环体。循 环体有可能一次也不执行。 循环体若包含一个以上语句,应该用{}括起 来。 循环体应包含有使循环趋向结束的语句; 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇 break , goto 无限循环 while(1) 循环体 ;
C程序设计(第三版)
几点说明:
for语句中表达式1、2、3类型任意,都可省略, 但分号“;”不能省。 无限循环:for(;;)不断执行循环体,循环不终止。 For语句可以转换成while结构
表达式1; while(表达式2) { 循环体语句; 表达式3; }
C程序设计(第三版)
几种形式:
省略表达式1:应在for之前为变量赋初值。 省略表达式2:循环条件始终为“真”,循环不终止。 省略表达式3:应另外设法使程序能够结束。
C程序设计(第三版)
§6.4 do…while语句
do-while语句实现“直到型”循环结构。 一般形式: 有“;” do 循环体语句; while(表达式) ; 功能:先执行循环体,然后判断表达式。若为 真,则再次执行循环体,否则退出循环。 求 i=1,sum=0 i=1,sum=0
sum=sum+i i=i+1
多重循环问题
C程序设计(第三版)
§6.1 概述
• 程序中凡涉及求阶乘、累加、排序等问题都要 用循环解决,因为程序中的某一程序段要重复 执行若干次。 C语言实现循环的语句: goto 和if组合 while语句 do while语句 重点 for语句
C程序设计(第三版)
§6.2goto语句以及用goto语句构成循环
C程序设计
-----谭浩强(第三版) ——谭浩强 (第三版)
主要内容
概述
goto语句以及用goto语句构成循环
while语句 do-while语句 for语句 循环的嵌套
几种循环的比较
break语句和continue语句 程序举例
C程序设计(第三版)
本章重点
循环的基本概念
不同形式的循环控制
C程序设计(第三版)
流程形式:
for
while 假(0) do …… break; …... 真(非0) while
表达式 表达式1 表达式2
假(0)
表达式
真(非0) …… break; ……
真(非0)
…… break;
…...
表达式3
假(0)
C程序设计(第三版)
switch 表达式 case const 1 const 2 const n default
作用:无条件地转移到语句标号指向的语句去执行。
一般格式:
说明: 语句标号由字母、数字和下划线组成,定名规则同变量名, 不能用数字开头。 goto loop; ( √ ) goto 100;(×) 与循环语句配合使用时,可从循环体内跳到循环体外,而 不能从循环体外跳到循环体内。 goto语句转移的方向可前可后。 与if语句配合使用时可构成循环。 goto 语句违背结构化程序设计的原则,因此应限制使用。
C程序设计(第三版)
例 用for语句构成循环,求