指標 2018年12月9日
指標 2018年12月9日
以下內容僅供娛樂,歡迎隨時探討,請多指教!
1、編寫程式:完成函式void my_power(double x,int y,double *mypow)的定義,該函式的功能是:求xy(即x的y次方)存入指標變數mypow所指向的存貯單元中,並編寫主程式,驗證my_power()的有效性。
#include <stdio.h>
void my_power(double x,int y,double *mypow)
{
int i;
double t=1;
for(i=1; i<=y; i++) {
t*=x;
}
printf ("x的y次方=%lf\n",t);
*mypow=t;
}
int main()
{
int y;
double x,mypow;
printf("input x and y\n");
scanf("%lf%d",&x,&y);
my_power(x,y,&mypow);
printf("mypow=%lf\n",mypow);
return 0;
}
2、編寫程式:完成函式int absmin(int *a,int n)的定義,它能實現求指標a所指向的前n個整數中絕對值最小的數,並將它返回給主調函式;並編寫程式,驗證absmin()的有效性。
#include <stdio.h>
int absmin(int *a,int n)
{
int i;
int t=0;
for(i=0; i<n; i++) {
if(*a+t == *a+i)t=i;
}
return *a+t;
}
int main()
{
int a[100],n;
printf("input n\n");
scanf("%d",&n);
printf("input %d numbers\n",n);
int i;
for(i=0; i<n; i++)
scanf("%d",a+i);
printf("min=%d",absmin (a,n));
return 0;
}
3、編寫程式:從鍵盤任意輸入一個字串,輸出該字串。然後,將該字串逆序存放後再輸出,要求用字元指標完成。(提示:逆序存放的函式介面:void invstr(char *s))
#include <stdio.h>
#include <string.h>
void invstr(char *s)
{
int i,n;
char temp;
n=strlen(s);
for(i=0; i < n/2; i++) {
temp=*(s+i);
*(s+i)=*(s+n-i-1);
*(s+n-i-1)=temp;
}
}
int main()
{
char a[100];
int i;
printf("input your strings\n");
gets(a);
invstr(a);
printf("then is:\n");
puts(a);
return 0;
}
4、利用指標程式設計,用指標方法編寫一函式,實現兩個字串的比較。程式設計點撥:即自己編寫一個strcmp函式:strcmp(s1,s2),如果s1= s2,返回值為0,如果s1≠s2, 返回它們二者第一個不同字元的ASCII碼差值(如"BOY"與"BAD", 第二個字母不同,"O"與"A"之差為79-65=14)。如果要s1>s2,則輸出正值,如果s1<s2,則輸出負值。
相關知識:①兩個字串的比較的規則;②常用字串處理函式實現的演算法。
#include <stdio.h>
#include <string.h>
#include <math.h>
int mystrcmp(char *s1,char *s2)
{
int a=strlen(s1),b=strlen(s2);
int i,t;
for(i=0; i<a; i++) {
if(*(s1+i) != *(s2+i))t=*(s1+i)-*(s2+i);
}
if(a>b)return abs(t);
if(a<b)return -abs(t);
if(a == b)return fabs(t);
}
int main()
{
char s1[100],s2[100];
printf("input two strings\n");
gets(s1);
gets(s2);
printf("mystrcmp=%d\n",mystrcmp(s1,s2));
return 0;
}
5、利用指標程式設計,輸入一行文字,找出其中大寫字母、小寫字母、空格、數字及其它字元各有多少。
相關知識:①指標處理字串;②通過指標訪問字串中的字元;③大小寫字母、空格、數字的判斷方法。
#include<stdio.h>
int main()
{
char a[30];
char *p;
int i=0,j=0,m=0,n=0,k=0;
p=a;//a不可以更改
printf("請輸入一段文字:\n");
gets(a);
while(*p!='\0') {
//當字元不為結束符時,執行操作
if(*p>='A'&&*p<='Z')
i++;
else if(*p>='a'&&*p<='z')
j++;
else if(*p>='0'&&*p<='9')
m++;
else if(*p==' ')
n++;
else
k++;
p++;
//執行完一輪後,將指標的地址指向下一個字元,繼續檢查
}
printf("大寫字母:%d\n小寫字母:%d\n數字:%d\n空格:%d\n其他字元:%d\n"
,i,j,m,n,k);
return 0;
}
6、
7、利用指標作函式的形參,實現:有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。
#include "stdio.h"
void insert(int *a,int d)
{
int i=0,j;
while(d>*(a+i)) {
i++;
if(i==10)
break;
}
for(j=10; j>=i+1; j--) {
*(a+j)=*(a+j-1);
}
*(a+i)=d;
}
void main()
{
int a[11]= {1,8,11,15,56,78,89,95,100,120};
int d,k;
printf("排好序的數為\n");
for (k=0; k<10; k++) {
printf("%-5d",*(a+k));
}
printf("\n");
do {
printf("請輸入需要插入的數\n");
scanf("%d",&d);
insert(a,d);
printf("插入後為\n");
for (k=0; k<=10; k++) {
printf("%-5d",*(a+k));
}
printf("\n");
} while(1);
}
8、利用指標作函式的形參,實現:現在一個數組存放10個整型資料(可以有相同),要求使用者輸入一個數,然後把陣列中與其輸入相同的數刪除。
#include<stdio.h>
void del(int *a, int nun, int *n)
{
int i,j,t=(*n);
for(i*0; i < (*n); i++) {
if(*(a+i) == nun) {
for(j=i; j < (*n)-1; j++)
*(a+j)=*(a+j+1);
(*n)--;
}
}
}
void main()
{
int a[110];
int n,i,nun;
printf("input n\n");
scanf("%d",&n);
printf("input %d nunbers\n",n);
for(i=0; i<n; i++)
scanf("%d",a+i);
printf("input num\n");
scanf("%d",&nun);
del(a,nun,&n);
printf("then is:\n");
for(i=0;i<n;i++)
printf("%d ",*(a+i));
printf("\n");
}
9,利用指標作函式的形參,實現:輸入10個不相等整數存入陣列中,找出其中最小的兩個數並輸出。
#include "stdio.h"
int main()
{
int a[10];
int j,i;
for(i=0; i<10; i++) {
printf("input %d number\n",i+1);
scanf("%d",a+i);
}
for(i=0; i<10; i++) {
for(j=0; j<10-i-1; j++)
if(*(a+j) > *(a+j+1)) {
int t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=t;
}
}
printf("%d\t%d\n",*a,*(a+1));
return 0;
}
10,利用指標作函式的形參,實現:將一個數組中的值按逆序重新存放,例如原先的順序為8,6,5,4,1,要求逆序存放為1,4,5,6,8,並輸出這些數值。(要求只能定義一個數組完成)
#include"stdio.h"
void trans(int *a,int n)
{
int*i=a,*j=a+n-1,temp,*t=a+n/2;
for(; i<t;i++,j--) {
temp=*i;
*i=*j;
*j=temp;
}
}
void main()
{
int a[100],n,i;
printf("input n\n");
scanf("%d",&n);
printf("input %d numbers\n",n);
for(i=0; i<n; i++)
scanf("%d",a+i);
printf("then is:\n");
trans(a,n);
for(i=0; i<n; i++)
printf("%d\t",*(a+i));
printf("\n");
}
11, 利用指標作函式的形參,實現:輸入一行字元,統計其中單詞的個數,單詞之間用空格隔開。
#include<stdio.h>
int myfun(char *s)
{
int i, count=0;
for(i=0; *(s+i)!='\0'; i++)
if(*(s+i) != ' '&&(*(s+i+1)=='\0'||*(s+i+1)==' '))
count++;
return count;
}
void main()
{
char s[100];
printf("input a string\n");
gets(s);
printf("個數是:%d\n",myfun(s));
}
12、有一個班3個學生,各學4門課,計算總平均分數,以及第n個學生的成績。
#include "stdio.h"
void aver(double *a,int (*b)[4])
{
int i,j,sum=0;
for (i=0; i<3; i++) {
for (j=0; j<4; j++) {
sum+= *(*(b+i)+j);
}
}
*a=sum/3.0;
}
void search(int *n,int (*b)[4])
{
int i;
printf("第%d個學生的成績為\n",*n);
for (i=0; i<4; i++) {
printf("%-3d",*(*(b+(*n-1))+i));
}
printf("\n");
}
void main()
{
int i,j,b[3][4],n;
double a;
printf("請輸入三個學生的四門成績\n");
for (i=0; i<3; i++) {
for (j=0; j<4; j++) {
scanf("%d",*(b+i)+j);
}
}
aver(&a,b);
printf("學生的平均成績為\n");
printf("%lf\n",a);
printf("請輸入你需要查詢第幾個學生的成績\n");
scanf("%d",&n);
search(&n,b);
}
13、利用指標作函式的形參,求陣列中元素的平均值
#include <stdio.h>
double myave(double *a,int n)
{
int i;
double sum=0;
for(i=0; i<n; i++)
sum+=*