谭浩强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 }
原文地址:https://www.cnblogs.com/1998wdq/p/11305397.html