作业:
1. 一维数组冒泡
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int *func(int *a);
int i,j;
int main(int argc, char *argv[])
{
int a[10];
srand(time(NULL));
for(i=0;i<10;i++)
{
a[i]=rand()%51;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
puts(" ");
printf("************************\n");
func(a);
for(i=0;i<10;i++)
printf("%d ",a[i]);
puts(" ");
return 0;
}
int *func(int *a)
{
for(j=0;j<10;j++)
for(i=0;i<9;i++)
{
if(a[i]<a[i+1])
{
a[i]^=a[i+1];
a[i+1]^=a[i];
a[i]^=a[i+1];
}
}
return a;
}
hqyj@ubuntu:~$ cd 4.13
hqyj@ubuntu:~/4.13$ gcc 一维数组冒泡.c
hqyj@ubuntu:~/4.13$ ./a.out
15 33 45 10 7 16 13 34 34 19
************************
45 34 34 33 19 16 15 13 10 7
hqyj@ubuntu:~/4.13$
2. 二维数组转置后冒泡
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int test1(int a[][5],int b[][3]);
int test2(int (*b)[3]);
int i,j;
int main(int argc, char *argv[])
{
int a[3][5],b[5][3];
srand(time(NULL));
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
a[i][j]=rand()%101;
}
}
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
printf("%-3d ",a[i][j]);
}
puts(" ");
}
printf("*******************\n");
test1(a,b);
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{
printf("%-3d ",b[i][j]);
}
puts(" ");
}
printf("**********************\n");
test2(b);
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{
printf("%-3d ",b[i][j]);
}
puts(" ");
}
return 0;
}
int test1(int a[][5],int b[][3])
{
for(i=0;i<3;i++)
for(j=0;j<5;j++)
b[j][i] = a[i][j];
return 0;
}
int test2(int (*b)[3])
{
for(i=0;i<15;i++)
for(j=0;j<14;j++)
if(*(*b+j)<*(*b+j+1))
{
*(*b+j)^=*(*b+j+1);
*(*b+j+1)^=*(*b+j);
*(*b+j)^=*(*b+j+1);
}
return 0;
}
hqyj@ubuntu:~/4.13$ gcc 二维数组先转置再排序.c
hqyj@ubuntu:~/4.13$ ./a.out
83 31 45 74 72
56 30 54 85 28
29 5 35 87 59
*******************
83 56 29
31 30 5
45 54 35
74 85 87
72 28 59
**********************
87 85 83
74 72 59
56 54 45
35 31 30
29 28 5
3. 指针实现字符串大小字母换小写,小写换大写,字符串逆序
#include <stdio.h>
#include <string.h>
char func(char *p);
char tmd(char *p);
int main(int argc, char *argv[])
{
char a[10] ;
scanf("%s",a);
//gets(a);
func(a);
printf("%s\n",a);
tmd(a);
printf("%s\n",a);
return 0;
}
char func(char *p)
{
while(*p!='\0')
{
if(*p>='a'&&*p<='z')
{
*p=*p-32;
}
else
{
*p=*p+32;
}
p++;
}
return 0;
}
char tmd(char *p)
{
int len;
len=strlen(p);
char *q=p+len-1;
while(p<q)
{
*p^=*q;
*q^=*p;
*p^=*q;
p++;
q--;
}
return 0;
}
hqyj@ubuntu:~/4.13$ gcc 大小写互换,逆序.c
hqyj@ubuntu:~/4.13$ ./a.out
asSA
ASsa
asSA