C语言是结构化的程序设计语言
顺序结构
↓
选择结构
↓
循环结构
分支
if
在C/C++中,else 与最近的一个if匹配,无关乎是否对齐
swtich
break 跳出的是最近的swtich。 swtich可以嵌套使用
循环
while
在while循环中,break用于永久的终止循环
continue 跳过本次循环continue后面的代码,直接进入判断部分
for
do while
getchar() 从键盘获取一个数值
int ch = getchar();
putchar() 从键盘输出一个数值
while((ch = getchar())!= EOF)
{
putchar(ch);
}
//ctrl+z - getchar 读取结束
getchar();//清除缓存区
int tmp = 0;
while((tmp = getchar())!='\n')
{
;
}
//清除缓存区,清除多个字符
getchar()读取缓冲区 空格前的字符
for循环
尽量不在循环体内修改循环变量
建议for循环变量采用前闭后开(左闭右开), 整数
for变种:
for(;;) for循环的判断部分省略,就意味着 恒为真
do while 循环
应用场景:至少执行一次
//习题练习
//3.二分法:条件查找的数组必须有序。
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; //一组有序数列
int k = 7; //寻找 该位数
int sz = sizeof(arr) / sizeof(arr[0]); // 计算多少个元素
int left = 0; //左下标 //1
int right = sz-1; //右下标
while (left <= right) //2
{
// int mid = (left + right) / 2;//中间元素下标,该平均数计算存在一定的问题 3
//改进
int mid = left + (right - left) / 2; //若left>right 则left 减去一个数字,也达到平均数
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break; //4
}
}
if (left > right) //5
{
printf("找不到\n");
}
return 0;
}
//注意点:
// 1.一开始的 左右下标必须正确。
// 2.在循环判断的时候,是 <= ,必须要有 等于号。
// 3.求中间坐标,在循环以内。
// 4.找到后,记得break退出循环
// 5.存在找不到的情况,也需要写出。
4.二分法变换 练习
//编写代码,演示多个字符从两端移动,向中间汇聚。
//welcome to bit!!!
//#################
//w###############!
//we#############!!
//...
//welcome to bit!!!int main() { //int sz = sizeof(arr1) / sizeof(arr1[0]) - 2; sizeof计算出4个 //char arr[] = "abc" //[a b c \0] char arr1[] = "welcome to bit!!!"; 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); // left++; // right--; //} for (;left <= right;left++,right--) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s\n", arr2); Sleep(1000);//windows 延迟函数,单位是ms system("cls"); //windows清屏函数 } return 0; }
5.模拟用户登录情景,并且只登陆三次,密码正确提示,连续三次错误退出程序
只登陆三次——只循环三次
两个字符串比较 不可使用 == ,应该使用 strcmp 。
strcmp(字符串1,字符串2)
相等,返回0;
字符串1 < 字符串2 返回<0
字符串1 > 字符串2 返回>0
int main()
{
int i = 0;
char arr[20] = {0};
for (i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("%s", arr);
if (strcmp(arr, "abcde") == 0)
{
printf("密码正确\n");
break;
}
else
{
printf("密码错误,请重新输入\n");
}
}
//1,2
if (3 == i)
{
printf("密码错误,退出程序\n");
}
return 0;
}
综合
猜数字游戏
1.生成随机数—— rand(); #include<stdlib.h>
默认范围范围( 0~32767 )
在调用 rand()函数之前,需要使用 srand(unsigned int x);
srand()里面的整形数发生变化,则会生成不同的值
时间戳转换- srand里面的整形数可以用时间戳,一直变换
time_t time(time_t *timer) #include<time.h>
srand((unsigned int)time(NULL)); //整个工程中只调用一次
rand()%100+1 范围只可能 1-100 ;
任何数字%100 ,范围都是 0-100
2.猜数字
goto 无条件跳转,但是不可以调函数
system("shutdown -s -t 60"); //system是一个库函数,用来执行系统命令