下面指針選題來(lái)源于教材、??途W(wǎng)。
1.鍵盤(pán)輸入一個(gè)字符串,編寫(xiě)代碼獲取字符串的長(zhǎng)度并輸出,要求使用字符指針實(shí)現(xiàn)。
示例:
輸入:
helloworld
返回值:
10
代碼實(shí)現(xiàn)
#include<stdio.h>
int main (void)
{
char str[128]={0};//給字符串?dāng)?shù)組初始化為一個(gè)空字符串
char *p=str;int i;
printf("請(qǐng)輸入一個(gè)字符串:\n");
gets(str);//將從鍵盤(pán)輸入的字符串存入到str;
for (i=1;*p!=0;i++)
p++;
printf("%d",i-1);
return 0;
}
在這個(gè)題目中,循環(huán)是一個(gè)關(guān)鍵??赡軐?xiě)成while循環(huán)更好理解。當(dāng)p所指向的地址的內(nèi)容不為空,即*p!=0時(shí),這時(shí)計(jì)數(shù)器計(jì)一個(gè)數(shù),然后指針移動(dòng)到字符串?dāng)?shù)組的下一個(gè)元素。 |
#include<stdio.h>
int main (void)
{
char str[128]={0};//給字符串?dāng)?shù)組初始化為一個(gè)空字符串
char *p=str;int i=0; //此時(shí)注意i初始化為0
printf("請(qǐng)輸入一個(gè)字符串:\n");
gets(str);//將從鍵盤(pán)輸入的字符串存入到str;
while(*p!=0)
{
i+=1;
p++
}
printf("%d",i-1);
return 0;
}
鍵盤(pán)輸入一個(gè)長(zhǎng)度為len的字符串(1=<len<30),再輸入一個(gè)正整數(shù)m(1=<m<=30),將此字符串中從第m個(gè)字符開(kāi)始的剩余全部字符復(fù)制成為另一個(gè)字符串,并將這個(gè)新字符串輸出。要求用指針處理字符串。
示例:
輸入:
helloworld
返回值:
world
代碼實(shí)現(xiàn)
#include <stdio.h>
int main (void)
{
char str[30]={0};//將str初始化為一個(gè)空字符串
char *p;
int m;
printf("請(qǐng)輸入一個(gè)字符串:\n");
gets(str);
printf("請(qǐng)輸入一個(gè)正整數(shù):\n");
scanf("%d",&m);
p=str+m-1;//第m個(gè)字符,它是第[m-1](編號(hào))個(gè)元素,地址是首地址+編號(hào),即str+m-1
while(*p!=0)
{
printf("%c",*p);//依次對(duì)第m個(gè)元素之后進(jìn)行輸出
p++;
}
printf("\n");
return 0;
}
編寫(xiě)一個(gè)函數(shù),實(shí)現(xiàn)兩個(gè)整數(shù)的互換,要求采用指針的方式實(shí)現(xiàn)。
示例:
輸入:
2
3
返回值:
3 2
#include <stdio.h>
void swap(int *p,int *q);
int main (void)
{
int a,b,*p=&a,*q=&b;
scanf("%d%d",&a,&b);
swap(p,q);
printf("a=%d,b=%d",a,b);
return 0;
}
void swap(int *p,int *q)//函數(shù)功能實(shí)現(xiàn)兩個(gè)數(shù)的交換
{
int t;
t=*p;
*p=*q;
*q=t;
}
實(shí)現(xiàn)兩個(gè)數(shù)的互換,不能通過(guò)return返回值實(shí)現(xiàn)。因?yàn)橥ㄟ^(guò)函數(shù)return,只能得到一個(gè)返回值。 兩個(gè)數(shù)互換,實(shí)際上就是對(duì)兩個(gè)變量重新賦值,只不過(guò)賦的值是特殊的(另一個(gè)數(shù))。 |
若想通過(guò)被調(diào)函數(shù)改變主調(diào)函數(shù)中變量的值,就使用指針做函數(shù)形參,把主調(diào)函數(shù)中要改變的變量的地址傳遞給指針,在被調(diào)函數(shù)中改變形參指針?biāo)赶虻淖兞康闹怠?/td> |
鍵盤(pán)隨機(jī)輸入6個(gè)整數(shù),將這些數(shù)據(jù)保存到數(shù)組中,利用指針遍歷數(shù)組中的元素并打印。
示例:
10
20
30
40
50
60
返回值:
10 20 30 40 50 60
代碼實(shí)現(xiàn)
#include <stdio.h>
int main (void)
{
int a[6]={0},i;\\給數(shù)組完成初始化
int *p=a;\\數(shù)組名即數(shù)組首元素的地址
printf("Please input 6 integer numbers:\n");
for (i=0;i<6;i++)
scanf("%d",&*(p+i));\\給數(shù)組元素賦值
for (i=0;i<6;i++)
printf("%d\t",*(p+i));\\依次輸出
return 0;
}
我的一些改進(jìn): 關(guān)于數(shù)組元素的賦值 scanf是輸入,它的參數(shù)應(yīng)該是一個(gè)指針即地址,表示把輸入的值存放在改地址中。 |
for (i=0;i<6;i++)
{
scanf("%d",p); \\給數(shù)組元素賦值
p++;
}
#include<stdio.h>
int cal(int n,int*p);
int main(void)
{
int n,a[50]={0},sum=0,i;\\定義數(shù)組,保證數(shù)組的長(zhǎng)度。\\并將數(shù)組元素全部初始化為0
scanf("%d",&n);
for (i=0;i<n;i++)\\對(duì)數(shù)組元素進(jìn)行重新賦值
scanf("%d",&a[i]);
for (i=0;i<n;i++)\\將數(shù)組中的重新賦過(guò)值的元素依次加到sum中
sum+=a[i];
printf("%d",sum);
return 0;
}
這個(gè)題目中,不知道數(shù)組具體的長(zhǎng)度(不必過(guò)度糾結(jié)),可以將數(shù)組的長(zhǎng)度設(shè)置的適當(dāng),保證數(shù)據(jù)不會(huì)溢出即可。 |

代碼實(shí)現(xiàn)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-435744.html
#include<stdio.h>
int main (void)
{
int a[50]={0},n,x,i,k=0;
printf("請(qǐng)輸入一個(gè)整數(shù)\n");
scanf("%d",&n);
printf("請(qǐng)輸入這%d個(gè)數(shù):\n",n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
printf("請(qǐng)輸入要?jiǎng)h除的整數(shù):\n");
scanf("%d",&x);
for (i=0;i<n;i++)
if (a[i]!=x)
{
a[k]=a[i];
k++;
}
for (i=0;i<k;i++)
printf("%d\t",a[i]);
return 0;
}
對(duì)于這個(gè)刪除指定數(shù)字后再輸出數(shù)組序列的題目,剛開(kāi)始接觸理解這個(gè)題目時(shí),我的想法是再建立一個(gè)和a相同長(zhǎng)度的數(shù)組b,然利用循環(huán)對(duì)數(shù)組a中的每一個(gè)元素(i=0 to n)進(jìn)行遍歷,若不是要?jiǎng)h除的元素,則將這個(gè)元素移到數(shù)組b中,數(shù)組b的下標(biāo)從0開(kāi)始,依次被賦值(直到k),然后將數(shù)組b中的元素打印出來(lái)。 |
聽(tīng)過(guò)老師的講解,這個(gè)數(shù)組b也可以是它自己,節(jié)省內(nèi)存空間。即對(duì)數(shù)組a再重新對(duì)它賦值。 |

#include<stdio.h>
int main (void)
{
int n,a[50]={0},x,i,index;
printf("請(qǐng)輸入一個(gè)整數(shù)n:\n");
scanf("%d",&n);
printf("請(qǐng)輸入%d個(gè)整數(shù):\n",n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
printf("請(qǐng)輸入一個(gè)想插入的整數(shù):\n");
scanf("%d",&x);
if (x<a[0] ||x==a[0])
{
a[0]=x;
for (i=1;i<=n;i++)
a[i]=a[i-1];
}
else if (x>a[n-1] || x==a[n-1])
{
a[n]=x;
}
else
for (i=0;i<n;i++)
if (x>=a[i] && x<a[i+1])
{
a[i+1]=x;
index=i+1;
for (i=n;i>index;i--)
a[i]=a[i-1];
}
for (i=0;i<=n;i++)
printf("%d",a[i]);
return 0;
}
輸入10個(gè)數(shù),將第一個(gè)元素和最后一個(gè)元素交換,第二個(gè)元素與倒數(shù)第二個(gè)元素交換……文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-435744.html
#include <stdio.h>
void swap(int *p,int *q);
int main (void)
{
int a[10],*p,*head,*end;
for (p=a;p<=a+9;p++)
scanf("%d",p); //利用指針對(duì)數(shù)組中的每一個(gè)元素賦初值
head=a;end=a+9;
while(end>head)
{
swap(head,end);
head--;
end++;
}
for (p=a;p<a+10;p++)
printf("%d",*p);
return 0;
}
void swap(int *p,int *q)//函數(shù)功能實(shí)現(xiàn)兩個(gè)數(shù)的交換
{
int t;
t=*p;
*p=*q;
*q=t;
}
到了這里,關(guān)于C語(yǔ)言刷題(1)----指針數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!