1. 程式人生 > >指標 2018年12月9日

指標 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+=*