for循环
for循环其实本质上与while循环本质上是一样的
标准形式
for(语句1:表达式的初始化;语句2:测试条件;语句3:执行更新)
{
语句内容
}
关于for循环的结构
语句1是表达式是初始化,只会在程序开始的时候执行一次
语句2是判断循环的条件,变量根据是否满足循环的条件来判断是否进入循环表达式,其实就是表达式为真(或非零),执行循环一次
语句3是执行更新,每进入for循环一次之后就会执行更新,然后再语句2中进行判断,判断是否能够进入循环
//利用for循环来创建一个立方
//效果是一个如同表格的效果
//1-5的立方就足够了,用i来表示循环变量
//在英语中cubed表示立方的意思
#include<stdio.h>
#include<windows.h>
int main()
{
int i;
printf(" n n cubed\n");
for (i = 1; i < 6; i++)
{
printf(" %d %d\n", i, iii);
}
system(“pause”);
return 0;
}
用for循环做了一个递减计数器
//用for循环来做一个递减计数器
//倒数之后,用we have ignition!!
//此处我不给for 循环划定范围,观察结果
//创建一个i来当做循环变量
#include<stdio.h>
#include<windows.h>
int main()
{
int i;
for (i = 1; i < 6; i++)
printf("%d seconds\n", 6 - i);
printf(“we have igniton!!!\n”);
system(“pause”);
return 0;
}
调试运行的结果如下:
//由上述程序可以看出for循环语句与if语句在不加大括号,确定其作用范围的情况之下,都是默认将其紧挨着的语句包含在它的作用范围之中.所以在使用这些条件语句和循环语句时注意使用{}来确定代码的作用范围,也方便阅读
//for循环的变种
//#include<stdio.h>
//#include<windows.h>
//int main()
//{
// for (;?;
// printf(“hehe!!”);
// system(“pause”);
// return 0;
//}
//一道练习题
//#include<stdio.h>
//#include<windows.h>
//int main()
//{
// int i = 0;
// int k = 0;
// for (i = 0; k = 0; i++, k++)
// k++;
// return 0;
//}
关于这道题中for循环的次数
因为判断for循环的次数是根据语句2来判断,当语句2成立或者为非0是循环1次,因为这个语句中k=0,所以for循环的次数为0次.
** //编写代码,演示多个代码从两边移动,向中间会和
//内容为 hello world keep coding
//从两边逐渐由#号变为上面所提到的内容
//创建两个字符串,依次进行交换
//求数组长度的函数为strlen函数,因为是下标,所以要-1
//要使用strlen函数就需要加上头文件,为include<string.h>
//交换的规律为右边依次交换,左边依次交换
//用一个Sleep函数来让图形一个一个出现
//注意此处的Sleep中的S要大写
//sleep(1000)表示每隔1000ms就循环一次,即1s
//算法的主体部分
#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
char arr1[] = “hello world keep coding”;
char arr2[] = “#######################”;
int left = 0;
int right = strlen(arr1) - 1;//这个下标对于的为!
while (left < right)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right–;
printf("%s\n", arr2);//%s表示的是输出字符串
}
system(“pause”);
return 0;
}
我们可以看到stcmp函数的功能就是比较两个字符串数组的内容,它的比较方式是满足字典序的方式的,就是依次按照下标来比较两个字符串数组的内容是否相等.
此函数比较每一个字符串的每一个字符,直到它们相等,或者直到空字符.
比较规则 <0 不匹配的第一个字符比较之后其在字符串1中的值低于其在字符串2中的值
=0 不匹配的第一个字符比较之后其在字符串1中的值等于其在字符串2中的值
>0 不匹配的第一个字符比较之后其在字符串1中的值大于其在字符串2中的值
注意:此处的比较规则遵循ASCII码(美国信息交换标准代码)的比较规则
//创建一个登陆系统
//当用户输入的内容与系统所需要的内容一致时,显示"登陆成功"
//当用户输入的内容三次与系统所需要的内容不一致时,显示"密码输入错误三次,禁止登陆"
//创建一个数组来保存,系统的密码.创建一个数组,来保存用户输入的密码
//不能直接用直接比较两个字符串的内容
//需要依次比较字符数组中的没一个的内容
//需要使用到strcmp函数,用来依次比较两个数组中字符串的内容
//如果两个字符分不出大小,依次比较下一个字符
//具体的内容让我们进行查询
#include<stdio.h>
#include<windows.h>
int mian()
{
int i = 0;
for (; i < 3; i++)
{
char password[1024] = { 0 };//此处为创建一个字符串数组,先将它们的初值保存为0
printf(“请输入密码:\n”);
scanf_s("%s", &password,20);//输入为字符类型
if (strcmp(password, “556644”) == 0)//这儿必须写==0,具体可以看strcmp函数的判定规律
{
printf(“登陆成功!!!\n”);
break;
}
}
if (i == 3)
{
printf(“登陆次数超过三次,禁止登陆!!”);
}
else
{
printf(“请继续操作.”);
}
system(“pause”);
return 0;
}
出口条件循环 do while 语句
while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试的条件,所以极有可能不执行循环语句内容,c语言还有出口条件循环,即do while语句,即在每次循环之后再来检查是否循环的条件,这样保准了程序至少循环一次
//计算n的阶乘
//用do while的形式
//关于函数传参的问题
//写函数时要确定有几个参数,最后实参传递进来
#include<stdio.h>
#include<windows.h>
int factor(int x)
{
int result = 1;
int i = 1;
for (i = 1; i <= x; i++)
{
result *= i;
}
return result;
}
int main()
{
int i;
int result;
printf(“请输入你要计算阶乘的数:\n”);
scanf_s("%d", &i);
result = factor(i);
printf(“这个数的阶乘为%d\n”, result);
system(“pause”);
return 0;
}
#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
int i;
int find;
printf(“请输入一个数我们来遍历数组:”);
scanf_s("%d", &find);
int arr1[] = { 1,2,3,4,5,6,7 };
for (i = 0; i <= sizeof(arr1)/sizeof(arr1[0]); i++)
{
if (find == arr1[i])
{
printf(“找到了,这个数为%d”, arr1[i]);
break;
}
}
if (i > sizeof(arr1) / sizeof(arr1[0]))
{
printf(“没找到!!”);
}
system(“pause”);
return 0;
}
//折半法查找