admin 管理员组

文章数量: 1086019


2024年4月21日发(作者:架构设计师招聘)

6.2基础实验

一、程序分析

分析以下程序段完成的功能,填写在序号后的空白处,并运行验证结果。

1. ⊙以下程序的运行结果是:_______s=12345↙____________________。

#include

int main( )

{ inta[]={1,2,3,4,5},i,j=1,s=0;

for(i=4;i>=0;i--)

{ s=s+a[i]*j;

j=j*10;

}

printf(“ s= %d n” , s );

return 0;

}

2. 以下程序的运行结果是:_____7 5 3______________________。

#include

int main( )

{ int k ;

int a[3][3]={9,8,7,6,5,4,3,2,1};

for(k=0;k<3;k++)

printf(“%d ”,a[k][2-k]);

return 0;

}

3. 以下程序的功能是:____查找最大值元素及下标_________________。

#include

int main( )

{ int i, j ,x =0 ,y = 0 , m ;

int a[3][3] = { 1, -2 , 0 , 4 , -5 , 6 , 2 , 4 };

m = a [0][0] ;

for (i=0 ;i < 3 ;i++)

for (j = 0 ; j<3 ; j++ )

if ( a[ i] [ j ] >m )

{ m = a[ i ][ j ] ;

x = i ;

y = j ;

}

printf(“ ( % d , % d ) = % d n”, x , y,m );

return 0;

} 运行结果:___(1 , 2 ) = 6↙_________________

4. 以下程序的的运行结果是:__8,I am student!___________________。

#include

int main( )

{ char s1[50]= “I am ”;

char s2[ ]=“student!” ;

printf(“%d,”, strlen(s2) );

strcat(s1,s2);

printf(“%sn”,s1);

return 0;

}

5.以下程序的运行结果是:_______6_____________________。

#include

int main( )

{ char b[7]={“67da12”};

int i,s=0;

for(i=0;b[i]>='0'&&b[i]<='9';i+=2)

s=10*s+b[i]-'0';

printf (“%dn”,s);

return 0;

}

6. 以下程序的运行结果是:_______CQM_____________________。

#include

int main( )

{ int i=0;

char a[ ]= “cbm”,b [ ]= “cqid”,c[10];

while(a[i]!='0'&&b[i]!='0')

{ if(a[i]>=b[i]) c[i]=a[i]-32;

else c[i]=b[i]-32;

++i;

}

c[i]= '0';

puts (c);

return 0;

}

二、程序填空

1. 下面程序的功能是将十进制整数转换成二进制,请在横线上填写正确内

容。

#include

int main( )

{ int k=0,n,j,num[16]={0};

printf(“输入要转换的十进制数n”);

scanf(“%d”,&n);

printf (“%d转换为二进制数:n”,n);

do

{ num[k]=_n%2_____ ;

n=n/2;

_k++____ ;

}while(n!=0);

for(k=15;k>=0;k--)

printf(“%d”,num[k]);

return 0;

}

2. 设数组 a 的元素均为正整数,以下程序是求 a 中奇数的个数和奇数的

平均值,请在横线上填写正确内容。

#include

int main( )

{ int a[10]={10,9,8,7,6,5,4,3,2,1};

int k,s,i;

float ave;

for(i=0,k=s=0;i<10;i++)

{ if(_a[i]%2==0___ ) continue ;

s+=____a[i]____;

k++;

}

if(k!=0)

{ ave=s/k;

printf (“%d,%.2fn”,k,ave);

}

return 0;

}

3. 下面程序的功能是将字符串a中所有的字符 d 删除。

#include

int main( )

{ char s[80];

int i,j;

gets(s);

for(i=j=0;s[i]!='0';i++)

if(s[i]!='d'){__s[j]=s[i]__; __j++__;}

s[j]='0';

puts(s);

return 0;

}

4.从键盘输入:apple computermusicgame,想找出最大

字符串。

#include

#include

int main( )

{ char str[10],temp[10]={0};

int i;

for(i=0;i<4;i++)

{ gets(str);

if (_strcmp(temp,str)<0_)strcpy(temp,str);

}

puts(temp);

return 0;

}

6.3拓展实验

一、程序改错

要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运

行结果。

1.以下程序实现的功能是求10个元素的和。

行号

1

2

3

4

5

6

7

8

9

10

找错

源程序

#include

int main( )

{ int a[11],i;

for(i=1;i<=10;i++)

scanf (“%d”,&a);

for (i=1, a[0]=0;i<=10;i++);

a[0]=a[0]+a[i];

printf( “sum= %d n”,a[0]);

return 0;

}

错误在5和6行

应改为:scanf (“%d”,&a[i]);和for (i=1, a[0]=0;i<=10;i++)

输入数据:10 9 8 7 6 5 4 3 2 1

运行结果:sum=55

调试正确后

的运行结果

2.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出

这些整数,最后输出10个整数的平均值。写出调试过程。

行号

1

2

3

4

5

6

7

8

9

源程序

#include

int main( )

{ int i,a[10],av;

for(i=0;i<10;i++)

scanf(“%d”,a[i]);

for(i=0;i<10;i++)

{ if(i%3==0)

printf(“n”);

printf(“%d”,a[i]);

10

11

12

13

14

15

找错

}

for(i=0;i!=10;i++)

av+=a[i];

printf(“nav=%.2fn”,av/10.0);

return 0;

}

错误在3和5行

应改为: int i,a[10],av=0;和scanf(“%d”,&a[i]);

输入数据:10 9 8 7 6 5 4 3 2 1

运行结果:av=5.50

调试正确后

的运行结果

3.以下程序的功能是统计字符串的长度。

行号

1

2

3

4

5

6

7

8

9

10

找错

调试正确后

的运行结果

4.⊙下面程序的功能是:将字符数组a [6] ={ ‘a’, ‘ b’, ‘ c’, ‘d’, ‘e’,’ f’ } 变为 a

[6] ={‘f’,’a’, ‘b’ , ‘c’, ‘d’,’e’}。

行号

1

2

源程序

#include

int main( )

源程序

#include

int main( )

{ char a[ ];

int i,len=0;

a=“C Language Program”;

for(i=0;a[i]!='0';i++)

len++;

printf(“字符串%s的长度为%d”,a,len);

return 0;

}

错误在3和5行

应改为:{ char a[ ] =“C Language Program”;

字符串%s的长度为18

3

4

5

6

7

8

9

10

11

12

13

找错

{ int i;char t;

char a[6]={'a','b','c','d','e','f'};

t=a[5];

for(i=5;i!=0;i--)

a[i-1]= a[i];

a[0]=t;

for(i=0;i<=5;i++)

printf (“%c”,a[i]);

printf (“n”);

return 0;

}

错误在7行

应改为: a[i]= a[i-1];

fabcde

调试正确后

的运行结果

5.●调试下列程序,使之具有如下功能:任意输入两个字符串(如:“abc123”

和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较

长的字符串放在b数组,并输出。

行号

1

2

3

4

5

6

7

8

9

10

11

12

13

源程序

#include

#include

int main( )

{ char a[10],b[10],ch;

int c,d,k;

scanf(“%s”,&a);

scanf(“%s”,&b);

c=strlen(a);

d=strlen(b);

if(c>d)

for(k=0;k<10;k++)

{ ch=a[k];a[k]=b[k];b[k]=ch;}

printf(“a=%s,”,a);

14

15

16

}

printf(“b=%sn”,b);

return 0;

错误在6和7行

找错

应改为:scanf(“%s”, a);和scanf(“%s”,b);

输入数据: abc123 china

调试正确后

的运行结果

运行结果:a=china,b=abc123

6.从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元

素之和。

行号

1

2

3

4

5

6

7

8

9

10

11

12

找错

调试正确后

的运行结果

二、编写程序

1.求5×5矩阵两条对角线上的各元素之和。

2.⊙试编制程序使一维数组中的数按照从大到小的次序排列。(起泡法和选择

源程序

#include

int main( )

{ int a[3][3],sum;

int i,j;

sum=0;

for (i=0;i<3;i++)

for (j=0;j<3;j++)

scanf(“%d”,a[i][j]);

for (i=0;i<3;i++)

sum=sum+a[i][i];

printf(“Sum=%dn”,sum);

}

错误在8 行

应改为:scanf(“%d”,&a[i][j]);

输入数据:1 1 1 2 2 2 3 3 3

运行结果:Sum=6

法)

1. #include

intmain( )

{ int a[5][5],i,j,sum=0;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

{scanf(“%d”,&a[i][j]);

if(i==j||i+j==4)

sum+=a[i][j];

}

printf(“%d”,sum);

return 0;

}

}

2. #include //选择法

intmain( )

{ int a[10],i,j,t;

for(i=0;i<10;i++)

scanf(“%d”,&a[i]);

//起泡法

for(i=0;i<9;i++)

for(j=1;j<10-i;j++)

if(a[j-1]

for(i=0;i<10;i++)

printf(“%d ”, a[i]);

return 0;

for(i=0;i<9;i++)

for(j=i+1;j<10;j++)

if(a[i]

6.4习题

一、选择题

1. 在C语言中,引用数组元素时,其数组下标的数据类型允许是()。

A. 整型常量 B. 整型变量

C. 整型常量或整型表达式 D. 任何类型的表达式

2. 若有说明:int a[10];则对数组元素的正确引用是()。

A. a[10] B. a[3.5] C. a(5) D. a[10-10]

3. 以下对一维整型数组a的正确说明是()。

A. int a(10) ; B. int n=10,a[n];

C. int n; D. #define SIZE 10

scanf(“%d”,&n);int a[SIZE];

int a[n];

4. 以下能对包含10个元素的一维数组a进行正确初始化的语句是()。

A. int a[10]=(0,0,0,0,0); B. int a[10]={0};

C. int a[ ]={0}; D. int a[10]={0;0;0;0};

5. 以下叙述中错误的是()。

A. 对于double类型数组,不可以直接用数组名对数组进行整体输入或输

B. 数组名代表的是数组所占存储区的首地址,其值不可改变

C. 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给

出”下标越界”的出错信息

D. 以通过赋初值的方式确定数组元素的个数

6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组

x在内存中所占字节数是()。

A. 3 B. 6 C. 10 D. 20

7. 以下程序的运行结果是()。

#include

int main( )

{int n[5]={0,0,0},i,k=2;

for (i=0;i

printf (”%dn”,n[k]);

return 0;

}

A. 不确定的值 B. 2 C. 1 D. 0

8. 以下程序的运行结果是()。

#include

int main( )

{int i, a[10];

for (i=9;i>=0;i--) a[i]=10-i;

printf(“%d%d%d”,a[3],a[6],a[9]);

return 0;

}

A. 258 B. 741 C. 852 D. 369

9. 以下对二维数组a的正确声明是()。

A. int a[3][ ]; B. float a(3,4) ;C. double a[1][4]; D. float a(3)(4);

10. 以下不能对二维数组进行正确初始化的是()。

A. int a[2][3]={0}; a[ ][3]={{1,2},{0}};

C. int a[2][3]={{1,2},{3,4},{5,6}}; D. int a[ ][3]={1,2,3,4,5,6};

11. 若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是()。

A. a[2][!1] B. a[2][3] C. a[0][3] D. a[1>2][ !1]

12. ⊙以下程序的运行结果是()。

#include

int main( )

{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,k,t;

for(i=0;i<3;i++)

for(k=i+i;k<4;k++) if(a[i][i]

for(i=0;i<4;i++) printf(“%d,”,a[0][i]);

return 0;

}

A.6,2,1,1, B. 6,4,3,2, C. 1,1,2,6, D. 2,3,4,6,

13. 若有说明:int a[3][4]={0};则下面正确的叙述是()。

A. 只有元素a[0][0]可得到初值0

B. 此说明语句不正确

C. 数组a中各元素都可得到初值,但其值不一定为0

D. 数组a中每个元素均可得到初值0

14. 若有说明:int a[][4]={0,0};则下面不正确的叙述是()。

A. 数组a的每个元素都可得到初值0

B. 二维数组a的第一维大小为1

C. 因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a

的行数为1

D. 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0

15. 下面是有关C语言字符数组的描述,其中错误的是()。

A.不可以用赋值语句给字符数组名赋字符串

B.可以用输入语句把字符串整体输入给字符数组

C.字符数组中的内容不一定是字符串

D.字符数组只能存放字符串

16. 下面是对s的初始化,其中不正确的是()。

A. char s[5]={“abc”}; B. char s[5]={‘a’,’b’,’c’};

C. char s[5]=“”; D. char s[5]=“abcdef”;

17. 有两个字符数组a,b,则以下正确的输入语句是()。

A. gets(a,b); B. scanf(“%s%s”,a,b);

C. scanf(“%s%s”,&a,&b); D. gets(“a”),gets(“b”);

18. 对两个数组a和b进行如下初始化:

char a[] = “ABCDEF”;

char b[] = {‘A’,’B’,’C’,’D’,’E’,’F’};

则以下叙述正确的是()。

A. a与b完全相同 B. a与b长度相同

C. a与b中都存放字符串 D. a数组比b数组长度长

19. 设有数组定义:char array[]=“china”,则数组array所占的空间为()。

A. 4个字节 B. 5个字节C. 6个字节 D. 7个字节

20. 以下程序的运行结果是()。

#include

voidmain( )

{char cf[3][5]={“AAAA”,”BBB”,”CC”};

printf(“”%s”n”,cf[1]);

}

.“BBB” C.“BBBCC” D.“CC”

21. 以下程序运行后的运行结果是()。

#include

voidmain( )

{char str[][9]={“hello”, “student”, “computer” };

printf(“%sn”,str[1]);

}

A.h t er

22. 以下程序的运行结果是()。

#include

voidmain( )

{char k,

w[][10]={“ABCD”,”EFGH”,”IJKL”,”MNOP”};

for(k=1;k<3;k++)

printf(“%sn”,w[k]);

}

A. ABCD

EFGHIJKL

23. 以下程序段的运行结果是()。

printf(“%dn”, strlen(“ATSn0121”));

A. 11 B. 10C. 9D. 8

24. 以下程序的运行结果是()。

#include

int main( )

{char a[ ]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’0’};

int i,j;

i=sizeof(a);

j=strlen(a);

printf(“%d,%dn”,i,j);

return 0;

}

A. 9,9 B. 8,9 C. 1,8 D. 9,8

25. ⊙当执行下面的程序时,若输入ABC,则运行结果是()。

#include

#include

int main( )

{char ss[10]=“1,2,3,4,5”;

gets (ss);

strcat(ss,“6789”);

printf(“%sn”,ss);

}

6789 C.123456789 ,3,4,5

26. 为了判断两个字符串str1和str2是否相等,应当使用()。

(str1==str2) (str1=str2)

(strcmp(str1,str2)) (strcmp(str1,str2)==0)

27. 以下程序的运行结果是()。

#include

voidmain( )

{char arr[2][4];

strcpy(arr[0],”you”);

strcpy(arr[1],”me”);

arr[0][3]=‘&’;

printf(“%sn”,arr);

}

&me

28. ⊙有以下程序

#include

#define N 6

int main( )

{charc[N];

inti = 0;

for(i = 0; i < N; i++)

c[i] = getchar( );

for(i = 0; i < N; i++)

putchar(c[i]);

return 0;

}

当运行程序时输入以下三行,每行都是在第一列上开始,代表Enter

键。

a

b

cdef

则程序的运行结果是: ()。

A. abcdef B. a↙C. a↙ D. abcd

b↙ b↙

cdef↙ cd

二、填空题

1. 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]

得到的初值是__0_____,a[2][1]得到的初值为__6______。

2. 下面程序的功能是把以下给定的字符读入数组str1中,并输出行列号之和

是2的数组元素。

#include

int main( )

{char str[4][3]={‘A’,’b’,’c’,’d’,’E’,’f’,’G’,’h’,’I’,’j’, ‘K’,’i’};

int x,y,z;

for(x=0;x<4;x++)

for(y=0;_y<3__; y++)

{z=x+y;

if(_z==2________) printf(“%cn”,str[x][y]);

}

return 0;

}

3. 下面程序以每行4个数据的形式输出a数组,请填空。

#include

#define N 20

int main( )

{int a[N],i;

for(i=0;i

scanf(“%d”,&a[i]);

for(i=0;i

{if (__i%4==0____) ____printf(“n”)______;

printf(“%3d”,a[i]);

}

printf(“n”);

return 0;

}

4. 下面程序可求出矩阵a的主对角线上的元素之和,请填空。

#include

int main( )

{ int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

if(_i==j__)

sum=sum+_a[i][j]__;

printf(“sum=%dn”,sum);

return 0;

}

5.⊙下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,

其它元素不变。请填空。

#include

#include

int main( )

{char a[]=“clanguage”,t;

int i, j, k;

k=strlen(a);

for(i=0; i<=k-2; i+=2)

for(j=i+2; j<=k; j+=2 )

if(a[i]>a[j])

{ t=a[i]; a[i]=a[j]; a[j]=t; }

puts(a);

printf(“n”);

return 0;

}

三、程序分析题

1.以下程序的运行结果是:_12__。

#include

int main( )

{int arr[10], i, k = 0;

for(i = 0; i < 10; i++)

arr[i] = i;

for(i = 0; i < 4; i++)

k += arr[i] + i;

printf(“%dn”, k);

return 0;

}

2.以下程序的运行结果是:AQM。

#include

int main( )

{int i=0;

char a[ ]=“abm”, b[ ]=“aqid”, c[10];

while (a[i]!=‘0’&& b[i]!=‘0’)

{ if (a[i]>=b[i]) c[i]=a[i]-32 ;

else c[i]=b[i]-32 ;

i++;

}

c[i]=‘0’;

puts(c);

return 0;

}

3.⊙以下程序若输入AabD↙,运行结果是:AzyD。

#include

int main( )

{char s[80];

int i=0;

gets(s);

while (s[i]!=‘0’)

{if (s[i]<=‘z’&& s[i]>=‘a’)

s[i]=‘z’+’a’-s[i] ;

i++;

}

puts(s);

return 0;

}

4.⊙以下程序若输入7 4 8 9 1 5↙,运行结果是:7 4 8 9 1 5↙。

#include

int main( )

{ int a[6],i,j,k,m;

for (i=0 ; i<6 ; i++)

scanf (“%d”,&a[i]);

for (i=5 ; i>=0; i--)

{k=a[5];

for (j=4; j>=0; j--)

a[j+1]=a[j] ;

a[0]=k;

}

for (m=0 ; m<6 ; m++)

printf(“%d “,a[m]);

printf(“n”);

return 0;

}

5. ⊙以下程序的运行结果是92 。

#include

int main( )

{ int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};

int i=0,j=0,s=0;

while(i++<4)

{if(i==2||i==4) continue;

j=0;

do

{ s+= a[i][j];

j++;

} while(j<4);

}

printf(“%dn”,s);

return 0;

}

6.⊙以下程序的运行结果是2。

#include

int main( )

{int b [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<=1;j++)

t+=b[i][b[j][i]];

printf(“%dn”,t);

return 0;

}

7.⊙下面程序运行后的运行结果是v1=5,v2=8,v3=6,v4=1↙。

#include

int main( )

{char s[]=“12134211”;

int v1=0,v2=0,v3=0,v4=0,k;

for(k=0;s[k];k++)

switch(s[k])

{ default:v4++;

case '1': v1++;

case '3': v3++;

case '2': v2++;

}

printf(“v1=%d,v2=%d,v3=%d,v4=%dn”,v1,v2,v3,v4);

return 0;

}

8.⊙当运行以下程序时,输入abcd,程序的运行结果是:a*b*c*d*。

#include

int main( )

{char str[40];

int i;

scanf(“%s”,str );

i=strlen(str);

while(i>0)

{ str[2*i]=str[i];

str[2*i-1]='*';

i--;

}

printf(“%sn”,str);

return 0;

}

四、程序设计题

1.定义一个可以存放10个元素的int数组a,输入10个数,并逆序输出。

2.统计具有10个元素的自然数数组num中的奇数个数。

3.⊙对三人的四门课程按科目求平均成绩,并输出包括平均成绩的二维成绩

表。

1. #include

intmain( )

{ int a[10],i;

for(i=0;i<10;i++)

scanf(“%d”,&a[i]);

for(i=9;i>=0;i--)

printf(“%d ”,a[i]);

return 0;

}

}

2. #include

intmain( )

{ int num[10],i,x=0;

for(i=0;i<10;i++)

{scanf(“%d”,&num[i]);

if(num[i]%2==1)x++;}

printf(“%d ”,x);

return 0;

3. #include

intmain( )

{ float score[4][5] ={0};

int i,j;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

{scanf(“%f”,&score[i][j]);

score[3][j]+=score[i][j]/3;

score[i][4]+=score[i][j]/4;

score[3][4]+=score[i][j]/12;}

for(i=0;i<4;i++)

{for(j=0;j<5;j++)

printf(“%.2f ”,score[i][j]);

printf(“n”);}

return 0;

}


本文标签: 数组 程序 元素 运行 结果