關於二維陣列首地址賦予指標的問題
題目描述
一個班有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;