1. 程式人生 > >關於二維陣列首地址賦予指標的問題

關於二維陣列首地址賦予指標的問題

題目描述

一個班有N(N <20)名學生,每個學生修了五門課。編寫程式:

     1)求每個學生的平均成績,並輸出每個學生的學號,每門課程的成績及平均值。

     2)求某門課程的平均分;

     要求:

     1) 分別編寫2個函式實現以上2個要求。

     2) 第1個函式用陣列名作形式引數。第2個函式用指標作形式引數,並在函式體內用指標對陣列操作。

輸入

第一行:輸入N,代表N名學生。

下面N行,每行有6個數據分別為:學號,英語成績,數學成績,C++成績,音樂成績,美術成績

輸出

首先輸出N行:每行為學生學號,每門成績和平均成績(平均成績四捨五入保留一位小數);

最後按順序輸出每門平均成績(平均成績四捨五入保留一位小數)

樣例輸入

4
20070001 94 92 97 93 90
20070005 84 89 92 81 73
20070004 82 75 94 86 95
20070003 84 86 82 97 91

樣例輸出

20070001 94 92 97 93 90 93.2

20070005 84 89 92 81 73 83.8

20070004 82 75 94 86 95 86.4

20070003 84 86 82 97 91 88.0

86.0 85.5 91.3 89.3 87.3

#include<stdio.h>
void f(int a[20][6],int n)
{
 int i,j;
 double b[5],d;
 for(i=0;i<n;i++)
 {
  d=0;
  for(j=1;j<6;j++)
  {
   d=d+a[i][j];
  }
  b[i]=d/5;
 }
 for(i=0;i<n;i++)
 {
  for(j=0;j<6;j++)
  {
   printf("%d ",a[i][j]);
  }
  printf("%.1lf\n",b[i]);
 }
}
void x(int (*p)[6],int n)//在定義指標時用指向陣列的指標變數,這的意思是指向包含6個int型別的一維陣列
{
 int i,j;
 double k,b;
 for(i=1;i<6;i++)
 {
  k=0;
  for(j=0;j<n;j++)
  {k=k+*(*(p+j)+i);}//在進行運算時用*(p+j)取行地址,用*(*(p+j)+i)取行與列的地址所代表的值
  b=k/n;
  if(i<5)
  {printf("%.1lf ",b);}
  else
  {printf("%.1lf",b);}
 }
}
int main()
{
 int n,i,j,a[20][6];
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  for(j=0;j<6;j++)
  {scanf("%d",&a[i][j]);}
 }
 f(a,n);
 x(a,n);
 printf("\n");
 return 0;
}

相關推薦

關於陣列地址賦予指標的問題

題目描述 一個班有N(N <20)名學生,每個學生修了五門課。編寫程式:      1)求每個學生的平均成績,並輸出每個學生的學號,每門課程的成績及平均值。      2)求某門課程的平均分;      要求:      1) 分別編寫2個函式實現以上2個要求。

C/C++陣列名和二級指標

轉載自http://blog.csdn.net/wu_nan_nan/article/details/51741030 C/C++二維陣列名和二級指標 原創 2016年06月23日

【C++】函式如何傳遞陣列陣列是怎麼通過指標進行傳遞?

舉例子: int data[3][4] ={ {1,2,3,4} , {5,6,7,8} , {9,10,11,12} }; int total = sum(data,3); 請自己先嚐試寫出sum函式的原型 思考過後,請繼續看下面詳細分析:

取多陣列地址的方法

#include <stdio.h> #include <cstdlib> int main(void) { //char a[1] = {'1'};char a[1][1] = {'1'};/*char a[2][2][3] = {{{'1','2

C語言陣列指標地址問題

若arr是一維陣列名,我們知道*arr就是arr[0],就是*(arr+0)。因為arr是陣列的首地址,*arr就是取首地址所指元素,就是陣列的第一個元素。同樣的道理,arr是二維陣列名時,*arr也是取arr的第一個元素,但是此時arr所指的元素是一個一維陣列,所以,實

C語言中陣列名與陣列地址地址元素地址關係與區別詳解(初學者必須掌握)

C語言作為很多大學理工科都會學習的語言,作為一種程式設計入門語言。但是相對於其他高階程式語言來說相對是比較難,尤其是指針,不知道有多少莘莘學子都是因為它,從C語言入門到放棄。想當年,筆者在大一學習C語言

陣列初始化及地址

#include<stdio.h> #include<stdlib.h> void main4() { int num[3][4]; //二維陣列相當於 元素為一維陣列的一維陣列 int number = 1; for (int i = 0

array2是一個陣列的陣列名,所以array2+i就是指向了第i行陣列地址地址

char *array2[3]={ "Hello,this is a sample!", "Hi,good morning.", "Hello world" }; 定義了一個以array2為名稱的指向char型別的指標陣列,該陣列的每個單元都是一個指標,這些指 針各指向一個字串。把指標陣列名arr

徹底搞清C/C++中一陣列陣列指標陣列指標指標陣列以及指向指標指標,行地址和列地址之間的關係

#include <iostream> using namespace std; void test(char **ptr) { for(;(strcmp(*ptr,"NULL"))!=0;ptr=ptr+1)        cout << *(ptr) <&l

陣列模型之指標陣列

#include <stdio.h> #include <stdlib.h> #include <string.h> #if 0 int main(int agrc, char *argv[]) { int i = 0; for(; i<

c語言實現用指標遍歷陣列

1 #include <stdio.h> 2 void bian(int row,int col,int *a) 3 { 4 int i,j; 5 for(i=0;i<row;i++) 6 for(j=0;j<col;j++) 7

【C語言】一陣列陣列指標

一維陣列和指標: 1、一維陣列名: 對於這樣的一維陣列:int a[4];  a作為陣列名就是我們陣列的首地址, a是一個地址常量 .  首先說說常量和變數的關係, 對於變數來說, 用箱子去比喻再好不過了, 宣告一個變數就宣告一個箱子,比如我們開闢出一個蘋果型別的箱子, 給這個變

陣列指標詳解

二維陣列、指標詳解: 1.研究二維陣列的表示。 首先,用程式碼執行進行測試,驗證的相關結果, // C.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> using namespace std

利用動態規劃演算法解01揹包問題->陣列傳參->cpp記憶體管理->堆和棧的區別->常見的記憶體錯誤及其對策->指標陣列的區別->32位系統是4G

1、利用動態規劃演算法解01揹包問題 https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html 兩層for迴圈,依次考察當前石塊是否能放入揹包。如果能,則考察放入該石塊是否會得到當前揹包尺寸的最優解。 // 01 knap

C語言陣列指標練習

描述 程式填空,使其輸出結果是: 1,2,3,4, 10,12,14,16, 18,20,11,12, #include <iostream> using namespace std; void Double(int * p, int n) { for(int i = 0;i

陣列使用指標進行操作的探索(C語言)

1 /* 2 Name: 對二維陣列使用指標進行操作的探索 3 Copyright: 4 Author: lingr7 5 Date: 01/12/18 11:55 6 Description: 7 */ 8 #include<stdi

C語言之指標陣列

    指標,其實就是地址,可以指向一塊自己分配大小的空間。陣列即是多塊一位的空間的線性排布。二維陣列,雖然在人文定義的感覺上有了面的理解,但實際在記憶體中也是一維的線性空間。     對於討論二維陣列,首先我們應該先討論一維陣列與

C語言陣列篇(五)多級指標陣列指標的區別

多級指標   以二級指標為例 二級指標的由來是 指標陣列 的指標形式. int *p[10] 讀取的順序是 p[10] --> 10個空間的陣列 * p[10] --> 這10個空間的數組裡面存放的資

指標7(指標陣列

先來道例題 #include<stdio.h> int main() {int a[3][4]={{0,1,2,3},{10,11,12,13},{20,21,22,23}}; int *p,i,j; p=&a[0][0]; printf("\n"); for

C ++ 指標 | 指標陣列_5

指標與二維陣列  根據上面的圖,我現在寫一些語句,我們一起來判斷輸出值是多少!! int (*p)[3] = B; print B; 這個會列印多少? 思考一下。。。。。。。 。。。 。。。 。。。 列印: 400 print *B;