C语言语句(Statements)的种类
类别 | 说明 | 示例 |
---|---|---|
标号语句(Labeled Statements) | 标号语句是普通语句前面加上一个标号,C语言中有3种类型的标号 | goto语句跳转的目标、switch语句中的case和default标号 |
复合语句(Compound Statements) | 复合语句是将多条普通语句组织成一条语句 | 由大括号{}内的多个语句和声明组成的程序块就是复合语句 |
表达式语句(Expression Statements) | 表达式语句是表达式后面加上分号";" | expression; |
选择语句(Selection Statements) | 选择语句又称为分支语句,有选择性地执行某段代码块 | if语句、if-else语句、switch语句 |
迭代语句(Iteration Statements) | 迭代语句又称为循环语句,不断地重复执行同一段代码 | for循环、while循环、do-while循环 |
跳转语句(Jump Statements) | 跳转语句可以打破当前的顺序控制流,使其跳转到特定的位置 | break语句、continue语句、return语句以及goto语句 |
任意输入3个整数,使用if语句对这3个整数由小到大进行升序排序。请判断下面哪一项无法实现该功能
#include
/* 交换x和y */
void swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main(int argc, char** argv)
{
int a, b, c;
printf("请输入 a,b,c:\n");
scanf("%d,%d,%d", &a, &b, &c);
(_____1_____)
printf("升序排序结果:\n");
printf("%d,%d,%d", a, b, c);
return 0;
}
A. if (a > b)
{
swap(&a, &b);
if (a > c)
swap(&a, &c);
if (b > c)
swap(&b, &c);
}
B. if (a > c)
swap(&a, &c);
if ((a < b) && (b < c)); //一个空语句,没有效果
if ((a < b) && (b > c))
swap(&b, &c);
if ((a > b) && (b < c))
swap(&a, &b);
C. if ((a < b) && (b < c) && (a < c));
if ((a < b) && (b > c) && (a < c))
swap(&b, &c);
if ((a > b) && (b < c) && (a < c))
swap(&a, &b);
if ((a < b) && (b > c) && (a > c))
swap(&a, &b), swap(&a, &c);
if ((a > b) && (b < c) && (a > c))
swap(&b, &c), swap(&a, &c);
if ((a > b) && (b > c) && (a > c))
swap(&a, &c);
D. if (a > b)
swap(&a, &b);
if (a > c)
swap(&a, &c);
if (b > c)
swap(&b, &c);
正确答案为B
注意每个语句后面都要跟break,case里如果没有break,那么程序会一直向下执行
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
使用for循环,打印九九乘法表。下列四个选项中有一项无法实现该功能,请找出该错误选项。
#include
int main(int argc, char** argv)
{
int i = 0;
int j = 0;
(_____1_____)
return 0;
}
A. for(i = 1, j = 1; i * j <= 81; ++i, ++j) {
printf("%d*%d=%2d\t", i, j, i * j);
if ((i * j) % 9 == 0)
printf("\n");
}
B. int row = 0;
int col = 0;
for(i = 0; i < 81; ++i)
{
row = i / 9 + 1;
col = i % 9 + 1;
printf("%d*%d=%2d\t", row, col, row * col);
if ((i + 1) % 9 == 0)
printf("\n");
}
C. i = 1;
for(; ; ) {
if (i > 9)
break;
j = 1;
for(; ; )
{
if (j > 9)
break;
printf("%d*%d=%2d\t", i, j, i * j);
++j;
}
printf("\n");
++i;
}
D. for(i = 1; i <= 9; ++i)
{
for(j = 1; j <= 9; ++j)
printf("%d*%d=%2d\t", i, j, i * j);
printf("\n");
}
作用:可以无条件跳转语句
语法: goto 标记;
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
注意:在程序中不建议使用goto语句,以免造成程序流程混乱
语法:do{ 循环语句 } while(循环条件);
注意:与while的区别在于do…while会先执行一次循环语句,再判断循环条件
使用while循环求两个正整数的最大公约数和最小公倍数。请分析(1)处缺失的代码,并判断下列四个选项中哪一项无法实现上述功能
#include
int main(int argc, char** argv)
{
int a, b, c, m, t;
printf("请输入两个数:");
scanf("%d,%d", &a, &b);
if (a < b)
{
t = a;
a = b;
b = t;
}
m = a * b;
c = a % b;
(_____1_____)
printf("最大公约数是:%d\n", b);
printf("最小公倍数是:%d\n", m / b);
}
A. while (c != 0)
{
a = b;
b = c;
c = a % b;
}
B. while (1)
{
if (c == 0)
break;
a = b;
b = c;
c = a % b;
}
C. do {
if (c == 0)
break;
a = b;
b = c;
c = a % b;
}
while (1);
D. do {
a = b;
b = c;
c = a % b;
}
while (c != 0);
答案选D