省二C复习资料 下载本文

col=j; }

printf(\ }

六、函数 一)函数语法

(1)程序是由多个函数组成的,一个程序有且只有一个main函数,程序的运行是从main函数开始到时main函数结束

(2)函数不能嵌套定义,可以嵌套调用

(3)使用函数的三点:定义、调用、申明(见下图) (4)函数的参数:形参和实参

要求形参和参类型一致,个数相同 传递过程是将实参的值对应传给形参 (5)值传递和地址传递

值传递:简单类型,实参传给形参,形参发生变化不能传给实参。 地址传递:数组、指针,实参传给形参,形参发生变化也能传给实参

例题:

1. 在C程序中,若对函数类型未加说明,则函数的隐含类型为( )

A)int B)double C)void D)char 2. C语言中的函数( )

A)可以嵌套定义 B)不可以嵌套调用

C)可以嵌套定义,但不能递归调用 D)嵌套调用和递归调用都可以。 3. 有以下函数定义:

void fun( int n, double x) { ????}

11/48

下面函数调用正确的是( )

A) fun( x, n) B) k=fun(10,12.5)

C) fun(int x, double y) D) void fun(n, x) 4. 有以下程序

#define N 20

fun(int a[],int n,int m) { int i,j;

for(i=m;i>=n;i--) a[i+1]=a[i];

} main()

{ int i,a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9);

for(i=0;i<5;i++) printf(\}

程序运行后的输出结果是( )

A)10234 B)12344 C)12334 D)12234 5. 有以下程序

void sum(int a[]) { a[0] = a[-1]+a[1]; } main()

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

printf(\ }

( )

A)6 B)7 C)5 D)8 6. 以下程序运行后的输出结果是:

void swap(int x,int y) { int t;

t=x;x=y;y=t;

printf(\ %d \}

void swap1(int *x,int *y) { int t;

t=*x;*x=*y;*y=*t;

printf(\ %d \} main()

{ int a=3,b=4; swap(a,b);

printf(\ %d\\n\

swap1(&a,&b);

printf(\ %d\\n\}

12/48

二)递归函数

了解递归过程(见课件) 例题:

【程序1】#include”stdio.h”

int fun( int n)

{ if(n<10) return n; else

return (n)*fun(n/10);

} main()

{ printf(“%d”,fun(218)); } 运行结果:

【程序2】

# include long fun( int n) { long s;

if( n== 1|| n==2) s=2; else s=n+ fun(n-1);

return s; }

void main ( )

{ printf(“\\n %ld”, fun (5)); } 运行结果:

三)变量的作用域和存储类型(见课件) 例题:

1. C语言auto型变量是( )

A) 存储在动态存储区中 B) 存储在静态存储区中

C) 存储在外存储器中 D) 存储在计算机CPU的寄存器中

【程序1】int w=2; int f(int x) {int y=1;

static int z=3; y++;z++;

return(x+y+z); }

main()

{ int k;

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

printf(“M”,f(w++)); }

13/48

运行结果:

【程序2】以下程序运行后的输出结果是:

fun(int a)

{ int b=0;static int c=3; b++; c++;

return (a+b+c); } main()

{ int i,a=5;

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

printf(\ \ printf(\

}

运行结果:

七、指针

一)指针的语法

(1)指针定义 基类型 *指针变量名;

(2)指向操作(取址操作) 指针变量=&普通变量; (3)间接访问 *指针变量

二)指针作为参数(是地址传递,双向性)

三)指针与数组的关系 (1)与一维数组 int a[10]; 定义:

数组元素类型 *指针名; int *p; 指向数组

指针变量=数组名; p=a

访问数组元素:

a[i]、p[i]、*(p+i)、*(a+i)

(2)与二维数组

指向二维数组行的指针变量 int a[10][4]; 指针变量定义:

元素类型 (*变量名)[每行个数]; 如 int (*q)[4]; 联系数组

指针变量= 数组名 如 q=a;

引用任意数组元素a[i][j] *( *(q+i)+j)

14/48

(3)指向数组的指针所能进行的运算

例题:

1. 设有定义:int s[]={1,3,5,7,9},*p=&s[0];则值为7的表达式是( )

A)*p+3 B)*p+4 C)*(p+3) D)*(p+4) 2. 若有以下定义,则值为4的表达式是( )

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

A)p+=3,*(p++) B)p+=3,*++p C)p+=4,*p++ D)p+=4,++*p 3. 若有定义及赋值:

int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9} , *p; p=a; 则引用a中的值是5的元素的表达式为( )

A) a[4] B) *(p+4) C) *(a+5) D) *p[5]

4. 设int x[]={1,2,3,4,5,6},*p=x; 则值为3的表达式是 ( )

A) p+=2, *p++ B) p+=2, * ++p C) p+=3 D) p+=2 , ++*p 5. 若有定义及赋值:

int a[5][5], (*p)[5]; p=a; 则下列各式中表示地址的表达式为( ) A) a[3][3] B) *(*(p+1)) C) a[2]+2 D) *(*(a+3)+1) 6. 设有一下语句

int a[4][2]={1,2,3,4,5,6,7,8}; 则*(*(a+2)+1) ( ) A)3 B)4 C)5 D)6

四)字符串及字符串数组涵义 char *p;:p为字符串变量; char *s[10];:表示定义十个字符串,每个字符串的长度不定 例题:

1. 不正确的赋值或赋初值方式是( )

A)char str[]=”Hell0 2006” B)char str[20];str=”Hell0 2006”; C) char *p=”Hell0 2006” D) char *p;p=”Hell0 2006” 2. 下列语句中合法的数组定义是( )

A)char a[3][]={‘abc’,’12’,”fox”} B)char a[][3]={‘abc’,’12’,”cd”} C)char a[3][]={‘a’,”12”,”fox”} D)char a[][3]={“a”,”12”,”cd”}

3. 以下语句或语句组中,能正确进行字符串赋值的是 ( )

A)char *sp; *sp=\ B)char s[10]; s=\C)char s[10]; *s=\ D)char *sp=\

15/48