[C++系列] c语言基础 day06 循环,数组
in C/C++ with 0 comment

[C++系列] c语言基础 day06 循环,数组

in C/C++ with 0 comment

#计算机中的随机数

无法预知的数字叫做随机数

rand标准函数可以用来获得随机数。(伪随机数),为了使用这个标准函数需要包含stdlib.h头文件。

Srand 标准函数用来设置随机数种子,这个函数把一个整数作为种子使用。不同的种子得到的随机数不同。
为了使用这个标准函数也需要包含stdlib.h头文件

任何程序里只需要设置一次随机数种子

time标准函数可以用来获得当前时间,这个函数用一个整数表示得到的时间,
同一秒之内这个代表时间的整数是不变的。为了使用这个标准函数需要包含time.h头文件。

#练习

程序里产生一个0到99之间的随机数让用户猜,每次猜完都要给出提示,直到猜对游戏结束。

/*
 * 猜数游戏
 * */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int num = 0, guess = 0;
    srand(time(0));
    num = rand() % 100;
    for (;;) {
        printf("请猜一个数字:");
        scanf("%d", &guess);
        if (guess > num) {
            printf("猜大了\n");
        }
        else if (guess < num) {
            printf("猜小了\n");
        }
        else {
            printf("猜对了\n");
            break;
        }
    }
    return 0;
}

#循环与分支

分支和循环都叫做流程控制语句,它们都可以让程序里的语句不再从上到下执行。
goto也是流程控制语句,它可以把任何一条语句指定为下一条语句。一般不要使用goto语句。

for循环高级用法:

在屏幕上输出
54321
5432
543
54
5

#include<stdio.h>
int main(){
int num = 0,num1=0;
for(num = 1;num<=5;num++){
    for(num1 =5;num1 >= num;num1--){
        printf("%d",num1);
    }
printf("\n");
return 0;
}

for循环所能解决的问题通常可以用一组数字的变化过程描述。如果一个问题需要用多组数字的变化过程描述,不同数字的变化频率不同就可以采用多重循环。
在多重循环里靠外的循环变量负责代表变化快的数字,靠里的循环变量负责代表变化快的数字

练习

假设一组货币包含三种面值,分别是1元,2元和5元,编写程序找出所有10元的组合。

/*
 * 多重循环演示
 * */
#include <stdio.h>
int main() {
    int num = 0, num1 = 0;
    for (num = 0;num <= 2;num++) {
        for (num1 = 0;num1 <= 5;num1++) {
            if (5 * num + 2 * num1 <= 10) {
                printf("5元钱有%d张,2元钱有%d张,1元钱有%d张\n", num, num1, 10 - 5 * num - 2 * num1);
            }
        }
    }
    return 0;
}

While 关键字也可以用来编写循环。
不容易使用for关键字编写的循环就可以考虑使用while关键字编写
While循环的格式如下:
While(逻辑表达式){
循环执行的语句;
}
程序反复执行大括号中的语句直到逻辑表达式为假。
While循环会交替执行逻辑表达式的计算和大括号里面的语句。
while循环首先进行逻辑表达式的计算(while循环有可能不执行大括号里的语句)
如果while循环的逻辑表达式永远为真就成为了死循环(比如用1做逻辑表达式)
while循环里也可以使用break 和 continue 语句;

用while循环改写游戏

/*
 * while循环练习
 * */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int num = 0, guess = 0;
    srand(time(0));
    //num = rand() % 100;
    /*while (num != guess) {
        printf("请猜一个数字:");
        scanf("%d", &guess);
        if (guess > num) {
            printf("猜大了\n");
        }
        else if (guess < num) {
            printf("猜小了\n");
        }
        else {
            printf("猜对了\n");
        }
    }*/
    do {
        printf("请猜一个数字:");
        scanf("%d", &guess);
        if (guess > num) {
            printf("猜大了\n");
        }
        else if (guess < num) {
            printf("猜小了\n");
        }
        else {
            printf("猜对了\n");
        }
    } while (num != guess);
    return 0;
}

do while循环也可以用来编写循环
do。。while循环格式如下:
do{
反复执行的语句;
}
while(逻辑表达式);
do。。while循环后面的小括号必须用分号结束。
do。。while循环也是交替执行逻辑表达式和大括号后面的语句。
do。。while循环首先执行大括号里面的语句。
do。。while循环保证大括号里面的语句至少执行一次。

练习

编写程序计算两个整数的最大公约数。

/*
 * 最大公约数练习
 * */
#include <stdio.h>
int main() {
    int num = 0, num1 = 0, tmp = 0;
    printf("请输入两个数字:");
    scanf("%d%d", &num, &num1);
    while (num1 % num) {
        tmp = num1 % num;
        num1 = num;
        num = tmp;
    }
    printf("最大公约数是%d\n", num);
    return 0;
}

scanf 和 printf

Scans 获得数字的时候数字首先从键盘进入缓冲区,程序从输入缓冲区里取得数字。
先进入输入缓冲区的数字必须首先处理。
先进入输入缓冲区的数字如果处理不了就无法处理以后用户输入的内容。
可以使用以下两条语句把用户某一次输入的所有内容从输入缓冲区删除。
Scanf(“%*1”);
Scans(“%*c”);

Printf首先把数字放在输出缓冲区里,然后计算机把输出缓冲区里的内容显示在屏幕上。
在四种情况下,计算机会吧输出缓冲区里的内容显示在屏幕上。
1,如果输出缓冲区里包含“n”字符,就把这个字符前面的内容都显示在屏幕上。
2,程序结束后它放在输出缓冲区里的内容会显示在屏幕上。
3,当输出缓冲区被充满的时候输出缓冲区里的内容会显示在屏幕上。
4,可以在程序中使用fflush(stdout);强制把输出缓冲区里的内容显示在屏幕上。scanf也会强制把输出缓冲区内容输出。

数组

数组用来代表一组连续的同类型存储区。
这些存储区叫做数组的元素。
数组也需要先声明后使用
声明数组的时候除了要提供类型名称和数组名称以外还需要提供一个整数表示数组里的存储区个数。
数组一旦存在则里面包含的存储区个数就不可以改变。
数组通常不会作为整体使用,一次只会使用其中的某个存储区。
数组里的每个存储区都有一个编号,这个编号叫做数组的下标。
第一个存储区的下标是0,向后依次递增。
数组下标的有效范围从0开始到存储区个数减1为止,超过范围的下标不能使用。
数组名称和下标一起使用可表示数组里的存储区。
可以在for循环一次处理数组里的每个存储区,在这个循环里循环变量依次代表所有有效下标。
数组也应该进行初始化
初始化数组的时候需要提供多个初始化数据,相邻数据之间用逗号分开,所有数据应该写在一对大括号里面。
如果初始化数组的时候初始化数据个数比数组里存储区个数多,就把后面的初始化数据忽略。
如果初始化数组的时候初始化数据个数比数组里存储区个数少就把后面的存储区自动初始化成0;
如果初始化数组的时候初始化数据的个数和数组里存储区的个数一样就可以省略数组声明里的存储区个数。

练习

编写程序从键盘得到一个非负数(不超过5个数位)
把它们拆散后每个数位的内容单独显示
例如输入 的是345
显示的是 3。4。5

/*
 * 数组练习
 * */
#include <stdio.h>
int main() {
    int arr[5] = {0}, val = 0, num = 0;
    printf("请输入一个数字:");
    scanf("%d", &val);
    for (num = 4;num >= 0;num--) {
        arr[num] = val % 10;  //拆出最右边的数位内容
        val /= 10;   //把最右边的数位丢掉
        if (!val) {
            break;
        }
    }
    //num代表最后一个拆出来的数字所在的下标
    for (;num <= 4;num++) {
        printf("%d ", arr[num]);
    }
    printf("\n");
    return 0;
}

预习

1,数组
2,变长数组
3,多维数组


  1. n
Responses