1.编写一个函数,计算给定的一个矩阵(mXn)的转置矩阵,主函数输入给定矩阵并输出转置矩阵
#include<stdio.h>
#include"stdlib.h"
void main(){
int m,n,i,j;
int * * matrix;
printf("请输入所要求矩阵的维数(m*n):\n");
scanf("%d %d",&m,&n);
matrix=(int **)malloc(m*sizeof(int *));
printf("请输入矩阵数据:\n");
for(i=0;i<m;i++){
matrix[i]=(int *)malloc(n*sizeof(int));
for(j=0;j<n;j++){
int x=0;
scanf("%d",&x);
matrix[i][j]=x;
}
}
printf("原矩阵(m*n):\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d\t",matrix[i][j]);
}
printf("\n");
}
printf("转置矩阵(m*n):\n");
for(j=0;j<n;j++){
for(i=0;i<m;i++){
printf("%d\t",matrix[i][j]);
}
printf("\n");
}
}
2.编写一个函数abc用来建立一个带头结点的单向链表,新产生的节点总是插在链表的末尾,节点数域中的函数值从键盘输入,以字符“!”作为结束标志,单向链表的头指针作为函数值返回
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(List)
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node * next;
}List;
int size=0; //链表长度
List *p2=(List*)malloc(sizeof(List)); //存储尾节点
List *abc() //初始化单链表
{
List * head=NULL;
List * p1;
p1=(List*)malloc(LEN);
head=NULL;
printf("请输入要插入链表的数据(输入!结束):\n");
scanf("%c",&p1->data);
while(p1->data!='!')
{
size++;
if(size==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(List*)malloc(LEN);
scanf("%c",&p1->data);
}
free(p1);
p2->next=NULL;
return head;
}
void Print(List * head) //遍历链表并输出
{
List * p;
p=head;
if(head!=NULL){
printf("head->[%c]",p->data);
p=p->next;
if(p!=NULL){
do
{
printf("->[%c]",p->data);
p=p->next;
}while(p!=NULL);}
printf("\n");
}
}
void addNode(List * &head){ //增加节点
List * p1;
p1=(List*)malloc(LEN);
printf("输入要添加的节点(输入!结束):");
scanf("\n%c",&p1->data);
while(p1->data!='!'){
size++;
if(size==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(List*)malloc(LEN);
scanf("%c",&p1->data);
}
free(p1);
p2->next=NULL;
}
void main()
{
List * head;
head=abc();
Print(head);
addNode(head);
Print(head);
}
3.编写递归程序,计算两个正整数的最大公约数和最小公倍数
#include <stdio.h>
#include "stdlib.h"
int GetMaxGys(int m,int n)//递归求最大公约数
{
if (m==n){
return m;
}else if (m>n){
GetMaxGys(m-n,n);
}else{
GetMaxGys(n-m,m);
}
}
void main()
{
int a,b;
int maxgys,mingbs;
printf("%s\n","请输入两个数:");
scanf("%d%d",&a,&b);
maxgys=GetMaxGys(a,b);
mingbs=a*b/maxgys; //用最大公约数求最小公倍数
printf("%s","这两个数的最大公约数为:");
printf("%d\n",maxgys);
printf("%s","这两个数的最小公倍数为:");
printf("%d\n",mingbs);
system("pause");
}