⑴ c語言編程,刪除數組a中值為x的第一個元素。
這個題目的解題思路為:因為數組a已非遞減有序,所以一般先對其進行二分查找,但要找到第一個x所在的下標,然後再對其進行刪除。
int BitSearch(int a[], int x, int left, int right) { /*在數組a的從left到right的區域內二分查找x第一次出現的位置,如果不存在返回-1*/
int mid, i;
while(left <= right) {
mid = (left + right) / 2;
if(a[mid] == x) break;
if(a[mid] > x) right = mid - 1;
if(a[mid] < x) left = mid + 1;
}
if(left > right) return -1;
for(i = mid; i >= left && a[i] == x; i--); //尋找第一個x的位置
return i + 1;
}
void Romove(int a[], int *length, int index) {
int i;
if(index < 0 || index >= *length) return ; //刪除的位置越界
for(i = index; i < *length - 1; i++) a[i] = a[i + 1];
*length--;
}
void delSq(int a[], int x, int *length) {
int index = BitSearch(a, x, 0, *length - 1);
Remove(a, length, index);
}
⑵ C語言中數組首地址和數組第一個元素的地址有什麼區別呢
C語言中數組首地址和數組第一個元素的地址關系如下:
1、它們的地址值是相等的。
2、第1個元素的地址如果是p,則p+1就是第2個元素的地址。
3、數組的首地址如果是p,則p+1就跳過這個數數組而指向這個數組最後一個元素最後一個位元組的下一位元組。
(2)c語言編第一個元素擴展閱讀:
數組的創建:在創建數組時,我們必須定義數組的類型和大小,數組的大小不能為0,數組中的元素類型都是相同的。
數組的初始化:在數組創建時,我們也要必須為數組初始化。
一個數組,可以保存一些數據,但是每一個數據不一定有用。或者說,有些時候的數組的數據不一定要輸出,所以我們可以再來開一個相同的數組,來標記模擬是否輸出數組中的某個元素。
⑶ C語言,編寫程序,通過指針操作,比較兩個有序數組中的元素,輸出兩個數組中第一個相同的元素值
c語言指針2個數組查詢比較代碼如下:
#include<stdio>
intmain()
{
int*lpa,*lpb;
inta[100],b[100],alen,blen,i,j;
printf("輸入數組a長度: ");
scanf("%d",&alen);
printf("輸入%d個有序數據給數組a ",alen);
for(i=0;i<alen;i++)scanf("%d",&a[i]);
printf("輸入數組b長度: ");
scanf("%d",&blen);
printf("輸入%d個有序數據給數組a ",alen);
for(i=0;i<alen;i++)scanf("%d",&a[i]);
//查詢比較
lpa=a;
for(i=0;i<alen;i++)
{
lpb=b;
for(j=0;j<blen;j++)
{
if(*lpb==*lpa)break;
lpb++;
}
if(*lpb==*lpa)break;
lpa++;
}
if(*lpb==*lpa)
{
printf("兩數組中發現第一個相同元素:%d",*lpa);
}
else
{
printf("兩數組中沒有發現相同元素");
}
}
⑷ C語言,數組名與數組第一個元素的關系
首先,你的老師講「一維數組名是個指針常量,它存放的是一維數組第一個元素的地址」,這個有點問題,數組名本身就代表這個數組的第一個元素的地址,不能說「它存放的是一維數組第一個元素的地址」,a有指針的語法,但它並不是指針,它就代表它本身所處的地址,a就是&a[0],這個地址內存放的是a[0],也就是你放進去的1。
至於&a,這個就有點講究了,在早期的c語言標准下,這個是不合法的,但是對一個數組取地址不合法有點說不過去啊,所以後來的c標准(具體哪一年不記得了)就允許對數組取地址,但含義不同了,&a在數值上和a以及&a[0]是相同的,但&a的類型是個int(*)[5],是個一維數組指針,相對於a提升了一級
⑸ c語言數組第一個元素是不是就是指針類型的
不是,數組名表示數組內第一個元素地址可以當指針使用,但數組內元素視定義類型而定
⑹ 用c語言編!向一維數組中第 i 個元素前插入一新的元素。
int a[100];//定義數組
...假設對數組賦值,不知道你有沒有這步驟
int j;
for(j=99;j>i;j--)
{
a[j]=a[j-1];
}
a[i]=c;//c為要插入的元素
插入元素後,原來數組元素一次後移,最後一個丟棄
⑺ 編寫C語言程序,輸入數組,最大的與第一個元素交換,最小的與最後一個元素交換,輸出數組。
*min=a[n];a[n]=k;
*max=a[0];a[0]=j;
n=7,但數組的下標為0-6,出現了下標越界。
#include<stdio.h>
int main(void)
printf("請輸入數組:");
a[0]=a[maxp];
a[maxp]=t;
printf("輸出: ");
}
數組中的元素
數組中的所有元素都具有相同類型。數組中的元素存儲在一個連續性的內存塊中,並通過索引來訪問(這一點也和結構和類中的欄位不同,它們通過名稱來訪問)。數組元素並非只能是基元數據類型,還可以是結構、枚舉或類。
以上內容參考:網路-數組
⑻ c語言一位數組中對第一個元素賦初值怎麼寫
比如說數組名為 a;
則第一個元素賦初值 a[0] = 1; 下標為0即為第一個元素
⑼ C語言一維數組第一個元素下標一定是什麼大神們幫幫忙
題目應該是第一個元素下標定義吧,數組第一個下標定義是0,舉例:int a[3],第一個元素就是a[0]。int a[3][3],第一個元素就是a[0][0]。int a[3][3][3]的第一個元素則是a[0][0][0],第一個元素的表達就是上面這樣,依次類推。