//题目37:将一个数组逆序输出。用第一个与最后一个交换。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//分析:逆序输出,就会想到使用递归可以轻易实现,但是这次我就用for循环逆序打印吧
#define N 10 //这是为了以后动态数组的使用
void main(){
int a[N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printf("原数组\n");
for (int *p = a; p < a + N; p++)
{
printf("%5d",*p);
}
printf("\n逆序打印\n");
//判断数组长度是偶数,还是奇数,好决定怎么调换
int temp = 0;
//if ((N + 1) % 2)
//{
// //奇数
//}
//else{
// //偶数
//}
//我可以在for中加一个判断,就不用循环2次
for (int i = 0; i < (N + 1) / 2; i++)
{
if (a[i] != a[N - i - 1])//判断是数组长度奇数,还是偶数的区别
{
temp = a[i];
a[i] = a[N - i - 1];//N是10,a[0]=a[9]
a[N - i - 1] = temp;
}
}
for (int *p = a; p < a + N; p++)
{
printf("%5d", *p);
}
system("pause");
}
![]()
//题目38:取一个整数a从右端开始的4~7位。
#include<stdio.h>
#include<stdlib.h>
//分析:题目的意思是 例如 0011 1010 获取0--011 1--010 获取中间的这四位的值
//获取中间这四位,我们可以先通过与操作,将其他几位置0,再通过移位操作,获取值
void main(){
unsigned char a = 58; // 即0011 1010
unsigned char b = 120;// 构造0111 1000 用来将其他位置0,需要的位不变
unsigned char c = a&b;//得到0011 1000
unsigned char d = c >> 3;//右移 3位 0000 0111 得到结果是7
printf("\n得到的结果是%d\n",d);
system("pause");
}
![]()
//题目39:打印出杨辉三角形(要求打印出10行如下图)
//1
//1 1
//1 2 1
//1 3 3 1
//1 4 6 4 1
//1 5 10 10 5 1
#include<stdio.h>
#include<stdlib.h>
//分析:使用二维数组解决,杨辉三角,例如: a[2][1]=a[1][0]+a[1][1];
void main(){
int a[6][6] = { 1 };
//赋值
for (int i = 1; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
if (j==0)
{
a[i][j] = 1;
}
else{
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
}
//打印
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
if (a[i][j]!=0)
{
printf("%5d", a[i][j]);
}
}
//换行
printf("\n");
}
system("pause");
}
![]()