1. 程式人生 > 其它 >學習指標(2)指標作業題

學習指標(2)指標作業題

技術標籤:C語言學習之路c語言指標字串

.輸入一個3×6的二維整數陣列,輸出其中最大值、最小值及其所在的行列下標。

#include<stdio.h>
#define N 6//巨集定義,下文 N = 6
int max = 0, min = 0, a[N][N], *p;

int main ()
{
    p = a[0];
    for(int i = 0; i < 3; i ++)
        for (int j = 0; j < 6; j ++)
        {
            scanf("%d", a[i] +
j); if (*(p + max) < *(p + i*N + j)) max = i*N + j; if (*(p + min) > *(p + i*N + j)) min = i*N + j; }//p為首地址,p + N為第一行最後一列陣列地址,p + N*i為第i行最後元素的地址,p + i*N + j為第(i+1)行第j個元素地址 printf("%d %d %d\n", *(p + max), max/N+1, max % N + 1); printf("%d %d %d\n"
, *(p + min), min/N+1, min % N + 1); return 0; }

現有不定個數(少於100)的字串(長度小於100,字串中間沒有空白符),字串之間用空格 或者回車符分隔。按字典順序排序後輸出。
在這裡插入圖片描述
思路:首先將一串字串存入二維陣列的一行中,第二串存放在第二行中,以此類推。運用氣泡排序,呼叫strcmp函式,對字串進行排序

#include <cstdio>
#include <cstring>

using namespace std;

char ch[110][110],*p[110];
int n=1;

void sort() {
char *temp; for (int i=1;i<=n;i++) for (int j=n;j>=i+1;j--) if (strcmp(p[j],p[j-1])<0) { temp=p[j]; p[j]=p[j-1]; p[j-1]=temp; } } int main() { while (scanf("%s",ch[n])!=EOF) n++; n--; for (int i=1;i<=n;i++) p[i]=ch[i]; sort(); for (int i=1;i<=n;i++) { printf("%s",p[i]); if (i!=n) printf(","); else printf("\n"); } return 0; }

收穫:全域性變數n在主函式中值改變後,在全域性中值也改變了。通過學習小顧同學的程式碼,學到了這題存放字串的方式,也是一個小收穫。
現在有不定個數(小於100)的三維點的座標(x,y,z),都是浮點資料,並且不同點的z座標都不相同。要求按照z的值從小到大輸出這些點的三維座標。(保留一位小數)

思路:同上,方式差不多,比較一下第三個值就可以了

#include <cstdio>

using namespace std;

double a[110][3],*p[110];
int n=1;

void sort() {
	double *temp;
	for (int i=1;i<=n;i++)
		for (int j=n;j>=i+1;j--)
			if (*(p[j]+3)<*(p[j-1]+3)) {
				temp=p[j];
				p[j]=p[j-1];
				p[j-1]=temp;
			}
}


int main() {
	while (scanf("%lf%lf%lf",&a[n][1],&a[n][2],&a[n][3])!=EOF) {
		p[n]=a[n];
		n++;
	}
	n--;
	sort();
	for (int i=1;i<=n;i++)
		printf("%.1f,%.1f,%.1f\n",*(p[i]+1),*(p[i]+2),*(p[i]+3));
	return 0;
}