计算机程序设计基础
安徽大学大学计算机教学部 8
计 算 机 程 序 设 计 基 础
if-else 语句
• 语句格式:if(表达式) 语句块1 else 语句块2
• 表达式必须位于括号内,一般为关系或逻辑表达式 • 先计算表达式值,若为真则执行语句1,否则执行语句2 • 语句1与语句2可以为复合语句 • 语句1与语句2只能有一个被执行,那么就变成if语句
安徽大学大学计算机教学部
if-else 语句示例二
11
计 算 机 程 序 设 计 基 础
if-else 语句示例三
• 输入一个字符,判断它是否为0~9之间的数字
#include <stdio.h> int main() 因:字符以ASCII码值存储 { 且数字的ASCII码值48~57 char c; 故:比较ASCII码值 printf(“Input a character: ”); c = getchar(); if(c >= 48 && c <= 57) printf(“It is a number.\n”); else printf(“No, it is not a number.\n”); return 0; }
• 如果仅仅用于确定某条语句是否执行,else分支可以省略
• 如果测试某表达式是否为0,if(exp !=0)可以简写为if(exp), 而if(exp ==0)可以简写为if(!exp)。
安徽大学大学计算机教学部
9
计 算 机 程 序 设 计 基 础
if-else 语句示例一
• 输入一个整数,输出其绝对值
安徽大学大学计算机教学部 12
计 算 机 程 序 设 计 基 础
if-else if-else 语句
• 语句格式
– if(表达式1) 语句1 else if(表达式2) 语句2 < else 语句n
入口 假 表达式 2 真 语句 1 语句 2 假 复杂分支结构
表达式 1 真
...
假
语句 n 出口
安徽大学大学计算机教学部
13
计 算 机 程 序 设 计 基 础
if-else if-else 示例
• 根据百分制成绩给出优秀、通过或不通过成绩
#include <stdio.h> main() { float score; printf(“Input score: “); scanf(“%f“, &score); if(score >100.0 && score <0.0) printf(“Error score.\n“); else if(score >= 85&& score <= 100) printf(“Excellent.\n“); else if(score >= 60 && score < 85) printf(“Pass.\n“); else printf(“No pass.\ n“); }
真 条件 假 分支结构
A 出口 B
• 是对某一个处理块反复执行的控 制结构,此处的处理块称为循环 体。循环体执行多少次是由一次 控制循环体的条件所决定。
安徽大学大学计算机教学部
A 入口 循环结构
真 条件 出口 假
3
计 算 机 程 序 设 计 基 础
3.1 C 语言结构化程序设计基础
• 程序的结构化
– 掌握 C 语言实现分支结构的 if 语句与 switch 语 句,能熟练应用 if 语句与 switch 语句编写程序
– 掌握 C 语言实现循环结构的 while 语句、for 语 句与 do-while 语句,能熟练应用这三种循环控制 结构编写程序 – 了解三种循环结构的关系,掌握在循环结构中控 制程序流程转移的方法
安徽大学大学计算机教学部 6
计 算 机 程 序 设 计 基 础
顺序结构程序示例
• 分别输入两个复数的实部与虚部,计算两个复数的 和、差、积、商并输出结果
#include <stdio.h> int main() 实际需要输入4个实数 { float a, b, c, d, real, imaginary; printf(“Input reals and imaginaries of two complexes\n”); scanf(“%f,%f,%f,%f”, &a, &b, &c, &d); printf(“Sum: %f + %fi\n”, a + c, b + d); printf(“Difference: %f + %fi\n”, a – c, b – d); real = a * c – b * d; imaginary = a * d + b * c; printf(“Product: %f + %fi\n”, real, imaginary); real = (a*c + b*d) / (c*c + d*d); imaginary = (b*c – a*d) / (c*c + d*d); printf(“Quotient: %f + %fi\n”, real, imaginary); return 0; }
安徽大学大学计算机教学部
10
计 算 机 程• 输入三个整数,分别存放到变量x、y、z中,要求对三 序 个变量的值按从大到小的顺序排序存放,然后输出。 设 #include <stdio.h> 计 void main() 基 { int x,y,z,t; 础 printf("输入三个整数:"); scanf("%d%d%d",&x,&y,&z); if (x<y) {t=x; x=y; y=t;} /*交换x,y的值*/ if(x<z) {t=z; z=x; x=t;} /*交换x,z的值*/ if(y<z) {t=y; y=z; z=t;} /*交换z,y的值*/ printf("从大到小排序为:%d %d %d\n",x,y,z); }
安徽大学大学计算机教学部 4
计 算 机 程 序 设 计 基 础
3.2 序结构
• 顺序结构的含义
– 由一组顺序执行的处理块组成,每个处理块可能包含一 条或一组语句,完成一项任务 – 顺序程序结构的语句执行的步骤是一步一步顺序往下执 行,程序中没有任何转移。 – 简单的顺序结构程序是由一组顺序执行的语句组成,而 复杂的顺序结构可以由一组顺序执行的语句块组成。 – 顺序结构是最基本的算法结构
安徽大学大学计算机教学部 7
计 算 机 程 序 设 计 基 础
3.3 分支结构
• 分支结构(选择结构)的含义
– 根据某一条件的判断结果,确定程序的流程,即选择哪 一个程序分支中的处理块去执行 – 最基本的分支结构是二路分支结构
真 条件 假 分支结构 B A 出口
入口
– 以条件判断为起点,如果判断结果为真,则执行A处理块 的操作,否则执行B处理块的操作
• 根据百分制成绩给出优秀、通过或不通过成绩
#include <stdio.h> main() { float score; printf(“Input score: “); scanf(“%f“, &score); if(score >100 && score <0) printf(“Error score.\n “); else { if(score >= 85) printf(“Excellent.\n “); else { if(score >= 60) printf(“Pass.\n “); else printf(“No pass.\n“); } } }
安徽大学大学计算机教学部 14
计 算 机 程 序 设 计 基 础
条件分支的嵌套
• 条件语句的嵌套格式
– 当年龄大于50岁时,若工资小于500,则长200, 否则长300 if(age > 50) – 若年龄大于50岁且工 资小于500,长200; 若年龄不大于50岁, 则长300
{ if(age > 50) if(sal < 500) if(sal < 500) sal += 200; sal += 200; } else else else sal += 300; sal += 300;
#include <stdio.h> A int main() 真 { 入口 出口 条件 int abs; 假 printf(“Enter integer: ”); 单分支结构 scanf(“%d”, &abs); if(abs < 0) abs = –abs; printf(“Original integer: %d, absolute value: %d\n”, n, abs); return 0; }
安徽大学大学计算机教学部 16
计 算 机 程 序 设 计 基 础
条件分支嵌套示例
• 求方程 ax2 + bx + c = 0 的根
#include <stdio.h> #include <math.h> // 由于用到平方根函数,要用此头文件 int main() { float a, b, c, x1, x2, p, q, m; // 定义实型变量 printf(“Enter 3 coefficients: “) ; scanf(“%f,%f,%f“, &a, &b, &c); // 从键盘读入方程的三个系数 if( a == 0.0 && b == 0 && c == 0 ) // 分支1:三个系数全为0 printf(“any value\n“); else if( a == 0 && b != 0 ) // 分支2:系数a为0,解一元一次方程 printf(“x1 = x2 = %f\n", – c / b); else // 分支3:解一元二次方程的两个根 { m = b * b – 4.0 * a * c; <