return ___ ______ ; }
void main( ) { int m;
printf(\ scanf(\
___ ______ ; /*按照例子中的输出形式输出结果*/ }
(四)下面程序的功能是:输入一个十进制整数,输出其对应的二进制数。
编程提示: 在main函数中定义一个变量并为其赋值,然后调用函数fun将该十进制数转换为二进制。
函数fun的形参即为被转换的整数,在for循环中每次求出m%k存放到数组aa中,同时将m/k的整数商赋给m继续判断,直止m的值为0。最后按反序输出数组aa的元素。
请在程序中的三处横线上填入适当的内容,将程序补充完整: /* c9-4.c 通过函数调用实现数制转换*/ #include \void fun(int m) { int aa[20],i,k=2;
for(i=0; m; i++) {aa[i]=m%k; ___ ______ ;} printf(\
for(; i; i--) printf(\void main( ) { int n;
printf(\请输入一个十进制整数:\\n\ fun( ___ ______ ); }
如果将十进制数转换为八进制数,应对程序的哪个语句进行修改?怎样修改?
(五)写一个程序,判别一个整数数组中各元素的值,若大于0 则输出该值,若小于或等于0则输出0值。
编程提示: 判断函数:1.函数的类型为void,函数中不使用return语句;
2.函数的形参为一整型变量;
3.函数体中使用选择结构,根据对变量值的判断输出相应结果。
main函数:1.定义一个一维整型数组;
2. 为整型数组赋若干个数值;
3. 调用判断函数对数组元素逐一进行判断,以数组元素作实参。
/* c9-5.c 判别一个整数数组中各元素的值 */ #include \ void main( ) {
43
}
(六)一维数组a中的元素为:1,4,2,7,3,12,5,34,5,9。求一维数组a中的最大元素及其下标。程序的输出应为:The max is: 34,position is: 7 。要求:求最大元素位置用函数实现,在main函数中调用该函数。
编程提示: 定义一个全局变量max,用来存放最大元素。求最大元素位置的子函数: 1.函数的类型为整型;
2. 函数的形参应为整型一维数组和一整型变量(存放数组元素的个数);
3.函数体中,定义一个整型pos,用来存放当前最大元素在数组中的下标,初值为0;将全局变量max的初值设置为数组中的第一个元素;
4. 函数体中使用循环结构,将数组元素依次和max中的值进行比较,将两者中的最大元素存入max中,并将最大元素的下标存入pos中;
5. 循环结束后,用return语句,将pos的值返回到主函数。 main函数:
1. 定义一个一维整型数组并为该数组赋若干个数;
2. 以赋值语句的形式,将求最大元素位置函数的返回值赋给一个变量,以数组名和数组的元素个数作实参。
注意:以数组名作实参时,实参与形参之间是地址的传递,实参数组和形参数组是公用一段内存单元。
/* c9-6.c 通过函数调用求一维数组中的最大元素及其下标*/
#include \ #include \ int max;
int fun( int arr[ ],int n ) { int pos,i; max = arr[0]; pos = 0;
for( i=1; i pos=i; } return (pos); } void main( ) { int a[10]={1,4,2,7,3,12,5,34,5,9},n; _______________; printf(\ } (七)下面程序的功能是:求二维数组a中的上三角元素之和。 例如:a中的元素为: 4 4 34 37 7 3 12 8 44 5 6 5 52 24 23 2 10 程序的输出应为:The sum is:147。 请在程序中的横线上填入适当的内容,将程序补充完整。 /* c9-7.c 通过函数调用求二维数组中的上三角元素之和*/ #include \ #include \ int arrsum( int arr[4][4]) { int i,j,sum; sum=0; for( i=0; i<4; i++) for ( __________;j<4; j++) sum+=arr[i][j]; return (sum); } void main( ) { int a[4][4]={4,4,34,37,7,3,12,8,5,6,5,52,24,23,2,10},i,j; printf(\ (八)将字符串1的第1,3,5,7,9,......位置的字符复制到字符串2并输出。 例如:当字符串1为\,则字符串2为\。 编程提示: 子函数:1. 函数的类型为void,函数中不使用return语句; 2. 函数的形参应为两个字符型一维数组; 3. 函数体中使用循环结构,将字符串1中相应位置上的字符逐一复制到字符 串2中,注意循环变量每次递增的数目。 main函数:1. 定义一个一维字符型数组; 2. 为字符数组赋一个字符串; 3. 调用转换函数,以两个数组名作实参; 4. 输出转换后的字符数组的内容。 /* c9-8.c 通过函数调用实现对字符串的处理*/ #include \ #include \ #include \ void fun(char str1[ ],char str2[ ]) { int i,j; j=0; for(i=0;i str2[j]=’\\0’; } void main() 45 { char str1[80]=\ printf(\ _______________; printf(\ } (九)输入下面的程序并分析运行结果。用F7单步执行,注意程序的执行过程,观察变量d的值,理解全局变量和局部变量的区别,理解各种局部变量的作用范围。 /* c9-9.c 全局变量与局部变量的作用范围 */ int d=1; fun(int p) { int d=5; d+=p++; printf(\main( ) { int a=3; fun(a); { int d=16; d+=a++; printf(\ printf(\} 五、实验注意事项 (一)定义函数时,函数名后的圆括号后面不能加“;”。 (二)在函数体内,不能再对形参进行定义和说明。 (三)变量作实参时,只使用变量名,实参变量对形参变量的数据传递是“值传递”。 (四)一维数组作函数的实参时,只使用数组名如:fun(a); 。 下面对函数的调用都是不正确的: fun(int a[4]); fun(int a[ ]); fun(int a); 六、思考题 (一)下面程序的功能是:判别一个整数数组中各元素的值,若大于0 则输出该值,若小于或等于0则输出0值。请在程序中的横线上填入适当的内容,将程序补充完整。 #include \void nzp(int v) { int i=0; if(v>0) printf(\else printf(\} void main( ) { int a[5],i; printf(\for(i=0;i<5;i++) 46 { scanf(\_______________ ; } } (二)一维数组a中的元素为:1,4,2,7,3,12,5,34,5,9。下面程序的功能是:求一维数组a中的最大元素及其下标。程序的输出应为:The max is: 34,position is: 7 。 请在程序中的横线上填入适当的内容,将程序补充完整。 #include int fun( int arr[ ],int n ) { int pos,i; max = arr[0]; pos = 0; for ( i=1; i pos=i; } return(pos); } void main() { int a[10]={1,4,2,7,3,12,5,34,5,9},n; _______________; printf(\ } (三)下面程序的功能是:将字符串1的第1,3,5,7,9,......位置的字符复制到字符串2并输出。 例如,当字符串1为\,则字符串2为\请在程序中的横线上填入适当的内容,将程序补充完整。 #include \ #include \ #include \ void fun(char str1[ ],char str2[ ]) { int i,j; j=0; for(i=0;i str2[j]=’\\0’; } void main( ) { char str1[80]=\ 47