1.输入N(不大于20)个单精度存入一维数组,用指针变量处理数组元素的方法将其逆序存放后在解出,N以键盘输入。
main() { float *p,s[20],t[20]; int n,i; printf("input string:"); scanf("%d",&n); for(i=0;i<n;i++) scanf("&f",&s[i]); p=s; for(i=n-1;i>=0;i--) printf("%f",*(p+i));
}
2.求3*5整数矩阵中的最大元素,最小元素,所有元素的平均值。(要求用指向二维数组首地址的指针变量二维数组排列方式处理二维数组元素) main() {int *p,*pmin,*pmax,i,j,a[3][5]; float average,sum=0; printf("input"); for(j=0;j<5;j++) for(i=0;i<3;i++) scanf("%d",&a[i][j]); p=&a[0][0]; pmin=p; pmax=p; {if(*pmax<*(p+j*3+i))pmax=p+j*3+i; if(*pmin>*(p+j*3+i))pmin=p+j*3+i; sum=sum+*(p+i*5+j); } p=&a[0][0]; for(i=0;i<3;i++) for(j=0;j<5;j++) sum=sum+*(p+i*5+j); average=sum/15; printf("%d",*pmax); printf("%d",*pmin); printf("%5.2f",average); } 3.有N个小孩子,按顺时针方向围成一个圆。老师指定从第一个小孩开始报数,按顺序1,2,3…… 数到M个小孩时,该小孩子退到圈外,然后从编号为M的下一个小孩子开始报数。如此重复下去,直到所有小孩都出列,求小孩的出列顺序。 1.用链表处理 2.N和M用键盘输入。 3.分别用3个函数创建一个链表的求解。完成的求解用链表输出小孩的出列顺序。 4.在主函数中调用上面的函数。 #include <stdio.h> #include <malloc.h>
struct node; typedef struct node NODE, *PNODE; struct node { int id; PNODE next; }; void FreeList( PNODE head ) { if( head->next == NULL ) free( head ); else FreeList( head->next ); }
void main() { int n,m; int i; PNODE head=NULL; PNODE sequence = NULL; PNODE prev,succ; PNODE temp;
printf("Input n and m:\n"); scanf("%d,%d",&n,&m);
head = (PNODE)malloc(sizeof(NODE)); head->id = 1; prev = head; for( i = 1; i < n; ++i) { succ = (PNODE)malloc( sizeof(NODE) ); succ->id = i + 1; prev->next = succ; prev = succ; } prev->next = head;
succ = head; while( succ->next!= succ ) { for( i = 1; i < m ; ++i) succ = succ->next; if( sequence == NULL ) sequence = succ; else { temp = sequence; while( temp->next != NULL ) temp = temp->next; temp->next = succ; } prev = succ; while( prev->next != succ ) prev = prev->next; prev->next = succ->next; succ->next = NULL; succ = prev->next; } succ->next = NULL; temp = sequence; while( temp->next != NULL ) temp = temp->next; temp->next = succ;
temp = sequence; while( temp != NULL) { printf( "%d\t", temp->id ); temp = temp->next; } }