
do while是所有循环中性能最好的 速度最快
while
for(表达式1;表达式2;表达式3)
{
//第一次执行 1 2 4 3
//第二次执行 2 4 3
}
交换俩个变量
1.可以用容器
2.可以相加 再减去另一个值得到对方
思考01
基于缓冲区溢出的HelloWorld
void HelloWord()
{
printf("Hello World");
getchar();
}
void Fun()
{
int arr[5] = {1,2,3,4,5};
arr[6] = (int)HelloWord;
}
12: int arr[5] = {1,2,3,4,5};
004010E8 mov dword ptr [ebp-14h],1
004010EF mov dword ptr [ebp-10h],2
004010F6 mov dword ptr [ebp-0Ch],3
004010FD mov dword ptr [ebp-8],4
00401104 mov dword ptr [ebp-4],5
13:
14: arr[6] = (int)HelloWord;
0040110B mov dword ptr [ebp+4],offset @ILT+10(HelloWord) (0040100f)
15:
16: }
返回地址被替换成了helloword
思考02
永不停止的HelloWorld
void Fun()
{
int i;
int arr[5] = {0};
for(i=0;i<=5;i++)
{
arr[i] = 0;
printf("Hello World!\n");
}
}
赋值的是a[5] = 0 这也是int变量的地址 所以执行到 = 5时候 i重新赋值为0 所以可以一直输出Hello World!
// C语言05_循环语句.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//C语言05_循环语句练习
//while篇
//=======================
//01、将两个变量的值交换.
void Fun01()
{
int x = 2;
int y = 3;
x = x + y;
y = x - y;
x = x - y;
printf("x=%d y=%d",x,y);
}
//02、将一个数组中的数倒序输出
void Fun02()
{
int arr[5]={1,2,3,4,5};
int i = 4;
while (i>=0)//运行条件
{
printf("arr[i] = %d\n",i,arr[i--]);
}
}
//03、找出数组里面最大的值,并返回
int Fun03()
{
int arr[5]={1,2,3,4,5};//海哥这里是r = arr[0] 然后比较每一个数 如果大于r就等于这个数
int i= 0;
int j =1;
int maxvalue = 0;//我这里的写法属于浪费资源的反面教材
while (j<5)
{
if (arr[i]>arr[j])
{
maxvalue = arr[i];
}
else
{
maxvalue = arr[j];
}
i++;
j++;
}
return maxvalue;
}
//03海哥写法
int Fun03hai()
{
int arr[5]={1,2,3,4,5};
int r = arr[0];
int i = 1;
while (i<5)
{
if (arr[i]>r)
{
r = arr[i];
}
i++;
}
return r;
}
//04、将数组所有的元素相加,将结果返回
int Fun04()
{
int arr[5]={1,2,3,4,5};
int i = 0;
int sumvalue = 0;
while (i<5)
{
sumvalue+=arr[i];
i++;
}
return sumvalue;
}
//05、将两个等长数组相同位置的值相加,存储到另外一个等长的数组中
void Fun05()
{
int arr[5]={1,2,3,4,5};
int arr1[5] = {6,7,8,9,10};
int value[5] = {0};
int i = 0;
while (i<5)
{
value[i] = arr[i]+arr1[i];
printf("value[%d] = %d\n",i,value[i]);
i++;
}
}
//06、写一个函数int prime(int x),如果x是素数返回值为1,否则返回0。
//素数:只能能被1和自身整除的数
int Fun06(int x)
{
int i=2;
int flag = 1;
while (i<x)
{
if (x%i==0)
{
flag = 0;
break;
}
i++;
}
return flag;
}
//07、俩俩比较数组的值,将最大的一个存储到数组的最后一个位置
void Fun07()
{
int arr[5]={2,5,1,4,0};
int i= 0;
int j =1;
int maxvalue = 0;
int temp= 0;
while (j<5)
{
if (arr[i]>arr[i+1])
{
temp = arr[i];
arr[i]=arr[i+1];
arr[i+1] = temp;
}
i++;
j++;
}
int k = 0;
while (k<5)
{
printf("arr[%d] = %d\n",k,arr[k]);
k++;
}
}
//08、编写程序实现一个冒泡排序的算法.
void Fun08()
{
int arr[5]={2,5,1,4,0};
int i =0;
int j =0;
int temp = 0;
while (j<4)//
{
i = 0;
while (i<4-j)//每次推一个最大的数到最后 5-j越界
{
if (arr[i]>arr[i+1])
{a
temp = arr[i];
arr[i]=arr[i+1];
arr[i+1] = temp;
}
i++;
}
j++;
}
int k = 0;
while (k<5)
{
printf("arr[%d] = %d\n",k,arr[k]);
k++;
}
}
//作业:判断数组是否是对称的,如果是返回1,不是返回0.
//{1,2,3,2,1} →对称返回 1;{1,2,3,4} →不对称返回 0。
int Fun09(int arr[],int n)
{
int left = 0;
int right = n-1;
while (left<right)
{
if (arr[left]!=arr[right])
{
return 0;
}
left++;
right--;
}
return 1;
}
int main(int argc, char* argv[])
{
int arr[5]= {1,2,3,2,1};
int value = Fun09(arr,5);
printf("%d\n",value);
getchar();
return 0;
}