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
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