//下面每种情况中*ptr和*(ptr+2)的值分别是什么
int *ptr;
int torf[2][2] = {12,14,16};
ptr = torf[0];
//*ptr = 12;*(ptr+2) = 16;把16视作二维数组第二行第一个值
int *ptr;
int fort[2][2] = {{12},{14,16}};
ptr = fort[0];
//*ptr = 12;*(ptr+2) = 14;第一行只有一个值,第二个值为空,跳过2个位置也包括空的位置
//下面每种情况中**ptr和**(ptr+1)的值分别是什么
int(*ptr)[2];
int torf[2][2] = {12,14,16};
ptr = torf;
//**ptr = 12;**(ptr+1) = 16;把16视作二维数组第二行第一个值
int (*ptr)[2];
int fort[2][2] = {{12},{14,16}};
ptr = fort;
//**ptr = 12;**(ptr+1) = 14;
6.假设有如下定义;
int grid[30][100];
a.用1种方法标示grid[22][56]的地址
&grid[22][56]
b.用2种方法表示grid[22][0]的地址
&grid[22][0] = grid[22]
c.用3种方法表示grid[0][0]的地址
grid = (int *)grid = grid[0] = &grid[0][0] //grid和(int *)grid是一样的
7。用适当的方法声明下面每个变量:
int digits[10];
float rates[6];
int mat[3][5];
char *psa [20] = char *(psa[20]);//一个包含20个指向char的指针的数组([]优先级比*高,所以没有圆括号时首先应用数组描述符,然后才是指针描述符)
char (*pstr) [20];//一个指向数组的指针,其中数组由20个char值构成
8,
int a[6] = {1,2,4,8,16,32};
a[2];
int a[100] = {[99] = -1};
10.
float rootbeer[10],things[10][5],*pf,value = 2.2;
int i = 3;
下列正确还是错误
rootbeer[2] = value;//正确
scanf("%f",&rootbeer)//错误,rootbeer就是一个地址,不用&
rootbeer = value;//错误,rootbeer是一个地址
printf("%f",rootbeer);//错误,rootbeer是一个地址应该用%p
things[4][4] = rootbeer[3];//正确
things[5] = rootbeer;//错误,不能使用数组赋值
pf = value;//错误value不是地址
pf = rootbeer;//正确
12.以下是3个数组声明;
double trots[20];
short clops[10][30];
long shots[5][10][15];
a.以传统的void函数方式,写出处理数组trots的函数原型和函数调用;然后以变长数组的方式,写出处理数组trots的函数原型和函数调用;
1.void a1(double trots[],int row);
a1(trots,20);
2.void a2(int row,trots[row]);
a2(20, trots);
b.以传统的void函数方式,写出处理数组clops的函数原型和函数调用;然后以变长数组方式,写出处理数组clops的函数原型和函数调用
1.void b1(short clops[][30],int row)
b1(clops,10);
2.void b2(int cols,int row,short clops[row][cols])
b2(10,30,clpos)
c.以传统的void函数方式,写出处理数组shots的函数原型和函数调用,然后以变长数组方式,写出处理数组shots的函数原型和函数调用。
1.void c1(long shorts[][10][15],int rows);
c1(shorts,5);
2.void c2(int row1,int row2,int row3, long shorts[row1][row2][row3])
c2(5,10,15,shorts);
10.
show((double []){8,3,9,2},4);
show2((double[][3]){{8,3,9},{5,4,1},2);
编程题
1
#include <stdio.h>
#define MONTHS 12 //一年的月份数
#define YEARS 5 //降水量数据的年数
int main()
{
const float rain[YEARS][MONTHS] =
{
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6}
};
int year,month;
float subtot,total;
printf("YEAR RAINFALL (inches)\n");
for(year = 0,total = 0; year < YEARS; year++)
{
for(month = 0,subtot = 0; month<MONTHS; month++)
{
//subtot+=rain[year][month];//数组方式
subtot+=*(*(rain+year)+month);//指针方式
}
printf("%5d %15.1f\n",2000 + year,subtot);
total += subtot;//所有年度的总降水量
}
printf("\nThe yearly average is %.1f inches.\n\n",total/YEARS);
printf("MONTHLY AVERAGES:\n\n");
printf("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n")
for(month = 0; month<MONTHS; month++)
{
for(year = 0,subtot = 0; year <YEARS; year++)
{
//subtot+=rain[year][month];
subtot+=*(*(rain+year)+month);
}
printf("%4.1f",subtot/YEARS);
}
printf("\n");
return 0;
}
2.
#include <stdio.h>
int main()
{
double a[2] = {1.2,2.3};
double b[2];
double c[2];
cp1(a,b,2);
cp2(a,c,2);
return 0;
}
void cp1(double a[],double b[], int r)
{
int i;
for(i = 0; i <r; i++)
{
b[i] = a[i];
}
for(i = 0; i <r; i++)
{
printf("%lf\n",b[i]);
}
}
void cp2(double *a,double *c,int r)
{
int i;
for(i = 0; i <r; i++)
{
*(c++) = *(a++);
//*(c+i) = *(a+i)
}
for(i = 0; i <r; i++)
{
printf("%lf\n",c[i]);
}
}
3.
#include <stdio.h>
int main()
{
int a[4] = {3,2,7,1};
printf("%d",getMax(a,4));
return 0;
}
/*
int getMax(int a[],int r)
{
int i,m;
for(i = 0,m = 0; i < r; i++)
{
if(a[i] >= m)
{
m = a[i];
}
}
return m;
}
*/
int getMax(int *a,int r)
{
int i,m;
for(i = 0,m = 0; i < r; i++)
{
if(*a >= m)
{
m = *a;
}
*(a++);
}
return m;
}
4.
#include <stdio.h>
double getMax(double a[],int r);
int main()
{
double a[4] = {3.1,2.1,7.1,1.1};
printf("%lf",getMax(a,4));
return 0;
}
/*
double getMax(double a[],int r)
{
int i;
double m;
for(i = 0,m = 0; i < r; i++)
{
if(a[i] >= m)
{
m = a[i];
}
}
return m;
}
*/
double getMax(double *a,int r)
{
int i;
double m;
for(i = 0,m = 0; i < r; i++)
{
if(*a >= m)
{
m = *a;
}
*(a++);
}
return m;
}
5.
#include <stdio.h>
double getMax(double a[],int r);
int main()
{
double a[4] = {3.1,2.1,7.1,1.1};
printf("%lf",getMax(a,4));
return 0;
}
/*
double getMax(double a[],int r)
{
int i;
double m,ma;
for(i = 0,m = 0; i < r; i++)
{
if(a[i] >= m)
{
m = a[i];
}
}
for(i = 0,m = 0,ma=a[i]; i < r; i++)
{
if(a[i] >= m){
m = *a;
}
if(a[i] <= ma){
ma = *a;
}
}
return m-ma;
}
*/
double getMax(double *a,int r)
{
int i;
double m,ma;
for(i = 0,m = 0,ma=*a; i < r; i++)
{
if(*a >= m)
{
m = *a;
}
if(*a <= ma)
{
ma = *a;
}
*(a++);
}
return m-ma;
}
6.
#include <stdio.h>
int main(){ int i; double a[2][4] = {{3.1,2.1,7.1,1.1},{3.1,2.1,7.1,1.1}}; double b[2][4]; for(i = 0;i<2;i++) cp1(a[i],b[i],4); return 0;}void cp1(double a[],double b[], int r){ int i; for(i = 0; i <r; i++) { b[i] = a[i]; } for(i = 0; i <r; i++) { printf("%lf\n",b[i]); }}void cp1(double a[],double b[], int r);
7#include <stdio.h>
int main(){ int i; double a[7][2] = {{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{7.1,1.1}}; double b[3][2]; for(i = 0; i<7; i++) { if(i > 1 && i <5) cp1(a[i],b[i],2); } return 0;}void cp1(double a[],double b[], int r){ int i; for(i = 0; i <r; i++) { b[i] = a[i]; } for(i = 0; i <r; i++) { printf("%lf\n",b[i]); }}void cp1(double a[],double b[], int r);
8#include <stdio.h> void cp(int r,int c,double a[r][c],double b[r][c]); void pr(int r,int c,double a[r][c],double b[r][c]); int main() { int i; double a[7][2] = {{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{7.1,1.1}}; double b[7][2]; cp(7,2,a,b); pr(7,2,a,b); return 0; } void cp(int r,int c,double a[r][c],double b[r][c]) { int i,j; for(i = 0; i <r; i++) { for(j = 0;j<c;j++) b[i][j] = a[i][j]; } } void pr(int r,int c,double a[r][c],double b[r][c]) { int i,j; for(i = 0; i <r; i++) { for(j = 0;j<c;j++) { printf("a[%d][%d] = %lf\nb[%d][%d] = %lf\n",i,j,a[i][j],i,j,b[i][j]); } } }
9.#include <stdio.h> void add(int r,int c,double a[r][c],double b[r][c],double d[r][c]); int main() { int i; double a[7][2] = {{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{7.1,1.1}}; double b[7][2] = {{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{3.1,2.1},{7.1,1.1},{7.1,1.1}}; double c[7][2]; add(7,2,a,b,c); pr(7,2,a,b,c); return 0; } void add(int r,int c,double a[r][c],double b[r][c],double d[r][c]) { int i,j; for(i = 0; i <r; i++) { for(j = 0;j<c;j++) d[i][j] = b[i][j] + a[i][j]; } } void pr(int r,int c,double a[r][c],double b[r][c],double d[r][c]) { int i,j; for(i = 0; i <r; i++) { for(j = 0;j<c;j++) { printf("a[%d][%d] = %lf\nb[%d][%d] = %lf\nd[%d][%d] = %lf\n",i,j,a[i][j],i,j,b[i][j],i,j,d[i][j]); } } }
10#include <stdio.h> #define COLS 5 void add(int r,int c,double a[r][c],double b[r][c],double d[r][c]); int main() { int i; double a[3][5] = {{3.1,2.1,7.1,1.1,2,2},{3.1,2.1,7.1,1.1,2,2},{3.1,2.1,7.1,1.1,7.1}}; pr(3,a); dou(3,a); pr(3,a); return 0; } void dou(int r,double a[][COLS]) { int i,j; for(i = 0; i <r; i++) { for(j = 0; j<COLS; j++) a[i][j] = 2 * a[i][j]; } } void pr(int r,double a[][COLS]) { int i,j; for(i = 0; i <r; i++) { for(j = 0; j<COLS; j++) { printf("a[%d][%d] = %lf\n",i,j,a[i][j]); } } }
11#include <stdio.h> #define MONTHS 12 //一年的月份数 #define YEARS 5 //降水量数据的年数 int main() { const float rain[YEARS][MONTHS] = { {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6}, {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6}, {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6}, {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6}, {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6} }; int year,month; float subtot,total; printf("YEAR RAINFALL (inches)\n"); fun1(rain); printf("\nThe yearly average is %.1f inches.\n\n",total/YEARS); printf("MONTHLY AVERAGES:\n\n"); printf("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n"); fun2(rain); printf("\n"); return 0; } void fun1(const float rain[YEARS][MONTHS]) { int year,month; float subtot,total; for(year = 0,total = 0; year < YEARS; year++) { for(month = 0,subtot = 0; month<MONTHS; month++) { //subtot+=rain[year][month];//数组方式 subtot+=*(*(rain+year)+month);//指针方式 } printf("%5d %15.1f\n",2000 + year,subtot); total += subtot;//所有年度的总降水量 } } void fun2(const float rain[YEARS][MONTHS]) { int year,month; float subtot,total; for(month = 0; month<MONTHS; month++) { for(year = 0,subtot = 0; year <YEARS; year++) { //subtot+=rain[year][month]; subtot+=*(*(rain+year)+month); } printf("%4.1f",subtot/YEARS); } }
12/13#include <stdio.h> void input(int r,int c,double rain[r][c]); void avg(int r,int c,double rain[r][c]); int main() { double rain[3][5]; input(3,5,rain); avg(3,5,rain); return 0; } void input(int r,int c,double rain[r][c]) { int i,j; for(i=0; i<r; i++) { for(j=0; j<c; j++) { printf("请输入rain[%d][%d]的值:",i,j); scanf("%lf",&rain[i][j]); } } } void avg(int r,int c,double rain[r][c]) { int i,j; double tt[r],total; for(i=0; i<r; i++) { for(tt[i]=0,j=0; j<c; j++) { tt[i]+=rain[i][j]; } } for(i=0; i<r; i++) { total+=tt[i]; printf("avg%d=%lf\n",i,tt[i]/c); } printf("avgall=%lf\n",total/(r*c)); }