您的位置:首页 > 其它

一月总结

2017-10-29 17:43 169 查看
数组

//数组不做越界检查
void f(int a[3][2])
{
a[1][2] = 100;
}

void main()
{
int a[3][2] =
{
1,2,
3,4,
5,6
};
printf("\n%d", a[1][2]);
//要取第三行第二列,但是数组没有第三行第二列怎么办.
//把它当做一维数组理解,a[i][j]对应的就是一维数组中的下标为:行数 * 列数 + j 的元素
//所以a[1][2] = a[1*2 + 2] = a[4],就是a[2][0],就是要取数组中的第五个元素5.
f(a);
printf("\n%d", a[1][2]);
getchar();
}


二维数组如果没有数,按一位数组算a[1][2] = a[1*2 + 2] = a[4],就是a[2][0],就是要取数组中的第五个元素5.

数组二分查找法

void main()
{
int a[20], head = 0, end = 20, mid = (head + end) / 2, key, i;   //head表示头,end表示尾,mid表示中间,key代表我们输入的数
for (i = 0; i < end; i++)
{
a[i] = i + 1;
printf("%d  ", a[i]);   //初始化数组后,数组元素呈从小到大的造型排列
}
printf("\n请任意输入一位数字:  ");
scanf("%d", &key);
getchar();
while (key != a[mid])
{
key > a[mid] ? (head = mid + 1) : (end = mid - 1);   //跟中间位置比,大了,就把前面的全部砍掉。小了,就把后面的全部砍掉。
mid = (head + end) / 2;  //每次缩小范围后,都要重新定位中间位置,为下一次的比较做准备
if (head == end && key != a[mid])     //当砍到只剩一位时,说明没有找到。
{
printf("数组中不存在您输入的数字\n");
getchar();
return;    //找不到就跳出整个函数,否则就是死循环了。
}
}
printf("您要找的数字在数组中的下标是%d    ", mid);   //如果程序能运行到这里,说明找到了。
getchar();
}


不断的取中间值,直到找到为止;遇到除不净的时候取中间值如:11/2中间值就是6

矩阵旋转
void main()
{
int a[5][5], b[5][5], i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
a[i][j] = 10 + rand() % 91;
//b[j][4 - i] = a[i][j];    //顺90度
//b[4-i][4 - j] = a[i][j];  //180度
//b[4 - j][i] = a[i][j];    //逆90度
b[4 - i][j] = a[i][j];    //上下镜像翻转
//b[i][4 - j] = a[i][j];      //左右镜像翻转

printf("%5d", a[i][j]);
}
printf("\n");
}
//printf("\n\t顺时针旋转90度\n\n");
//printf("\n\t顺时针旋转180度\n\n");
//printf("\n\t逆时针旋转90度\n\n\n");
printf("\n\t上下镜像翻转\n\n");
//printf("\n\t左右镜像翻转\n\n");

for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%5d", b[i][j]);
}
printf("\n");
}
getchar();
}


//杨辉三角

void main()
{
int a[10][10] = { 0 },i,j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (j == 0)
{
a[i][j] = 1;
}
if (j > 0 && i >= j)
{
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}  //核心代码
if (i >= j)
{
printf("%5d", a[i][j]);
}
}
putchar('\n');
}
getchar(0);
}


函数

运用函数递归调用,打印100加到1的和
int add(int num)
{
//printf("\n%d", num);
if (num == 1)
{
return 1;
}
else
{
return num + add(num - 1);  //4 + add(3) // 4 + 3 + add(2) //4 + 3 + 2 + add(1)//4 + 3 + 2 + 1;
}
}

void main()
{
int n;
scanf("%d", &n);
getchar();
printf("\n\n从1加到%d的结果是%d", n, add(n));
getchar();
}


运用函数递归调用,打印1加到100的和
int add(int num,int i)
{
if (num == i)
{
return num;
}
else
{
return i + add(num,i+1);  //1 + add(5,2) //  1 + 2 + add(5,3) //1 + 2 + 3 +add(5,4) //1 + 2 + 3 +4 + add(5,5) //1 + 2 + 3 +4 + 5
}
}

void main()
{
int n;
scanf("%d", &n);
getchar();
printf("从1加到%d的结果是%d", n, add(n,1));
getchar();
}


编写一个函数,用于返回菲薄纳西数列
int fibonacci(int n)
{
int  a = 1, b = 1, sum = 0;
for (int i = 2; i < n; i++)
{
sum = a + b;
a = b;
b = sum;
}
return sum;
}

void main()
{
int n;
scanf("%d", &n);
getchar();
printf("sum = %d", fibonacci(n));
getchar();
}


循环

判断一个数是否为水仙花数
void checkNum(int a)
{
int g = a % 10;
int s = (a / 10) % 10;
int b = a / 100;
return (g*g*g + s*s*s + b*b*b == a) ? printf("\n%d是水仙话术", a) : NULL;
}

void main()
{
int i;
for (i = 100; i < 1000; i++)
{
checkNum(i);
getchar();
}


//判断质数
int checkPrimer(int num)
{
int i;
for (i = 2; i < num; i++)
{
if (num%i == 0)
{
return 0;
}
}
if (i == num && i != 1)
{
return 1;
}
return 0;
}

void main()
{
int a = 129;
checkPrimer(a) ? printf("%d是质数", a) : printf("%d不是质数", a);
getchar();
}


//习题9:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
void main()  //90 = 2 * 3 * 3 * 5
{
int num,i = 2,a = 0;
scanf("%d",&num);
getchar();
printf("\n%d = ",num);
while (num / i >= 1)
{
if (num % i == 0)
{
!a ? printf("%d", i) : printf(" * %d", i);
num /= i;
a++;
}
else
{
i++;
}
}

getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: