C语言复习(2011版)
一、判断题:
1.?\x72?、?\n?、?\\?都是字符常量。(y )。
2.若有说明int c[4][50];则gets(c[1]);是正确的C命令语句。(y)
3.若有变量定义long data=10000000;则使用命令printf(”%d”,data);实现
变量值输出是错误的命令语句,无法通过编译。(n)
4.若有变量定义int a=1;表达式a- -?+ +a:- -a的值为1。(y)
5.若有变量定义double x=-3.4;循环语句while (x){ x = x>0; }是错误命
令。(n)
6.定义数组char s[ ]={“abc“},则数组s的元素个数为3。(n)
7.int *p=&a ,a=0;是正确的C变量定义语句。(n )
8.C语言程序从main函数开始执行,所以main函数必须写在其他被调用的
函数之前。( n )
9.表达式7=3+4不正确。(y)
10.字符数组char str[ ]="abcd"; 有5个数组元素( y )
11.while 1 i,j; 一定是错误的C语句。(y )
12.for( ; ; )S中的语句S必执行无穷多次。(n)
13.用字符型指针变量p作为函数void fa(char *pa)的实际参数时,应采用以
下的命令格式fa (*p ); ( n )
14.sub()和Sub( )是不同的函数(y)
15.在C程序中,函数中所定义的局部变量与全局变量同名时,局部变量屏蔽
全局变量。(y )
16.全局外部变量定义命令必须写在函数之外。( y )
17.指针变量算术运算只能可作+、—运算。( y )
18.如有定义float a[10]; 可定义表达式a=a+1。(n )
19.在逻辑表达式的计算中,必须所有的逻辑远算符都被执行后,才会结束表
达式的计算(n)
20.数组名作为函数实际参数,传送的是地址(y)
21.若变量pointer是指针变量,命令pointer=0x2000; 是正确的赋值命令. (n)
22.int c[2][ ]={{1,2},{3,4}}; 是正确的二维数组定义命令。(n)
23.printf("%5. 3f\n",123456.12345);输出为23456.123 (n) 。
24.变量定义char *(pa) [4] ;说明pa是用于数组处理的指针。(n)
25.用命令scanf("%s",name); 对字符数组进行输入操作,当键入“I am a
Student”时,数组的内容为“I”。(y)
26.表达式…B?+a?-…A?的结果是?b?(y)
27.while ( ) { ;} 表示无限循环(n)
28.switch (j) {……..} 语句中的变量j可以是浮点型变量(n)
29.全局变量的不加存储方式修饰符时,说明其存储类型为auto(n)
30.指针变量本身没有指针(n)
31.关键字“struct”用于定义数据类型(n)
二、单项选择题:
(1)若有定义数组命令“int b[ ][3]={{1, 2, 3},{ 4, 5},{ 6, 7}}”,则b数组第1维的长度是( )
A) 2 B) 3C) 4 D) 无确定值
b[2][2]的值是( )
A) 0 B) 1 C) 7 D) 无确定值
(2) C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符。
A)必须为字母或下划线。 B)必须为下划线。
C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。
(3) 下面四个选项中,均是正确的八进制数或十六进制数的选项是。
A)-10 0x8f -011 B) 010 -0x11 0xf1
C) 0abc -017 0xc D) 0a12 -0x123 -0xa
(4)以下选项中非法的表达式是( )
A)0<6x<100B)i3=j3==0
C)(char)(65+3) D)x+y==x+z
(5) 若有定义:int a = 7; floa x = 2.5 , y = 4.7 ; 则表达式
x + a % 3 * (int) (x + y) % 2/4 的值是( ) 。
A) 2.750000 B) 0.00000 C) 3.500000 D) 2.500000
(6) 已有定义: int a=8,则以下表达式中b的值不等于2的是:( )
A)b=a/3 B) b=10-(a++) C) b=a%2D) b=a>3?2:1
(7)已知ch是字符型变量,下面不正确的赋值语句是 ( ) 。
A)ch = 5 + 9 ; B) ch= ' a + b '; C) ch = ' \ 0 '; D) ch= '7' + '6' ;
(8) 设x , y和int型变量,且x = 3, y = 4 , z = 5 则下面表达式中使x值为0的是()。
A)!((z < y )&&(x-=3)) B) (x-y-1 ) && y
C) (z-y) || (!(x-=3)) D) y||z&&(x-=3)
(9)设有程序段
int k = 10 ;
while ( k = 0 ) k = k - 1 ;
以下描述正确的是 ( ) 。
A) 循环体语句一次也不执行。 B) 循环是无限循环。
C) while 循环语句执行十次。 D) 循环体语句执行一次。
(10)设有定义“char s[12]={“abcdef”};”则命令“printf(“%d\n”,strlen(s));”的输出结果为( )
A) 随机值B) 7 C) 6D) 12
(11) 当a = 1 , b = 3 , c =5 d=4时,则执行完下面一段程序后,x的值是( )。
if ( a < b )
if ( c < d ) x = 1;
else
if ( a < c )
if ( b < d ) x = 2 ;
else x = 3 ;
else x = 6 ;
else x = 7 ;
A)1 B) 3 C) 2 D) 6
(12) 下面程序的运行结果是。
# include " stdio.h "
void main ( )
{ int a = 1 , b = 10
do
{ b - = a ; a + + ; }
while ( b - - < 0 ) ;
printf ( " a = % d , b = % d \ n ), a , b );
A)a = 3 , b = 11 B)a = 4 , b = 9
C)a = 1 , b = -1 D)a = 2 , b = 8
(13 ) 调用函数时,若实参是一个数组名,则向函数对应的形参传送的是( )
A) 数组长度B) 数组的首地址
C) 数组第一个元素的值D) 整个数组元素的值
(14) 若有说明:int a[10] ; 则对a 数组元素的正确引用是( )。
A) a [10 ] B)a[10 - 10] C)a ( 5 ) D)a[3.5]
(15) 根据定义和数据的输入方式,输入语句的正确形式为。
已有定义:float f1,f2;
数据输入方式:4.25,3.5
A)scanf ("%f%f ",&f1,&f2); B) scanf ("%f ,%f ",&f1,&f2);
C) scanf ("%3.2f %2.1f ",&f1,&f2); D) scanf ("%2.1f %3.2f ",&f1,&f2);
(16)有以下程序
void main( )
{ int a[2][3]={{1, 2, 3},{4, 5, 6}};
int m,(*p)[3]=a;
m=(*(*p)) *(*(*(p+1)+2));
printf("%d\n",m);
}
执行后输出的结果是( )
A)3 B) 4 C) 1 D) 6
(17)以下if语句语法正确的是。
A) if (x>0) B) if (x>0) printf ( "%f ",-x )
{ x=x+y; printf ("%f ", x);} else printf ("%f",-x);
else printf ("%f ", -x);
C) if (x>0) D) if(x>0)
{x=x+y ; printf ("%f ", x);}; {x=x+y ; peintf ("%f", x)}
else printf ("%f", -x) ; else printf ("%f", -x);
(18)下列程序的输出结果是( )
void main( )
{ int i;
for(i=’A’;i<’I’;i++,++i) printf(“%c”,i+32);
printf(“\n”);
}
A)编译不通过,无输出B)aceg C)acegi D)abcdefghi
(19)下列程序的输出结果是( )
void main()
{ int a=2, *p=&a;
printf ("%d%d", (*p) ++,*p;)
A) 23B)22C)2 D)21
(20) 逻辑运算符两侧运算对象的数据类型。
A)只能是0或1 B) 可以是整型、字符型或实型数据
C) 只可以是整型或字符型数据 D)只能是0或非0正数
(21)以下for 循环的执行次数是。
for ( x = 0, y = 0; (y = 123 ) && ( x<4 ); x + + );
A) 无限次。B)4次。 C)0次。 D)3次。
(22)下面的程序段。
for ( t = 1 ; t < = 100, t + + )
{scanf ("%d", &x);
if ( x <0 ) continue;
printf ("%3d", t );
}
A) 当x < 0 时整个循环结束 B)当 x >= 0时什么也不输出
C) printf 函数永远也不执行D)最多允许输出100个非负整数
(23)若有说明int m[5],*p; 将键入数据保存于数组第一个元素m[0],以下正确的语句段是( )。
A) p = m; B) p = &m;
scanf (" % d ", *p); scanf (" % d ", p);
C)p = &m[0]; D) p = m;
scanf (" % d ", *p) sacnf(“%d”, p);
(24) 下面程序的运行结果是。
a=1; b=2; c=2;
while (a
printf ("%d , %d, %d", a, b, c);
A) 1, 2, 0 B) 2, 1, 0 C) 1, 2, 1 D) 2, 1, 1
(25) 若有说明:int a[3][4]; 则对数组元素的非法引用是。
A)a[0][2*1] B) a[0][4] C) a[4-2][0] D) a[1][3]
(26) 对以下说明的正确理解是:
int a[10] = {6, 7, 8, 9, 10};
A) 将5个初值依此赋给a [1] 至a[5] B)将5个初值依此赋给a [0] 至a [4] C)将5个初值依此赋给a [6] 至a[10] D) 因长度与初值个数不同,故语句错误
(27) 若二维数组a有m列,则在a[ i ][ j ] 前的元素个数为
A) i * m + j B)j * m + i C) i*m + j -1 D)i * m + j + 1
(28)已定义以下函数
void fun(char *p2, char *p1)
{ while((*p2=*p1)!='\0')
{ p1++;p2++; } }
函数的功能是( )
A)将p1所指字符串复制到p2所指内存空间
B)将p1所指字符串的地址赋给指针p2
C)对p1和p2两个指针所指字符串进行比较
D)检查p1和p2两个指针所指字符串中是否有'\0'。
(29) 以下正确的函数声明语句形式是。
A) double fun ( int x , int y ) B) double fun ( int x ;int y )
C) double fun ( int , int ) ; D) double fun ( int x ; int y );
(30) 有以下程序
void main( )
{ int i=0, s=0;
do{
if(!(i%3)) {
i++;continue;}
i++;
s+=i;
} while(i<7);
printf("%d\n", s);
}
执行后输出的结果是( )
a)10 B) 9 C) 8 D) 16
(31) 有两个字符数组 a, b,则以下正确的输入格式是。
A) scanf ("% s % s", &a, &b ) B) gets (a, b)
C) scanf ("%s",a);scanf ("%s", b); D) gets ("a"); gets ("b")
(32) 以下程序正确的运行结果是。
void main ( )
{int a = 2 , i ;
for ( i = 0 ; i < 3 ; i + + ) printf ( " % 4 d " , f(a) ) ;
}
f( int a)
{ int b = 0 ; static int c = 3 ;
b + + ;
c + + ;
return ( a + b + c ) ; }
A) 7 7 7 B) 7 10 13 C) 7 8 9 D) 7 9 11
(33) 当运行以下程序时,从键盘输入:ab
c
def
(
# include "stdio.h"
# define N 6
void main ( )
{char c [N];
int i= 0;
for ( ;i < N; c[i] = getchar ( ),i++);
for (i = 0; i < N; i++) putchar(c[i]);
}
A) abcdef B) a C) b D) ab
b c c
c d d
d
e
f
(34) 执行以下程序后,a , b的值为
void main ( )
{int a , b , k = 4, m = 6, *p1 = &k , *p2 = &m;
a = p1 = = &m;
b = ( -*p1) / (*p2) + 7;
printf (" a = % d\n ", a );
printf (" b = % d\n ", b );}
A) -1 B) 0 C) 1 D) 4
5 7
6 10
(35) 以下程序中调用 scanf 函数给变量 a输入数值的方法是错误的,因为。 void main ( )
{int *p , *q , a , b ;
p = &a ;
printf ( " input a : " );
scanf ( " %d ", *p) ;
… }
A)*p 表示的是变量 a 的值,而不是变量a 的地址。
B)*p 表示的是指针变量 p 的地址。
C)*p 表示的是指针变量 p 的值。
D)*p 只能用来说明p是一个指针变量。
(36) 以下正确的函数形式是
A) double fun (int x, int y) B) fun ( int x, y)
{ z = x +y; return z ;} { int z; return z; }
C) fun (x, y) D)doublefun (int x, int y)
{int x, y; double z;} { double z ; z = x + y; return z;}
(37) 以下不正确的说法是。
A)在不同函数中可以使用相同名字的变量。
B)形式参数是局部变量。
C) 在函数内的复合语句中定义的变量在本函数范围内有效。
D) 在函数内定义的变量只在本函数范围内有效。
(38) 已有定义 int k = 2; int *p1=&k, *p2=&k;下面不能正确执行的赋值语句
是。
A) k = *p1 + *p2 ; B) p1 = p2;
C) p2 = k ; D) k = (*p1)*(*p2) ;
(39)设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为A)4 B)16 C)32 D)52
(40) 若有说明int *p, m = 5, n; 以下正确的程序段是。
A) p = &n; B) p = &n;
Scanf (" % d ", &p); Scanf (" % d ", *p);
C) Scanf (" % d ", &n) D) p = &n;
*p = n; *p = m;
(41) 若有定义: int a[3][4]; 则对a数组的第i行第j列(假设i, j已正确说明并赋
值)元素值的正确引用为。
A) * ( * ( a + i) + j) B) ( a + j) [ j ]
C) * ( a + i + j) D) *(a +i ) +j
(42) 若已定义char S[10] ;则在下面表达式中不表示S[1] 的地址的是。
A) S + 1 B) & S [1] C) & S [0] + 1 D) S + +
(43)设有如下的变量定义:
int i=8,k,a,b;
unsinged long w=5
double x=1.42,y=5.2
则以下符合C语言语法的表达式是
A)a+=a-=(b=4)*(a=3) B)x%(-3);
C)a=a*3=2 D)y=float(i)
(44)以下叙述中正确的是
A)输入项可以是一个实型常量,如scanf("%f,"3.5);
B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:scanf("a=%d,
b=%d");
C)当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf ("%4.2f",&f);
D)当输入数据时,必须指明变量地址,例如:scanf("%f",&f);
(45)在执行以下程序时,为了使输出结果为,t=4则给a和b输入的值应满足的条件是
A)a>b B)aa>b
void main( )
{
int s,t,a,b;
scanf("%d,%d",&a,&b);
s=1; t=1;
if(a<0)s=s+1;
if(a>b)t=s+1;
else if(a= =b)t=5;
else t=2*s;
printf("t=%d\n",t);
}
(46)设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是A)把x和y按从大到小排列B)把x和y按从小到大排列
C)无确定结果 D)交换x和y中的值
(21)以下程序的输出结果是:
void main()
{ int a=12,b=12;
printf("%d %d\n",--a,++b);}
A)10 10 B)12 12 C)11 10 D)11 13
(47)以下程序运行后,输出结果是:
A)cde B)字符c的ASCII码值 C)字符c的地址 D)出错
void main()
{ char *s="abcde";
s+=2;
printf("%ld\n",s);
}
(48)以下程序输出结果是
A)7 B)6 C)5 D)4
main()
{ int m=5;
if(m++>5)printf("%d\n",m);
else printf("%d\n",m--);
}
(49)当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为A)1 B)2 C)3 D)6
if(a
if(c x=1; else if(a if(b else x=3; else x=3; else x=6; (50)在执行以下程序时,如果从键盘上输入:ABCdef<回车>,则输出为A)ABCdef B)abcDEF C)abc D)DEF #include void main( ) { char ch;while((ch=getchar( ))!='\n'){ if(ch>='A' && ch<='Z')ch=ch+32; else if(ch>='a' && ch<'z')ch=ch-32; printf("%c",ch);}printf("\n");} (51)下面能正确进行字符串赋值操作的语句是 A)char s[5]={"ABCDE"}; B)char s[5]={'A'、'B'、'C'、'D'、'E'}; C) char *s;s="ABCDEF"; D)char *s;scanf("%s",s); (52)当执行以下程序段时 x=-1; do { x=x*x;} while(!x); A)循环体将执行一次 B)循环体将执行两次 C)循环体将执行无限次 D)系统将提示有语法错误 (53)在下列选项中,没有构成死循环的程序段是 (A) int i=100 (B) for(;;); while (1) {i=i%100+1; (C)int k=1000; if(i>100) break; do{++k; } } while (k>=1000); (D) int s=36 While(s);--s; (54)执行语句:for(i=1;i++<4;)后;变量i的值是 A)3 B)4 C)5 D)不定 (55)以下程序运行后,如果从键盘上输入ABCDE<回车>,则输出结果为A)8 B)7 C)6 D)5 #include #include func(char str[ ] ) { int num =0; while(*(str+num)!='\0') num+ +; return(num); } void main( ) {char str[10],*p=str; gets(p); printf("%d\n",func(p)); } (56)下面程序的运行结果是 A)12ba56 B)6521 C)6 D)62 void main() { char ch[7]={"65ab21"}; int i,s =0 for(i=0;ch[i]>='0'&&ch[i]<'9';i+=2) s=10*s+ch[i]-'0' printf("%d\n",s); } (57)以下程序运行后,输出结果是 A)8,15 B)8,16 C)8,17 D)8,8 func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b return(m);} void main() { int k=4,m=1,p; p=func(k,m);printf("%d,",p); p=func(k,m);printf("%d\n",p); } (58)以下程序运行后,输出结果是A)84 B)99 C)95 D)44 int d=1; fun(int p) { int d=5; d+=p++;printf("%d",d);} void main() {int a=3; fun(a); d+=a++; printf("%d\n",d);} (59)设有如下定义: int a=1,b=2,c=3,d=4,m=2,n=2; 则执行表达式:(m=a>b)&&(n=c>d)后,n的值为 A)1 B)2 C)3 D)0 (60) 以下程序段在变量ch的值为?A?时的输出为: char ch; scanf(“%c”,&ch); switch (ch) { case …B?: printf(“80-90”); case …A?: printf(“100-91”); case …C?: printf(“69-79”); break; case …D?: printf(“60-68”); default: printf(“50”); } a) 100-91 b) 100-9169-79 c)80-90100-9169-7960-6850 d) 100-9169-7960-6850 (61)以下程序的输出结果是什么? #include struct{ int a; char c[2][30]; }greeting; int main() { greeting.a=1; strcpy(greeting.c[0],"How are you?"); strcpy(greeting.c[1],"How do you do?"); printf("%s\n",greeting.c[greeting.a]); printf("%s",greeting.c[greeting.a-1]); return 0; } A) How B) How are How C) How do you do? D) 程序错误,没有输出。 How are you ? (62)若有以下定义 struct Person { char name[20]; int No; char address[30]; double score; }stud[30]; 以下赋值命令中正确的命令是: A) stud[1].name=”zhanglin” B) stud.No=20; C) stud[10].address[0]=?a?; D) stud[5].double.score=3.4; 三、填空题 (1)若想通过以下输入语句使a中存放字符串1234,b中存放字符5,则输入数据的形式应该是a=1234 b=5。 ...... char a[10],b; scanf("a=%s b=%c",a,&b); ...... (2)下面程序的输出结果是 ABCDCD 。 char b[]="ABCD"; void main( ) { char *chp; for(chp=b; *chp; chp+=2) printf("%s",chp); printf("\n"); } (3)下面程序的输出结果是024。 #define MAX 3 int a[MAX]; void main( ) { fun1( ); fun2(a); printf("\n");} fun1( ) { int k,t=0; for(k=0;k } fun2(int b[]) { int k; for(k=0;k printf("%d",*(b+k)) } (4)下面程序的输出结果是 i=6 j=36 。 #include int f(int n) {static int s=1; while(n) s*=n - -; return s; } void main() {int i,j; i=f(3); j=f(3); printf("i=%d j=%d \n",i,j); } (5)下面程序的输出是__49__ 。 void main( ) {int a[10]={19,23,44,17,37,28,49,36},* p; p=a; printf("%d\n",(p+=3)[3]); } (6)下面程序的输出是 AB 。 void main( ) {int i=3,j=2 char *a="DCBA"; printf("%c%c\n",a[i],a[j]); } (7)以下函数的功能是:把两个整数指针所指的存储单元中的内容进行交换。请填空。 void exchange(int *x, int *y) {int t; t=*y;*y= *x; *x= _ t _ ; } (8)以下fun函数的功能是:累加数组元素的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。请填空。 fun(int b [ ],int n,int *x) { int k, r=0; for(k=0;k *x =r; } (9)以下程序的功能为:比较判断键入的字符串长度是否大于4,如果是判断内容是否为“abcd”, 如果是,输出字符串值. 请填空。 #include “string.h” void main() { char str[10]; scanf(_” %s”_,str__); if ( strlen(str)==4 && strcmp(str,”abcd”)==0)) printf(“%s\n”, str) } (10)有一个3*4的矩阵,要求出其中值最大的那个元素的值,以及其所在的行号和列号, 请填空。 #include “stdio.h” void main() { int k,j,jrow=0; double max,a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; max=a[0][0]; for(k=0;k<=2;k++) for(j=0; j<=3;j++) if( a[k][j]>max ) { max=a[k][j]; row =k; colum =j; } printf("max=%f_,colum=%d_\n",max,colum)’ } 11. 求取一维数组元素的绝对值之和,填空完成程序。 #include “stdio.h” void main() { int k; double sum,a[10]={-3.2,15,7.8,6.33,-2.9,0,2,100.7,20,15}; sum=0; for(k=0;k<10;k++) if( a[k]> 0 ) sum+=a[k]; else sum-=a[k]; //或sum+=(-1)*a[k]; printf("sum=%f\n",sum); } 12设计并调用函数,在已有的由大到小排序的数组中将一个整数插入到合适的位置。 #include void insert_data(int x,int y[8 ]) { int j; for(j=6;j>=0;j--) { if (x break; else y[j+1]=y[j]; } if (x>y[j]) y[j]=x; else y[j+1]=x; } void main() { int k,data,a[8]={191,150,112,98,30,5,-14}; scanf("%d",&data); insert_data( data,a ); for(k=0;k<8;k++) printf("%d ",a[k]); } 13 输出以下图案,填空完成程序: & &&& &&&&& &&&&&&& &&&&& &&& & #include void main() { int f,g,h; for (f=0;f<=3;f++) { for (g=0;g<=2-f;g++) printf(“ “); for(h=0;h<=2*f;h++) printf(“&”); printf(“\n”); } for (f=0;f<=2;f++) { for (g=0;g<=f;g++) printf(“ “); for(h=0;h<=4-2*f;h++) printf(“&”); printf(“\n”); } } 14. 设有如下数据类型及变量定义Struct LineData { int age; char name[20]; struct LineData *p; }stu1,stu2; 且有以下的赋值命令: stu1.p=&stu2;stu2.p=&stu1; stu2.p->age=16;stu1.p->age=18; 则stu1.age的值为 16 ,则stu2.age的值为 18 . 四、编程题 1.编写程序,统计4行4列的整数二维数组a主对角线(a[0][0]~a[3][3])中所有正数之和。 void main() { int i,j,sum=0; int a[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; for(i=0;i<4;i++) for(j=0;j<4;j++) if (j==i) sum=sum+a[i][j]; printf("sum=%d",sum); } 2. 设计函数int diff(int array[],int n)求取长度为n的数组array的元素最大值和最小值之差,并返回。 int diff(int array[],int n) { int max= array[0], min =array[0],j=0; for (;j { if (array[j]>max) max=array[j]; else if (array[j] } return (max-min); } 3.用循环实现以下格式的乘法口诀表的输出(每个数字间空一格:) 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 30 48 56 64 9 18 27 36 45 54 63 72 81 #include void main() { int j,k; for (j=1;j<=9;j++) { for (k=1;k<=j;k++) printf(“%d “,j*k); printf(“\n”); } } 4. 设计一个函数void outStr(char str[]) 要求将数组str保存的一个字符串的每个字符间添加空格显示输出。如字符串为”China”,应显示“C h i n a”。 #include #include void outStr(char str[]) { int j; for(j=strlen(str);j>0;j--) { str[2*j]=str[j]; str[2*j-1]=?…; } printf(“%s\n”,str); } 5. 用二维数组建立3×4整数型矩阵,用键入每个矩阵元素的值,并计算其中所有的正数之和及负数之和。 #include void main() { int array[3][4],j,k,sum1,sum2; for (j=0;j<3;j++) for(k=0;k<4;k++) scanf(“%d”,&array[j][k]); sum1=sum2=0; for (j=0;j<3;j++) for(k=0;k<4;k++) if (array[j][k]>0) sum1+=array[j][k]; else if (array[j][k]<0) sum2+=array[j][k]; printf(“%d,%d” sum1,sum2); } 6.以下程序的main()函数,需要调用函数dataSort(int *pa,int len)实现数组的由大到小排序。编写dataSort(int *pa,int len)函数,用“冒泡法”实现数组排序。 #include void dataSort(int *pa,int len); void main() { int j,a[10]={3,4,10,-5,8,26,9,33,125,-80}; dataSort(a,10); for(j=0;j<10;j++) printf(“%d “,a[j]); printf(“\n”); } 函数如下: void dataSort(int *pa,int len) { int m,n,tmp,*ptmp; ptmp=pa; for (m=0;m { for(n=0;n { if (*pa<*(pa+1)) { tmp=*pa; *pa=*(pa+1); *(pa+1)=tmp; } pa++; } pa=ptmp; } } 五、改错题: 该错:以下程序实现定义结构体类型Student和建立其变量 zhang的功能,修改其中的错误命令行 #1.#include “stdio.h”// 改为:#include “string.h” #2.Student{ // 改为:struct Student { #3.char name[20]; #4.int No=0; // 改为:int No; #5.char sex; #6.}; #7.void main() #8.{ #9.Student zhang;// 改为:struct Student zhang; #10.https://www.doczj.com/doc/901061559.html,=”张立”;// 改为:strcpy(zhang,name, ”张立”); #11.zhang.No=10020; #12.zhang.sex=”m”;// 改为:zhang.sex=?m?; #13.} 改错:以下程序的要求是用函数求取一个整形数组的平均值,有若干个错,按对程序的设计要求,纠正所有错误,并以“将#XX行改为YYY”的形式进行解答。 #include 1# float average(int n,array[]) 2# { int i; 3# float aver; 4# for(i=1;i<=n;i++) 5# aver+=array[i]; 6# aver=aver/n; 7# return ; 8# } 9# 10# void main() 11# { float aver; 12# int i ,score[]; 13# for(i=0;i<10;i++); 14# scanf("%d",&score[i]); 15# average(score[10],i); 16# printf("average=%6.2f\n",aver); 17# } 将1#行改为:float average(int n,int array[]) 将3#行改为: float aver=array[0]; 将4#行改为:for(i=1;i 将7#行改为:return aver ; 将12#行改为:int i ,score[10]; 将13#行改为:for(i=0;i<10;i++) //(消除分号) 将15#行改为:aver=average(i,score) 改错题:下列程序都有若干个错,按对程序的设计要求,纠正所有错误,并以“将#XX 行改为YYY”的形式进行解答, 【程序要求:】统计键入字符串(字符个数少于50个)中每种小写字母的出现的个数,分别存放于数组n的n[0]~ n[25]元素中,并输出统计结果。 #1 #include #2 void main( ) #3 { int n[26]={0}, k ;// 改为:int n[26]={0}, k =0; #4 char c[50] ; #5 gets(c[50]) ;// 改为:gets(c) ; #6 while ( c[k]!=?0?) //改为:while ( c[k]!=?\0?) #7 { #8 if ( …a?<=c[k]<=?z?) //改为:if ( …a?<=c[k]&& c[k]<=?z?) #9 { n[c[k]-…a?]+=1; #10 k++; } //改为: } k++; #11 } #12 for (k=0 ; k<26 ; k++) ;//改为: for (k=0 ; k<26 ; k++) (消除分 号) #13 printf("%c : %d", k+?a?,n[k]) ; #14 }