#include <stdio.h>#define N 8int main() {int i;int j;int k;---------------------------------------------------------| | | | | |---------------------------------------------------------return 0;}
#include<stdio.h>#define N 8 //flexibleint main(){int i;int j;int k;for(i=1;i<=N;i++) //i-->*..*..*..{for(j=1;j<=i;j++)//j-->*..{printf("*");for(k=0;k<i-1;k++)//k-->..printf(".");}printf("\n");}return 0;}
ps:有提示的i ,j,k 分析知这三个变量来控制三个循环 (i-->*..*..*.. j-->*.. k-->.. ) 控制好格式就好那个宏(N)也不错
2.完成程序,实现对数组的降序排序
#include <stdio.h>void sort( );int main(){int array[]={45,56,76,234,1,34,23,2,3}; //数字任//意给出sort( );return 0;}void sort( ){____________________________________| |------------------------------------
}me:
#include<stdio.h>void sort();
int array[]={45,56,76,234,1,34,23,2,3};//数字任意给出int N= sizeof(array) /sizeof(int);int main(){sort();return 0;}void sort(){int i,j;int tem;for(i=0;i<N;i++)for(j=i+1;j<N;j++){if(array[j]>array[i]){tem=array[i];array[i]=array[j];array[j]=tem;}/* printf(" %d ",array[i]);*/}for(j=0;j<N;j++)printf(" %d ",array[j]);
}或
void sort(int *array,int num)
{
int temp;
for(int i=0;i<num-1;i++)
for(int j=i+1;j<num;j++)
if (array<array[j])
{
temp=array;
array=array[j];
array[j]=temp;
}
}
ps:我搜了下原题就是这样的,sort();函数对array()数组排序,题目的数组又不是全局变量,而且sort();也没有参数传递给它 哥哥呀 怎么排序?对数组的递增,递减排序,一般都拿冒泡了
#include <stdio.h>int Pheponatch(int);int main(){printf("The 10th is %d",Pheponatch(10));return 0;}int Pheponatch(int N){--------------------------------| || |--------------------------------}
#include <stdio.h>int Pheponatch(int);int main(){printf("The 10th is %d\n",Pheponatch(10));return 0;}int Pheponatch(int N){if(N==1||N==2) return 1;elsereturn (Pheponatch(N-1)+Pheponatch(N-2));
}
该题考查同学们对递归算法的认识程度,在这里我们采用迭代算法,优点是程序运行效率高,而且不用担心堆栈溢出,在运算值大的情况下比递归算法可以提高上万倍的速度,比如同样计算30,递归算法用时
0.019s,而迭代算法则只用了0.003s,可见是递归算法的八分之一,值更大时这种越明显。缺点是程序比较不容易懂。有兴趣的可以参见《C和指针》127页,具体程序如下:
递归法:
#include
int Pheponatch(int);
int main()
{
printf("The 10th is %d",Pheponatch(30));
return 0;
}
int Pheponatch(int N)
{
if(N<=2)
return 1;
return Pheponatch(N-1)+Pheponatch(N-2);
}
迭代法:
#include
int Pheponatch(int);
int main()
{
printf("The 10th is %d",Pheponatch(30));
return 0;
}
int Pheponatch(int n)
{
long result;
long previous_result;
long next_older_result;
result=previous_result=1;
while(n>2)
{
n-=1;
next_older_result=previous_result+result;
previous_result=result;
result=next_older_result;
}
return result;
}
#include <stdio.h>#include <malloc.h>typedef struct{TNode* left;TNode* right;int value;} TNode;TNode* root=NULL;void append(int N);int main(){append(63);append(45);append(32);append(77);append(96);append(21);append(17); // Again, 数字任意给出}void append(int N){TNode* NewNode=(TNode *)malloc(sizeof(TNode));NewNode->value=N;if(root==NULL){root=NewNode;return;}else{TNode* temp;temp=root;while((N>=temp.value && temp.left!=NULL) || (N<temp. value && temp.right!=NULL)){while(N>=temp.value && temp.left!=NULL)temp=temp.left;while(N<temp.value && temp.right!=NULL)temp=temp.right;}if(N>=temp.value)temp.left=NewNode;elsetemp.right=NewNode;return;}}
#include <stdio.h>#include <malloc.h>typedef struct Node{int value;struct Node * left;struct Node * right;}TNode;TNode* root=NULL;void append(int N);int main(){append(63);append(45);append(32);append(77);append(96);append(21);append(17); // Again, 数字任意给出}void append(int N){TNode* NewNode =(TNode *)malloc(sizeof(TNode));NewNode->value=N;NewNode->left=NULL;NewNode->right=NULL;if(root==NULL){root=NewNode;return;}else{TNode* temp;temp=root;while((N>=temp->value && temp->left!=NULL) || (N<temp->value && temp->right!=NULL)){while(N>=temp->value && temp->left!=NULL)temp=temp->left;while(N<temp->value && temp->right!=NULL)temp=temp->right;}if(N>=temp->value)temp->left=NewNode;elsetemp->right=NewNode;return;}}ps;
存越界,最后崩溃(注意结束条件是 temp->left!= NULL 或 temp->right!=NULL)。
更多
ps; 结 构体可以 包含指向自己的指针吗?结构标签(struct tag)与类型定义(typedef)
问题1:两种声明有什么不同?
struct x1 {...};
typedef struct {...} x2;
答:第一种形式声明了一个结构标签,第二种声明了一个“类型定义”。主要区别在于第二种声明更抽象一些, 用户不必知道它是一个结构,且在声明它的实例时也不需要使用struct关键字。例如:
x2 b;//是OK的
但是使用结构标签声明的结构就必须用这样的形式定义:
struct x1 a;
也可以同时使用
typedef struct x1 {...} a;
尽管有些晦涩,但为标签和类型定义使用同样的名称是合法的,因为它们处于独立的命名空间中。
#include<stdio.h>
struct a
{ int i;
};
typedef struct{int i;} a;
int main()
{
struct a b;
a c;
return 0;
}
问题2:结构体可以包含自己的指针吗?
此时结构体的定义体还没有结束呀,就像
struct LinkWindow {
Screen window;
LinkWindow * next;
LinkWindow * prev;
};
但如果定义一个结构体像下面的就错了
struct LinkWindow {
Screen window;
LinkWindow next;
LinkWindow prev;
};
因为在结构体定义体完之前是不能具有自身类型的数据成员的,可是第一个例子之所以通过了是因为
定义的结构体名一出现就可以认为该结构体已声明,声明后就可以定义指向该类型的指针及引用,所以可以
定义指向自身的指针
当然可以,但是如果要使用typedef,则有可能产生问题。
例如:
typedef struct{
char *item;
NODEPTR next;//错误,不能在定义typedef类型之前使用它
}*NODEPTR;
版本1:
typedef struct node {
char *item;
struct node *next;
}*NODEPTR;
版本2:
struct node {
char *item;
struct node *next;
};
typedef struct node *NODEPTR;
运行环境:VC6.0
例子程序:tets.c
*************************************************************************************************
#include <stdio.h>
struct x1 //x1为结构标签
{
int a;
int b;
};
typedef struct
{
int c;
int d;
}tx; //tx为类型定义
typedef struct node
{
char item;
struct node *next; //结构体中定义指向自己的指针
}NODEPTR;
/*
typedef struct node
{
char *item;
NODEPTR next; //不可以,不能在typedef类型之前使用它
}*NODEPTR;
*/
void main(void)
{
struct x1 s1; //不能用结构标签自动生成类型定义名: x1 s1
tx s2;
NODEPTR node1;
NODEPTR node2;
node1.next = &node2;
s1.a = 1;
s1.b = 2;
s2.c = 3;
s2.d = 4;
node1.item = 'x';
node2.item = 'y';
printf("s1.a:%d, s1.b:%d \n",s1.a,s1.b);
printf("s2.c:%d, s2.d:%d \n",s2.c,s2.d);
printf("%c, %c \n",node1.item, node2.item);
}
突然间发现这个文本编辑器可以粘贴图片了,以前都是上传,插入,不过 再加上 撤销 ,插入word 等功能就更好了