作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊

Slides:



Advertisements
Similar presentations
电子成绩单项目实现.
Advertisements

“八皇后”问题 崔萌萌 吕金华.
Loops.
请将手机调整到静音状态 实验网站:program3.ccshu.net 资源网站:class.ccshu.org/ /
補充: Input from a text file
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
第一章 程序设计入门.
第5章 函数与模块化设计 学习目的与要求: 掌握函数的定义及调用方法 理解并掌握参数的传递方法 理解函数的嵌套与递归调用
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
高级语言程序设计 主讲人:陈玉华.
第一章 C语言概述.
由C程序结构所知,一个完整的C语言程序是由一个且只能有一个main()函数(又称主函数)和若干个其他函数组合而成的。而前面各章仅学习main()函数的编程,本章将介绍其他函数的编程,包括其他函数的定义、调用、参数传递及变量的作用域等。
選擇排序法 通訊一甲 B 楊穎穆.
C++程序设计 第二讲 清华大学软件学院.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
C程序设计.
If … else 選擇結構 P27.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
STRUCTURE 授課:ANT 日期:2010/5/12.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
2017北一女中 資訊能力競賽 暑期培訓營
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
C语言 程序设计基础与试验 刘新国、2012年秋.
分层总和法——概念 E AL 建造建筑物→地基附加应力→ →各层地基土压缩→地基沉降 E2 A2 L2 N N σ1 σ1 σ2 E1 A1
多维数组与指针 用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。 1. 多维数组元素的地址 先回顾多维数组的性质,可以认为二维数组是“数组的数组”,例 : 定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
THE C PROGRAMMING LANGUAGE
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
計數式重複敘述 for 迴圈 P
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第6章 预 处 理.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C语言概述 第一章.
資料結構與C++程式設計進階 排序與搜尋 講師:林業峻 CSIE, NTU 6/ 14, 2010.
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
1.2 C语言程序的结构与书写规则 一、 C语言程序的总体结构
C程序设计.
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
Introduction to the C Programming Language
第11章 位运算 为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言是为研制系统软件而设计的,所以她提供了实现将标志状态从标志字节中分离出来的位运算功能。 所谓位运算是指,按二进制位进行的运算。 11.1 数值在计算机中的表示 11.2.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
指標
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
程式的時間與空間 Time and Space in Programming
C程序设计.
C语言程序设计 李祥 QQ:
C程序设计.
資料結構與C++程式設計進階 遞迴(Recursion) 講師:林業峻 CSIE, NTU 6/ 17, 2010.
第3章 数据类型、运算符与表达式.
第6章 预 处 理.
第二章 类型、对象、运算符和表达式.
C程序设计.
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
第七章  数 组.
程式設計--linear search 通訊一甲 B 楊穎穆.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
多重條件選擇敘述
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Presentation transcript:

作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊 下次再让抓到作弊,就不客气了 作业不一定在两个小时里都能完成 答疑没有一个人?

C语言高级编程(第一部分) 数组与算法 I 北京大学 信息科学技术学院

关于 宏

#define PI 3.14159 形式: 宏名 宏体 作用与意义 1.在源程序中,用简单的宏名 指代 复杂的宏体 2.程序更加直观 (一般用大写, 以区别一般变量) 宏体 (可以是一个复杂的表达式) 作用与意义 1.在源程序中,用简单的宏名 指代 复杂的宏体 2.程序更加直观

#define PI 3.14159 形式: 注意: 1.#define 可出现在程序的任一行 2.宏的作用范围:由 宏定义开始 到 程序末尾 之间的区域 3.宏定义不是C语句,不必在行尾加分号

S的值是多少? #define PI 3.141593; #include <stdio.h> int main( ){ double S; S = PI - PI; printf(“%lf\n”, S); return 0; } S的值是多少?

按下build后 … … 源文件 二进制代码 预编译 编译 连接 没有宏的源文件 可执行程序

预编译 把源程序中的所有 PI 替换为 3.141593; 没有宏的 源文件 源文件 #define PI 3.141593; int main( ){ double S; S = PI - PI; return 0; } int main( ){ double S; S = 3.141593; - 3.141593;; return 0; }

int main( ){ double S; S = 3.141593; - 3.141593; ; return 0; }

✓ ✕ 错误: 使用 宏 定义常量时,在结尾加 ; #define PI 3.14159; #define PI 3.14159 错误: 使用 宏 定义常量时,在结尾加 ; #define PI 3.14159; int main( ){   return 0; } #define PI 3.14159 int main( ){   return 0; } ✓ ✕

宏定义其他例子: //整数常量 #define MAX 200

几个 例子

程序填空,要求: 输出的两个数值按照 从小到大 的顺序排列 #include <stdio.h> int main(){ int a, b; int e; scanf("%d", &a); scanf("%d", &b); …… printf("%d %d\n", a, b); return 0; } 程序填空,要求: 输出的两个数值按照 从小到大 的顺序排列

#include <stdio.h> int main(){ int a, b; int e; scanf("%d", &a); scanf("%d", &b); if(a > b){ e = a; a = b; b = e; } printf("%d %d\n", a, b); return 0;

程序填空,要求: 输出的3个数值按照 从小到大 的顺序排列 #include <stdio.h> int main(){ int a, b, c; int e; scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); …… printf("%d %d\n", a, b, c); return 0; } 程序填空,要求: 输出的3个数值按照 从小到大 的顺序排列

#include <stdio.h> int main(){ int a, b, c; int e; scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); if(a > b){ e = a; a = b; b = e; } if(b > c){ e = b; b = c; c = e; if(a > b){ e = a; a = b; b = e; } printf("%d %d %d\n", a, b, c); return 0;

如果要求: 难道需要这样定义10个变量吗? int a, b, c, d, e, f, g, h, i, j; 如果要输入更多的数值呢?! 1. 接收用户输入的10个数值 2. 输出的10个数值按照 从小到大 的顺序排列 难道需要这样定义10个变量吗? int a, b, c, d, e, f, g, h, i, j; 如果要输入更多的数值呢?! 有没有一种 更简便的方式, 可以一次定义一组变量?

数组

数组 是 什么? 数组 是 一组变量 数组 是 一组 类型相同 的变量 数组 是 一组 具有编号 的、类型相同 的变量

如何声明 一个数组 必须是一个常量 int sz[10]; 数组的类型 数组名 数组中变量的数目

int sz[10]; 数组 中 变量 的 编号 数组中变量的编号 从 0 开始; 到 数组的长度-1 结束 0 1 2 3 4 5 6 7 8 9 数组中变量的编号 从 0 开始; 到 数组的长度-1 结束

…sz[2]…; 如何访问 数组 中 的 变量 变量编号 数组名 int sz[10]; sz[0] = 1; sz[1] = 3;

数组变量赋值 的 一种特殊方式 声明时赋值 int sz[5] ={12, 3, 7, 28, -2};

int sz[10]; int i; … i =…; sz[i] = … 访问 数组中 变量的一种常见方式 int sz[10]; int i; … i =…; sz[i] = … i 的值可以根据需要变化

; } 程序填空,要求: 1.接收用户输入的10个数字 2.存放在数组sz中 #include <stdio.h> int main(){ int sz[10]; int i; for( ; ; ){ ; } for(i = 0; i < 10; i++){ printf("%d ", sz[i]); return 0; 程序填空,要求: 1.接收用户输入的10个数字 2.存放在数组sz中

for( i=0 ; i < 10 ; i++){ scanf("%d", &(sz[i])); } #include <stdio.h> int main(){ int sz[10]; int i; for( i=0 ; i < 10 ; i++){ scanf("%d", &(sz[i])); } for(i = 0; i < 10; i++){ printf("%d ", sz[i]); return 0;

数组 的 遍历 通过 循环结构

正向 遍历 #define LEN 10 int sz[LEN]; for(int i = 0; i < LEN; i++){ … sz[i] … }

反向 遍历 #define LEN 10 int sz[LEN]; for(int i = LEN-1; i >= 0; i--){ … sz[i] … }

#define LEN 10 int sz[LEN]; 通过遍历 实现 对 数组变量 的 控制台赋值 通过遍历 实现 对 数组变量 的 控制台赋值 #define LEN 10 int sz[LEN]; for(int i = 0; i < LEN; i++){ scanf(“%d”, &(sz[i])); }

#define LEN 10 int sz[LEN]; 通过遍历 实现 对 数组变量 的 控制台输出 通过遍历 实现 对 数组变量 的 控制台输出 #define LEN 10 int sz[LEN]; for(int i = 0; i < LEN; i++){ printf(“%d\n”, sz[i]); }

当程序要处理 一组类型相同、含义类似的数据时, 应该使用数组 数组 的 应用示例 当程序要处理 一组类型相同、含义类似的数据时, 应该使用数组

游戏:过年抽奖 村长邀请我们编写一个程序, 实现村里财政盈余的自动分配 一个村庄,有128个村民 村长对村民说: 游戏规则如下: 今年村里出现了财政盈余M元; M是2000-3000之间的一个整数 准备通过抽奖的方式把钱发给村民 游戏规则如下: 每个村民上报一个在2000-3000元之间的整数 如果有人上报的数字和M相等,就把钱发给这些人 如果只有一个村民猜对,就把M元钱全部发给他 如果有多个人村民猜对,就把M元钱平均分配给这些村民 如果没有人猜对,财政盈余转为下年度开支 村长邀请我们编写一个程序, 实现村里财政盈余的自动分配

编程的基本思路 定义一个数组 存放所有村民上报的数据 定义一个数组 存放获奖者的编号(幸运者数组) 定义一个整数 存放获奖者人数 对村民从0开始编号(最后一个编号是127) 村民按照编号顺序上报数字;程序将村民上报的数字存放在对应编号的数组变量中。 遍历村民上报的数字,若上报数字与幸运数相等,则 将村民编号 按顺序 添加到幸运者数组中; 并将获奖者人数加1 最后,打印出获奖者编号和获得的奖金数额

#define LUCKY_M 2345 //财政盈余 #define POPULATION 128 //村民数量 int main( ){ int people[POPULATION]; //记录所有村民上报数字的数组 int luckyPeople[POPULATION]; //幸运者数组,记录获奖者编号,为什么和村民一样多? int i, nLucky=0; //循环变量,获奖者人数 for (i=0; i<POPULATION; i++) { scanf(“%d”, &(people[i])); //读入村民报的数字,数组下标就是村民的编号 } if ( people[i] == LUCKY_M ) { luckyPeople[nLucky] = i; nLucky ++; if (nLucky > 0){ for (i=0; i<nLucky; i++){ //输出获奖者编号及所获奖金数额 printf("%d %d\n", luckyPeople[i], LUCKY_M / nLucky); return 0; return -1;

显然,不能采用简单的比较。 需要有更有效的方法。 冒泡排序法 选择排序法 利用 数组, 对一组数据 进行排序 显然,不能采用简单的比较。 需要有更有效的方法。 冒泡排序法 选择排序法

排序的基本方法 如何把大象关在冰箱里? 分3步: 第一步:打开冰箱门; 第二步:把大象推进冰箱; 第三步:关上冰箱门;

int sz[LEN]; //#define LEN 8 排序的基本方法 7 11 18 分8个步骤进行 第1步:把第1大的数放在变量sz[7]中; 第2步:把第2大的数放在变量sz[6]中; 第3步:把第3大的数放在变量sz[5]中; 第4步:把第4大的数放在变量sz[4]中; 第5步:把第5大的数放在变量sz[3]中; 第6步:把第6大的数放在变量sz[2]中; 第7步:把第7大的数放在变量sz[1]中; 第8步:把第8大的数放在变量sz[0]中; 6 12 17 5 13 16 4 17 15 3 18 14 2 14 13 1 15 12 16 11 编号 排序前 的值 排序后 的值

排序的基本方法 int sz[LEN]; //#define LEN 8 抽象 分8个步骤进行 LEN个数,分LEN个步骤进行 … 第LEN步:把第LEN大的数放在变量sz[LEN-LEN]中; 抽象

排序的基本方法 LEN个数,分LEN个步骤进行 第1步:把第1大的数放在变量sz[LEN-1]中; … 第LEN步:把第LEN大的数放在变量sz[LEN-LEN]中;

排序的基本方法 (K=1, 2, 3, 4, …, LEN-1, LEN) 对数组 int sz[LEN]进行排序, 第 k 步:把第 k 大的数放在变量 sz[LEN-k] 中; (K=1, 2, 3, 4, …, LEN-1, LEN)

用 冒泡法 作第1步: 把第1大的数放在变量sz[LEN-1]中; int e; for(int i = 0; i < LEN - 1; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 作第2步: 把第2大的数放在变量sz[LEN-2]中; int e; for(int i = 0; i < LEN - 2; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 作第3步: 把第3大的数放在变量sz[LEN-3]中; int e; for(int i = 0; i < LEN - 3; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

把第k大的数放在变量sz[LEN-k]中; int e; for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组 int sz[LEN] 进行排序 int e; for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组 int sz[LEN] 进行排序 int e; for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组 int sz[LEN] 进行排序 int e; for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组int sz[LEN] 进行排序 int e; for(;;){ for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组 int sz[LEN] 进行排序 int e; for(int k = ; k <= ; k++){ for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组 int sz[LEN] 进行排序 int e; for(int k = 1 ; k <= ; k++){ for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组 int sz[LEN] 进行排序 int e; for(int k = 1 ; k <= LEN ; k++){ for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; }

用 冒泡法 对 数组 int sz[LEN] 进行排序 int e; for(int k = 1 ; k <= LEN ; k++){ for(int i = 0; i < LEN - k; i++){ if(sz[i] > sz[i+1]){ e = sz[i+1]; sz[i+1] = sz[i]; sz[i] = e; } 对该算法进行测试 编写一个程序: 1.从控制台输入一组 数据,并将其存放 一个数组中; 2.用左侧算法进行排 序; 3.打印出排序结果;

选择 排序法

排序的基本方法 (K=1, 2, 3, 4, …, LEN-1, LEN) 对数组 int sz[LEN]进行排序, 第 k 步:把第 k 大的数放在变量 sz[LEN-k] 中; (K=1, 2, 3, 4, …, LEN-1, LEN)

用 选择法 作 第1步:把第1大的数放在变量sz[LEN-1]中; int maxIndex, e; maxIndex = 0; for(int i = 0; i <= LEN-1; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-1){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-1]; sz[LEN-1] = e;

用 选择法 作 第2步:把第2大的数放在变量sz[LEN-2]中; int maxIndex, e; maxIndex = 0; for(int i = 0; i <= LEN-2; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-2){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-2]; sz[LEN-2] = e;

用 选择法 作 第3步:把第3大的数放在变量sz[LEN-3]中; int maxIndex, e; maxIndex = 0; for(int i = 0; i <= LEN-3; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-3){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-3]; sz[LEN-3] = e;

用 选择法 作 第k步:把第k大的数放在变量sz[LEN-k]中; int maxIndex, e; maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e;

用 选择法 对 数组 int sz[LEN] 进行排序; int maxIndex, e; maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e;

用 选择法 对 数组 int sz[LEN] 进行排序; int maxIndex, e; maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e;

用 选择法 对 数组 int sz[LEN] 进行排序; int maxIndex, e; maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e;

用 选择法 对 数组 int sz[LEN] 进行排序; int maxIndex, e; for(;;){ maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e;

用 选择法 对 数组 int sz[LEN] 进行排序; int maxIndex, e; for(int k = ; k <= ; k++){ maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e;

用 选择法 对 数组 int sz[LEN] 进行排序; int maxIndex, e; for(int k = 1 ; k <= LEN; k++){ maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e;

用 选择法 对 数组 int sz[LEN] 进行排序; int maxIndex, e; for(int k = 1 ; k <= LEN; k++){ maxIndex = 0; for(int i = 0; i <= LEN-k; i++){ if(sz[i] > sz[maxIndex]){ maxIndex = i; } if(maxIndex != LEN-k){ e = sz[maxIndex]; sz[maxIndex] = sz[LEN-k]; sz[LEN-k] = e; 对该算法进行测试 编写一个程序: 1.从控制台输入一组 数据,并将其存放 一个数组中; 2.用左侧算法进行排 序; 3.打印出排序结果;

一些问题的程序求解

问题1: 判断某一年份是否是闰年

什么是闰年? 闰年的充分必要条件是: “年份能被400整除” 或者 “年份能被4整除,但不能被100整除”

int main(){ int year; scanf(“%d”, &year); if(year%400 == 0 ||(year%4==0 && year%100!=0)){ printf(“%d is RuiNian.”, year); } else{ printf(“%d not RuiNian.”, year); } return 0;

判断闰年的函数 int isRunNian(int year){ int result; if(year%400 == 0 ||(year%4==0 && year%100!=0)){ result = 1; } else{ result = 0; } return result;

问题2: 给定一个年月日, 判断这一天是这一年的第几天

求解思路 step1: step2: step3: 将该日所在月份之间的所有月份的天数加起来; 并存入一个变量中; 将该日的日期号加入这个变量中; step3: 输出该变量;

int main(){ int year, month, day, total; scanf(“%d %d %d”, &year, &month, &day); total = 0; for(int i = 1; i < month; i++){ //step1 if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){ total += 31; } else if (i == 4 || i ==6 || i == 9 || i==11){ total += 30; } else if(i == 2){ if(isRunNian(year)){ total += 29; } else { total += 28; } total += day; //step2 printf(“%d\n”, total); //step3 return 0;

求解某一日期是当年的第几天的函数 int DiJiTian(int year, int month, int day){ int result = 0; for(int i = 1; i < month; i++){ //step1 if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){ result += 31; } else if (i == 4 || i ==6 || i == 9 || i==11){ result += 30; } else if(i == 2){ if(isRunNian(year)){ result += 29; } else { result += 28; } result += day; //step2 return result;

1. 假设细菌的数量每天成倍增长 2. 给定一个 开始日期 和 细菌数量 3. 给定一个 终止日期 求终止日期时的细菌数量 问题3: 计算细菌数量 1. 假设细菌的数量每天成倍增长 2. 给定一个 开始日期 和 细菌数量 3. 给定一个 终止日期 求终止日期时的细菌数量

求解思路 step1: 计算 开始日期 和 终止日期 之间的天数; step2: 计算细菌数量; step3: 打印出细菌数量;

int main(){ int year, m1, d1, num, m2, d2; scanf(“%d %d %d %d %d %d”, &year, &m1, &d1, &num, &m2, &d2); int days = DiJiTian(year, m2, d2) - DiJiTian(year, m1, d1); int result = num; for(int i = 0; i <= days; i++){ result *= 2; } printf(“%d\n”, result); return 0;

课堂作业 编写程序,实现下述功能: 1, 从控制台输入 两个 年 月 日 2,调用 DiJiTian函数计算这两个日期之间 相隔几天 1, 从控制台输入 两个 年 月 日 2,调用 DiJiTian函数计算这两个日期之间 相隔几天 3,向控制台输出结果 请同学们拿出笔和纸, 1. 写下 姓名和学号; 2. 写下 满足上述要求的程序;