void main( ) { }
(三)下面程序的功能是实现将两个字符串连接起来并输出结果,注意不使用strcat函数。请填空并运行程序。
编程提示:
1.定义两个一维字符型数组str1、str2和两个循环变量。
2.为两个字符数组输入两个字符串(可使用scanf函数或gets函数整体赋值,要注意scanf和gets函数的区别,在对字符串赋值时,scanf函数不能出现空格)。
3.确定字符数组str1结束的位置。
4.再将字符数组str2中的内容连接到字符数组str1的后面。 5.为字符数组str1赋字符串结束的标志’\\0’。 6.输出连接后的字符数组str1。
/* c8-3.c 字符串连接*/ #include \void main( )
{ char str1[100],str2[100]; int i=0,j=0;
printf(\
scanf(\
printf(\ gets(str2);
for(i=0; str1[i]!='\\0'; i++) ; /*注意,此处空语句不可少*/ for(j=0;str2[j]!='\\0';j++) { str1[i]=str2[j]; i++;
}
_______________ ; /*给出新的字符串的结束符*/ printf(\}
(四)下面程序的功能是用strcat函数实现将字符串2连接到字符串1的后面并输出,请补充完整。
/* c8-4.c 字符串连接*/ #include \void main( )
{ char str1[80]=\
printf(\ printf(\
_______________; /*使用strcat函数实现,注意其格式*/ printf(\ }
38
(五)下面程序的功能是实现将一个字符串中的所有大写字母转换为小写字母并输出,请补充完整。
例如:当字符串为\
输出:\
/* c8-5.c 字符串中的大写字母转为小写字母*/ #include \void main( )
{ char str[80]=\ int i;
printf(\ for (i=0; str[i]!='\\0'; i++) if (str[i]>='A' && str[i]<='Z')
_______________; /*将大写字母转换成小写字母*/
printf(\}
思考:如果将字符串中的所有小写字母转换为大写字母,又将如何修改程序?
(六)编写程序实现在一个字符串中查找指定的字符,并输出指定的字符在字符串中出现的次数及位置,如果该字符串中不包含指定的字符,请输出提示信息。
编程提示:
1.定义两个一维数组,a字符数组用来存放字符串,b整数数组用来存放指定的字符在字符串中出现的位置(即对应的下标)。
2.定义i,j,m三个循环控制变量和一个标志变量flag,并初始化flag的值为0。 3.用scanf或者gets函数为字符数组赋一个字符串。
4.在循环中对字符数组的每个元素和指定字符ch进行匹配判断,如果相同,就把其下标依次存放在数组b中,并置flag的值为1。
5.循环退出后判断标志变量flag的值,如果仍为0,说明字符串中没出现指定的字符,否则,就输出该字符在字符串中出现的次数和位置。
五、实验注意事项
(一)注意C语言中字符串是作为一维数组存放在内存中的,并且系统对字符串常量自动加上一个‘\\0’作为结束符,所以在定义一个字符数组并初始化时要注意数组的长度。 (二)注意用scanf函数对字符数组整体赋值的形式。
六、思考题
(一)下面程序运行的结果是:___________。 #include \void main( )
{ char a[11]={ ’I’, ’ ’, ’a’, ’m’, ’ ’, ’a’, ’ ’, ’b’, ’o’, ’y’}; printf(\
}
39
(二)下面的程序用来实现将两个字符串连接起来,请将源程序补充完整。 #include \void main( )
{ char str1[100],str2[100];
int i=0,j=0;
printf(\scanf(\
printf(\gets(str2);
for(i=0; str1[i]!='\\0'; i++); for(j=0; str2[j]!='\\0'; j++) { str1[i]=str2[j]; i++; } _______________;
printf(\
}
(三)下面程序的功能是用strcat函数实现将字符串2连接到字符串1的后面并输出,请补充完整。
#include \void main( )
{ char str1[80]=\
printf(\ printf(\ __________________;
printf(\}
(四)下面的程序用来实现将一个字符串中的所有大写字母转换为小写字母并输出。请将源程序补充完整。
例如,当字符串为\ 输出:\
#include \void main( )
{ char str[80]=\ int i;
printf (\ for (i=0; str[i]!='\\0'; i++)
if (str[i]>='A' && str[i]<='Z') _________________;
printf(\}
40
实验九 函数
一、实验学时
2学时
二、实验目的
(一)掌握函数的定义、函数类型、函数参数、函数调用的基本概念; (二)掌握变量名作函数参数的程序设计方法; (三)掌握函数的嵌套调用的方法; (四)掌握数组元素作函数参数;
(五)掌握数组名作函数参数的程序设计方法; (六)掌握字符数组作函数参数的程序设计方法; (七)了解全局变量、局部变量的概念和使用方法;
(八)使用功能键F7单步执行,使用Ctrl+F7观察变量的值,学会程序调试基本方法。
三、预习要求
(一)函数的定义、函数类型、函数参数、函数调用的基本概念; (二)函数实参与形参的对应关系以及参数的传递; (三)以变量名和数组名作函数参数时的使用方法; (四)全局变量、局部变量的概念和使用方法。
四、实验内容
(一)下面程序的功能是:根据输入的整数x和n,利用函数fact实现求x。
例如:输入:2,3 输出23=8
请在程序中的横线上填入正确的内容,将程序补充完整。 /* c9-1.c 利用函数fact实现求x的n次方*/ #include \ void main( )
{ long int fact(long x,long n) ; /*声明fact函数*/
long int x ; long int n;
printf(\ scanf(\
printf(\调用fact函数 */ }
long int fact(long int x, long int n) /*定义fact函数求xn */ { long int i,s;
; /*求累积变量的初始化*/
41
n
if (n= =0) return 0;
for(i=1; i<=n; i++) /*用循环实现x*/ s=s*x;
; /*返回结果x*/ }
(二) 下面程序的功能是:计算Cm?的内容,将程序补充完整。
n例如:输入:5,3 输出:Cm?10 编程提示:(1)定义求阶乘函数,在此基础上定义求组合数函数。
nn
n
m!的值。请在程序中的横线上填入适当
n!*(m?n)! (2)主函数调用求组合数函数,求组合数函数再三次调用求阶乘函数。 /* c9-2.c 利用函数组合数*/ #include \
long int jf (int n) /*定义求阶乘函数jf*/ { int i; long int t=1; for(i=1; i<=n; i++) t*=i;
; }
long int cmn(int m, int n) /*定义求组合数函数cmn*/ { return(jf(m)/(jf(n)*jf(m-n))) ;} /*用return语句返回结果*/
void main( ) { int m,n;
printf(\ scanf(\,%d\
; }
(三)下面程序的功能是:读入一个整数m,计算如下公式的值:
t?1?111???? 23m例如:若输入5,则应输出:“The result is 2.28333”。 请在程序中的横线上填入适当的内容。
/* c9-3.c 利用函数实现级数求和*/ #include \double fun(int m) { float t=1.0; int i; for(i=2; i<=m; i++) ;
42