C语言:程序流程控制

选择结构

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

跳出当前循环

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值