当前位置:文档之家› C语言复习(2011版)

C语言复习(2011版)

C语言复习(2011版)
C语言复习(2011版)

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 }

相关主题
文本预览
相关文档 最新文档