分支语句
if
switch
单分支if
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int age = 10;
if(age<18)
printf("未成年\n");
return 0;
}
双分支if if else语句
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int age = 10;
if(age<18)
printf("未成年\n");
else
printf("成年");
return 0;
}
多分支if if else if语句
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int age=0 ;
printf("请输入年龄>:");
scanf("%d", &age);//这要是在%d后面加一个\n代码就不会执行.
if (age < 18)
printf("未成年\n");
else if(age>=18 && age<28)
printf("青年\n");
else if (age >= 28 && age < 50)
printf("壮年\n");
else if (age >= 50 && age < 80)
printf("老年\n");
else
printf("高龄老人\n");
return 0;
}
如果条件成立,要执行多条语句,应该使用代码块。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int age = 50;
if (age < 18)
{
printf("未成年\n");
printf("不能谈恋爱\n");
}
else
{
printf("成年\n");
printf("不能违法\n");
}
return 0;
}
悬空else问题
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)//执行完这一步之后直接出去.else和最近的if是一对
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
以上这个代码不会输出haha,啥也不输出:因为else只和最近的if匹配.
改正后的代码
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
这样会输出haha
判断一个数是奇数还是偶数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0;
printf("请输入一个数:");
scanf("%d", &a);
if (a % 2 == 1)
printf("这个数是奇数");
else
printf("这个数是偶数");
return 0;
}
请写出100以内的奇数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 100)
{
if (i % 2 == 1)
printf("%d\n", i);
i++;
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 1;
while (i <=100)
{
printf("%d\n", i);
i+=2;
}
return 0;
}
switch语句:常用于多分支
switch(整型表达式)//必须得是整型表达式
{
case 1://case后面必须得是整型常量表达式
;
break;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期天");
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
}
return 0;
}
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;//没有遇到break继续往下执行
case 2:
n++;
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++;
n++;
break;//这个break是用来跳出嵌套的switch
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
//m=5,n=3
循环语句
while
for
do while
while语法结构
while(表达式)
循环语句;
while打印1到10
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d\n", i);
i++;
}
return 0;
}
加break,可以跳出循环
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d\n", i);
i++;
}
return 0;
}
continue用法:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;//continue执行之后,下面的代码不会执行,会重新往上判断.
printf("%d\n", i);
i++;
}
return 0;
}
如果不想要某一个数,可以使用continue
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
i++;
if (i == 5)
continue;
printf("%d\n", i);
}
return 0;
}
getchar用法:用来接受键盘的输入字符
该函数的返回类型是int类型,返回值是用户输入字符的ASCII码值。
putchar用法:用来输出字符
#include <stdio.h>
int main()
{
int ch = getchar();
putchar (ch);//这个和下面的输出一样
printf("%c\n", ch);
return 0;
}
用来清除缓存区的代码
#include <stdio.h>
int main()
{
int ch = 0;
while((ch=getchar())!=EOF)//文件结束标志
putchar (ch);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int ch = 0;
int ret = 0;
char password[20] = {0};
printf("请输入密码:>");//输入密码,并存放在password数组中。
//比如输入123456,你会有一个“\n”,下面的getchar会读取到“\n”。“\n”的ASCII码是10.
scanf("%s", password);
printf("请确认(Y/N):>");
ret = getchar();//getchar作用是在缓冲区读取一个字符。这里读取的就是“\n”,“\n”=10.
if (ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
改正后:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char password{20}=0;
int ch =0;
int ret = 0;
printf("请输入密码:>");//输入密码,并存放在password数组中。
//比如输入123456,enter键后你会有一个“\n”,下面的getchar会读取到“\n”。“\n”的ASCII码是10.
scanf("%s", password);
getchar();//这个就把“\n”读取,下面的就能正常执行。
printf("请确认(Y/N):>");
ret = getchar();//getchar作用是在缓冲区读取一个字符。这里读取的就是“\n”,“\n”=10.
if (ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
上面这个代码只能解决一部分,如果完全解决就得让getchar读取到“\n”。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char password[20] = { 0 };
int ch = 0;
int ret = 0;
printf("请输入密码:>");//输入密码,并存放在password数组中。
//比如输入123456,你会有一个“\n”,下面的getchar会读取到“\n”。“\n”的ASCII码是10.
scanf("%s", password);
while ((ch = getchar()) != '\n')//如果读取不到'\n',可以一直循环。
{
;
}
printf("请确认(Y/N):>");
ret = getchar();//getchar作用是在缓冲区读取一个字符。这里读取的就是“\n”,“\n”=10.
if (ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
for循环
for(表达式1;表达式2;表达式3)
循环语句;
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。
for循环打印1-10
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)//这个地方不需要加;
{
printf("%d\n", i);
}
return 0;
}
for循环里面的表达式可以省略,如果判断省略,则恒为真。
打印100个呵呵
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int j = 0;
int i = 0;
for (i = 1; i <= 10; i++)
{
for (j = 1; j <= 10; j++)
printf("hehe\n");
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int k = 0;
int i = 0;
for (i = 0, k = 0; k = 0; i++, k++)
k++;
return 0;
}
啥也不执行,因为k=0是假,不进入循环。
do.....while()循环
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0;
do
{
printf("%d\n", i);
i++;
} while (i <= 10);
return 0;
}
计算n的阶乘
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 1;
int ret = 1;
while (i <= 5)
{
ret = ret * i;
i++;
}
printf("%d\n", ret);
return 0;
}
计算1-n的阶乘之和。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 1;
int ret = 1;
int sum = 0;
int n = 0;
scanf("%d", &n);
for (n = 1; n <= 3; n++)
{
ret = 1;
for (i = 1; i <= n; i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
上面代码的优化
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int ret = 1;
int sum = 0;
int n = 0;
scanf("%d", &n);
for (n = 1; n <= 3; n++)
{
ret = ret * n;
sum = sum + ret;
}
printf("%d\n", sum);
return 0;
}
在有序数组中找到7
第一种方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int k = 10;
int i = 0;
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
int b = sizeof(arr) / sizeof(arr[0]);//计算数组的元素个数
for (i = 0; i <= b; i++)
{
if (arr[i] == k)
{
printf("找到了,下标是:%d\n", i);
break;
}
if (i == b)
{
printf("没找到");
}
}
return 0;
}
第二种方法:二分查找算法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int k = 10;
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
int b = sizeof(arr) / sizeof(arr[0]);//计算数组的元素个数
int left = 0;
int right = b - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if ( arr[mid]>k)
{
right = mid - 1;
}
else if (arr[mid]<k)
{
left = mid + 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到");
}
return 0;
}
编写代码,演示多个字符从两边向中间移动。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "welcome to shandong";
char arr2[] = "$$$$$$$$$$$$$$$$$$$";
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//2是因为字符串后面有一个/0,这个也有一个下标。数组不会带\0,''会带。
int right =strlen(arr1);
int left = 0;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
left++;
right--;
}
return 0;
}
延时1s
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
char arr1[] = "welcome to shandong";
char arr2[] = "$$$$$$$$$$$$$$$$$$$";
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//2是因为字符串后面有一个/0,这个也有一个下标。数组不会带\0,''会带。
int right =strlen(arr1);
int left = 0;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//休息1s
left++;
right--;
}
return 0;
}
清空屏幕显示
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char arr1[] = "welcome to shandong";
char arr2[] = "$$$$$$$$$$$$$$$$$$$";
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//2是因为字符串后面有一个/0,这个也有一个下标。数组不会带\0,''会带。
int right =strlen(arr1);
int left = 0;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");//清空屏幕-cls函数
left++;
right--;
}
return 0;
}
编写代码实现用户登录场景,只能登陆三次,如果密码正确,则进入,否则退出;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
int i = 0;
char arr1[20] = { 0 };
for(i=0;i<3;i++)
{
printf("请输入密码:");
scanf("%s", &arr1);
//if (arr1 == "123456")//判断条件不对
if(strcmp(arr1,"123456")==0)//strcmp用来判断字符串是否相等;
{
printf("密码正确");
break;
}
}
if (i == 3)
{
printf("密码错误");
}
return 0;
}