1. 程式人生 > 實用技巧 >【Java多執行緒】ThreadLocal的使用和實現原理(三)

【Java多執行緒】ThreadLocal的使用和實現原理(三)

這個作業屬於哪個班級 C語言--網路2011/2012
這個作業的地址 C部落格作業04--陣列
這個作業的目標 學習陣列相關內容
姓名 陳垚嘉

0.展示PTA總分(0----2)


展示2張關於“陣列題目集”分數截圖。

1.本章學習總結(3分)

1.1 學習內容總結

整理陣列這章學習主要知識點,必須包含內容有:

  • 陣列中如何查詢資料,有哪些做法
	for (i = 0; i <= n; i++)
        {
		if (a[i] == number)
		{
			printf("%d", i);
                }
        }
  • 陣列中如何插入資料,怎麼做,可以寫個虛擬碼或動態圖展示方法
輸入陣列
輸入插入數字
for(i=0;i<n;i++)
{
if(a[i]<數字)i++
else
a[i+1]=a[i+2]
a[i]=數字
}

  • 陣列中如何刪除資料,這個有多種做法,請一一展示。
輸入陣列a[i]
輸入要刪的數字,該數字的下標為j
for(m=j;m<n——一共多少數字;m++)
{
a[m-1]=a[m]
}
n-1//若要刪多個數字則將在程式外套一個迴圈

  • 陣列中目前學到排序方法,主要思路?
    冒泡法從小到大
for(j=0;j<k;j++)//k為從新比較的次數,次數越多,答案准確率越高
for(i=0;i<n;i++)
{
  if(a[i]>a[i+1]
  {
   a[i]=temp
   a[i]=a[i+1]
   a[i+1]=temp
  }
}

選擇排序法從小到大

輸入陣列
比較陣列中的數將該陣列的最小數與a[0]交換
陣列從a[1]開始,比較陣列中的數將該陣列的最小數與a[1]交換
陣列從a[2]開始,比較陣列中的數將該陣列的最小數與a[2]交換,以此類推
  • 陣列做列舉用法,有哪些案例?
  • 雜湊陣列用法,目前學過哪些案例,舉例展示。

#include<stdio.h>
int main()
{
	char a[82];
	int i;
	int static b[256];
	fgets(a, 81, stdin);
	for (i = 0; a[i]!='\n'; i++)
	{
		if (a[i] != '\n')
		{
			b[a[i]] = 1;
		}
	}
	for (i = 1; i < 256; i++)
	{
		if (b[i] == 1)
			printf("%c", i);
	}
	return 0;

}
  • 字元陣列、字串特點及程式設計注意事項。
    1.陣列數字是從0開始數的,因此要格外注意
    2.字串要考慮結尾有沒有\0,因為這是他的結束標誌
scanf("%s",a)//當輸入回車和空格時,結束輸入,並自動在結尾加上'\0'

2.PTA實驗作業(7分)

2.1 題目名1(3分)

調查電視節目受歡迎程度

2.1.1 虛擬碼

我的

輸入陣列a[i]
for(i=0;i<n;i++)
for(j=1;j<=8;j++)
if(a[i]==j) c[j-1]++
for(i=1;i<=8;i++)
printf("%4d%4d",i,c[i-1])

2.1.2 程式碼截圖

2.1.3 找一份同學程式碼(儘量找思路和自己差距較大同學程式碼)比較,說明各自程式碼特點。

同學

#include<stdio.h>
int main()
{
	int a[8] = { 1,2,3,4,5,6,7,8 };
	int b[8] = { 0,0,0,0,0,0,0,0 };
	int n;
	int number;
	int i;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		scanf("%d", &number);
		switch (number)
		{
		case 1:b[0]++; break;
		case 2:b[1]++; break;
		case 3:b[2]++; break;
		case 4:b[3]++; break;
		case 5:b[4]++; break;
		case 6:b[5]++; break;
		case 7:b[6]++; break;
		case 8:b[7]++; break;
		}

	}
	for (i = 0; i < 8; i++)
	{
		printf("%4d%4d\n", a[i], b[i]);
	}
	return 0;
}

他用switch語法,我用陣列,他的程式碼多而簡單,我的程式碼少

2.2 題目名2(2分)

找鞍點

2.2.1 虛擬碼

輸入陣列
for(i=0; i<n; i++)//先挑出行的最大值
        {
            y=i;
            for(p=0; p<n; p++) 
            {
                if(a[i][k]<=a[i][p])
                {
                    k=p;
                }
            }
            for(j=0; j<n; j++)//再比較該行最大是不是列最小值
            {
                if(a[y][k]>a[j][k])
                {
                    y=j;
                    break;不是則跳出
                }
            }
            if(i==y)
            {
                flag=0;是的話用flag變數來表示
                break;
            }
        }

2.2.2 程式碼截圖

2.2.3 請說明和超星視訊做法區別,各自優缺點。

我的和超星視訊的思路差不多,不同的是他用函式來表示

2.3 題目名3(2分)

切分表示式

2.3.1 虛擬碼

輸入字元
如果下標為0,字元為‘-’或‘+’
printf("%c",s[i]);
下標不為0時,如果字元s[i]為‘-’當s[i-1]不為數字printf("%c\n",s[i]),else printf("%c",s[i])
當字元為數字或‘.’時,如果s[i+1]不為數字或‘.’printf("%c\n",s[i]),else printf("%c",s[i])
當字元不為數字,‘.’,'+','-'時printf("%c\n",s[i])

2.3.2 程式碼截圖


2.3.3 請說明和超星視訊做法區別,各自優缺點。

我的思路和超星視訊的思路差不多,不同的是他發現了i!=0時,‘-’前如果是負數則會有‘(’,