zoukankan      html  css  js  c++  java
  • 谭浩强C语言第六章课后习题

    1、用筛选法求100以内素数

     1 #include<stdio.h>
     2 #include<math.h>
     3 int main()
     4 {
     5     int i,j,n,a[101];
     6     for(i=1;i<=100;i++)
     7         a[i]=i;
     8     a[1]=0;
     9     for(i=2;i<sqrt(100);i++)
    10         for(j=i+1;j<=100;j++)
    11         {
    12             if(a[i]!=0&&a[j]!=0)
    13                 if(a[j]%a[i]==0)
    14                     a[j]=0;
    15         }
    16         printf("
    ");
    17         for(i=2,n=0;i<=100;i++)
    18         {if(a[i]!=0)
    19         {printf("%5d",a[i]);
    20         n++;
    21         }
    22         if(n==10)
    23         {printf("
    ");
    24         n=0;
    25         }
    26         }
    27         printf("
    ");
    28         return 0;
    29 }

    2、用选择法对十个整数排序

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,j,min,temp,a[11];
     5     printf("enter data:
    ");
     6     for(i=1;i<=10;i++)
     7     {
     8         printf("a[%d]=",i);
     9         scanf("%d",&a[i]);
    10     }
    11     printf("
    ");
    12     printf("the number is");
    13     for(i=1;i<=10;i++)
    14         printf("%5d",a[i]);
    15         printf("
    ");
    16     for(i=1;i<=9;i++)
    17     {min=i;
    18     for(j=i+1;j<=10;j++)
    19     if(a[min]>a[j])
    20     
    21     /*    min=j;//法1
    22         temp=a[i];
    23         a[i]=a[min];
    24         a[min]=temp;*/
    25     {temp=a[i];  //法2
    26     a[i]=a[j];
    27     a[j]=temp;}
    28     }
    29     printf("number is:
    ");
    30     for(i=1;i<=10;i++)
    31         printf("%5d",a[i]);
    32     printf("
    ");
    33     return 0;
    34     }

     3、求一个3*3矩阵对角元素之和1

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int a[3][3],sum=0;
     5     int i,j;
     6     printf("enter data:");
     7         for(i=0;i<3;i++)
     8             for(j=0;j<3;j++)
     9                 scanf("%d",&a[i][j]);
    10             for(i=0;i<3;i++)
    11                 sum=sum+a[i][i];
    12             printf("sum=%6d
    ",sum);
    13                 return 0;
    14 }

    4、将一个数插入到已经排好的数组中

     1 //假设为升序排序
     2 #include<stdio.h>
     3 int main()
     4 {
     5     int a[11]={1,4,6,9,13,16,19,28,40,100};
     6     int temp1,temp2,number,end,i,j;
     7     printf("array a:
    ");
     8     for(i=0;i<10;i++)
     9         printf("%5d",a[i]);
    10     printf("
    ");
    11     printf("inset data:");
    12     scanf("%d",&number);
    13     end=a[9];
    14     if(number>a[9])
    15         a[10]=number;
    16     else
    17     {
    18         for(i=0;i<10;i++)
    19         {if(a[i]>number)
    20         {temp1=a[i];
    21         a[i]=number;
    22         for(j=i+1;j<11;j++)
    23         {temp2=a[j];
    24         a[j]=temp1;
    25         temp1=temp2;
    26         }
    27         break;
    28         }
    29         }
    30     }
    31     printf("now array a:
    ");
    32     for(i=0;i<11;i++)
    33     printf("%5d",a[i]);
    34         printf("
    ");
    35     return 0;
    36 }

    5、将数组中的值逆序排放

     1 #include<stdio.h>
     2 #define N 6
     3 int main()
     4 {
     5     int a[N],i,temp;
     6     printf("enter array :
    ");
     7     for(i=0;i<N;i++)
     8         scanf("%d",&a[i]);
     9     printf("array a:
    ");
    10     for(i=0;i<N;i++)
    11         printf("%4d",a[i]);
    12     for(i=0;i<N/2;i++)
    13     {temp=a[i];
    14     a[i]=a[N-i-1];
    15     a[N-i-1]=temp;
    16     }
    17     printf("
     now array is:
    ");
    18     for(i=0;i<N;i++)
    19         printf("%4d",a[i]);
    20     printf("
    ");
    21     return 0;
    22 }

     6、杨辉三角形

     1 #include<stdio.h>
     2 #define N 10
     3 int main()
     4 {
     5     int i,j,a[N][N];
     6     for(i=0;i<N;i++)//先让对角线和第一列等于1
     7     {a[i][i]=1;
     8     a[i][0]=1;
     9     }
    10     for(i=2;i<N;i++)//从第三行开始
    11         for(j=1;j<=i-1;j++)//从第二列开始
    12             a[i][j]=a[i-1][j-1]+a[i-1][j];//等于上一列元素加上上一列元素的前一个元素
    13         for(i=0;i<N;i++)
    14         {
    15             for(j=0;j<=i;j++)
    16                 printf("%6d",a[i][j]);
    17             printf("
    ");//每一行结束换行
    18         }
    19         printf("
    ");
    20         return 0;
    21 }

    7、输出魔方阵

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int a[15][15],i,j,k,p,n;
     5     p=1;
     6     while(p==1)
     7     {
     8         printf("enter n(n=1--15):");
     9         scanf("%d",&n);
    10         if((n!=0)&&(n<=15)&&(n%2!=0))
    11             p=0;
    12     }
    13     //初始化
    14     for(i=1;i<n;i++)
    15         for(j=1;j<=n;j++)
    16             a[i][j]=0;
    17         //建立魔方阵
    18         j=n/2+1;
    19         a[1][j]=1;
    20         for(k=2;k<=n*n;k++)
    21         {
    22             i=i-1;
    23             j=j+1;
    24             if((i<1)&&(j>n))
    25             {    i=i+2;
    26             j=j-1;}
    27             else
    28             {if(i<1) i=n;
    29             if(j>n) j=1;}
    30             
    31             if(a[i][j]==0)
    32                 a[i][j]=k;
    33             else
    34             {i=i+2;
    35             j=j-1;
    36             a[i][j]=k;
    37         }
    38         }
    39         //输出
    40         for(i=1;i<=n;i++)
    41         {for(j=1;j<=n;j++)
    42         printf("%5d",a[i][j]);
    43         printf("
    ");
    44         }
    45         return 0;
    46 }

    8、找出二维数组中的鞍点,即在该行最大,该列最小

     1 #include<stdio.h>
     2 #define N 4
     3 #define M 5
     4 int main()
     5 {
     6     int i,j,k,a[N][M],max,maxj,flag;
     7     printf("please input matrix:
    ");
     8     for(i=0;i<N;i++)
     9         for(j=0;j<M;j++)
    10             scanf("%d",&a[i][j]);
    11         for(i=0;i<N;i++)//循环N行
    12         {
    13             max=a[i][0];
    14             maxj=0;
    15             for(j=0;j<M;j++)
    16                 if(a[i][j]>max)//找到行最大
    17                 {max=a[i][j];
    18                 maxj=j;
    19                 }
    20                 flag=1;
    21                 for(k=0;k<N;k++)//判断是不是列最小
    22                     if(max>a[k][maxj])
    23                     {flag=0;
    24                     continue;}
    25                     if(flag)
    26                     {printf("a[%d][%d]=%d
    ",i,maxj,max);
    27                     break;}
    28         }
    29         if(!flag)
    30             printf("not exit! 
    ");
    31         return 0;
    32 }

     9、折半法查找元素

     1 #include<stdio.h>
     2 #define N 15
     3 int main()
     4 {
     5     int i,number,top,bott,mid,loca,a[N],flag=1,sign;
     6     char c;
     7     printf("enter data:
    ");
     8     scanf("%d",&a[0]);
     9     i=1;
    10     while(i<N)
    11     {
    12         scanf("%d",&a[i]);
    13         if(a[i]>a[i-1])
    14             i++;
    15         else
    16             printf("enter again:
    ");
    17     }
    18     printf("
    ");
    19     for(i=0;i<N;i++)
    20         printf("%5d",a[i]);
    21     printf("
    ");
    22     while(flag)
    23     {
    24         printf("enput number:");
    25         scanf("%d",&number);
    26         sign=0;
    27         top=0;
    28         bott=N-1;
    29         if((number<a[0])&&(top>a[N-1]))
    30             loca=-1;
    31         while((!sign)&&(top<=bott))
    32         {
    33             mid=(bott+top)/2;
    34             if(number==a[mid])
    35             {loca=mid;
    36             printf("%d,is %d ge
    ",number,loca+1);
    37             sign=1;
    38             }
    39             else if(number<a[mid])
    40                 bott=mid-1;
    41             else
    42                 top=mid+1;
    43         }
    44         if(!sign||loca==-1)
    45             printf("not
    ");
    46         printf("y/n");
    47             scanf("%C",c);
    48         if(c=='N'||c=='n')
    49             flag=0;
    50     }
    51     return 0;
    52 }

     10、统计三行文字大写字母、小写字母、数字、空格、以及其他字符的个数。

     1 #include<stdio.h>
     2 int main()
     3 {   
     4     int i,j,upp,low,dig,spa,oth;
     5     char text[3][80];
     6     upp=low=dig=spa=oth=0;
     7     for(i=0;i<3;i++)
     8     {printf("please enter line%d:
    ",i+1);
     9     gets(text[i]);
    10     for(j=0;j<80&&text[i][j]!='';j++)
    11     {if(text[i][j]>='A'&&text[i][j]<='Z')
    12     upp++;
    13     else if(text[i][j]>='a'&&text[i][j]<='z')
    14         low++;
    15     else if(text[i][j]>='0'&&text[i][j]<='9')
    16         dig++;
    17     else if(text[i][j]==' ')
    18         spa++;
    19     else
    20         oth++;
    21     }
    22     }
    23     printf("
    nupper case:%d
    ",upp);
    24     printf("lower case   :%d
    ",low);
    25     printf("digit        :%d
    ",dig);
    26     printf("space        :%d
    ",spa);
    27     printf("other        :%d
    ",oth);
    28 
    29     return 0;
    30 }

    11、输出一个平行四边形图案

     1 #include<stdio.h>
     2 int main()
     3 {
     4     char a[5]={'*','*','*','*','*'};
     5     int i,j,k;
     6     char space=' ';
     7     for(i=0;i<5;i++)
     8     {
     9         printf("
    ");
    10         printf("   ");
    11         for(j=1;j<=i;j++)
    12             printf("%c",space);
    13         for(k=0;k<5;k++)
    14             printf("%c",a[k]);
    15     }
    16     printf("
    ");
    17     return 0;
    18     }

    12、翻译密码A---Z;a------z

     1 #include<stdio.h>
     2 int main()
     3 {
     4     char a[5]={'*','*','*','*','*'};
     5     int i,j,k;
     6     char space=' ';
     7     for(i=0;i<5;i++)
     8     {
     9         printf("
    ");
    10         printf("   ");
    11         for(j=1;j<=i;j++)
    12             printf("%c",space);
    13         for(k=0;k<5;k++)
    14             printf("%c",a[k]);
    15     }
    16     printf("
    ");
    17     return 0;
    18     }

    13、连接两个字符串

     1 #include<stdio.h>
     2 int main()
     3 {
     4     char s1[100],s2[50];
     5     int i=0,j=0;
     6     printf("input string1:");
     7     scanf("%s",s1);
     8     printf("input string2:");
     9     scanf("%s",s2);
    10     while(s1[i]!='')
    11         i++;
    12     while(s2[j]!='')
    13         s1[i++]=s2[j++];
    14     s1[i]='';
    15     printf("new is:%s
    :",s1);
    16         return 0;
    17 }

    16、比较两个字符串是s1  s2

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int i,resu;
     5     char s1[100],s2[100];
     6     printf("input string 1;");
     7     gets(s1);
     8     printf("
     input string2:");
     9     gets(s2);
    10     i=0;
    11     while((s1[i]==s2[i])&&(s1[i]!='0')) i++;
    12     if(s1[i]==''&&s2[i]=='')
    13         resu=0;
    14     else
    15         resu=s1[i]-s2[i];
    16     printf("
     result:%d.
    ",resu);
    17     return 0;
    18 }

    16、复制字符串

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     char s1[80],s2[80];
     6     int i;
     7     printf("input s2:");
     8     scanf("%s",s2);
     9     for(i=0;i<=strlen(s2);i++)
    10         s1[i]=s2[i];
    11     printf("s1    %s
    ",s1);
    12     return 0;
    13 }
  • 相关阅读:
    Java高级类特性(二)
    Java高级类特性(一)
    java面向对象
    Java基本语法
    Java语言的简介
    【ibatis】IBatis的标签(三)
    【Spring】详解spring事务属性
    【ibatis】IBatis返回map类型数据
    【ibatis】IBatis的动态SQL的写法
    【ibatis】入门讲例
  • 原文地址:https://www.cnblogs.com/1998wdq/p/11305397.html
Copyright © 2011-2022 走看看