大一C语言编程题

2025-04-18 04:20:21
推荐回答(2个)
回答1:

杨辉三角的那个题目,你自己都很明白了。。。完全可以自己做,这里给你点提示吧。。。
简单点,定义两个数组:
const int MAX=1000; //(大小根据需要你自己填)
int arrayA[MAX+1], arrayB[MAX+1]; //等程序编好调试通过了之后,记得回来思考一下为何这里要+1

然后初始化她们:
for(int i=0;i<=MAX; i++)
arrayA[i]=arrayB[i]=0;

然后从三角的第二层开始,先预设数字,由于第一层就一个1,忽略了;从第二层开始:
arrayA[0]=arrayA[1]=1; //以后都是以arrayA为基础计算,然后把计算结果填入arrayB

无论哪个数组,第一个数字都是1,所以我们把arrayB的0号元素设为1,以后就不用再算它了。
arrayB[0]=1;

让用户输入一个数字,标识我们计算多少层(1~MAX):
int number;
printf("Please enter a number (1~%d): ", MAX);
scanf("%d", &number);

检查number,如果不在1~MAX范围内,就提示错误并退出:
if (number<1 || number>MAX){
printf("Invalid number!\n");
exit(-1);
}

如果是number为1,则打印一行结果退出;
printf("1\n");
if(number==1) exit(0);

如果是number为2,则打印两行结果退出;
printf("1 1\n");
if(number==2) exit(0);

对于其他情况,就需要计算了,现在计算开始:
int i, layer;
//这里的计算是迭代进行的,因此根据层数可能要计算多次
for (layer=2;layerfor (i=0;i0;i++){
//遍历整个arrayA,从arrayB的第二个位置开始记入计算结果
arrayB[i+1]=arrayA[i]+arrayA[i+1];
}
//计算完毕之后,我们再把结果复制到arrayA
for (i=0;i0;i++){
arrayA[i]=arrayB[i];
}
//最后再把这一层的数据输出
for (i=0;i0;i++){
printf("%d ", arrayA[i]);
}
}

基本都在这里了(当然,也别指望把代码靠到一起就能直接运行,尽管已经没差几行了),动手试试吧,希望楼主不要辜负了一个热心人的心意^_^

如果你能把a作出来,基本上,用点心思就可以把b解决了,如果对于指针不太明白,可以先象a一样定义个全局数组存储数据,排序和查找两个函数,都直接操作这个数组,等程序调通了,再考虑把它改成指针的方式。

加油!

回答2:

修改了一下,更加perfect了.
其中,杨辉三角长度, 数据查找中数组长度都是可变的.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
杨辉三角:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include
#define length 15//可以定义任意长度的杨辉三角
int main()
{
int triangle[length][length];
int l, sub;
for (l = 0; l < length; l++){
triangle[l][0] = 1;
triangle[l][l] = 1;
}//三角两边赋值1
for (l = 1; l < length; l++){
for (sub = 1; sub < l; sub++)
triangle[l][sub] = triangle[l-1][sub-1] + triangle[l-1][sub];
}//构造杨辉三角
for (l = 0; l < length; l++){
for (sub = 0; sub <= l; sub++)
printf("%4d ", triangle[l][sub]);
printf("\n");
}//输出杨辉三角
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
冒泡和折半查找:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include
#define finished 1;
#define unfinished 0;
void BubbleUp(int a[])
{//冒泡
int temp;
int ok = unfinished;
int i, j;
for (i = 1; i < 10 && !ok; i++){
ok = finished;//排序完成
for (j = 0; j < 10 - i; j++){
if (a[j] > a[j+1]){
ok = unfinished;//排序未完成
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
int Search(int a[], int temp, int len)
{//折半查找
int low = 0, mid, high = len;
while (low <= high){
mid = (low + high) / 2;
if (a[mid] == temp)
return mid;
else if (temp < a[mid])
high = mid;
else low = mid;
}
return -1;
}
int main()
{

int temp;
int sub;
int position;
int LENGTH = 10;//定义任意长度的数组
int Array[LENGTH];

printf("Please input %d numbers:\n", LENGTH);
for (sub = 0; sub < LENGTH; sub++)
scanf("%d", &Array[sub]);

BubbleUp(Array);//排序

printf("\nPlease input the number you want to search\n");
scanf("%d", &temp);
position = Search(Array, temp, LENGTH);
if (position != -1)//查找成功
printf("The number you searched is in Array[%d]", position);
else //没有找到
printf("The number you searched is not in Array");
return 0;
}