选择结构
if ... else ...
if else可以包打天下,但是层数太多容易让人口吐芬芳
//学生成绩单
#include <stdio.h>
main()
{
float x;
scanf("%f", &x);
if (x >= 60){
printf("***********\n");
printf("%.1f, OK!\n", x);
printf("***********\n");
} else {
printf("***********\n");
printf("%.1f, NO!\n", x);
printf("***********\n");
}
}
嵌套if
// 三个数排序
#include <stdio.h>
int main()
{
int a, b, c;
printf("请输入三个数:");
scanf("%d%d%d", &a, &b, &c);
if (a > b){
if (c > a)
printf("%d,%d,%d\n", c, a, b);
else if (c > b)
printf("%d,%d,%d\n", a, c, b);
else
printf("%d%d%d\n", a, b, c);
} else {
if (c < a)
printf("%d%d%d\n", b, a, c);
else if (c < b)
printf("%d%d%d\n", b, c, a);
else
printf("%d%d%d\n", c, b, a);
}
}
switch
switch的条件必须是int 或者char
case后的每一个常量表达式必须各不相同
case和default的位置是任意的
每一个case之后应有一个break用来跳出switch循环(虽然没有也不会报错)
每个case之后的执行语句可以多余一个,不必加花括号
default字句可以省略
//交换三个数
#include <stdio.h>
main()
{
float d1, d2; char op;
scanf("%f%c%f", &d1, &op, &d2);
switch(op)
{
case '+':
printf("%.2f+%.2f=%.2f\n", d1, d2, d1 + d2);
break;
case '-':
printf("%.2f-%.2f=%.2f\n", d1, d2, d1 - d2);
break;
case '*':
printf("%.2f*%.2f=%.2f\n", d1, d2, d1 * d2);
break;
case '/':
printf("%.2f/%.2f=%.2f\n", d1, d2, d1 / d2);
break;
default:
printf("Unknown operater.\n");
}
}
goto
因为goto语句跳转可以很随意的实现,会造成程序可读性比较差,所以不提倡使用goto。
如果能明显提高运行效率,或者不影响程序可读性,也可以使用
// 计算输入长度
#include <stdio.h>
int main()
{
int n = 0;
printf("input a string : \n");
loop: if (getchar() != '\n')
{
n ++;
goto loop;
}
printf("%d", n);
}
循环结构
while循环
#include <stdio.h>
int main(){
int n = 1, y = 0;
while (n <= 100){
y += n;
n++;
}
printf("%d, n=%d", y, n);
return 0;
}
//打字速度
#include <stdio.h>
#include <time.h>
int main(){
char ch;
int n = 0;
time_t t1, t2;
time(&t1); // 获取时间并存入变量
while (ch = getchar() != '#')
n++;
time(&t2);
printf("\n总的输入字符数: %d", n);
printf("\n平均录入速度: %.2f/s", 1.0 * n / (t2 - t1));
return 0;
}
do...while...
// 字符分类
#include <stdio.h>
main(){
int class1 = 0, class2 = 0, class3 = 0; char ch;
do{
ch = getchar();
switch (ch) {
case '0': case '1': case '2':
case '3': case '4': case '5':
case '6': case '7': case '8':
case '9':
class1++; break;
case '+': case '-': case '*':
case '/': case '%': case '=':
class2++; break;
default: class3++; break;
}
} while (ch != '\\');
printf("\n class1=%d, class2=%d, class3=%d\n", class1, class2, class3);
}
计算斐波那契数列
#include <stdio.h>
int main(){
int i, n, t, a1 = 1, a2 = 1, s = 0;
scanf("%d", &n);
printf("%10d %10d", a1, a2);
for (i = 3; i <= n; i++){
t = a1 + a2;
printf("%10d", t);
s = s + t;
a1 = a2;
a2 = t;
}
printf(" s = %d\n", s);
return 0;
}
求水仙花数
// 水仙花数:一个三位数,每个位上的数值的三次方之和等于这个数本身
#include <stdio.h>
main(){
int n, g, s, b;
for(n = 100; n < 1000; n++){
g = n % 10;
s = n / 10 % 10;
b = n / 100;
if (n == g * g * g + s * s * s + b * b * b)
printf("%d ", n);
}
}
判断素数
// 求素数
#include <stdio.h>
main(){
int i, n, isPrime = 1;
scanf("%d", &n);
for(i = 2; i < n; i++){
if (n % i == 0) {
isPrime = 0;
}
}
if (isPrime)
printf("%d是素数!", n);
else
printf("%d不是素数!", n);
}
大数分解
// 将大数分解成多个素数相乘
#include <stdio.h>
main(){
int i, a;
scanf("%d", &a);
for (i = 2; a != 1;){
if (a % i == 0){
a = a / i;
printf("%d ", i);
}
else
i++;
}
}
九九乘法表
#include <stdio.h>
main(){
int n, i, j;
for (i = 1; i < 9; i++)
for (j = 1; j <= i; j++){
printf("%d*%d=%-4d", j, i, j * i);
if (j == i)
printf("\n");
}
}
空心三角形
#include <stdio.h>
main(){
int i, j, n;
printf("\nplease enter n:");
scanf("%d", &n);
for (i = 1; i <= n; i++){
for (j = 1; j <= n - i; j++)
printf(" ");
printf("*");
for (j = 1; j <= 2 * i -3; j++)
printf(" ");
if (i != 1)
printf("*");
printf("\n");
}
}
continue
跳出当此循环
break
跳出当前循环