谭浩强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("\n");
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("\n");
24         n=0;
25         }
26         }
27         printf("\n");
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:\n");
 6     for(i=1;i<=10;i++)
 7     {
 8         printf("a[%d]=",i);
 9         scanf("%d",&a[i]);
10     }
11     printf("\n");
12     printf("the number is");
13     for(i=1;i<=10;i++)
14         printf("%5d",a[i]);
15         printf("\n");
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:\n");
30     for(i=1;i<=10;i++)
31         printf("%5d",a[i]);
32     printf("\n");
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\n",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:\n");
 8     for(i=0;i<10;i++)
 9         printf("%5d",a[i]);
10     printf("\n");
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:\n");
32     for(i=0;i<11;i++)
33     printf("%5d",a[i]);
34         printf("\n");
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 :\n");
 7     for(i=0;i<N;i++)
 8         scanf("%d",&a[i]);
 9     printf("array a:\n");
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("\n now array is:\n");
18     for(i=0;i<N;i++)
19         printf("%4d",a[i]);
20     printf("\n");
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("\n");//每一行结束换行
18         }
19         printf("\n");
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("\n");
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:\n");
 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\n",i,maxj,max);
27                     break;}
28         }
29         if(!flag)
30             printf("not exit! \n");
31         return 0;
32 }

猜你喜欢

转载自www.cnblogs.com/1998wdq/p/11305397.html