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;
}
C03 程序逻辑的更多相关文章
- JavaScript状态机程序逻辑编辑器
制作背景 之前做Win8 Metro动态加载内容框架的时候,由于采用了XAML+JavaScript的方法,程序复杂的执行逻辑是由JavaScript控制的,而页面一多,流程一复杂,制作起来就非常麻烦 ...
- CTF---Web入门第十二题 程序逻辑问题
程序逻辑问题分值:20 来源: 实验吧 难度:中 参与人数:6909人 Get Flag:1993人 答题人数:2070人 解题通过率:96% 绕过 解题链接: http://ctf5.shiyanb ...
- Java Web安全之程序逻辑缺陷
Java Web程序逻辑缺陷本质是由于程序设计和开发者设计的程序执行逻辑存在某种缺陷而导致的安全隐患.企业的代码审查和渗透测试通常主要针对的大多是诸如xss攻击和sql注入和跨站点脚本这些头条式漏洞, ...
- 【实验吧】guess next session&&FALSE&&NSCTF web200&&程序逻辑问题
guess next session源码: <?php session_start(); if (isset ($_GET['password'])) { if ($_GET['passwo ...
- 「MoreThanJava」Day 3:构建程序逻辑的方法
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 【windows开发实现记事本程序——逻辑篇1】
1. 主要内容 从本节开始介绍windows开发实现记事本程序的逻辑实现部分.本节的主要内容有以下3点: 1. 主窗口定义 -- 主要介绍记事本主界面窗口对应的窗口类及实现方案 2. RichEdi ...
- 用java理解程序逻辑小结
1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本 2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文本 ...
- 黑客攻防技术宝典web实战篇:攻击应用程序逻辑习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 何为强制浏览?可以通过它确定哪些漏洞? 强制浏览包括避开浏览器导航对应用程序功能访问顺序实 ...
- 微信小程序 逻辑层
1. 注册程序小程序APP在小程序的根目录下有一个app.js文件.有App(Object),App() 函数用来注册一个小程序.接受一个 Object 参数,其内便是小程序的生命周期.App() 必 ...
随机推荐
- CSS3 制作魔方 - 形成魔方
道路千万条,安全第一条! 魔方结构解析 从魔方的外观来看,可以有多种方式来表达它的组成,从而也有多种方式来形成一个魔方.如: 由六个面组成 由若干层组成 由多个方块组成 无论哪种方式,都可以制作魔方. ...
- input输入框修改后自动跳到最后一个字符
<input class="m-form-control" onpaste="return false" placeholder="直播间名称& ...
- 算法学习--Day6
题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 示例1 输入 ...
- lightoj 1085【离散化+树状数组】
题意: 求所有的上升子序列种数: 思路: 我想先离散化一下,然后用树状数组维护一下. 最终答案就是sum(n) ? 卧槽,好像是:然后就过了.. #include <bits/stdc++.h& ...
- bzoj3771: Triple(容斥+生成函数+FFT)
传送门 咳咳忘了容斥了-- 设\(A(x)\)为斧头的生成函数,其中第\(x^i\)项的系数为价值为\(i\)的斧头个数,那么\(A(x)+A^2(x)+A^3(x)\)就是答案(于是信心满满的打了一 ...
- B. Lecture Sleep( Educational Codeforces Round 41 (Rated for Div. 2))
前缀后缀和搞一搞,然后枚举一下区间,找出最大值 #include <iostream> #include <algorithm> using namespace std; ; ...
- [软件工程基础]PhyLab 需求与功能分析改进文档
NABCD 模型 Need 需求 根据 Default 的需求文档,物理实验网站对于北航大二学生完成物理实验有较大的帮助,反馈较好.由于在 2016-2017 春季学期,网站数据库因为不明原因被删除了 ...
- HDU6301(2018多校第一场)
Bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6301 队友AC的,没怎么看 #include<iostream> #incl ...
- 玲珑杯”ACM比赛 Round #4 1054 - String cut 暴力。学到了扫描的另一种思想
http://www.ifrog.cc/acm/problem/1054 问删除一个字符后的最小循环节是多少. 比赛的时候想不出,不知道怎么暴力. 赛后看了别人代码才晓得.唉,还以为自己字符串还不错, ...
- js判断网页访问设备类型
有时候我们会需要来根据不同的设备访问进行不同的操作,在网上找了一下,主要是根据Navigator对象, if(/Android|Windows Phone|webOS|iPhone|iPod|Blac ...