C语言 数 组练习题

C语言   数 组练习题
C语言   数 组练习题

第七章数组

1.在C语言中引用数组元素时,下面关于数组下表数据类型的说法错误的是()A)整型常量B)整型表达式

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

2.以下能正确定义一维数组a的选项是()

A)int a=[5]={0,1,2,3,4,5};B) char a[ ]={0,1,2,3,4,5};

C)char a={ 'A','B','C',};D) int a[5]= "0,1,2,3"

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.若有定义:int a[10];则正确引用数组a元素的是()

A) a[10] B) a[3] C) a[5] D) a[-10]

5.以下不正确的数组定义是()

A) double x[5]={2.0,4.0,6.0,8.0,10.0};

B) int y[5]={0,1,3,5,7,9};

C) char c1[ ]={'1','2','3','4','5'};

D) char c2[ ]={'\x10','\xa','\x8'};

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

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

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

C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

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

7.以下正确的二维数组定义是()

A)int a[ ] [ ]={1,2,3,4,5,6};B)int a[2][ ]={1,2,3,4,5,6};

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

8.以下对二维数组a进行初始化正确的是()

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

B)int a[ ][3]={{1,2,3},{4,5,6}};

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

D)int a[ ][3]={{1,0,1},{ },{1,1}};

9.以下不能对二维数组a进行初始化的是()

A)int a[2][3]={0};

B)int 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};

10.若有定义:int a[3][4];则正确引用数组a元素的是()

A)a[2][4] B)a[3][3] C)a[0][0] D)a[3][4]

11.若定义了int b[ ][3]={1,2,3,4,5,6,7};则b数组第一维的长度是()

A)2 B)3 C)4 D)无确定值

12.若有定义:int a[3][4]={0};以下叙述中正确的是()

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

B)此说明语句不正确

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

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

13.若有定义:int a[ ][4]={0,0};以下叙述中错误的是()

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

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

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

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

14.若二维数组a有m列,则计算元素a[ i ][ j ]在数组中相对位置的公式为()A)i*m+j B)j*m+i C)i*m+j—1 D)i*m+j+1

15.设char x[ ]="12345",y[ ]={'1','2','3','4','5','\0'};以下叙述中正确的是()A)x数组的长度等于y数组的长度B)x数组的长度大于y数组的长度C)x数组的长度少于y数组的长度D)x数组与y数组的存储区域相同16.下面是对字符数组s进行初始化,其中不正确的是()

A)char s[5]={"abc"};B)char s[5]={'a','b','c'};

C)char s[5]=" ";D)char s[5]="abcde";

17.字符数组s不能作为字符串使用的是()

A)char s[ ]="happy";B)char s[6]={'h','a','p','p','y','\0'};

C)char s[ ]={"happy"};D) char s[5]={ 'h','a','p','p','y','\0'};

18.下面有关字符数组的描述中错误的是()

A)字符数组可以存放字符串

B)字符串可以整体输入、输出

C)可以在赋值语句中通过赋值运算对字符数组整体赋值

D)不可以用关系运算符对字符数组中的字符串进行比较

19.下面程序段执行后的输出结果是()

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

for (k=0;k<3;k++) printf("%d",a[ k ][2-k]);

A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7

20.下面程序段执行后的输出结果是()

char c[5]={'a','b','\0','c','\0'};

printf("%s",c);

A)'a' 'b' B)ab C)ab c D)abc

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

A)gets (a,b);B)scanf ("%s%s",a,b);

C)scanf ("%s%s",&a,&b);D)gets ("a");gets ("b");

22.下面程序段执行后的输出结果是()

char a[7]="abcdef";

char b[4]="ABC";

strcpy (a,b);

printf ("%c",a[5]);

A)空格B)\0 C)e D)f

23.下面程序段执行后的输出结果是()

char c[ ]="\t\b\\\0will\n";

printf ("%d",strlen (c) );

A)14 B)3 C)9 D)6

24.判断字符串a是否大于b,应当使用()

A)if (a>b) B)if (strcmp (a,b) )

C)if (strcmp(b,a)>0) D)if (strcmp(a,b)>0)

25.表达式strcmp("3.14","3.278")的值是()

A)非零整数B)浮点数C)0 D)字符

26.以下叙述中正确的是()

A)两个字符串所包含的字符个数相同时,才能比较字符串

B)字符个数多的字符串比字符个数少的字符串大

C)字符串"STOP︼"与"STOP"相等

D)字符串"That"小于字符串"That"

27.有以下程序:

# include

# include

void main( )

{ char p[ ]={'a','b','c'},q[10]={'a','b','c'};

printf ("%d %d",strlen(p), strlen(q));

}

以下叙述正确的是()

A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3 B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3 C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3 D)由于p和q数组中都没有字符串结束符,故长度都不能确定

28.下面程序运行时从键盘上输入:123 456 789↙,其输出结果是()

# include

void main( )

{ char s[100];int c, i;

scanf ("%c",&c);scanf ("%d",&i);scanf ("%s",s);

printf("%c,%d,%s",c,i,s);

}

A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456 29.下面程序运行时从键盘上输入:ABC↙,其输出结果是()

# include

# include

void main( )

{ char ss[10]="12345";

gets (ss);strcat(ss,"6789");printf("%s",ss);

A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789 30.下面程序执行后的输出结果是()

# include

#include

void main( )

{ char arr[2][4];

strcpy (arr,"you");strcpy(arr[1],"me");

arr[0][3]='&';

printf("%s",arr);

}

A)you&me B)you C)me D)错误

31.下面程序执行后的输出结果是()

# include

void main( )

{ char ch[7]="12ab56";int i,s=0;

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

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

printf("%d",s);

}

A)1 B)1256 C)12ab56 D)ab

32.下面程序执行后的输出结果是()

# include

void main( )

{ char str[ ]="SSWLIA", c;int k;

for (k=2;( c=str[k] )!='\0';k++) {

switch ( c ) {

case 'I':++k;break;

case'L':continue;

default:putchar( c );continue;

}

putchar( ' * ' );

}

}

A)SSW B)SW* C)SW*A D)SW

33.下面程序执行后的输出结果是()

# include

void main( )

{ int a[3][3]={ {1,2 },{ 3,4 }.{ 5,6 } },i , j , s=0;

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

for (j=0;j<=i;j++) s+=a[i][j];

printf("%d",s);

}

A)18 B)19 C)20 D)21

34.下面程序执行后的输出结果是()

# include

void main( )

{ char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"} , k;

for (k=1;k<3;k++) printf("%s",w[k]);

}

A)ABCDFGHKL B)ABCDEFGIJM C)EFGJKO D)EFGHIJKL

35.下面程序执行后的输出结果是()

# include

void main( )

{ int aa[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+=aa[i][1];

printf("%d",s);

A)11 B)13 C)19 D)20

二、填空题

1、C语言数组的下标总是从_____开始,不可以为负数;数组各个元素具有相同的_____.

2. 在C语言中,二维数组的元素在内存中的存放顺序是_____________________.

3.在C语言中,一个二维数组可以看成若干个________________数组.

4.若定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后a[1][2]的值为______,a[2][1]得到的值为_______

5.若定义:double x[3][5];则x数组中行下标的上限为____,列下标的上限为_____

6.字符串是以_____为结束标的一维字符数组.若有定义:char a[]=”“;则a数组的长度是_____.

7.字符串”ab\n\\012\\”的长度是________.

8.若定义:char a[]=”abcdefg”,b[10]=”abcdefg”;语句printf(“%d,%d”,sizeof(a),sizeof(b));.”执行后的输出结果是_____________.

9.若要求从键盘读入含有空格的字符串,应使用_______函数.

10.欲为字符串s1输入”hello world”,其语句是_________________

11.欲为字符串s1复制到字符串S2中,其语句是_________________

12,如果在程序中调用了strcat函数,则需要预处理命令__________________。如果在程序中调用了gets函数,则需要预处理命令__________________。

13.如果在程序中调用了isupper函数,则需要预处理命令__________________。

14.若定义:char a[]=”windows”,b[]=”9x”;则执行语句printf(“%s”,strcat(a,b));”后的输出结果为:____________________。

15.下面程序执行后的输出结果是

#include

Void main( )

{int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;

while (i++<7) if(p[i]%2) j+=p[i];

printf(“%d”,j);

}

16.下面程序执行后的输出结果是

#include

void main( )

{inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},I,s=0;

for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];

printf(“%d”,s);

}

17. 下面程序执行后的输出结果是

char x*+=”the teacher”;int i=0;

while(x*++i+!=’\0’)

if(x[i-1]= =’t’) printf(“%c”,x[i]);

18. 下面程序执行后的输出结果是

#include

void main( )

{char b[]=”hello,you”;

b[5]=0;

printf(“%s”,b);

}

19. 下面程序执行后的输出结果是

char a*7+=”a0\0a0\0”;int i,j;

i=sizeof(a);j=strlen(a);

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

}

20. 若定义:char a[80]=”95”,b[]=”windows”;则执行语句printf(“%s”,strcat(a,b));”后的输出结果为:____________________

三、程序阅读题1-20

1./*写出下面程序执行后的运行结果*/

#include

void 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]);

}

}

2./*写出下面程序执行后的运行结果*/

#include

void main()

{ int i,a[5];

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

a[i]=9*(i-2+4*(i>2))%5;

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

printf("%d",a[i]);

}

3./*下面程序运行时从键盘上输入:7 4 8 9 1 5 ,写出程序的运行结果。*/ #include

void main()

{ int a[6],i,j,k,m;//int a[6]={7,4,8,9,1,5},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");

}

}

4./*下面程序运行时从键盘上输入:1 2 3 -4 ,写出程序的运行结果。*/

#include

void main()

{ int i,k=0,s=0,a[10];

while(1) {

scanf("%d",&a[k]);

if(a[k]<=0) break;

s=s+a[k++];

}

for(i=0;i

printf("%d",s);

}

5./*写出下面程序执行后的运行结果*/

#include

void main()

{ int i,k=5,a[10],p[3];

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

for(i=0;i<3;i++) p[i]=a[i*(i+1)];

for(i=0;i<3;i++) k+=p[i]*2;

printf("%d\n",k);

}

6./*写出下面程序执行后的运行结果*/

#include

void 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]) {k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<3;i++)

for(j=4;j<7-i;j++)

if(x[j+1]>x[j]) {k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<3;i++)

for(j=4;j<7-i;j++)

if(x[j]>x[j+1]) {k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<8;i++) printf("%d",x[i]);

}

7./*写出下面程序执行后的运行结果*/

#include

void main()

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

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

for(j=1;j<6;j++)

a[i][j]=(i/j)*(j/i);

for(i=1;i<6;i++) {

for(j=1;j<6;j++)

printf("%2d",a[i][j]);

printf("\n");

}

}

8./*写出下面程序执行后的运行结果*/

#include

void main()

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

int b[3][3]={1,2,3};

printf("%d",a[1][0]+b[0][1]);

printf("%d\n",a[0][1]+b[1][0]);

}

9./*写出下面程序执行后的运行结果*/

#include

void 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("%d",s);

}

10./*写出下面程序执行后的运行结果*/

#include

void main()

{ int a[3][3]={1,4,17,3,6,19,2,5,18},i,s=0;

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

s=s+a[i][2-i];

printf("s=%d",s);

}

11./*写出下面程序执行后的运行结果*/ #include

void 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<=i;j++) t=t+b[i][b[j][j]];

printf("%d",t);

}

12. /*写出下面程序执行后的运行结果*/ #include

void main()

{ int i,j,a[4][4];

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

for(j=0;j<4;j++) a[i][j]=1+i-j;

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

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

if(a[i][j]>0) printf("%3d",a[i][j]);

putchar('\n');

}

}

13./*写出下面程序执行后的运行结果*/ #include

void main()

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

int c[4][2],i,j,k,s;

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

for(k=0;k<2;k++) {

s=0;

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

s+=a[i][j]*b[j][k];

c[i][k]=s;

printf("%4d",s);

}

printf("\n");

}

14./*写出下面程序执行后的运行结果*/ #include

void main()

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

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

for(j=i+1;j<3;j++) a[j][i]=0;

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

for(j=0;j<3;j++) printf("%d",a[i][j]);

printf("\n");

}

}

15. /*写出下面程序执行后的运行结果*/ #include

void main()

{ char a[8]={' '},t;

int j,k;

for(j=0;j<5;j++) a[j]=(char)('a'+j);

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

t=a[4];

for(k=4;k>0;k--) a[k]=a[k-1];

a[0]=t;

}

printf("%s",a);

}

16. /*写出下面程序执行后的运行结果*/ #include

void 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);

17. /*写出下面程序执行后的运行结果*/ #include

void 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);

}

18./*写出下面程序执行后的运行结果*/ #include

void main()

{ int i=0;

char c,s[]="SABC";

while(c=s[i]) {

switch(c) {

case 'A':i++;break;

case 'B':++i;

default:putchar(c);i++;

}

putchar('*');

}

}

19. /*写出下面程序执行后的运行结果*/ #include

void main()

{ int i,c; char s[2][5]={"1980","9876"};

for(i=3;i>=0;i--) {

c=s[0][i]=s[1][i]-2*'0';

s[0][i]=c%10;

}

for(i=0;i<=1;i++) puts(s[i]);

}

20./*写出下面程序执行后的运行结果*/

#include

void main()

{ char ch[]="abc",x[3][4];int i;

for(i=0;i<3;i++) strcpy(x[i],ch);

for(i=0;i<3;i++) printf("%s",x[i][i]);

}

四、程序填空题1-20

/*1.下面程序的功能是将十进制整数n转换成base进制。请填空使程序完整、正确*/

#include

void main()

{int i=0,base,n,j,num[20];

scanf("%d",&n);

scanf("%d",&base);

do{

i++;

num[i]=【1】;

n=【2】;

}while(n!=0);

for(【3】)

printf("%d",num[j]);

}

/*2.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数。请填空使用程序完整、正确。*/

#include

void main()

{

int a[10],max,min,i,j,k;

for(i=0;i<10;i++) scanf("%d",&a[i]);

max=min=a[0],j=k=0;

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

if(a[i]

if(a[i]>max) {max=a[i];【2】;}

}

【3】;

for(i=0;i<10;i++) printf("%d",a[i]);

}

/*3.下面程序的功能是将数组输入数据,逆序置换后输出。逆序置换是指数组的首元素和

末元素置换,第二个元素和倒数第二个元素置换……请填空使用程序完整、正确。*/

#include

#define N 8

void main()

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

for(i=0;i

i=0;j=N-1;

while(i

t=a[i],【1】,a[i]=t;

i++,【2】;

}

for(i=0;i

}

/*4.下面程序的功能是用“两路合并法”把两个已按升序(由小到大)排列的数组合并成一个新的升序数组。请填空使程序完整、正确。*/

#include

void main()

{ int c[10],i=0,j=0,k=0;

int a[3]={5,9,10};int b[5]={12,24,26,37,48};

while(i<3 && j<5)

if(【1】) {

c[k]=b[j];k++;j++;

}

else {

c[k]=a[i];k++;i++;

}

while (【2】) {

c[k=ai];i++;k++;

}

while(【3】) {

c[k]=b[j];j++;k++;

}

for(i=0;i

}

/*5.下面程序的功能是读入n(n<=10)个整数并放入一个数组r中,统计并输出比相邻元素小的数组元素的个数。请填空使程序完整、正确。*/

#include

void main()

{ int k,count,n,r[10];

scanf("%d",&n):

for(k=0;k

scanf("%d",&r[k]);

【1】;

for(k=1;k

if(【2】) count++;

if(【3】) count++;

if(r[n-1]

printf("count=%d",count);

}

/*6.下面程序的功能是用“顺序查找法”查找数组a中是否存在某一关键字。请填空使程序完整、正确。*/

#include

void main()

{ int a[10]={2557,48,371,123,291,18,22,44}; int i=0,x;

scanf("%d",&x);

【1】;

while(a[i]!=x) i++;

if(【2】) printf("找到在%d",i);

else printf("找不到!");

}

/*7.下面程序的功能是用“插入法”对数组a进行由大到小的排序。请填空使程序完整、正确。

提示:简单插入排序算法的基本思想是将数组处理n-1,第k次处理时,前面的元素插入到目前的位置。第k次的元素是这样插入的:在第k次处理时,前面的元a*0+,a*1+,……a*k-1]必定已排成了升序,将a[k]与a[k-1],a[k-2+,……a*0+逐个比较(由后向前),若有a[j]

#include

void main()

{ int a[10]={191,3,6,4,11,7,25,13,89,10};int i,j,k;

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

k=a[i];

j=【1】;

while(j>=0 && k>a[j]) {

【2】;

j--;

}

【3】=k;

}

for(i=0;i<10;i++) printf("%d",a[i]);

}

/*8.下面程序的功能是从键盘读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空使程序完整、正确。*/

#include

void main()

{ int i,a[20],sum,count;

sum=count=0;

for(i=0;i<20;i++) scanf("%d",【1】);

for(i=0;i<20;i++) {

if(a>0) {

count++;

sum+=【2】;

}

}

printf("sum=%d,count=%d",sum,count);

}

/*9.下面程序的功能是求矩阵a,b的乘积,结果存放在矩阵C中并按矩阵形式输出,请填空使程序完整、正确。*/

#include

void main()

{

int a[3][2]={2,10,9,4,5,119},b[2][2]={-1,-2,-3,-4};

int i,j,k,s,c[3][2];

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

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

【1】;

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

s+=【2】;

c[i][j]=s;

}

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

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

printf("%6d",c[i][j]);

【3】;

}

}

/*10.下面程序的功能是求出矩阵a的主对角线上的元素之和。请填空使程序完整、正确。*/

#include

void main()

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

int sum=0,i,j;

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

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

if(【1】)

sum=sum+【2】;

printf("sum=%d",sum);

}

/*11.下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的结果保存到b数组中,并按矩阵形式输出a和b 。请填空使程序完整、正确。

*/

#include

void main()

{ int a[2][3]={{4,5,6},{1,2,3}},b[2][3],i,j;

for(i=0;i<2;i++){

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

【1】;

}

for(【2】) b[i][0]=a[i][2];

for(i=0;i<2;i++) {

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

printf("&5d",b[i][j]);

【3】;

}

}

/*12.下面程序的功能是利用二维数组形成一个五行的杨辉三角形。请填空使程序完整、正确。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

*/

#include

#define N 5

void main()

{ int m,n,a[N][N];

for(m=0;m

a[m][0]=a[m][m]=【1】;

for(n=1;n

a[m][n]=a[m-1][n-1]+【2】;

}

for(m=0;m

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

printf("%2d",a[m][n]);

[3];

}

}

/*13.下面程序的功能是输出如下形式的方阵。请填空使程序完整、正确。

13 14 15 16

9 10 11 12

5 6 7 8

1 2 3 4

*/

#include

void main()

{ int i,j,x;

for(j=4;[1];j--) {

for(i=1;i<=4;i++) {

x=(j-1)*4+[2];

printf("%4d",x);

}

printf("\n");

}

}

/*14.下面程序的功能是在3行4列的二维数组中找出每一行上的最大值并输出。请填空使程序完整、正确。*/

#include

void main()

{ int x[3][4]={1,5,7,4,2,6,4,3,8,2,3,1},i,j,p ;

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

p=[1];

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

if(x[i][p]

printf("第%d行最大值为%\n",i[3]);

}

}

/*15.下面程序的功能是按以下形式输出数组右上半三角。请填空使程序完整、正确。

1 2 3 4

6 7 8

11 12

*/

#include

void main()

{ int num[4][4]={{,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},i,j;

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

for(j=0;j<=i;j++) printf("%4c",' ');

for(j=[1];j<4;j++) printf("%4d",num[i][j]);

printf("\n");

}

}

/*16.下面程序的功能是使用二维数组形成并按下列形式输出数据。请填空使程序完整、正确。

0 1 2 3 4

1 2 3 4 5

2 3 4 5 6

3 4 5 6 7

4 5 6 7 8

*/

#include

void main()

{ int i,j,[1];

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

for(j=0;j<5;j++) a[i][j]=[2];

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

for(j=0;j<5;j++) printf("%2d",a[i][j]);

printf("\n");

}

}

/*17.下面程序的功能是在一个字符串中查找一个指定的字符,若字符串中包含该字符则输出该字符在字符串中第一次出现的位置(下标值),否则输出-1。请填空使程序完整、正确。*/

#include

#include

void main()

{ char c='a',t[50];int len,j,k;

gets(t);

len=[1];

for(k=0;k

if([2]) { j=k;break;}

printf("%d",j);

}

/*18.下面程序的功能是将字符串b的内容连接字符数组a的内容后面,形成新字符串a,请填空使程序完整、正确。*/

#include

void main()

{ char a[40]="Great ",b[]="Wall";

int i=0,j=0;

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

while ([1]) {

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

}

[2];

printf("%s",a);

}

/*19.下面程序的功能是将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变。请填空使程序完整、正确。*/

#include

#include

void 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;[1])

if([2])

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

puts(a);

}

/*20.下面程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abcd123edf456gh,执行程序后输出:123456。请填空使程序完整、正确。*/

#include

void main()

{ char s[80],d[80];int i,j;

gets(s);

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

if([1]) {d[j]=s[i];j++;}

[2];

puts(d);

c语言复习题(有答案)●

思考题 不仅要会做这些题,更重要的是要掌握其相关知识点一、一般填空题 1-1、调用fopen函数打开一文本文件,在“打开模式”这一项中,为输出(写)而打开需填入【1】. 1-2、调用fopen函数打开一文本文件,在“打开模式”这一项中,为追加而打开需填入【1】. 1-3、fopen函数的原形在头文件【1】中. 1-4、getchar函数的原形在头文件【1】中. 1-5、sqrt函数的原形在头文件【1】中. 1-6、如果函数不要求带回值,可用【1】来定义函数返回值为空. 答案:w或w+;a或a+;stdio.h ; stdio.h ; math.h ;void . 2-1、字符串“\1011234\\at”的长度(字符数)是【1】. 2-2、字符串“abc\103\\bcd”的长度(字符数)是【1】. 2-3、字符串“1\\t\x43\abx44”的长度(字符数)是【1】. 2-4、“a“在内存中占【1】个字节. 2-5、‘a’在内存中占【1】个字节. 2-6、“\71“在内存中占【1】个字节. 2-7、一维数组下标的最小值是【1】;数组char a[]=“china” ;在内存应占【1】个字节。 答案:8; 8; 9; 2;1;2 ;0;6. 3-1、设x=(5>1)+2, x的植为【1】. 3-2、表达式‘B’+15+‘\x41’+011+0x10的值是【1】. 3-3、表达式‘b’+5+‘\x42’+011+0x10的值是【1】. 答案:3;171;194; 4-1、假设所有变量都为整型,表达式(a=2,b=5,a>b?a++:b++,a+b)的值是【1】. 4-2、if(!a)中的表达式!a等价于【1】. 4_3、已知a=1,b=2,c=3,执行if(a>b>c) b=a;else b=c;a=4;b=8;后,b的值是【1】. 答案:8;a==0;8; 5-1、若所用变量都已定义,下列程序段的执行结果是【1】. for(i=1;i<=5;i++);printf(“OK\n”); 5-2、执行语句char s[3]=”ab”,*p;p=s;后,*(p+2)的值是【1】. 5-3、若有以下定义和语句:int a[4]={0,1,2,3},*p; p=&a[2]; ,则*--p的值是【1】. 5-4、下列程序的输出结果是【1】,main(){int a=011;printf(“%d\n”,++a);} 答案:OK;’\0’;1;10 6-1、若宏定义为:#define y(x) 2+x, 则表达式a=3*y(3)的值为【1】. 6-2、若宏定义为:#define y(x) 2+x, 则表达式a=4*y(2)的值为【1】. 6-3、若宏定义为:#define y(x) 2/x, 则表达式a=4+3*y(3)的值为【1】. 答案:9;10;6 . 二、单项选择题 1-1、若以"a+"方式打开一个已存在的文件,则以下叙述正确的是()。 A:文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作 B:文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作 C:文件打开时,原有文件内容被删除,只可作写操作 D:以上各种说法皆不正确 1-2、若执行fopen函数时发生错误,则函数的返回值是()。

C语言数组编程题

实验4 数组 一.实验目的: 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组定义、初始化、赋值的方法; 3.了解常见的字符串函数功能及其使用方法; 4.掌握二维数组的定义与引用。 二.实验内容: 1.编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 2.编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。 3.编写程序,输入10个整数存入一维数组,对其进行升序排序后输出。 4.编写程序,求二维数组中元素的最大值和最小值。 5.编写程序,求一个4×4矩阵中所有元素之和。 6.编写程序:从键盘上输入一字符串,统计输出该字符串中的字母字符、数字字符、空格以及其他字符的个数。 7.编写程序:从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。 8. 产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 9. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,按原来的规律将其插入并输出。 页脚内容1

10. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,则输出找不到。 11. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。可能没有鞍点。 12. 编程输出杨辉三角。(要求输出10行)(杨辉三角:每行端点与结尾的数为1.每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大) 13. 输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。 14. 编写程序,将两个字符串连接起来,不用strcat。 15. 编写程序实现strcpy函数功能。 16. 编程实现strlen函数功能。 17. 编程求2-4+6-8…-100+102的值。 18. 假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。 19. 输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出。(按由大到小的顺序排序) 20. 输入一个字符串,将其中ASCII码值为基数的字符排序后输出。(按由小到大的顺序) 21. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非16进制字符后,组成一个新字符串(16进制形式),然后将其转换为10进制数后输出。 22. 读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一行、最后一列 页脚内容2

C语言循环数组练习题

循环数组练习题 一.选择题 1.for(i=0;i<10;i++);结束后,i的值是;B A 9 B 10 C 11 D 12 2.下面程序的循环次数是:D int k=0; while(k<10) {if(k<1) continue; if(k==5) break; k++; } A. 5 B 6 C 4 D 死循环,不能确定循环次数3.下面程序的输出结果是() main() { int s,k; for(s=1,k=2;k<5;k++) s+=k; printf(“%d\n”,s); } A 1 B 9 C 10 D 15 4.要使下面程序输出10个整数,则在下画线处填入正确的数是:for(i=0;i<= ;) printf(“%d\n”,i+=2); A 9 B 10 C 18 D 20 5.运行下面程序: main() { int i=10,j=0; do { j=j+i; i--; }while(i>5); printf(“%d\n”,j); }

输出结果是: A 45 B 40 C 34 D 55 6.运行下面程序 #include “stdio.h” main() { int k=0,a=1; while(k<10) { for( ; ;) { if((k%10)==0) break; else k--; } k+=11; a+=k; } printf(“%d %d\n”,k,a); } 则输出的结果是() A 21 32 B 21 33 C 11 12 D 10 11 7.以下叙述正确的是: A.do---while语句构成的循环不能用其他语句构成的循环来代替。 B.do---while语句构成的循环只能用break语句退出。 C.用do---while语句构成的循环,在while 后的表达式为非零时结束循环。 D.用do---while语句构成的循环,在while后的表达式为零时结束循环。 8.有如下程序: main() { int x=3; do{ printf(“%d”,x--);

C语言练习3(数组)=参考答案

C语言(数组) 一、选择题 1. 设有程序: main() { int i,a[11]; printf("给数组赋值:\n"); for (i=0;i<=10;i++) scanf("%d",( )); ... ... printf("输出数组:\n"); for(i=0;i<=10;i++) printf("%d,",( )); } 则在程序中的两个园括号中分别应填入:C A) &a[i]和&a[i] B) a[i]和&a[i] C) &a[i]和a[i] D) a[i]和a[i] 2. 设已定义:int a[15]; 则数组a占用的内存单元数是( C ). A) 15 B) 16 C) 30 D) 32 3. 阅读程序: main() { int a[2]={0},i,j,k=2; for(i=0;i

return r; } main() { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("%d\n",x); } 以上程序的输出结果是( D ). A) 720 B) 6 C)24 D) 120 5. 以下定义语句中,错误的是( B ). A) int a[ ] = {6,7,8}; B) int n=5, a[n]; C) char a[ ]= "string"; D) char a[5 ]={'0','1','2','3','4'}; 6. 以下描述中正确的是( D ). A) 数组名后面的常量表达式用一对圆括弧括起来 B) 数组下标从1开始 C) 数组下标的数据类型可以是整型或实型 D) 数组名的规定与变量名相同 7. 若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( AB ). A) scanf("%c",a[0]); B) scanf("%s",&a); C) printf("%c",a[3]); D) printf("%s",a); 8.若定义数组int a[10] ,其最后一个数组元素为( C ). A) a[0] B) a[1] C) a[9] D) a[10] 9. 若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( B )? A) a[8] 的值为0 B) a[1] 的值为1 C) a[3] 的值为4 D) a[9] 的值为0 10. 指出以下错误语句( A ).

C语言一维数组教案

学科:计算机科学与技术 课程:C语言程序设计 课题:一维数组 课时:2 教学目标:1、掌握一维数组的定义和引用 2、掌握一维数组的初始化方法 3、了解与一维数组有关的应用编程方法 教学重点:一维数组的定义和引用、初始化方法 教学难点:与一维数组有关的应用编程方法 教学方法:举例法,引导法 教学步骤:1、通过一个例子提出问题来引出本节课的知识点 2、讲授一维数组的定义和引用、初始化方法 3、示例训练 4、进行本节课的总结及作业布置 教具:黑板计算机投影仪 教学过程: 一、导入: 提问:保存一个班50位同学的一门功课的成绩,并且找出最高分和最低分,应如何实现? 解题思路:定义50个变量,从键盘中输入值,然后再相互比较。处理起来很复杂,是

否有更简便的方法?引出本节课的知识点-----数组。 二、讲授: 1、数组概述: ·数组:是数目固定,类型相同的若干个变量的有序集合,用数组名标识。 序:是数组元素之间的位置关系,不是元素值的大小顺序。 数组名:是用于区别其它数组及变量的。 ·数组元素:集合中的变量,属同一数据类型,用数组名和下标确定。 下标:是数组元素在数组中的位置。 ·数组的维数:数组名后所跟下标的个数。 2、一维数组的定义 一维数组是指由一个下标数组元素组成的数组。其定义形式为: 存储类型数据类型数组名[常量表达式] 例如:static int score[50]; 它表示定义了一个名为score的数组,该数组有50个元素,其存储类型为静态型,数据类型为整型。 说明: (1)存储类型为任选项,可以是auto、static、extern存储类型,但是没有register 型。 (2)数据类型是用来说明数组元素的类型:int , char , float。 (3)数组名的命名应遵守标识符的命名规则,但是不能与其他变量同名。

c语言数组习题

数组练习解答 1定义一个名为 a 的单精度实型一维数组 ,长度为 4,所有元素的初值均为 0的数定义语句就是 【分析】按照一般数据定义语句的格式 ,可以直接写出方法一(参瞧答案);考虑到所有元素均赋初值时可 以省略数组长度,可以写出方法二(参瞧答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初 值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参瞧答案);考虑到选用静态型,不赋 初值所有元素也自动赋予。空值 (对数值型数组来说,初值为0),可以写出方法四(参瞧答案)。 【答案】方法一 :float a[4] = (0.0,0.0,0.0,0.0}; 方法二:float a[] = ( 0.0,0.0,0.0,0.0}; 规定,定义字符型数组时不允许直接使用 "字符常量"的方式赋初值,所以备选答案②也就是错误的。 备选答案③符合题意。【答案】③ 6定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句就是() ① char s[]={ '1','2','3',' \0 '}; ② char s 「」={"123"}; ③ char s[]={"123\n"}; ④ char s[4]={'1','2','3'}; 【分析】备选答案①中省略了数组长度 ,所以每个元素都赋了初值,共计4个元素,初值依次为T '3'、’ \0',最后一个元素的值为字符串结束标记 ,所以数组S 中存放的就是字符串"123",该答案不符合 题意(即正确的);备选答案③中直接赋予字符串作为初值所以数组 s 的长度为4,其中的初值就是字符串 "123",不符合题意(即正确的);备选答案③中也就是给数组 s 赋予字符串的初值,但就是字符串不就是 方法三:float a[4]= {0.0}; 方法四:static float [4]; 2下列数组定义语句中,错误的就是() ① char x[1] = 'a'; ② auto char x[1]={0}; ③ static char x[l]; ④ char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对 以 备选答案①就是符合题意的答案。 【答案】① 3用"冒泡排序法"对n 个数据排序,需要进行n 一 1 较,小者调上;该操作反复执行 n- k 次。现在假设有 则利用"冒泡排序法"执行第2步后的结果就是 【分析】开始排序前的排列执行第 4 1 - 3 : (不能直接赋予字符常量,必须用花括号括住),所 步。其中第k 步的任务就是:自下而上,相邻两数比 4个数据:4、l 、3、2要排序,假定4为上、2为下, O 1步后的排列执行第 2步后的排列 1 2 4 2 【答案】l 、2、4、 3 4用"选择排序法"对n 个数据排序,需要进行n-1 据中寻找最小数,与第k 个数据交换。现在假设有 行第2步后的结果就是 ____________________ 【分析】 开始排序前的排列为: 4 执行第1步后的排列为: 执行第2步后的排列为: 【答案】1、2、3、4 5下列数组定义语句中,正确的就是() ① int a[][]={1,2,3,4,5,6}; ② char a[2] ③ int a[][3]= {1,2,3,4,5,6}; ④ static int a[][] 【分析】C 语言规定,二维数组定义时不允许省略第二维的长度 步。其中第k 步的任务就是:在第k 个数据到第n 个数 4个数据:4、 1、 3、2要排序,则利用"冒泡排序法"执 「3] = 'a','b'; ={{1,2,3},{4,5,6}}; ,所以备选答案①④就是错误 C 语言还 显然 、'2'、

C语言练习题(带答案)

一、单项选择题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D)。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是C。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

C语言一维数组的基本操作

一.插入:C语言数组怎么插入一个元素#include #include #define MAX 40 void insert(int*p,int n,int m) { int i,k; for(i=0;i=m) { k=i; break; } for(i=n-1;i>=k;i--) p[i+1]=p[i]; printf("%d\n",k); p[k]=m; } void sort(int*p,int n) { int i,j; for(i=1;ip[j+1]) { int t; t=p[j+1]; p[j+1]=p[j]; p[j]=t; } } void main() { int a[MAX]; int n,i,m,d; printf("输入数据个数(n<40):"); d=scanf("%d",&n); while(d!=1&&n>=40) { system("cls"); f flush(stdin); printf("请重新输入:"); scanf("%d",&n); } printf("请输入数组元素:");

for(i=0;i #define N 10 void main( ) { int a[N] , num ,i , *p , n=N; int j; /*输入N个数到数组a中;*/ for(i=0;i

c语言数组典型试题设计含答案

一.选择题(2*20) 【题1】在C 语言中,引用数组元素时,其数组下标的数据类型允许是。A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【题2】以下对一维整型数组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]; 【题3】若有说明:int a[10];则对a 数组元素的正确引用是。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 【题4】在C 语言中,一维数组的定义方式为:类型说明符数组名; A)[整型常量表达式] B)[整型表达式] C)[整型常量] 或[整型表达式] D)[常量] 【题5】以下能对一维数组a 进行正确初始化的语句是。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]=”10*1”; 【题6】以下对二维数组a 的正确说明是。 A)int a[3][]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); 【题7】若有说明:int a[3][4];则对a 数组元素的正确引用是。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) 【题8】若有说明:int a[3][4];则对a 数组元素的非法引用是。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] 【题9】以下能对二维数组a 进行正确初始化的语句是。 A)int a[2][]={{1,0,1},{5,2,3}}; B)int a[][3]={{1,2,3},{4,5,6}}; C)int a[2][4]={{1,2,3},{4,5},{6}}; D)int a[][3]={{1,0,1},{},{1,1}}; 【题10】以下不能对二维数组a 进行正确初始化的语句是。 A)int a[2][3]={0}; B)int 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};

C语言试题与答案

大学C语言考试题库 第1章 C语言概述习题 1. 单项选择题 (1) C 语言是在 B 语言的基础上产生的。 A. A B. B C. D D. E (2) 在 C 语言中,每个语句必须以 D 结束。 A. 回车符 B. 冒号 C. 逗号 D. 分号 (3) 标识符和关键字间,要用 C 隔开。 A. 回车符 B. 冒号 C. 空格 D. 分号 (4) 用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( B )。 A. 生成可执行目标文件 B. 生成目标文件 C. 输出运行结果 D.自动保存源文件 (5) 下列说法中正确的是( B )。 A. 由于 C 源程序是高级语言程序,因此一定要在 TC 软件中输入 B. 由 C 源程序是字符流组成,因此可以作为文本文件在任何文本编辑的软件中输入 C. 由于C 程序是高级语言程序,因此输入后即可执行 D. 由于 C 程序是高级语言程序,因此它由命令组成 (6) 下列说法中正确的是( A )。 A. C 语言程序由主函数和 0 个或多个函数组成 B. C 语言程序由主程序和子程序组成 C. C 语言程序由子程序组成 D. C 语言程序由过程组成 (7) 下列说法中错误的是( D )。 A. 主函数可以分为两个部分:主函数说明部分和主函数体 B. 主函数可以调用任何非主函数的其他函数 C. 任何非主函数可以调用其他任何非主函数 D. 程序可以从任何非主函数开始执行 2. 填空题 (1) C 语言只有 32 个关键字和 9 种控制语句。 (2) C 语言是一种“中级语言”,既具有高级语言的特点又具有低级语言的特点;既适合于开发系

C语言数组作业编程题答案

1、请先用记事本创建文件original.txt,往其中写入一组已排好序的整型数,今输入一个整数,要求按原来排序的规律将它插入数中,仍写入文件。例如:原来整数依次为4、6、8、41、56、77、102(数据间的分隔符为空格)。若将42插入数中,则插入后整数依次为4、6、8、41、4 2、56、77、102。 答案: #include #include void main() { int a[100]; int ijnumber; int n; FILE *fp; fp=fopen("e:\\C语言\\original.txt""r"); if(fp==NULL) { printf("open error"); exit(0); }

i=0; while(!feof(fp)) { fscanf(fp"%d"&a[i++]); fgetc(fp); } number=i-1; //number中存最后一个数据的下标 fclose(fp); scanf("%d"&n); //以下的while循环用来找n要放的位置循环结束时正好是a[i]的位置i=0; while(n>a[i]) { i++; } //for循环的功能是将a[i]到最后一个元素全后移一个位置 for(j=number;j>=i;j--) a[j+1]=a[j]; //将n放入找到的位置

a[i]=n; number=number+1; //加入n后,元素个数增1,用来控制向文件中的写入次数 fp=fopen("e:\\C语言\\original.txt""w"); if(fp==NULL) { printf("open error"); exit(0); } //写入数据 for(i=0;i<=number-1;i++) fprintf(fp"%d "a[i]); fprintf(fp"%d"a[i]); //最后一个数据后没有空格 fclose(fp); } 2、假定整型数组中的元素值不重复。今输入一个整数,先查找,如数组中存在此元素,则删除,否则不做操作。例如:原来数组的元素依次为14、6、28、41、96、77、89、102。若将96删除,则删除后数组元素依次为14、6、28、41、77、89、102。 答案:

C语言编程一维数组的使用

实验三一维数组的使用 【实验目的】 1掌握一维数组、二维数组的定义和初始化方法。 2熟悉使用字符数组处理字符串处理的方法。 【实验内容】 1.输入10个学生的成绩,求平均成绩,并将低于平均成绩的分数打印出来. 编写程序: #include void readdata (float score[10]) { int i; printf("依次输入10个学生的成绩:\n"); for(i=0;i<10;i++) scanf("%f",&score[i]); return; } float aver(float score[10]) { float sum; int i; for(sum=0,i=0;i<10;i++) sum=sum+score[i]; return(sum/10); } void printff(float score[10],float ave) { int i; printf("低于平均分的成绩为:\n"); for(i=0;i<10;i++) if(score[i]

ave=aver(score); printf("average=%6.2f\n",ave); printff(score,ave); } 2、将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。 编写程序: #include int main() { int i,j,a[5]={8,6,5,4,1},b[5]; for(i=0,j=4;i<5,j>=0;i++,j--) b[j]=a[i]; for(i=0;i<5;i++) a[i]=b[i]; for(i=0;i<5;i++) cout< int main() { int a[10]; int i = 0,j=0; int max,temp; for(i=0;i<10;++i) { printf("Please input the %dth number:",i+1); scanf("%d",&a[i]); } printf("The arry has been input is:\n"); for(i=0;i<10;i++) { printf("%d,",a[i]); } printf("\n"); for(i=0;i<10;i++) { max=i;

C语言数组典型例题分析与解答

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是________________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四:static float [4]; 2 下列数组定义语句中,错误的是() ①char x[1]='a';②auto char x[1]={0}; ③static char x[l];④char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 41 1 14 2 32 4 23 3 【答案】l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为:413 2 执行第1步后的排列为:143 2 执行第2步后的排列为:123 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ①int a[][]={1,2,3,4,5,6};②char a[2]「3]='a','b'; ③int a[][3]= {1,2,3,4,5,6};④static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是() ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"};④char s[4]={'1','2','3'};

C语言思考题

1、机器语言:机器语言及其指令是计算机能够直接识别的执行的一组二进制代码。一条机器指令通常由操作码和操作数两部分构成。 2、汇编指令:是机器语言的符号化表示MOV 3、汇编语言:由汇编指令、汇编伪指令及汇编语言的语法规则组成。 4、汇编语言源程序:用汇编语言编写的程序 5、汇编程序:把汇编语言源程序翻译成目标程序的加工程序MASM 6、二、十、十六进制转换(掌握<256)练习1:117=(1110101)B练习2:1000 1011 B=(139)D练习3:1011 1000 0000 0101 B=(B805)H 7、机器数:是指计算机中的数据,可以分为无符号数和有符号数字长为N位时无符号数表示范围0≤N≤2N-1 当N=8时0≤N≤255 8、原码(8位):最高位为符号位(正数用0表示,负数用1表示),其他位为数值位 如X=+45=+0010 1101B [X]原=0010 1101B 如X=-45=-0010 1101B [X]原=1010 1101B 9、补码(8位):正数的补码与原码相同,负数的补码是将符号位取1,数值位逐位取反,未位加1。如X=+45=+0010 1101B [X]补=0010 1101B 如X=-45=-0010 1101B [X]补=1101 0011B 10、补码运算:是指对一个补码表示的数按位求反后再在末尾加1,可以得到与此数相应的符号相反的数的补码。例、已知[117]补=0111 0101B,[-117]补=1000 1011B,对[117]补作补码运算。解:因为[117]补=0111 0101B,按位求反后得1000 1010B,末尾加1得1000 1011B=[-117]补。[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补 12、BCD码:BCD码用4位二进制数表示1位十进制数。常用8421BCD码例:写出十进制314所对应的BCD码 13、8086/8088CPU:16位微处理器和16位数据总线,20位地址总线(寻址空间为1MB)。8088微处理器内部16位数据,外部8位数据,也称准16位机。8086/8088CPU的组成(功能方面):运算器、控制器、寄存器组 14、寄存器是CPU内部临时存放数据的部件,速度比内存快。(1)数据寄存器4个16位寄存器AX,BX,CX,DX,每个寄存器还可以拆成2个8位寄存器使用。 AX累加器:算术运算寄存器,用于存放操作数或运算结果。I/O指令中通过AX与外部交换数据。在乘除运算中指定存放被乘数与被除数,系统功能调用号。AX累加器可以分为AH、AL分别使用。 BX基址寄存器:可作为通用寄存器使用。在计算内存地址是,常作基址寄存器,作为通用寄存器还可以分为BH、BL分别使用。 CX数据寄存器:可作为通用寄存器使用。在循环和串操作指令中作隐含计数器。作为通用寄存器还可以分为CH、CL分别使用。 DX数据寄存器:可作为通用寄存器使用。在I/O操作中,DX用来存放I/O端品地址。在乘除法运算中与AX组合一起存放双字型数据。作为通用寄存器还可以分为DH、DL 分别使用。 (2)变址寄存器(2 个16位):SI 源变址寄存器.DI 目的变址寄存器 BP基址寄存器:用于存放栈中的操作数的偏移地址。SP堆栈指针寄存器:用来指示栈顶的当前位置(偏移地址)。 IP 指令指针寄存器(程序计数器):用于存放下一条指令所在偏移地址。与CS配合,用来确定程序中下一条指令的物理地址。 15、PSW程序状态字寄存器(标志寄存器):8088微处理器使用16位中的9位设置了9个标志。标志位SF、OF、CF、ZF的含义0010 1001B+1110 1000B=1 0001 0001B CF=1 OF=0 SF=0 ZF=0 16、段地址寄存器:段表示一块内存空间(大小可变),最大为64K字节,最小为16字

C语言一维数组的定义和引用

C语言一维数组的定义和引用 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。 7.1一维数组的定义和引用 7.1.1一维数组的定义方式 在C语言中使用数组必须先进行定义。一维数组的定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如: int a[10]; 说明整型数组a,有10个元素。 float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 对于数组类型说明应注意以下几点: 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 数组名的书写规则应符合标识符的书写规定。 数组名不能与其它变量名相同。 例如: main() { int a; float a[10]; …… } 是错误的。 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 例如: #define FD 5 main() { int a[3+2],b[7+FD];

c语言数组练习题大全

231页; 本节设计程序完成一个简单的学籍; 3管理系统的案例,学生的基本信息:学号,姓名,年龄,c 语言成绩。假设班级有10名学生,能实现以下功能: (1)输入10名学生的基本信息。 (2)输出10名学生的基本信息。 (3)输入学号、姓名,输出该学生的基本信息。 (4)按学号年龄对学生进行排序(升序),按c 语言成绩降序排序。 (5)统计优 良 不及格。 1.数据结构分析 此案例是一位数组,二维数组的综合运用。10名学生的学号,年龄,c 语言成绩可分别用长度为10的一位数组sno (long ),sage (int 型),cs (float 型)存储;10名学生的姓名可用元素长度为20个字符的一位数组,既字符型二维数组sname 存储。 2算法分析 使用模块化设计思想,进入系统主界面时有六个主要模块,输入学生的基本信息,输出学生的信息,查找学生 的基本信息,排序,统计,退出。学籍管理系统的机构功能框架,如图 5-28 所示。 图 5-28 学生管理系统的结构功能框架 5.5.2 奇数阶魔方矩阵 本节将实现技术矩魔方矩阵。 项目任务:用数组实现N 阶魔方矩阵(N 为奇数)。所谓的N 阶魔方矩阵是指把1~N*N 自然数按一定的方法排列成N*N 的矩阵,使得:任意行、任意列以及两个对角线上的数之和都为65。 5阶魔方如下: 17 24 1 8 15 输 入 学 生 的 基 本 信 息 输 出 学 生 的 信 息 查 找 学 生 的 基 本 信 息 排 序 统 计 退 出 学籍管理系统

23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 本章习题: 1.设数组int a【N】的元素全部不相等,求a中最大元素和次大元素。 2.求有10个整数的数组a中奇数的个数和平均值,以及偶数个数和平均值。 3.统计输入的一串字符(“假设以‘\n’结束”)中,大写字母A,B...Z各出现的次数。 4.数组a:“1,7,9,11,13,15,17,19”;数组b:“2,4,6,8,10”两个数组合并为数组c;按升序排列。 5.输入10个数,将10个整数按升序排列输出,并且奇数在前,偶数在后。如果输入的10个数是:10 9 8 7 6 5 4 3 2 1,则输出:1 3 5 7 8 2 4 6 8 10 (编程提示、;可利用两个数组变量,一个用来存放输入的整数,输入后,对该数组进行排序,然后将数据复制到另一个数组中,先复制奇数再复制偶数)。 6.定义一个有10个元素的一位数组count ,从键盘上输入8个整数,将其按从大到小的顺序排列,并将排列后的数组输出。 7.求数组int a【M】【N】每行元素的平均值和平均最大的行号。 8.求A【M】【N】与B【M】【N】两矩阵的和矩阵C【M】【N】和差矩阵D【M】【N】(矩阵的值由键盘输入)。 9.有n个学生,每人考m门课。 (1)找出成绩最高的学生的学号和课程号 (2)找出有不及格课程的学生的学号及其各门课的全部成绩。 (3)求全部学生全部课程的平均分。

C语言练习题(带答案)-绝对经典题目不看后悔

1单选题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B)。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 5~8题为相同类型题 考点:标识符的命名规则 (1)只能由字母、数字、下划线构成 (2)数字不能作为标识符的开头 (3)关键字不能作为标识符 选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3) 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1); 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2) 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键

相关文档
最新文档