标准C知识04

来源:互联网 发布:linux启动vnc 编辑:程序博客网 时间:2024/05/23 01:26
for循环还可以用于描述对一组数据的列举过程。在这个过程中循环变量会被赋值成每一个需要列举的数字。只要编写代码完成对一个数字的处理并放在for循环的大括号内就可以了。for循环描述列举过程的语法如下
for (把循环变量赋值成某个边界值;循环变量没有越过另外一个边界值;循环变量向另一个边界值逼近) {
    对每个数字的处理代码
}


循环嵌套(一个循环里面包含另外一个循环)可以解决复杂的问题。外层循环和内存循环的关系仅仅是外层循环为内存循环准备好了一个或多个数据。


while语句也可以用来表示循环,它只需要一个循环条件。
在编写循环的时候可以计算出循环的次数的话采用for的方法编写比较方便,否则采用while的方法。


do ... while语句也可以用于实现循环,这种循环首先执行大括号内部的语句然后进行循环条件的判断,而while语句是先进行循环条件的判断然后执行大括号内部的语句。


goto语句可以跳转到程序中的任何位置


scanf函数的数字流过程如下
键盘-->键盘缓冲区-->输入缓冲区-->程序
输入缓冲区中的内容只有被读走以后才会被清理。没有被清理的数据会导致后面的scanf函数无法正确执行。


scanf函数用结果数字是否为0表示是否正确读到了数据。


使用如下两条语句可以把输入缓冲区中当次输入的所有内容清理掉。
scanf("%*[^\n]");    清除用户输入的字符
scanf("%*c");        清除换行字符\n


printf函数执行时的数据流如下
程序-->输出缓冲区-->屏幕
1.遇到\n符号
2.函数结束后
3.输出缓冲区满了
4.使用fflush(stdout)强制转移


C语言中可以使用数组表示多个同类型的变量。声明语法如下
int shu_zi[3];
shu_zi代表数组名称,int表示数组中所有变量的类型,3表示数组中变量的个数。
可以使用数组名称和下标表示数组中的某个变量,下标是数组中每个变量的编号,从0开始到个数减一为止。超过范围的下标不可以使用,会产生严重问题。


数组名称的各种使用方式(参考练习13arr.c)


/*
    for练习
*/
#include <stdio.h>
int main() {
    int xun_huan = 0;
    for (xun_huan = 0;xun_huan < 4;xun_huan++) {
        printf("你好\n");
    }
    return 0;
}


/*
    for循环实现列举的练习
*/
#include <stdio.h>
int main() {
    int xun_huan = 0;
    for (xun_huan = 1;xun_huan <= 10;xun_huan++) {
        /*if (xun_huan & 1) {
            printf("%d\n", xun_huan * xun_huan);
        }*/
        if (!(xun_huan & 1)) {
            continue;     //跳过后面的语句
        }
        if (xun_huan * xun_huan > 40) {
            break;        //终止循环的执行
        }
        printf("%d\n", xun_huan * xun_huan);
    }
    /*for (xun_huan = 10; xun_huan >= 1; xun_huan--) {
        printf("%d\n", xun_huan);
    }*/
    return 0;
}


/*
    费式数列练习
*/
#include <stdio.h>
int main() {
    int bian_hao = 0, xun_huan = 0, shu_zi = 1, shu_zi_1 = 1;
    printf("请输入一个数字编号:");
    scanf("%d", &bian_hao);
    if (bian_hao >= 0 && bian_hao <= 1) {
        printf("结果是1\n");
        return 0;
    }
    for (xun_huan = 2; xun_huan <= bian_hao; xun_huan++) {
        /*int shu_zi_2 = shu_zi + shu_zi_1;
        shu_zi = shu_zi_1;
        shu_zi_1 = shu_zi_2;*/
        shu_zi_1 += shu_zi;
        shu_zi = shu_zi_1 - shu_zi;
    }
    printf("结果是%d\n", shu_zi_1);
    return 0;
}


/*
    素数的练习
*/
#include <stdio.h>
#include <math.h>
int main() {
    int shu_zi = 0, xun_huan = 0, gen = 0;
    for (shu_zi = 10; shu_zi <= 100; shu_zi++) {
        gen = sqrt(shu_zi);
        for (xun_huan = 2; xun_huan <= gen; xun_huan++) {
            if (!(shu_zi % xun_huan)) {
                break;
            }
        }
        //根据循环结束的方式判断数字是不是素数
        if (xun_huan <= gen) {
            //循环条件成立表示非正常结束
            printf("数字%d不是素数\n", shu_zi);
        }
        else {
            //循环条件不成立表示正常结束
            printf("数字%d是素数\n", shu_zi);
        }
    }
    return 0;
}



/*
    乘法表的显示
*/
#include <stdio.h>
int main() {
    int xun_huan = 0, xun_huan_1 = 0;
    for (xun_huan = 1; xun_huan <= 9; xun_huan++) {
        for (xun_huan_1 = 1; xun_huan_1 <= xun_huan; xun_huan_1++) {
            printf("%dX%d=%2d ", xun_huan_1, xun_huan, xun_huan_1 * xun_huan);
        }
        printf("\n");
    }
    return 0;
}


/*
    嵌套循环解决面包房的问题
*/
#include <stdio.h>
int main() {
    int xun_huan = 0, xun_huan_1 = 0;
    for (xun_huan = 0; xun_huan <= 10; xun_huan++) {
        int ge_shu = (200 - 20 * xun_huan) / 25;
        for (xun_huan_1 = 0; xun_huan_1 <= ge_shu; xun_huan_1++) {
            if (!((200 - 20 * xun_huan - 25 * xun_huan_1) % 30)) {
                printf("20g面包的个数是%d,25g面包的个数是%d,30g面包的个数是%d\n", xun_huan, xun_huan_1, (200 - 20 * xun_huan - 25 * xun_huan_1) / 30);
            }
        }
    }
    return 0;
}


/*
    for循环练习
*/
#include <stdio.h>
int main() {
    int xun_huan = 0, shu_zi = 0;
    for (xun_huan = 0; xun_huan < 3; xun_huan++) 
        printf("你好\n");
    for (xun_huan = 0, shu_zi = 10; xun_huan < 3; xun_huan++, shu_zi--) {
        printf("%d\n", shu_zi);
    } 
    //C99规范中可以在循环里声明循环变量
    for (int xun_huan_1 = 0; xun_huan_1 < 3; xun_huan_1++) {
        printf("%d\n", xun_huan_1);
    }
    //printf("%d\n", xun_huan_1);    //xun_huan_1未声明
    /*for (;xun_huan < 3;) {
        printf("%d\n", xun_huan);
        xun_huan++;
    }*/
    while (xun_huan < 3) {
        printf("%d\n", xun_huan);
        xun_huan++;
    }
    return 0;
}


/*
     统计一个数字的数位
*/
#include <stdio.h>
int main() {
    int shu = 0, shu_wei = 0;
    printf("请输入一个数字:");
    scanf("%d", &shu);
    /*while(shu) {
        shu_wei++;
        shu /= 10;
    }*/
    do {
        shu_wei++;
        shu /= 10;
    } while (shu);
    printf("数位是%d\n", shu_wei);
    return 0;
}


/*
    循环练习
*/
#include <stdio.h>
int main() {
    int xun_huan = 0;
    //空语句循环,后面要加;
    for (xun_huan = 0; xun_huan < 10; xun_huan++);
    //死循环,只能靠break结束的循环
    for (;;) {
        //处理代码
    }
    while (1) {
        //处理语句
    }
    return 0;
}



/*
   输入缓冲区练习
*/
#include <stdio.h>
int main() {
    int shu_zi = 0, shu_zi_1 = 0;
    //8到15行的代码可以保证正确读取一个数据
    printf("请输入一个数字:");
    while (!scanf("%d", &shu_zi)) {
        scanf("%*[^\n]");
        scanf("%*c");
        printf("请重新输入一个数字:");
    }
    scanf("%*[^\n]");
    scanf("%*c");
    printf("请输入一个数字:");
    scanf("%d", &shu_zi_1);
    printf("%d %d\n", shu_zi, shu_zi_1);
    return 0;
}



/*
    输出缓冲区练习
*/
#include <stdio.h>
int main() {
    printf("你好");
    fflush(stdout);
    while (1) {
        //printf("你好");
    }
    return 0;
}



/*
    数组练习
*/
#include <stdio.h>
int main() {
    int shu_zi[3], xun_huan = 0;
    for (xun_huan = 0; xun_huan <= 2; xun_huan++) {
        printf("请输入一个数字:");
        scanf("%d", &shu_zi[xun_huan]);
    }
    for (xun_huan = 2; xun_huan >= 0; xun_huan--) {
        printf("%d ", shu_zi[xun_huan]);
    }
    printf("\n");
    return 0;
}


*
     数组练习
*/
#include <stdio.h>
int main() {
    int shu_zi[3];
    printf("shu_zi是%p\n", shu_zi);   //数组名称代表了数组中下标为0变量的地址
    //shu_zi = 0;     //数组名称不可以被赋值
    printf("&shu_zi是%p\n", &shu_zi);  //数组名称的地址就是数组中首变量的地址,但是层次不同
    printf("shu_zi + 1是%p,&shu_zi + 1是%p\n", shu_zi + 1, &shu_zi + 1);   //不同地址加一时一的单位不同,数组名称加一的单位是一个数组中变量的大小,数组名称地址加一的单位是一整个数组的大小
    printf("*(shu_zi + 2)是%d\n", *(shu_zi + 2));  //打印下标为2的变量的数值
    printf("sizeof(shu_zi)是%d\n", sizeof(shu_zi)); //整个数组所占空间的大小
    printf("数组中变量个数是%d\n", sizeof(shu_zi) / sizeof(shu_zi[0]));  //可以计算数组中变量个数
    return 0;
}




























原创粉丝点击