第十次上机作业 数组(1)

发布时间 2023-12-07 21:53:23作者: zerocloud01

编译器是UTF-8,汉字编码和ascii不一样,直接复制会导致汉字乱码。

 

1.上机调试

(1)F(2)T(3)T(4)T(5)T  

  c98不能用变量声明数组。但是自c11就已经可以了,更何况现在c14、c17广泛运用,c23都已经在编写了,只能说是背八股。

  const 声明常变量,可以视作常量,同上。

  #define声明常量,和const一样(有其他差别,不讨论)。

  变量相加不影响

(6)  

  又没学指针,考虑这个干什么?

  下标从0开始,n-1结束,因为指针地址从第一个数开始,a[i]对应 *(p + i)。

2.阅读程序

(1)

为什么不用 s += ?

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a[] = {1,2,3,4,5};
 6     int j = 1,s = 0;
 7     for(int i=4;i>=0;--i)//循环内符号不空格坏习惯,别学。--i和i--一样(此处)
 8     {
 9         s += a[i] * j;
10         j *= 10;
11     }
12     printf("s=%d\n",s);
13     return 0;
14 }

s   =   5 + 40 + 300 + 2000 + 10000;

 (2)

1 #include<stdio.h>
2 
3 int main(void)
4 {
5     int a[3][3] = {9,8,7,6,5,4,3,2,1};
6     for(int i=0;i<3;++i)    printf("%d\n",a[i][2-i]);
7     return 0;
8 }

a[0][2] = 7;

a[1][1] = 5;

a[2][0] = 3;

 (3)

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int x = 0,y = 0,m;
 6     int a[3][3] = {1,-2,0,4,-5,6,2,4};
 7     m = a[0][0];//1;
 8     for(int i=0;i<3;++i)
 9     {
10         for(int j=0;j<3;++j)
11         {
12             if(a[i][j] > m)
13             {
14                 m = a[i][j];
15                 x = i;
16                 y = j;
17             }
18             printf("(%d,%d) = %d\n",x,y,m);
19         }
20     }
21     return 0;
22 }

 没意思

 

3.完成程序

(1)

都没必要用数组

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int k = 0,n;
 6     int num[16] = {0};
 7     printf("输入:");
 8     scanf("%d",&n);
 9     printf("\n转换后:");
10     do
11     {
12         num[k] = n % 2;//answer
13         n /= 2;//answer
14         k++;
15     }
16     while(n != 0);
17     for(k=15;k>=0;--k)  printf("%d",num[k]);
18     return 0;
19 }    

 

 

(2)

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a[10] = {10,9,8,7,6,5,4,3,2,1};
 6     int k,s,i;
 7     double ave;
 8     for(i = 0,k = s = 0;i<10;i++)
 9     /*不能理解的连续赋值*/
10     {
11         if(a[i] % 2 == 0)   continue;//answer
12         s += a[i];//answer
13         k++;
14     }
15     if(i != 0)
16     {
17         ave = s / k;
18         printf("%d %f\n",k,ave);
19     }
20     return 0;
21 }

 

(3)

没必要降难度吧

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a[11],i;
 6     for(i = 1;i<=10;i++)    a[i] = i;//answer
 7     for(i=1;i<=10;i++)      printf("%d",a[i]);//answer
 8     printf("\n");
 9     for(i=1;i<=5;i++)       a[11-i] = a[i];//answer
10     for(i=1;i<=10;i++)      printf("%d",a[i]);//answer
11     return 0;
12 }

 真无聊啊

 

(4)

又是不用数组就行的题

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int x[10],a[9],i;
 6     for(i=0;i<10;i++)   scanf("%d",&x[i]);
 7     /*循环内不打空格别学*/
 8     for(i=1;i<10;++i)   a[i-1] = x[i] + x[i-1];//answer
 9     for(i=0;i<9;++i)    printf("%d ",a[i]);
10     printf("\n");
11     return 0;
12 }

 

(5)

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int i,j,t,a[4][4];
 6     printf("\n输入 a:\n");
 7     for(i=0;i<4;++i)
 8         for(j=0;j<4;++j)    scanf("%d",&a[i][j]);
 9     for(i=0;i<4;++i)
10         for(j=0;j<i;++j)
11         {
12             t = a[i][j];
13             a[i][j] = a[j][i];//answer
14             a[j][i] = t;
15         }
16     for(i=0;i<4;++i)
17     {
18         for(j=0;j<4;++j)    printf("%5d",a[i][j]);
19         printf("\n");
20     }
21     return 0;
22 }

 

 (6)

面向结果编程不就行

#include<stdio.h>

int main(void)
{
    int num[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
    for(i=0;i<4;i++)
    {
        for(j=1;j<=i;j++)   printf("    ");
        for(j=i;j<4;++j)       printf("%4d",num[i][j]);//answer
        printf("\n");
    }
    return 0;
}

 

4.调试程序

(1)

行号都不对怎么标?

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a[4] = {0,0,0,0};//此处
 6     int i;
 7     for(i=0;i<4;++i)    scanf("%d",&a[i]);
 8     for(i=1;i<4;++i)    a[0] += a[i];
 9     printf("%d",a[0]);
10     return 0;
11 }

 

 

(2)

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a[11],i;//a[0]未初始化
 6     a[0] = 0;
 7     for(i=1;i<=10;i++)  scanf("%d",&a[i]);//此处无下标
 8     for(i=1;i<=10;++i)  a[0] += a[i];
 9     printf("Sum=%d\n",a[0]);
10     return 0;
11 }

 

(3)

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5     int i,n = 10,a[10];//n未赋值
 6     double av = 0.0;//应为浮点型
 7     for(i=0;i<n;++i)    scanf("%d",&a[i]);//缺少取地址符&
 8     for(i=0;i<n;++i)
 9     {
10         printf("%d ",a[i] );
11         if(i % 3 == 2)  printf("\n");//这样才能从开始三个一输出
12     }
13     for(i=0;i<n;++i)    av += a[i];
14     printf("\nav=%f\n",av/n);//未除以10
15     return 0;
16 }

 

不用c++好难受