1. while语句
2. 循环嵌套
3. 数组
4. 排序

1. while

由于上节课时间有限,介绍完for循环后没有来得及讲while语句。
简单来讲,while也是一种循环结构,先看一个例子:

int i = 0;
while (i < 10)
{
printf("%d\n", i);
i++;
}

这是一个输出0~9的程序片段。

与for一样,while后面是一个空格加一对小括号,小括号里面是循环执行的条件。

程序先判断是否满足小括号内的条件:如果满足条件,就执行大括号中的内容,执行之后返回while开头再去判断;若不满足条件,就结束这个循环。

这是先判断,后执行。

还有一种循环结构do-while,是先执行,后判断。例如,要求用户从屏幕不断输入数,直到这个数在1~100之间。看下面的代码片段:

do {
scanf("%d", &n);
} while (n > 100 || n < 1);

这次,while放在了后面。注意后面有一个分号。程序执行的时候,会先执行循环体内容,然后判断while的条件是否成立。假如用户第一次输入-1,scanf读入之后,while判断,发现符合(n>100或n<1)这个条件,所以回到开头,再一次执行scanf...直到用户输入一个1~100的数,不符合条件,就结束这个循环。


练习1

运行程序,输入不限量的数字,以回车分隔,直到0为止。输出所有数字的和。

样例:

注释:Please input numbers为提示语,可用printf实现。前6行为输入的数,到了0就停止读入,并输出以上所有数字之和为119


2. 循环嵌套

前面学过if-else的分支嵌套,这个循环嵌套也是很好理解的。举一个栗子:

for (i = 0; i < 10; i++)
{
for (j = 0; j < i; j++)
{
printf("%d", i);
}
printf("\n");
}

能不能分析出来这个程序是实现什么功能?试着写出运行结果,然后在电脑上敲一遍代码,验证自己的答案。


练习2

打印如下数字矩形:
01234
12345
23456
34567
45678

3. 数组

我们知道,要保存一个整数,要用到一个整型变量。若要保存2个整数,就要定义两个整型变量;三个数以此类推...

int n;  //n用于存放一个int类型的数据
int a,b,c; //a,b,c分别放

那如果要保存一个班级的所有人的成绩呢?此时我们就要用到数组。

int score[50];

这就是定义一个长度为50的整型数组,注意,它的下标是从0开始,分别为score[0], score[1], score[2], ..., score[49]。

读入这50个成绩:

for (i = 0; i < 50; i++) {
scanf("%d", &score[i]);
}

如果我们要找出这50个数中的最大数:

int max = score[0];         //max用于存放最大数。一开始假定第一个数为最大
for (i = 1; i < 50; i++) {
if (score[i] > max) //每当后门遇到一个比max大的数,就更新max的值
max = score[i];
}
printf("%d\n", max);

这里的if语句没有加大括号,因为只有一条语句执行,所以{ }可以省略。读懂上面的程序片段,并完成以下练习。


练习3

读入10个数,输出最大值和最小值

4. 排序

两个数a,b进行排序,要求a<=b,一条if语句就可以完成:

if (a > b) {        //若a>b, 则交换a,b的值
temp = a; //temp为一个临时变量,用于存放a的值
a = b;
b = a;
}

三个数a,b,c从小到大排序:首先,让a分别与b,c比较,一旦有比a小的数,就进行交换。当a确定了最小数后,剩下b,c比较。

if (a > b) {
temp = a; a = b; b = temp;
}
if (a > c) {
temp = a; a = c; c = temp;
}
if (b > c) {
temp = b; b = c; c = temp;
}

10个数从小到大排序呢?假设这10个数是a[0]~ a[9]。与上同理,先将a[0]与后面所有的数a[1],a[2],...,a[9]进行比较,一旦发现有比自身小的数,就进行交换。这一轮下来,保证a[0]是存放的最小值。第二轮,让a[1]与后面的数a[2],...,a[9]进行比较,以此类推。当进行到第9轮的时候,a[8]与a[9]进行比较,确定了a[8]的同时,a[9]也相应的确定下来了。所以一共九轮,就可以完成排序了。

程序样例如下:

for (i = 0; i < 9; i++) {
for (j = i+1; j < 10; j++) {
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}

理解并完成以下练习:


练习4

输入一个整数n,然后依次读入n个数. 2<=n<=100.
将这n个数从大到小排序,并输出。

样例如下:

C语言学习记录之一的更多相关文章

  1. 学习iOS笔记第一天的C语言学习记录

    c语言基础学习 int num1 = 15; int num2 = 5; int temp = 0; //先把num1放到temp里 temp = num1; //先把num2放到num1里 num1 ...

  2. C语言学习记录_2019.02.10

    sizeof:给出某个类型或某个变量在内存中占据的字节数:(1个字节8位,即8比特) 格式符 (1)%ld表示数据按十进制有符号长型整数输入或输出. (2)%d表示数据按十进制有符号整型数输入或输出. ...

  3. C语言学习记录

    思路: 工具书: <c程序设计语言> R&K <linux C 编程一站式学习>

  4. Arduino语言学习记录(持续更新)

    几天前某宝买了一套,这几天没工夫.今天开始学学这个“玩具”. 1.Arduino的变量数据类型: 数据类型  数据类型 RAM 范围 void keyword N/A N/A boolean 1 by ...

  5. C语言学习记录之二

    各种语句及编程笔记记录 1.if & else #include<stdio.h> int main(){     int if (situation) {         //m ...

  6. C语言学习记录_2019.02.23

    char类型的输出: scanf("%d",&i);//i=49; char x=i; printf("x=%d\n",x); printf(" ...

  7. C语言学习记录_2019.02.07

    C99开始,可以用变量来定义数组的大小:例如,利用键盘输入的变量来定义数组大小: 赋值号左边的值叫做左值: 关于数组:编译器和运行环境不会检查数组下标是否越界,无论读还是写. 越界数组可能造成的问题提 ...

  8. C语言学习记录_2019.02.05

    switch只能判断整数,而分段函数的判别是一个范围,我们无法用整数来表示范围 跟踪语句的方法: (1)debug调试 (2)printf( )语句跟踪 小套路:当循环次数很大时,可以先模拟较小次数的 ...

  9. C语言学习记录_2019.02.04

    逻辑性变量的定义符:bool,在C语言中只有true和false: 定义方式:bool t = true; 逻辑运算符: !:逻辑非 &&:逻辑与 ||:逻辑或 表达区间的错误形式:4 ...

  10. C语言学习记录_2019.02.02

    变量在第一次被使用之前应该赋初值 scanf(“%d”,&price); scanf(“price%d %d”,&price);  scanf中的东西一定是要输入的东西. 定义常量:c ...

随机推荐

  1. Windows10常用快捷键

    1. 打开注册表 ctrl+R   --->   regedit   2.打开资源管理器 win + E    3.切换到桌面 win + D   再按一次可以进行还原   4.锁屏 win+ ...

  2. 使用NFS时的一些问题

    当我把nfs服务端共享目录/usr/local/data/test删掉时,在nfs客户端却没办法把之前挂载在这上面的当前从机上的/usr/local/data/test删除,出现 bash: cd: ...

  3. java日志框架之logback(一)——logback工程简介

    Logback工程 致力于成为log4j工程的继承者 Logback的架构足够泛型化,故能够应用于许多不同的环境.当前,logback划分为三个组件: logback-core logback-cla ...

  4. element-ui 源码解析 二

    Carousel 走马灯源码解析 1. 基本原理:页面切换 页面切换使用的是 transform 2D 转换和 transition 过渡 可以看出是采用内联样式来实现的 举个栗子 <div : ...

  5. VS Code & MacOS & Zsh

    VS Code & MacOS & Zsh https://code.visualstudio.com/docs/setup/mac solution OK bug $ cat .zs ...

  6. delphi中如何实现DBGrid中的两列数据想减并存入另一列

    可参考下面的例子:   数据自动计算的实现:“金额”是由“单价”和“工程量”相乘直接得来的,勿需人工输入. 这可在“数据源构件”的onupdatedata例程添加如下代码实现: procedure T ...

  7. WEB相关概念、Tomcat初识、Servlet、基本知识。

    /* * 一.web的概念? * 1.web就是在http协议基础之上, 利用浏览器进行访问的网站. * Web Page指网站内的网页. 我们常说的WWW(World Wide Web 万维网)就是 ...

  8. 一、MyCat的搭建

    一.什么是mycat 简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库. mycat是个中间件,它负责连 ...

  9. 线程同步Volatile与Synchronized(一)

    volatile 一.volatile修饰的变量具有内存可见性 volatile是变量修饰符,其修饰的变量具有内存可见性. 可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改 ...

  10. LVS (Linux Virtual Server) 负载均衡

    [大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡   一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服 ...