{ if(a[i]
(3)测试数据:137 114 155 107 146 173 160 166 172 186 (4)运行结果:186 173 172 166 160 155 146 137 114 107 (5)问题及解决方法:无 三、实验总结:
(1)熟练地掌握了选择排序和穷举算法的使用; (2)掌握了对二维数组的简单的使用。
实验五 函数 实验
(验证性 综合性 实验 5学时)
一、目的要求:
(1)学习函数的编程思想,编写一个包括3~4个函数的程序。 (2)掌握函数中参数传递的两种方式和函数的相互调用。 (3)编写实验报告。
二、实验内容(参考实验指导书):
1、写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。 (1)算法描述:
int digit( int n , int k ) {
for(i=0;i { d=n; n=n/10; } return d; } 用scanf输入数,调用函数int digit输出结果 第 16 页 共 16 页 (2)源代码及说明: #include main() { int x; x = digit(1234,2); printf(\} (3)测试数据:digit(1234,2)将返回值3 (4)运行结果:3 (5)问题及解决方法:无 2、写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。 (1)算法描述: int isprime(int n){ for(i=2;i if(n%i==0) return 0; else return 1; } } if(n==1) return 0 (2)源代码及说明: #include int i; if(n==1) { return 0; } 第 17 页 共 17 页 for(i=2;i<=n-1;i++){ if(n%i==0){ return 0; } } return 1; } main() { int r; r = isprime(5); printf(\ r = isprime(8); printf(\} (3)测试数据:2 4 (4)运行结果:1 0 (5)问题及解决方法:无 3、写一个函数reverse( char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写。 (1)算法描述: 递归:递归的出口: if(n==1) printf(\ 递归的形式 printf(\ s[n-1]='\\0'; reverse(s); 非递归: 利用倒序特点,进行交换 for(i=0;i (2)源代码及说明: 递归: void reverse( char s[]) { int n; n=strlen(s); if(n==1) { 第 18 页 共 18 页 printf(\ return ; } printf(\ s[n-1]='\\0'; reverse(s); } 非递归: void reverse( char s[]) { int n; int i,j; char temp; n=strlen(s); if(n==1) { printf(\ return ; } for(i=0;i (3)测试数据: (4)运行结果: (5)问题及解决方法: 4、写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。 (5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。 (1)算法描述: 用递归和非递归写出函数reverse( char s[]) 递归:递归的出口: if(n==1) printf(\ 递归的形式 第 19 页 共 19 页 printf(\ s[n-1]='\\0'; reverse(s); 非递归: 利用倒序特点,进行交换 for(i=0;i } 写出主函数,调用函数reverse( char s[]) (2)源代码及说明: 递归: #include int main() { char text[10]={'a','b','c','d','e','f','g','h','m','o'}; int i,n=10; for(i=0;i 非递归: #include 第 20 页 共 20 页