C03 程序逻辑
程序逻辑
- 运算符
- 顺序结构
- 选择结构
- 循环结构
运算符
赋值运算符:=
比较运算符:>、<、==、 >=、<=、!=
逻辑运算符:&&、||、!
顺序结构
在C语言中,赋值语句、字符数据的输入输出语句、格式输入输出语句这几种语句在执行的时候,程序不会发生流程控制的转移。
赋值语句
赋值符号:=,在C语言中是运算符,运算顺序是从右到左。
例如:赋值表达式 a=b+c+d;
字符输入输出语句
putchar()输出单个字符。例如putchar(‘a’)。
getchar()从终端输入一个字符。例如:char c; c=getchar();
示例代码:
格式输入输出语句
printf(格式控制,输出列表)
scanf(格式控制,地址列表)
常用的格式控制字符:d,c,s,f。
上机练习
需求:要求从键盘输入一个大写字母,改用小写字符输出?
备注:大写字母+32=小写字母。使用getchar()和printf()函数完成。
选择结构
单分支选择结构
流程图如图所示:
表达式:
if(表达式) 语句
示例:
该单分支选择结构在解决该问题时有何缺陷?
双分支选择结构
流程图:
表达式:
if(表达式) 语句1
else 语句2
示例:
上机练习
需求描述:张三C语言成绩大于98分,而且软件工程成绩大于80分,奖励Pad;或者C语言成绩等于100分,软件工程成绩大于70分,也可以奖励Pad。
提示:复杂条件下的if选择结构
多分支选择结构
流程图如图:
表达式:
if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
…
else if(表达式n-1) 语句n-1
else 语句n
上机练习
需求描述:成绩的转换,控制台输入一成绩,要求输出:
90~100分输出A
80~90分输出B
70~80分输出C
60~70分输出D
50~60分输出E
switch选择结构
流程图:同多分支选择结构
表达式:
switch(表达式){
case 常量表达式1:语句1 ; break ;
case 常量表达式2:语句2; break ;
case 常量表达式3:语句3; break ;
… …
case 常量表达式n:语句n; break ;
default:语句n+1; ; break ;
}
示例:根据成绩等级,输出对应分数范围
上机练习
练习1:修改示例,使之正确输出。
练习2:每周一三五吃食堂,二四六吃法国大餐。
练习3:学生信息管理系统菜单的制作,使用switch选择结构。
循环结构
循环结构用来处理重复的操作。
循环结构特点:包括循环操作、循环条件,以及循环结构。
while循环结构
流程图:
特点:先判断,再循环
语法格式:
while ( 循环条件 ) {
循环操作
}
示例:
输入年龄,如果错误,重新进行输入。如果正确,则提示输入正确,退出程序。
上机练习
练习:修改学生信息管理系统菜单,使之可以实现菜单的循环操作,选择退出将退出学生信息管理系统。
提示:使用while循环三步骤
1、确定循环条件和循环操作
2、套用while循环格式写出代码
3、确定循环结束条件
程序调试
如果程序出错,我们可以进入调试模式:
调试步骤(Dev-Cpp):
- 设置断点
- 单步运行
- 观察变量(添加查看,输入变量名)
调试步骤(vc6.0):
- 选择代码行,alt+f9或者通过编辑菜单进入断点设置.
- 单步运行:使用F5或则Go图片单步运行。
3.观察变量(添加查看,输入变量名)
调试示例
do…while循环结构
流程图:
特点:先执行循环操作,在判断循环条件
语法格式:
do {
循环操作
} while ( 循环条件 );
示例:
问题:老师需要检查张三上机考试是否合格,如果不合格,则继续考试。否则提示考试通过。
上机练习
练习:使用do……while循环结构修改学生信息管理系统菜单。
for循环结构
语法格式和执行顺序:
示例:循环输入某同学S1结业考试的5门课成绩,并计算平均分。
参考代码:
char name[20];//姓名 int sum=0;//总成绩 int avg;//平均分 int m=5;//一共5门功课 printf("请输入姓名:"); scanf("%s",name);//name为数组,不需要使用取地址符号& for(int i=1;i<=m;i++){ int score; printf("请输入第%d门课程成绩:",i); scanf("%d",&score); printf("score:%d\n",score); sum+=score;//累加成绩 printf("sum:%d\n",sum); } avg=sum/m;//计算平均成绩 printf("%s同学的平均成绩为:%d\n",name,avg);
循环的嵌套
示例:输出乘法口诀表
参考代码:
for(int i=1;i<10;i++){//控制行 for(int j=1;j<=i;j++){//控制列 printf("%dx%d=%d ",j,i,j*i); } printf("\n");//换行 }
一维数组
数组是一个固定大小的相同类型元素的顺序集合。数组一般用来存储一系列相同类型的数据。
数组是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。
数组中的特定元素可以通过索引访问。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
数组的定义
定义一个10个整数的一维数组:
int nums[10]={11,14,-8,6,22,99,107,4,3,2,};
或者
int nums[]={11,14,-8,6,22,99,107,4,3,2,};
问题:如何输出数组中的所有元素?
参考代码:
#include <stdio.h> int main() { int nums[10]={11,14,-8,6,22,99,107,4,3,2,}; for(int i=0;i<10;i++){ printf("%d ",nums[i]); } printf("\n"); return 0; }
上机练习
二重循环练习
需求:定义一个10个数字的数组,实现冒泡法排序。
提示:冒泡法排序说明
参考代码:
#include <stdio.h> int main() { int nums[10]={11,14,-8,6,22,99,107,4,3,2,}; printf("排序前的数组:"); for(int i=0;i<10;i++){ printf("%d ",nums[i]); } //冒泡排序 for(int j=0;j<10-1;j++){ for(int k=0;k<10-1-j;k++){ int temp=0; if(nums[k]>nums[k+1]){ temp=nums[k]; nums[k]=nums[k+1]; nums[k+1]=temp; } } } printf("\n排序后的数组:"); for(int m=0;m<10;m++){ printf("%d ",nums[m]); } printf("\n\n"); return 0; }
运行结果:
控制台密码掩码形式输入
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("请输入密码:"); char pass[20]; int i; for(i=0;i<20;i++){ pass[i]=getch(); if(pass[i]=='\r') break; putch('*'); } printf("\n密码是:%s",pass); return 0; }
本博客文章未经许可,禁止转载和商业用途!
如有疑问,请联系: 2083967667@qq.com