欢迎光临散文网 会员登陆 & 注册

C语言循环

2022-12-25 05:27 作者:虚云幻仙  | 我要投稿

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <math.h> // 包含数学计算常用函数的头文件

#include <stdbool.h> // stdbool.h头文件将bool作为_Bool类型的别名,定义了true/false常量,兼容c++

#include <string.h>


void show_$(int rows, int columns); // 函数原型,C语言书写规范为先声明函数原型,再写main()函数,在main()函数之后定义声明的函数,函数原型用于在main()函数中调用函数时告诉编译器函数的返回值和参数

long square(int n);

void show_$2(void);

double func1(double d1, double d2);

int main(void)

{

int a = -5;

while (a) // whilt()判定的条件为真(非0)时执行循环,当条件为假(0)时结束循环,关系表达式3>2的值为true即1,而3<2的值为false即0,所以也可以用一个值而不是一个关系表达式来作为判定的条件

{

    a++;

    printf("a");

}

while (++a < 3)

    printf("\n循环内只写一条语句可以省略括号");

while (++a < 5); // 测试条件之后直接跟分号,单独分号不写表达式是空语句,程序在空语句上不会执行任何事情,所以会进行下一轮判定,不断判定直到false

printf("\n%d\n", a);

; // 单独写一个分号是空语句

while (scanf("%d", &a) == 1) // 清理输入队列,假设想跳过输入中所有的空白符号及整数,利用scanf读取到整数会返回1作为条件一直循环到读取到非数字字符并放回输入队列,这时输入队列中的开头字符一定不是数字了

    ; // 将空语句和while分两行显示,增加可读性,当条件true执行空语句直到条件false

scanf("%*s"); //跳过放回输入队列的非数字字符

printf("%f\n", pow(2.0, 3.0)); // pow(f1,f2)求幂运算,参数和返回值都是double,返回f1的f2次幂

printf("%f\n", fabs(-1.0)); // fabs(double)求绝对值,参数和返回值是double

//while (true); //要使用true表示布尔值需要预处理包含stdbool.h头文件,true值为1,false值为0

char ch[26]; // 声明一个有26个char元素的char数组

for (int i = 0; i < 26; i++) //for循环格式:for(初始化语句;测试条件;更新/迭代){语句},for循环和while循环都是入口条件循环,即先测试条件,为真再执行循环

{

    ch[i] = 'a' + i; // 数组ch有26个元素,用[0]至[25]指代首个至最后一个元素,通过26次循环将a-z赋值给ch[0]到ch[25]

}

for (int i = 0; i < 26; i++)

{

    printf("%c", ch[i]); // 遍历数组

}

printf("\n"); // 这时数组ch并不是字符串,因为末尾ch[25]是字符'z'而不是空字符'\0'

ch[25] = '\0'; // 将数组末尾改为空字符,变成了存储a-y的字符串

printf("%s\t%zd\n", ch, strlen(ch)); // 字符串长度为25,不包含末尾的空字符

int start = 5;

int end = 9;

do

{

    printf("%5d %5d %5d\n", start, start * start, start * start * start);

} while (start++ < end); // do-while循环,出口条件循环,先执行循环,再测试条件,所以至少会执行一次循环中的语句

double d1, d2;

printf("输入两个浮点数:");

while (scanf("%lf%lf", &d1, &d2)==2) //在一次scanf()函数中读取两个浮点数,如果用户输入了一个值,scanf会继续等待用户输入第二个值,只有输入两个数字或者输入非数字非空白字符才可以结束scanf(),正确读取两个浮点数会返回2,用来判断合法输入

{

    printf("%.2f\n", func1(d1, d2));

}

printf("%d", scanf("%*s")); //跳过非数字字符,由于没有赋值,虽然读取到了字符,scanf()依然返回0

printf("Enter lower an upper integer limits:");

for (int a1 = 0, a2 = 0;scanf("%d%d", &a1, &a2), a1 < a2;) // for循环()括号内的每部分语句可以用逗号分成多个表达式,int a1=0,a2=0声明及初始化两个变量,而scanf()语句和a1<a2是从左到右逐句执行的,逗号是序列点,运行到逗号时会完成前面语句的执行,所以会先读取新的输入给a1、a2再比较,而逗号表达式的值为最右侧项的值,即对于逗号表达式scanf(),a1<a2 来说,无论scanf()返回什么值,逗号表达式的值都是最右侧a1<a2条件表达式的值,for循环()括号中每一部分都可以省略,写成for(;;)表示没有初始化,没有迭代因子,测试条件为true无限循环

{

    printf("The sums of the squares form %d to %d is ", a1 * a1, a2 * a2);

    int sum = a1 * a1;

    while (++a1<=a2)

    {

        sum += a1 * a1; //sum+=a1*a1和表达式sum=sum+(a1*a1)等价,+= -= *= /= %=优先级和赋值运算符=相同,所以等号右侧的表达式计算完才会执行+=,比如sum%=1+2*3/4-5相当于sum=sum%(1+2*3/4-5)

    } // sum+=a1*a1比 sum=sum+a1*a1更高效

    printf("%d\n", sum);

    printf("Enter lower an upper integer limits:");


}

return 0;

}

void show_$(int rows, int columns) {

for (int i = 0; i < rows; i++) // 嵌套循环,外侧循环负责打印一行并换行

{

    for (int j = 0; j < columns; j++) // 内侧循环负责打印一行中每列的内容,每次外侧循环迭代1次,内侧循环都会完整执行

    {

        printf("$ ");

    }

    printf("\n");

}

}

long square(int n) {

return (long)n * (long)n;

}

void show_$2(void) {

for (int i = 0; i < 5; i++)

{

    for (int j = 0; j <= i; j++)

    {

        printf("$");

    }

    printf("\n");

}

//结果为

// $

// $$

// $$$

// $$$$

// $$$$$

}

double func1(double d1, double d2) {

return (d1 - d2) / d1 / d2;

}

void func2(void) { //单利与复利的比较

const double TEX1 = 0.1; //单利,每年固定涨10%,每年利息一样

const double TEX2 = 0.05; //复利,每年利息是上一年本息和的5%

const double START = 100.0; //本金100

int year = 0;

double money1 = START, money2 = START; //第0年单利和复利都是100

printf("year %2d: %5.2f %5.2f\n", year, money1, money2);

for (money1 += START * TEX1, money2 *= 1 + TEX2, year++; money1 > money2; money1 += START * TEX1, money2 *= 1 + TEX2, year++) //初始化对三个变量进行,直到复利本息和大于单利之前循环,money1+=固定利息,money2*=105%每年是上一年的1.05倍

{

    printf("year %2d: %5.2f %5.2f\n", year, money1, money2);

}

printf("year %2d: %5.2f %5.2f\n", year, money1, money2); //第27年时复利超过单利

}


C语言循环的评论 (共 条)

分享到微博请遵守国家法律