C语言题

1、有n个整数的数组,使其前面各数顺序向后移m个位置,最后m个数移到最前面

 1 /*##################################################################################################################
 2 #
 3 # 有n个整数的数组,使其前面各数顺序向后移m个位置,最后m个数移到最前面
 4 #
 5 ###################################################################################################################*/
 6 
 7 #include "stdio.h"
 8 #include "stdlib.h"
 9 
10 #define N 10
11 
12 void move(int *a, int n, int m)
13 {
14     int *p,*q;//*p、*q指针变量
15     int temp;//零时变量
16 
17     for(p=a+n-m; p<a+n; p++)
18     {
19         temp=*p;
20 
21         for(q=p-1; q>=p+m-n; q--)
22             *(q+1)=*q;
23 
24         *(q+1)=temp;
25     }
26 
27 }
28 
29 
30 int main(void)
31 {
32     int a[N];
33     int m,i;
34 
35     printf("请输入%d个数:\n",N);
36     for(i=0; i<N; i++)
37         scanf("%d",&a[i]);
38 
39     printf("请输入需要向右移动的位数:");
40     scanf("%d",&m);
41 
42     move(a, N, m);
43 
44     printf("移动位置后数组元素的顺序:");
45     for(i=0;i<N;i++)
46         printf("%5d",a[i]);
47 
48     system("pause");
49 
50     return 0;
51 }
View Code

 2、两个有序数组a和b,合并成为一个有序数组

  1 /*##################################################################################################################
  2 #
  3 #    两个有序数组a和b,合并成为一个有序数组
  4 #
  5 ###################################################################################################################*/
  6 
  7 #include "stdio.h"
  8 
  9 #define M 5
 10 #define N 6
 11 
 12 //--求两个数中较小的数--//
 13 int min(int a,int b)
 14 {
 15     if(a<b)
 16         return a;
 17     else
 18         return b;
 19 }
 20 
 21 
 22 //--数组输入函数--//
 23 void Input(int *p, int n)
 24 {
 25     int i=0;
 26     for(i=0;i<n;i++)
 27         scanf("%d",p+i);
 28 }
 29 
 30 //--数组输出显示函数--//
 31 void Output(int *p, int n)
 32 {
 33     int i=0;
 34 
 35     for(i=0;i<n;i++)
 36         printf("%3d",*(p+i));
 37 
 38     printf("\n");
 39 }
 40 
 41 //--数组合并排序函数--//
 42 int combin(int *a,int *b,int *c)
 43 {
 44     int *p1,*p2,*p3,n=0;
 45 
 46     for(p1=a,p2=b,p3=c;p1<a+M && p2<b+N;)
 47     {
 48         if(*p1<*p2)
 49         {
 50             *p3++=*p1++;//将较小的放在p3中
 51             n++;
 52         }
 53         else
 54         {
 55             *p3++=*p2++;
 56             n++;
 57         }
 58 
 59 
 60         //退出时,若还没放进去的,放进去
 61         while(p1<a+M)
 62         {
 63             *p3++=*p1++;
 64             n++;
 65         }
 66         while(p2<b+N)
 67         {
 68             *p3++=*p2++;
 69             n++;
 70         }
 71     }
 72     return n;
 73 }
 74 
 75 
 76 
 77 //--主函数--//
 78 int main(void)
 79 {
 80     int a[M],b[N],c[M+N],n;
 81 
 82     printf("请输入数组a的%d个元素:\n",M);
 83     Input(a,M);
 84 
 85     printf("请输入数组b的%d个元素:\n",N);
 86     Input(b,N);
 87 
 88     printf("数组a的元素:");
 89     Output(a,M);
 90 
 91     printf("数组b的元素:");
 92     Output(b,N);
 93 
 94     n=combin(a,b,c);
 95 
 96     printf("数组c的元素:");
 97     Output(c,n);
 98 
 99     return 0;
100 }
View Code

 3、输入任意5个国家的名字,按由小到大的顺序排序

 1 //--输入任意5个国家的名字,按由小到大的顺序排序
 2 
 3 #include "stdio.h"
 4 #include "string.h"
 5 
 6 #define M 5    //5个国家
 7 #define N 10   //每个的字符空间
 8 
 9 int main(void)
10 {
11     char s[M][N],str[M];
12     int i,j;
13 
14     for(i=0;i<M;i++)//依次输入
15     gets(s[i]);
16  
17     //冒泡法
18     for(i=0;i<M-1;i++)//首先从第0个开始,依次和它后面的进行比较,最后一个因为后面没有了,所以不算
19         for(j=i+1;j<M;j++)//上面那个的后面的
20     {
21         if(strcmp(s[i],s[j])>0)
22         {
23            strcpy(str,s[i]);
24            strcpy(s[i],s[j]);
25            strcpy(s[j],str);
26          }
27      }
28 
29      for(i=0;i<M;i++)//输出
30         puts(s[i]);
31 
32      return 0;
33 
34 }
View Code

 

posted @ 2015-07-16 10:56  如风轻逸  阅读(168)  评论(0编辑  收藏  举报