學習指標(2)指標作業題
阿新 • • 發佈:2020-12-15
.輸入一個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;
}