知ing

C语言程序设计教程

杨路明 郭浩志 编 / 北京邮电大学出版社

红尘陌上 上传

查看本书

第7章 数组

1:  (1)  D

     (2)  A

     (3)  D

     (4)  B

     (5)  D

 

2:  (1) 1     5    4    4

                 6    7    8

                      2    3  

                           4

 

     (2) 6333

 

3:   1a[8]=data;   k>=0    a[k]=temp    break    k<=8

  

      (2) "%s"    str[i]<='Z'    c[str[i]+26-'a']++     i+'a'

 

4/*题目:求一组成绩的平均分数以及高于平均分的成绩。*/

#include<stdio.h>

#define max 100

void main()

{

float a[max],s=0,average=0;

int i,n;

printf("Please input N:   ");   /*输入要处理元素的个数*/

        scanf("%d",&n);

printf("\nPlease input %d ge shu:   ",n);  /*输入908592778062*/

for(i=0;i<n;i++)

{

     scanf("%f",&a[i]);

     s+=a[i]; 

}

average = s / n;

printf("\naverage = %.2f\n",average);  /*输出81.00*/

for(i=0;i<n;i++)

     if(a[i]>average)

   printf("%.2f  ",a[i]);  /*输出90.00 85.00 92.00*/

}

5/*题目:编写程序,输入一组整数,将他们排序后由小到大输出。*/

#include<stdio.h>

#define max 100

void main()

{

int a[max],j,i,k=0,t=0,n=0;

printf("Please input N:   ");   /*输入要处理元素的个数*/

        scanf("%d",&n);

for(i=0;i<n;i++)

     scanf("%d",&a[i]);

for(i=0;i<n-1;i++)   /*比较n-1*/

{ k=i;

for(j=i+1;j<n;j++)   /*每遍比较n-(i+1)*/

   if(a[k]>a[j])

k=j;

                if(k!=i)   /*元素排序前下标与排序后下标不符,则交换其值*/

{  t=a[i];

   a[i]=a[k];

   a[k]=t;

}

}

printf("\n\n");

for(i=0;i<n;i++)

   printf("%d  ",a[i]);

}

6/*题目:从键盘输入一个4x4的整数矩阵,以主对角线(\)为对称轴*/

/*将左下角元素中较大者替换右上角元素,并将右上角含对称轴输出。*/

#include<stdio.h>

#include<string.h>

void main()

{

int d[4][4]={{0,0,0,0}},i,j;

clrscr();

printf("\nPlease input 16 num:   ");

for(i=0;i<4;i++)

   for(j=0;j<4;j++)

      scanf("%d",&d[i][j]);

for(i=0;i<4;i++)

   for(j=0;j<4;j++)

      if(d[i][j]>d[j][i])  /*左下角元素大于右上角元素则交换*/

 d[j][i]=d[i][j];

for(i=0;i<4;i++)

{ printf("\n\n\n\n\n");/*为了保持每行的间隔与每列的相同*/

for(j=0;j<4;j++)

   if(j>=i)

      printf("\t%d",d[i][j]);/*为了使位数不同的数输出依然保持三角型*/

   else

      printf("\t");

}

 

}

7*题目:输入一个3x4的二维数组,然后分别按行和按列输出。*/

#include<stdio.h>

#include<string.h>

void main()

{

int d[3][4]={{0,0,0,0}},i,j;

printf("Please input 12 num:   ");

for(i=0;i<3;i++)

   for(j=0;j<4;j++)

      scanf("%d",&d[i][j]);

printf("\n\nAn hang: ");

for(i=0;i<3;i++)

   for(j=0;j<4;j++)

   printf("%d  ",d[i][j]);

printf("\n\nAn   lie: ");

for(i=0;i<4;i++)

   for(j=0;j<3;j++)

   printf("%d  ",d[j][i]);

}

8/*题目:编写程序,将两个字符串连接起来,不用strcat函数。*/

#include<stdio.h>

#include<string.h>

void main()

{  char s1[50],s2[50];

 int i=0,j=0,t=0;

 printf("Input one:  ");

 gets(s1);

 while(s1[i]!='\0')   i++;   /*统计s1中字符个数*/

 printf("\n\nInput second:   ");

 gets(s2);  

 while(s2[j]!='\0')   j++;   /*统计s2中字符个数*/

 for(t=0;t<=j;t++)   /*s2中字符连接到s1后面*/

 {  s1[i]=s2[t];  i++;}

 printf("\n\none + second:  ");

 puts(s1);

}

9/*输入一行字符串,统计字符对ab的个数。*/

#include<stdio.h>

#include<string.h>

#define MAX 100

void main()

{

char str[MAX];

int i=0,flage=0;

int count=0;

printf("\nPlease input a string:   ");

gets(str);

while(str[i])

{ if(str[i]=='a')

     flage=1;

else if(str[i]=='b')

{

   if(flage==1)

   { count++;flage=0;}

}

else flage=0;

i++;

}

     printf("the double char \"ab\" count is %d\n",count);

}

10

#include<stdio.h>  /*相对于第一种方法,这种方法能把同为最大的字符串全部打印出来。*/

#include<string.h>

int paixu(int a[],int n)   /*构造对长度为n的数组排序的函数*/

{

int i,j,t,k,temp;

        for(i=0;i<n-1;i++)

{ k=i;

for(j=i+1;j<n;j++)

   if(a[k]>a[j])

k=j;

                if(k!=i)

{  t=a[i];

   a[i]=a[k];

   a[k]=t;

}

}

temp=a[n-1];

return temp;   /*返回最大字符串的长度的值*/

}

void main()

{

char str1[50],str2[50],str3[50],str4[50],str5[50],str6[50];

char str7[50],str8[50],str9[50],str10[50];

int count[10]={0},temp[10]={0},i,j;

int paixu(int a[],int n);

for(i=1;i<=10;i++)   /*输入10个字符串*/

{

    printf("\nPlease input %d string:   ",i);

    if(i==1)

    {   gets(str1);while(str1[count[0]]){count[0]++;temp[0]++; }}

    if(i==2)

    {   gets(str2);while(str2[count[1]]){count[1]++;temp[1]++;}}

    if(i==3)

    {   gets(str3);while(str3[count[2]]){count[2]++;temp[2]++; }}

    if(i==4)

    {   gets(str4);while(str4[count[3]]){count[3]++; temp[3]++;}}

    if(i==5)

    {   gets(str5);while(str5[count[4]]){count[4]++; temp[4]++;}}

    if(i==6)

    {   gets(str6);while(str6[count[5]]){count[5]++; temp[5]++;}}

    if(i==7)

    {   gets(str7);while(str7[count[6]]){count[6]++; temp[6]++;}}

    if(i==8)

    {   gets(str8);while(str8[count[7]]){count[7]++; temp[7]++;}}

    if(i==9)

    {   gets(str9);while(str9[count[8]]){count[8]++; temp[8]++;}}

    if(i==10)

    {   gets(str10);while(str10[count[9]]){count[9]++;temp[9]++;}}

}

j=paixu(temp,10);  

for(i=1;i<=10;i++)

{

   if(count[i-1]==j)

   {                        /*只要字符串长度与最大长度相等就打印出来*/

switch(i)

{ case 1:puts(str1); printf("\n"); break;

case 2:puts(str2); printf("\n"); break;

case 3:puts(str3); printf("\n"); break;

case 4:puts(str4); printf("\n"); break;

case 5:puts(str5); printf("\n"); break;

case 6:puts(str6); printf("\n"); break;

case 7:puts(str7); printf("\n"); break;

case 8:puts(str8); printf("\n"); break;

case 9:puts(str9); printf("\n"); break;

case 10:puts(str10); printf("\n"); break;

 }

   }

}

}

11

/*给数组a输入m个按升序排列的数,给数组b输入n个按降序排列的数*/

/*ab中的元素按降序排列存在数组c中。*/

#include<stdio.h>

void main()

{

    int a[100],b[100],c[100],i,m,n,j,k,temp=0,s;

    printf("\nm =  ");scanf("%d",&m);           /*确定M的个数*/

    printf("\nn =  ");scanf("%d",&n);            /*确定N的个数*/

    printf("\nPlease input m ge shu:     ");

    for(s=0;s<m;s++)

        scanf("%d",&a[s]);

    printf("\nPlease input n ge shu:     ");

    for(s=0;s<n;s++)

        scanf("%d",&b[s]);

    i=m-1;j=0;k=0;       /*ij,分别标记a[]b[]且都是从最大元素开始做标记*/

    for(;;)

    {   if(i==0)               /*a[]中只有一个数或者a[]处理到了最后一个元素*/

        {   if(a[i]<=b[j])     /*如果a[]的最后一个元素<=b[]中当前元素*/              

            {  c[k]=b[j];  k++; j++;   }

            else

            {  c[k]=a[i];

               k++;

               for(;;)         /*b[]数组接到c[]后面*/

               {    c[k]=b[j];

             j++;

             k++;

                 if(j==n)  /*如果b[]处理完,结束。并做标记temp=1*/

                     {   temp=1;break;  }

               }

         }

        }if(temp==1)break;  /*标记temp=1,全部处理结束*/

        if((a[i]<=b[j])&&(i!=0)&&(j!=n))  

        {   c[k]=b[j];  j++;  k++;     }

        if((a[i]>b[j])&&(i!=0)&&(j!=n))

        {   c[k]=a[i];  i--;  k++;     }

        if(j==n)           /*b[]处理到完*/

        {   for(;;)        /*b[]数组接到c[]后面*/

            {   if(i==0)   /*如果a[]处理完,结束。并做标记temp=1*/

                {      c[k]=a[i];temp=1;break;  }  

                c[k]=a[i];

                i--;

         k++;

    }

        }if(temp==1) break;/*标记temp=1,全部处理结束*/

    }

    for(s=0;s<m+n;s++)

    printf("%d   ",c[s]);

    getch();

}



第8章 指针



查看更多