程序逻辑

  • 运算符
  • 顺序结构
  • 选择结构
  • 循环结构

运算符

赋值运算符:=

比较运算符:>、<、==、 >=、<=、!=

逻辑运算符:&&、||、!

顺序结构

在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):

  1. 设置断点
  2. 单步运行
  3. 观察变量(添加查看,输入变量名)

调试步骤(vc6.0):

  1. 选择代码行,alt+f9或者通过编辑菜单进入断点设置.
  2. 单步运行:使用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 程序逻辑的更多相关文章

  1. JavaScript状态机程序逻辑编辑器

    制作背景 之前做Win8 Metro动态加载内容框架的时候,由于采用了XAML+JavaScript的方法,程序复杂的执行逻辑是由JavaScript控制的,而页面一多,流程一复杂,制作起来就非常麻烦 ...

  2. CTF---Web入门第十二题 程序逻辑问题

    程序逻辑问题分值:20 来源: 实验吧 难度:中 参与人数:6909人 Get Flag:1993人 答题人数:2070人 解题通过率:96% 绕过 解题链接: http://ctf5.shiyanb ...

  3. Java Web安全之程序逻辑缺陷

    Java Web程序逻辑缺陷本质是由于程序设计和开发者设计的程序执行逻辑存在某种缺陷而导致的安全隐患.企业的代码审查和渗透测试通常主要针对的大多是诸如xss攻击和sql注入和跨站点脚本这些头条式漏洞, ...

  4. 【实验吧】guess next session&&FALSE&&NSCTF web200&&程序逻辑问题

      guess next session源码: <?php session_start(); if (isset ($_GET['password'])) { if ($_GET['passwo ...

  5. 「MoreThanJava」Day 3:构建程序逻辑的方法

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  6. 【windows开发实现记事本程序——逻辑篇1】

    1. 主要内容 从本节开始介绍windows开发实现记事本程序的逻辑实现部分.本节的主要内容有以下3点: 1. 主窗口定义  -- 主要介绍记事本主界面窗口对应的窗口类及实现方案 2. RichEdi ...

  7. 用java理解程序逻辑小结

    1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本 2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文本 ...

  8. 黑客攻防技术宝典web实战篇:攻击应用程序逻辑习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 何为强制浏览?可以通过它确定哪些漏洞? 强制浏览包括避开浏览器导航对应用程序功能访问顺序实 ...

  9. 微信小程序 逻辑层

    1. 注册程序小程序APP在小程序的根目录下有一个app.js文件.有App(Object),App() 函数用来注册一个小程序.接受一个 Object 参数,其内便是小程序的生命周期.App() 必 ...

随机推荐

  1. 洛谷 - P2551 - 华夏60战斗机 - 简单dp

    https://www.luogu.org/problemnew/show/P2551 首先这道题没有给Hm的最大值,很坑,只能随便开一个100没想到还过了. 观察题目,发现虽然高度可以变化,但是速度 ...

  2. HDU - 1098 - Ignatius's puzzle - ax+by=c

    http://acm.hdu.edu.cn/showproblem.php?pid=1098 其实一开始猜测只要验证x=1的时候就行了,但是不知道怎么证明. 题解表示用数学归纳法,假设f(x)成立,证 ...

  3. DOM中元素节点、属性节点、文本节点的理解13.3

    节点信息 每个节点都拥有包含着关于节点某些信息的属性.这些属性是:nodeName(节点名称) nodeValue(节点值) nodeType(节点类型) nodeType nodeType 属性可返 ...

  4. 适合新手看的超详细CentOS Linux 7 安装Tomcat8过程

    非常详细的安装Tomcat8的步骤,适合新手学习.废话不多说,直接干! 前提条件 1. 已有可直接连接的CentOS7系统 2. CentOS7系统已安装Java JDK 8 下载Tomcat8 下载 ...

  5. C 语言实例 - 计算字符串长度

    C 语言实例 - 计算字符串长度 C 语言实例 C 语言实例 计算字符串长度. 实例 - 使用 strlen() #include <stdio.h> #include <strin ...

  6. SQL COUNT DISTINCT 函数

    定义和用法 可以一同使用 DISTINCT 和 COUNT 关键词,来计算非重复结果的数目. 语法 SELECT COUNT(DISTINCT column(s)) FROM table 例子 注意: ...

  7. [題解](最小生成樹/LCA)luogu_P1967貨車運輸

    一道好題不出所料又抄的題解 1.首先對於這張圖肯定要考慮走哪些邊不走哪些邊,發現我們想要的肯定那些邊權最大的邊,所以想到最大生成樹 這樣能保證選到盡量大的邊 2.跑完最大生成樹后每兩點之間就有唯一路徑 ...

  8. 基于http的软件仓库

    这是企业中常用的方法 比如一台服务器准备好了,公司必然要安装一些应用 这时可以用这种方法批量安装应用 运行一条命令,服务器就会自己去连接软件仓库,去下载来安装. [root@webmaster htm ...

  9. sftp 常用命令 以及 以及与 scp 的比较

    1.scp 不能容忍网络闪断,因此一旦出现网络闪断,那么scp 命令就会异常退出 sftp 可以容忍网络闪断,而且具备断电续传,因此sftp 适用于网络更慢的环境, 2. sftp 是一个交互式文件传 ...

  10. c#学习系列之跳出循环 break,continue

    break是完全跳出循环: ) { ) break; Console.WriteLine(a++); } 此处输出1,2,3,4,5,6,7,8 continue是跳出当前的循环: ;i<=;i ...