C语言有九种控制语句,可分成以下三类:
1. 条件判断语句也叫分支语句: if 语句、 switch 语句;
2. 循环执行语句: do while 语句、 while 语句、 for 语句;
3. 转向语句: break 语句、 goto 语句、 continue 语句、 return 语句。
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
if(a>b)
{
printf("%d\n",a);
}
else
{
printf("%d\n",b);
}
return 0;
}
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("少年\n");
}
else if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("中年\n");
}
else if (age >= 50 && age < 80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
return 0;
}
else的匹配:else是和它离得最近的if匹配的。
代码1和代码2比较:会发现适当的使用{}可以使代码的逻辑更加清楚,代码风格很重要。
//代码1
int main()
{
int a = 0;
int b = 2;
if (1 == a)
if (2 == b)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
//代码2
int main()
{
int a = 0;
int b = 2;
if (1 == a)
{
if (2 == b)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
代码2和代码4风格更好一些,逻辑更加清晰,不容易出错。
//代码1
if (condition){
return x;
}
return y;
//代码2
if(condition)
{
return x;
}
else
{
return y;
}
//代码3
int num = 1;
if(num == 5)
{
printf("haha\n");
}
//代码4
int num = 1;
if(5 == num)
{
printf("haha\n");
}
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if(num % 2 == 1)
printf("奇数\n");
else
printf("No\n");
return 0;
}
#include<stdio.h>
//方法一:
int main()
{
int i = 1;
while(i <= 100)
{
if(i % 2 = 1)
{
printf("%d ",i);
}
i++;
}
return 0;
}
//方法二:
int main()
{
int i = 1;
while(i <= 100)
{
printf("%d ",i);
i += 2;
}
return 0;
}
switch语句也是一种分支语句,常常用于多分支的情况.switch后跟整型表达式,case后跟整型常量表达式。
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
在switch语句条件语句中时,作用是终止某个case并跳出switch结构,同时,多个case语句可以匹配一个表达式。
编程好习惯:在最后一个case的语句的后面加上一条break语句。
#include<stdio.h>
//输入1-5 输出的是weekday
//输入6-7 输出的是weekend
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
如果表达的值与所有的case标签的值都不匹配,可以在列表中加上default子句。当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所以每个switch语句只能出现一条default子句。
编程好习惯:在每个switch语句中都放一条default子句是个好习惯,甚至可以在后面再加上一个break。
#include<stdio.h>
//程序的输出结果是什么
int main()
{
int n = 1;
int m = 2;
switch(n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch(n)
{//switch允许嵌套调用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n",m,n);
return 0;
}
//输出结果是 m = 5 n = 3
while语句
#include<stdio.h>
//实例1:
//打印1-10的数字
int main()
{
int i = 1;
while(i <= 10)
{
printf("%d ",i);
i++;
}
return 0;
}
//实例2:
int main()
{
int a = 20;
while(a > 10)
{
scanf("%d",&a);
printf("a = %d\n",a);
}
return 0;
}
break介绍:
break当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。当它出现在嵌套循环语句中时,跳出最近的内循环语句,执行后面的代码。
break在while循环中的作用:其实在while循环中,只要碰到break,就停止后期的所有循环,直接终止循环。所以,while中的break是用于永久终止循环的。
continue介绍:
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。
continue在while循环中的作用是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环入口的判断。
#include<stdio.h>
//程序的执行结果是什么
int main()
{
int i = 1;
while(i <= 10)
{
if(5 == i)
break;
printf("%d ",i);
i++;
}
return 0;
}
//输出结果是:1,2,3,4
#include<stdio.h>
//示例一:
//这个程序的运行结果是是什么
int main()
{
int i = 1;
while(i <= 10)
{
if(5 == i)
continue;
printf("%d ",i);
i++;
}
return 0;
}
程序输出结果为:1,2,3,4...死循环
//示例二:
//这个程序的运行结果是是什么
int main()
{
int i = 1;
while(i <= 10)
{
i++;
if(5 == i)
continue;
printf("%d ",i);
}
return 0;
}
程序输出结果为:2,3,4,5,6,7,8,9,10,11
#include<stdio.h>
//获取键盘上的字符并将其输出
//代码1
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
putchar();
return 0;
}
//只打印数字字符,跳过其他字符
//代码2
int main()
{
char ch = '\0';
while((ch = getchar()) != EOF)
{
if(ch < '0' || ch > '9')
continue;
putchar(ch);
}
return 0;
}
//清理缓冲区
//代码3中将代码1进行适当修改有清理输入缓冲区的作用
int main()
{
char password[20] = {0};
printf("请输入密码:->");
scanf("%s",password);
int ch = 0;
while((ch = getchar()) != '\n');
{
;
}
printf("请确认密码(Y/N):->");
int ret = getchar();
if('Y' == ret)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
for循环的语法结构:for(表达式1;表达式2;表达式3;) 循环语句;
表达式1:
表达式1为初始化部分,用于初始化循环变量的。
表达式2:
表达式2为条件判断部分,用于判断循环是否终止。
表达式3:
表达式3为调整部分,用于循环条件的调整。
for循环相对于while循环的优点:
在while循环中依然存在着三个必须条件。但是由于代码风格的问题使得三个部分可能偏离较远,这样查找修改就不够集中和方便。所以for循环的风格更好,使用频率也最高。
#include<stdio.h>
//代码1
//在屏幕上打印1-10的数字
int main()
{
int i = 0;
for(i = 1;i <= 10;i++)
{
printf("%d ",i);
}
return 0;
}
//代码2
//计算1+2+...+100
int main()
{
int i = 0;
int sum = 0;
for(i = 0;i <= 100;i++)
{
sum += i;
}
printf("sum = %d\n",sum);
return 0;
}
for循环中的break和continue的意义和在while循环中一样。
#include<stdio.h>
//代码1
int main()
{
int i = 0;
for(i = 1;i <= 10;i++)
{
if(5 == i)
break;
printf("%d ",i);
}
return 0;
}
//输出结果是1,2,3,4
//代码2
int main()
{
int i = 0;
for(i = 1;i <= 10;i++)
{
if(5 == i)
continue;
printf("%d ",i);
}
return 0;
}
//输出结果是1,2,3,4,6,7,8,9,10
for循环的变种
#include<stdio.h>
int main()
{
//代码1
for (;;)
{
printf("haha\n");
}
//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议省略
//运行结果为死循环打印haha
//代码2
int i = 0;
int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("haha\n");
}
}
//运行结果为打印100个haha
//代码3
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("haha\n");
}
}
//运行结果为打印10个haha
//代码4
//使用多个变量控制循环
int x = 0;
int y = 0;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("haha\n");
}
return 0;
}
#include<stdio.h>
//问程序循环多少次
int main()
{
int i = 0;
int k = 0;
for(i = 0, k = 0;k = 0;i++,k++)
{
k++;
}
return 0;
}
答案:0次
do...while循环至少执行一次,使用场景有限,所以不经常使用。
#include<stdio.h>
int main()
{
int a = 1;
do
{
a++;
printf("a=%d\n",a);
}
return 0;
}while(a < 10);
#include<stdio.h>
//代码1
int main()
{
int i = 0;
do
{
if(5 == i)
break;
printf("%d\n",i);
i++;
}while(i < 10);
}
//代码2
int main()
{
int i = 0;
do
{
if(5 == i)
continue;
printf("%d\n",i);
i++;
}while(i < 10);
}
C语言中提供了可以随意滥用的goto语句和标记跳转的符号,理论上goto语句没有必要存在,没有goto语句也可以很容易的写出代码,某些场合下goto语句还是用得着的,例如:跳出深度嵌套的循环。但是goto语句不能跨函数跳转。
#include<stdio.h>
int main()
{
for(...)
{
for(...)
{
for(...)
{
if(diaster)
goto error;
}
}
}
error:
if(diaster)
return 0;
}
#include<stdio.h>
int main()
{
int i = 0;
int n = 0;
int ret = 1;
scanf("%d", &n);
for (i = 1; i < n; i++)
{
ret = ret * i;
}
printf("%d\n", ret);
return 0;
}
#include<stdio.h>
//代码1
int main()
{
int n = 0
int i = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret = 1;
for (i = 1; i <= n; i++)
{
ret = ret * i;
}
sum = sum + ret;
printf("%d\n", sum);
}
return 0;
}
//优化代码1
int main()
{
int n = 0
int sum = 0;
int ret = 1;
for (n = 1; n <= 10; n++)
{
ret = ret * i;
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
#include<stdio.h>
//遍历查找
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,,9,10 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]) ;
int k = 7;
for (i = 0; i < sz; i++)
{
if (arr[i] = k)
{
printf("找到了,下标为:%d\n",i);
break;
}
}
if (i == sz)
{
printf("找不到\n");
}
return 0;
}
//二分查找
//二分查找算法的时间复杂度是log以2为底的n次方
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0
int right = sz - 1;
int mid = (left + right) / 2;
int k = 7;
while (left <= right);
{
if (arr[mid] < k)
{
left = mid + 1;
}
elseif(arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标为:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
//优化:防止数值溢出
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0
int right = sz - 1;
int mid = left + (right - left)/2;
int k = 7;
while (left <= right);
{
if (arr[mid] < k)
{
left = mid + 1;
}
elseif(arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标为:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
char arr1[] = { "Happy Sister weiwei"};
char arr2[] = { "###################" };
int left = 0
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
return 0;
}
#include<stdio.h>
//比较两个字符串是否相等,不能使用==而应该使用字符串函数strcmp
int main()
{
int i = 0;
//假设密码是字符串 abcdef
char password[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:->");
scanf("%s", password);
if (strcmp(password, "abcdef") == 0)
{
printf("登录成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
{
printf("三次密码均输入错误,退出程序\n");
}
return 0;
}
#include<stdio.h>
void menu()
{
printf("***************************\n");
printf("********** 1.play *******\n");
printf("********** 0.exit *******\n");
printf("***************************\n");
}
void game()
{
//时间戳 现在的时间点相当于计算机起始时间的差值 单位是秒
//1.生成随机数
//0-RAND_MAX(32767)
int guess = 0;
int ret = rand() % 100 + 1;//生成随机数的函数
//2.猜数字
printf("请猜数字:->");
scanf("%d", &guess);
while(1)
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了!\n");
break;
}
}
int main()
{
//猜数字游戏
//电脑产生一个随机数(1-100)
//猜数字 猜大了 猜小了 直到猜对了结束
int input = 0;
srand((unsigned int)time(NULL));//不是每一次产生随机数都要调用 整个工程中只生成一次就可以了,所以放在main函数中
do
{
menu();
printf("请选择:->");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字的整个逻辑
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
} while (input);
return 0;
}
//电脑运行起来后 1分钟内关机
//如果输入我是猪 就取消关机
方法一
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
again:
printf("请注意你的60秒内关机,如果输入:我是猪,就取消关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
方法二
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");
while (1)
{
printf("请注意你的电脑将在60秒内关机,如果输入我是猪,就取消关机");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
break;
}
}
return 0;
}
#include <stdio.h>
int main()
{
int n = printf("Hello world!");
puts("");
printf("%d\n",n);
return 0;
}
#include <stdio.h>
int main()
{
int id = 0;
float c = 0.0f;
float math = 0.0f;
float Eng = 0.0f;
//输入
scanf("%d;%f,%f,%f",&id,&c,&math,&Eng);
//输出
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n",id,c,math,Eng);
return 0;
}
#include <stdio.h>
int main()
{
int arr[]={73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33};
int i = 0;
while(i < sizeof(arr)/sizeof(arr[0]))
{
printf("%c",arr[i]);
i++;
}
return 0;
}
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int date = 0;
scanf("%4d%2d%2d",&year,&month,&date);
printf("year=%d\n",year);
printf("month=%02d\n",month);
printf("date=%02d\n",date);
return 0;
}
#include <stdio.h>
int main()
{
int weight = 0;
int high = 0;
scanf("%d %d",&weight,&high);
float BMI = weight/(high/100.0)/(high/100.0);
printf("%.2f\n",BMI);
return 0;
}
#include <stdio.h>
int main()
{
double r = 0.0;
double v = 0.0;
scanf("%lf",&r);
v = 4/3.0 * 3.1415926 * r * r * r;
printf("%.3lf",v);
return 0;
}
#include <stdio.h>
int main()
{
int arr[4]={0};
int i = 0;
while(i < 4)
{
scanf("%d",&arr[i]);
i++;
}
int max = arr[0];
i = 1;
while(i<4)
{
if(arr[i]>max)
{
max = arr[i];
};
i++;
}
printf("%d\n",max);
return 0;
}
#include <stdio.h>
int main()
{
printf("printf(\"Hello world!\\n\");\n");
printf("cout << \"Hello world!\" << endl;\n");
return 0;
}