本人是个人的学习笔记,若有错误请指正
1.输入一个数,分解打印出它的因数乘积。如若输入的值是-125,输出 -125=-5*5*5 或 90=2*3*3*5
程序:
#include<math.h>
main(){
int i,n=90,r;
printf("%d=",n);
r=n;
for(i=2;i<sqrt(n);i++){
while(r%i==0){
printf("%d ",i);
r=r/i;
if(r>1)putchar('*');
}
}
2.选择排序法 时间复杂度 O(n^2)
其基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕.
第一次轮流:至少轮到第n-1个(0_n-2)——> i=0;i<=n-2 i<n-1
轮到第n个 也行(0_n-1)——> i=0; i<n
第二次:选取到最后一个 第n个(0_n-1) i=0; i<n
程序;
3.冒泡排序法 时间复杂度 O(n^2)
相邻两数两两比较,一共n-1次,进行交换。最终,最大的数在最右边(沉底),进行n-1次。每一趟都需要从第1位开始进行相邻两个数的比较。
第二重循环:两两比较,最大的往右边,1_n-1次— i=0;i<n-1
第二次进行的时候,最大的数沉底,不用进行,1_n-i-1次 i<n-i-1
程序:
4.将一个数组{},倒序输出
int main()
{
int i,j,t,n;
int a[]={8,6,5,4,7,1};//数字
n=sizeof(a)/sizeof(int); //个数
printf("倒序前");
shows(a,n); //打印
//左右两边互换,0_n-1,I_n-1
for(i=0,j=n;i<j;i++,j--){
t=a[j-1];
a[j-1]=a[i];
a[i]=t;
shows(a,n);//打印
}
printf("倒序后");
shows(a,n); //打印
system("pause");
return 0;
}
字符串倒序输出
int main()
{
int i,j,t,n;
char a[]="I LOVE YOU";//字符
n=strlen(a);//个数
printf("倒序前");
printf(" : %s\n",a);//打印
//交换左右两边字符串,两端向中间
// i< j
for(i=0,j=n;i<j;i++,j--){
t=a[j-1];
a[j-1]=a[i];
a[i]=t;
printf(" : %s\n",a);
//打印
}
printf("倒序后");
printf(" : %s\n",a);//打印
system("pause");
return 0;
}
5.二维数组的地址
二维数组的可以说成是由2个数组构成的,如下;
A[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
数组地址A
行数组名称 ( A[0]) 1 2 3 4 A+1地址
A[1] 5 6 7 8 A+2地址
A[2] 9 10 11 12 A+3地址
A[]+0 +1 +2 +3 地址
列数组为A[0]、A[1] 、A[2] *A=A[0] *(A+1)=A[1] *(A+2)=A[2]
行数组为A[0][0]、A[0][1]、A[0][2]、 A[0][3] A[0]存放首地址 A[0][j]=*(A[0]+j)
A[1][0] 、A[1][0]、A[1][0]、A[1][0] A[1]存放首地址
A[2][0]、A[2][0]、A[2][0]、A[2][0] A[2]存放首地址