C语言正向05_作业练习

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;
}


上一篇 C语言05_正向基础
因特叁

因特叁管理员

动物世界

本月创作热力图

目录