• 沒有找到結果。

C语言程序设计上机实验指导 - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "C语言程序设计上机实验指导 - 万水书苑-出版资源网"

Copied!
10
0
0

加載中.... (立即查看全文)

全文

(1)第 4 章 数组 在本章中,需重点掌握的内容有: (1)一维数组的定义、引用、初始化。 (2)一维数组在程序中的应用。 (3)二维数组的定义、引用、初始化。 (4)二维数组在程序中的应用。. 4.1. 考核知识点. 1.一维数组的定义、引用、初始化 在 C 语言中使用数组必须先进行定义。一维数组的定义形式如下: 类型说明符 数组名[常量表达式];. 例如: int a[5];. 声明整型数组 a,有 5 个元素分别为 a[0],a[1],a[2],a[3],a[4]。 数组元素引用的一般形式为: 数组名[下标]. 其中下标只能为整型常量或整型表达式。如为小数时,C 编译系统将自动取整。 例如: a[5] a[i+j] a[i++]. 都是合法的数组元素。 初始化赋值的一般形式为: 类型说明符 数组名[常量表达式]={值,值……值};. 其中在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。 例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 };. 相当于 a[0]=0;a[1]=1...a[9]=9; C 语言对数组的初始化赋值还有以下几点规定: 1)可以只给部分元素赋初值。 当{}中值的个数少于元素个数时,只给前面部分元素赋值。 例如: int a[10]={0,1,2,3,4};. 表示只给 a[0]~a[4]5 个元素赋值,而后 5 个元素自动赋 0 值。 2)只能给元素逐个赋值,不能给数组整体赋值。.

(2) 第 4 章 数组. 例如给 10 个元素全部赋值 1,只能写为: int a[10]={1,1,1,1,1,1,1,1,1,1};. 而不能写为: int a[10]=1;. 3)如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。 例如: int a[5]={1,2,3,4,5};. 可写为: int a[]={1,2,3,4,5}; //系统自动根据初值的个数确定长度为 5. 2.一维数组在程序中的应用。 main() { int i,min,a[10]; printf("input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); min=a[0]; for(i=1;i<10;i++) if(a[i]<min) min=a[i]; printf("min=%d\n",min); }. 本例程序中第一个 for 语句逐个输入 10 个数到数组 a 中。然后把 a[0]送入 min 中。在第 二个 for 语句中,从 a[1]到 a[9]逐个与 min 中的内容比较,若比 min 的值小,则把该元素的值 送入 min 中,因此 min 总是在已比较过的数组元素中为最小者。比较结束,输出 min 的值。 3.二维数组的定义、引用、初始化 二维数组定义的一般形式是: 类型说明符 数组名[常量表达式 1][常量表达式 2];. 例如: int a[3][4];. 声明了一个 3 行 4 列的整型数组,数组名为 a。该数组的元素共有 3×4 个,即: a[0][0],a[0][1],a[0][2],a[0][3] 第 0 行 a[1][0],a[1][1],a[1][2],a[1][3] 第 1 行 a[2][0],a[2][1],a[2][2],a[2][3] 第 2 行 在 C 语言中,二维数组是按行存放的。 二维数组元素引用的一般形式是: 数组名[下标][下标]. 其中下标应为整型常量或整型表达式,下标是从 0 开始的。 如:数组元素中 a[2][3]表示 a 数组中第 2 行第 3 列的元素。 二维数组初始化也是在类型说明时给数组各元素赋以初值。二维数组可按行分段赋值, 也可按行连续赋值。 例如对数组 a[5][3]: 1)按行分段赋值可写为: int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} }; 51.

(3) C 语言程序设计上机实验指导. 2)按行连续赋值可写为: int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};. 4.二维数组在程序中的应用 以下程序为行列转置程序,从键盘上输入一个 3×4 的矩阵,将其转置后形成 4×3 的矩 阵输出。 算法分析如下:A 矩阵用 3 行 4 列的二维数组存放,B 矩阵用 4 行 3 列的二维数组存放。 外层用次数为 3 的循环控制行(控制变量用 i) ,内层用次数为 4 的循环控制列(控制变量用 j), 循环体中将 Aji 存入 Bij。 程序如下: main() { int a[3][4],b[4][3],i,j; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); for(i=0;i<4;i++) for(j=0;j<3;j++) b[i][j]=a[j][i]; for(i=0;i<4;i++) {for(j=0;j<3;j++) printf("%5d",b[i][j]); printf("\n"); } }. 4.2 (. 典型例题. 例 4.1 若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是 )。 A.#define N 10 B.#define n 5. int a[N]; int a[2*n]; C.int a[5+5]; D.int n=10,a[n]; 答案:D 分析:本题是 2006 年 9 月的二级 C 考题,考查点在“一维数组的定义形式中数组长度必 须为常量”。D 选项中 n 是变量,不是常量表达式,故错误。 例 4.2 以下程序运行后的输出结果是( )。 main() { int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf("%d",n[i]); } }. 52.

(4) 第 4 章 数组. 答案:13715 分析:本题首先定义并初始化数组 n,数组包含 5 个元素,初值全部为 0,然后进入 for 循环。在第一轮循环中,i 的值为 1,n[1]=n[0]*2+1,即 n[1]为 0*2+1,结果为 1。printf 函数 输出 n[1]的值为 1。程序进入第二轮循环,i 的值为 2,n[2]=n[1]*2+1,即 n[2]的值为 1*2+1, 结果为 3。printf 函数输出 n[2]的值为 3。同样程序再进行第三轮、第四轮循环,分别输出 7 和 15 后跳出循环。 例 4.3 以下程序运行后的输出结果是( )。 main() { int i,sum,avg,a[8]={7,3,9,11,4,13,1,8}; sum=0; for(i=0;i<8;i++) sum+=a[i]; avg=sum/8; printf("sum=%d avg=%d\n",sum,avg); }. 答案:sum=56 avg=7 分析:本题的作用是对数组的各个元素进行求和,然后算出其平均数。注意:在求和之前 必须对 sum 赋初值为 0。如果程序中没有 sum=0;语句,那么程序运行后将得不到正确的结果。 例 4.4 以下数组中定义错误的是( )。 A.int x[][3]={0}; B.int x[2][3]={{1,2},{3,4},{5,6}}; C.int x[][3]={{1,2,3},{4,5,6}}; D.int x[2][3]={1,2,3,4,5,6}; 答案:B 分析:本题是 2006 年 4 月的二级 C 考题,考查点在二维数组的定义和初始化。B 选项在 初始化时,赋值号右边最外层的花括弧内多了一对花括弧,造成了 3 行,而定义的只是 2 行。 例 4.5 有以下程序: main() { int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf("%d",t[2-i][i]); }. 程序运行后的输出结果是( )。 A.753 B.357 C.369 D.751 答案:B 分析:本题是 2006 年 4 月的二级 C 考题,考查点在二维数组的定义、引用和初始化。程 序首先定义并初始化了一个二维数组 t。t 数组在定义时只指定了列数 3,系统根据初值的个数 9,自动计算出行数为 3。程序接着使用 for 循环输出某些特定元素:i 的值为 0 时,输出 t[2][0] 的值,即为第 2 行第 0 列的元素,值为 3;i 的值为 1 时,输出 t[1][1]的值,即为第 1 行第 1 列的元素,值为 5;i 的值为 2 时,输出 t[0][2]的值,即为第 0 行第 2 列的元素,值为 7。 例 4.6 有以下程序: main() { int x[3][2]={0},i;. 53.

(5) C 语言程序设计上机实验指导 for(i=0;i<3;i++) scanf("%d",&x[i][0]); printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]); }. 若运行时输入:2 4 6<回车>,则输出结果是( ) 。 A.2 0 0 B.2 0 4 C.2 4 0 D.2 4 6 答案:B 分析:本题是 2006 年 9 月的二级 C 考题,考查点在二维数组的定义、引用和初始化。程 序利用 scanf 函数分别给 x[0][0]、x[1][0]、x[2][0]输入值为 2、4、6。然后再输出 x[0][0]、x[0][1]、 x[1][0]的值。其中 x[0][0]为 2,x[1][0]为 4,x[0][1]元素没被输入值因此保留初值为 0。. 4.3. 习题. 一、选择题 1.以下能正确定义一维数组的选项是( A.int num[];. )。 B.#define N 50 int num[N]; D.int N=50;. C.int num[0…50]. int num[N]; 2.有以下程序: main() { int b[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&b[i]%2){k+=b[i];i++;} printf("%d\n",k); }. 执行后输出结果是( )。 A.58 B.56 3.有以下程序:. C.45. D.24. C.56. D.60. main() { int b[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7)if(b[i]%2)j+=b[i]; printf("%d\n",j); }. 程序运行后的输出结果是( A.42 B.45 4.有以下程序: main() { int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for(j=2;j>=i;j--) if(x[j+1]>x[j]) 54. )。. /*从大到小排序*/.

(6) 第 4 章 数组 { k=x[j]; x[j]=x[j+1]; x[j+1]=k; } for(i=0;i<3;i++) for(i=4;i<7-i;i++) if(x[j+1]<x[j]). /*从小到大排序*/. { k=x[j]; x[j]=x[j+1]; x[j+1]=k; } for(i=0;i<8;i++)printf("%d",x[i]); printf("\n"); }. 程序运行后的输出结果是( )。 A.75310246 B.01234567 C.76310462 D.13570246 5.以下能正确定义二维数组的是( )。 A.int a[][3] B.int a[][3]={2*3}; C.int a[][3]={}; D.int a[2][3]={{1},{2},{3}}; 6.以下能正确定义数组并正确赋初值的语句是( )。 A.int N=5,b[N][N]; B.int a[1][2]={{1},{2}}; C.int c[2][]={{1,2},{3,4}}; D.int d[3][2]={{1,2}{3,4}}; 7.以下不能正确定义二维数组的选项是( ) 。 A.int a[2][2]={{1},{2}}; B.int a[][2]={5,6,7,8}; C.int a[2][2]={{5},7,8}; D.int a[3][]={{3},{4},{5}}; 8.已知:int a[3][2]={3,2,1};则表达式 a[0][1]/a[0][0]/a[1][0]的值是( )。 A.0.16667 B.1 C.0 D.错误表达式 9.已知:int a[][3]={1,2,3,4,5};数组 a 的元素个数是( )。 A.5 B.6 C.8 D.数组定义错误 10.有以下程序: main() { int n[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++) printf("%d",n[k][i]); }. 执行后输出结果是( )。 A.456 B.258 11.有以下程序:. C.369. D.789. main() { int a[][3]={{1,2,3},{4,5,0}},i; for(i=0;i<3;i++) if(i<2) a[1][i]=a[1][i]-1; 55.

(7) C 语言程序设计上机实验指导 else a[1][i]=1; printf("%d\n",a[0][1]+a[1][1]+a[1][2]); }. 执行后输出结果是( )。 A.7 B.6 12.有以下程序:. C.8. D.无确定值. main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0; for(i=0;i<4;i++)s+=a[i][1]; printf("%d\n",s); }. 程序运行后的输出结果是( A.11 B.19 13.以下程序的输出结果是(. )。 C.13. D.20. C.1. D.9. )。. main() { int m[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++)t=t+m[i][m[j][j]]; printf("%d\n",t); }. A.3. B.4. 二、填空题 1.以下程序运行后的输出结果是__________。 main() { int b[7]={11,13,14,15,16,17,18},i=0,j=0; while(i<7&&b[i]%2==1)j+=b[i++]; printf("%d\n",j); }. 2.以下程序运行后的输出结果是__________。 main() { int i,a[5]={1}; for(i=1;i<=4;i++) { a[i]=a[i-1]*2+1; printf("%d",a[i]); } }. 3.以下程序的功能是读入 20 个整数,统计非负数个数,并计算非负数之和。 main() { int i,a[20],s,number; s=number=0; for(i=0;i<20;i++) scanf("%d",__________);. 56.

(8) 第 4 章 数组 for(i=0;i<20;i++) { if(a[i]<0) __________; s+=a[i]; number++; } printf("s=%d number=%d\n",s,number); }. 4.以下程序运行后的输出结果是__________。 main() { int m[3][3]={1,2,9,3,4,8,5,6,7},i,s=0; for(i=0;i<3;i++) s+=m[i][i]+m[i][3-i-1]; printf("%d\n",s); }. 5.以下程序运行后的输出结果是__________。 main() { int i,j,m[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) m[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ",m[i][j]); printf("\n"); } }. 6.以下程序运行后的输出结果是__________。 main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; int i=0,s=0,j=0; while(i++<4) { if(i==2||i==4)continue; j=0; do{s+=a[i][j];j++;} while(j<4); } printf("%d\n",s); }. 7.以下程序的输出结果是__________。 main() { int m[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) m[i][j]=i+j; for(i=0;i<2;i++) for(j=0;j<2;j++) m[i+1][j+1]+=m[i][j]; printf("%d\n",m[2][2]); 57.

(9) C 语言程序设计上机实验指导 }. 8.以下程序的输出结果是__________。 main() { int m[3][3]={{1},{2},{3}}; int k[3][3]={1,2,3}; printf("%d ",m[1][0]+k[0][0]); printf("%d\n",m[0][1]+k[1][0]); }. 三、编程训练题 1.编写程序,统计 10 名同学某科目成绩的及格人数(大于或等于 60 的为及格)。 2.编写程序,从键盘输入一组数据,然后将这组数据按从小到大的顺序排序并输出。. 4.4. 实验指导. 实验目的 (1)一维数组在程序中的应用。 (2)二维数组在程序中的应用。 实验内容 实验 1 有以下程序,程序要求从键盘输入 10 个整型数据给一维数组,然后查找数据为 60 的数 组元素,如果找到,就将该数组元素的下标输出到屏幕上,否则输出-1。请输入几组不同数据 体验该程序并思考其程序逻辑。 main() { int i,j,b[10]; j=-1; for(i=0;i<10;i++) scanf("%d",&b[i]); for(i=0;i<10;i++) if(b[i]==60){j=i;printf("%d ",j);} if(j==-1)printf("%d",j); }. 实验 2 有以下程序,程序的功能是:输入 9 个整数,按每行 3 个数输出这些整数,最后输出 9 个整数的平均值。请体验该程序并思考如何简化该程序。 main() { int i,a[9],sum=0,avg; for(i=0;i<9;i++) scanf("%d",&a[i]); for(i=0;i<9;i++). 58.

(10) 第 4 章 数组 { printf("%d ",a[i]); if((i+1)%3==0) printf("\n"); } for(i=0;i<9;i++) sum+=a[i]; avg=sum/9; printf("avg=%d\n",avg); }. 实验 3 有以下程序,程序的作用是输出二维数组右上半三角。请体验该程序,并思考如何编写 程序输出左下半三角。 main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{1,2,3,4},{5,6,7,8}},i,j; for(i=0;i<4;i++) { for(j=1;j<=i;j++) printf("%c",' '); for(j=i;j<4;j++) printf("%d",a[i][j]); printf("\n"); } }. 实验 4 有以下程序,程序的功能是将数组中每行不小于零的奇数相加,在内循环中如果遇到了 偶数就退出内循环,遇到了小于 0 的奇数就结束本次内循环。程序的运行结果是 8。请体验该 程序并思考运行结果得到的逻辑过程。 main() { int a[3][3]={{3,2,3,-4},{-3,-11,-13,1},{-11,5,4,7}}; int i,j,s=0; for(i=0;i<3;i++ ) for(j=0;j<3;j++ ) { if(a[i][j]%2==0)break; if(a[i][j]<0)continue; s=s+a[i][j]; } printf("s=%d\n",s); }. 注:在 VC6.0 开发环境下调试程序,须在程序开头加上“#include<stdio.h>”命令。. 59.

(11)

參考文獻

相關文件

二、提醒貴公司依「多國多中心藥品臨床試 驗計畫審查程序」 ,如計畫內容變更,應檢附

3.8.2 學校自評多以教師和學生的觀感作為成效 指標,流於主觀,學校及科組仍未能完全掌握運

方法一: 採用 【Compare Means】分析選項 One- One -way ANOVA way ANOVA分析報表說明 分析報表說明

約千年的時間 二十世紀初及以後 約百多年的時間 中國古代史 中國近世史 中國近現代史. 政治史 文化史

1.學生體驗Start on tap、一個角色同 時可觸發多於一 個程序及經歷運 用解決問題六步 驟編寫及測試程 序.

也就是設定好間隔時間(time slice)。所有的 程序放在新進先出的佇列裡面,首先CPU

实验教学中心3个(含 29个专业实验室)、广 东省联合培养研究生示 范基地1个、广东省高校 产学研结合示范基地1个、.

• 提供程序性指導 程序性指導 程序性指導 程序性指導(procedural facilitation),而非實 質性指導(substantive