C语言基础语法进阶
今天主要学习了C语言中的一些基础语法点,包括三目运算符、逗号表达式、switch
语句、do-while
循环,以及二维数组的基本操作。
(一)三目运算符
三目运算符在C语言中仅有一个,它是一个简洁的条件判断表达式。
int main()
{//三目运算符 a < b ? a:b 判断a和b哪个更小int a, b,max;while (scanf("%d %d", &a, &b)) {// 使用三目运算符找出a和b中较小的值,并赋值给maxprintf("%d\n", max = a < b ? a:b);}return 0;
}
(二)逗号表达式
逗号表达式会从左到右依次执行每个子表达式,整个表达式的值是最后一个子表达式的值。
#include<stdio.h>int main()
{int a = 0;int b = 10;int c = 10;// 这是一个逗号表达式:先执行a++,然后判断b==c// if语句的判断条件是逗号表达式的最后一个子表达式b==cif (a++, b == c){// 因为b==c为真,所以会执行这里的代码// a++已经执行,所以a的值是1printf("%d",a);}return 0;
}
#include<stdio.h>int main()
{int a = 0; int c = 9; int b;// 逗号表达式:先执行a++,然后执行c,整个表达式的值为最后一个子表达式c的值// 但赋值运算符=的优先级高于逗号,所以先执行b = a++,b被赋值为a的旧值0b = a++, c;printf("b = %d", b); // 输出b=0,因为先执行了b=a++return 0;
}
(三)switch语句
switch
语句用于根据表达式的值来执行不同的代码块。这里用一个例子展示了如何判断某年2月的天数(考虑闰年)。
#include<stdio.h>int main()
{int year; int mon;while (scanf("%d %d", &year, &mon)){switch (mon){case 2:{// 判断是否为闰年的表达式:(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)// 如果是闰年,该表达式为1,否则为0// 2月的天数为 28 + 0(非闰年)或 28 + 1(闰年)printf("february,%d have %d days\n", year, 28 + (year % 4 == 0 && year % 100 != 0 || year % 400 == 0));break;}case 3: {printf("31\n");break;}default: // 用来处理输入有误的情况printf("error\n");break;}}return 0;
}
(四)do-while
循环
do-while
循环的特点是,无论while
内的表达式是否符合条件,都会先执行一次do
内的代码,再进行判断。
#include<stdio.h>int main()
{int i = 0;int r = 0;do {// 先执行一次循环体,r被赋值为i的旧值0,然后i自增为1r = i++;} while (i <= 10 && i > 0); // while条件判断:i=1,符合条件,继续循环// ...循环继续,直到i=11,条件不满足,循环结束// 最后一轮循环时,i=10,r=9,i++后i=11// 然后判断while(i<=10 && i>0),条件不满足,循环终止// 所以r的最终值为10printf("%d", r); // 最终输出10
}
(五) 二维数组
二维数组是C语言中用于处理表格数据的常见数据结构。
#include<stdio.h>int main()
{int i = 0; int j = 0;// 声明一个3行4列的二维数组int arr[3][4];// 嵌套循环,用于从标准输入读取数据填充二维数组for (i = 0; i < 3; i++){for (j = 0; j < 4; j++){scanf("%d", &arr[i][j]);}}// 嵌套循环,用于打印二维数组中的所有元素for (i = 0; i < 3; i++){for (j = 0; j < 4; j++){printf("%d ", arr[i][j]); // 打印每个元素后加一个空格}printf("\n"); // 每打印完一行,换行}return 0;
}