return(s); }
/*两个数之积*/ int mul(int x,int y) {
int s; s=x*y; return(s); }
/*两个数之商*/ int div(int x,int y) {
int s; s=x+y; return(x/y); }
/*主函数*/ main() {int a,b; char ch; while(1)
{printf(“*************\\n”); printf(“*+----------add*\\n”); printf(“*------------sub*\\n”); printf(“**-----------mul*\\n”); printf(“*/-----------div*\\n”); printf(“*0----------exit\\n”); printf(“*************\\n”); printf(“input your choice:”); scanf(“%c”,&ch);
printf(“input two number:\\n”); scanf(“%d%d”,&a,&b); switch(ch) {
case ‘+’:k=add(a,b);break; case ‘-’:k=sub(a,b);break; case ‘*’:k=mul(a,b);break; case ‘/’:k=div(a,b);break; case ‘0’:exit(1);break; default:printf(“error!\\n”);}
printf(“%d%c%d=%d\\n”,a,ch,b,k); } } }
程序3:用递归法计算n!(通过函数的递归调用计算阶乘) 算法分析: 递归数学模型
#include “stdio.h” long power(int n)
{ long f;
if(n>1) f=power(n-1)*n; else f=1;
return(f); } main()
{ int n; long y;
printf(\ scanf(\ y=power(n);
printf(\ getch(); }
程序4:编写函数实现由小到大排序。 算法思路:
1.多个数据用数组存放,在主函数中接收数据。 2.把数据传送到用户自定义函数中。 3.在用户自定义函数中实现排序过程。 4.在主函数中输出排好序的数据。 void sort(int array[],int n) {
int i,j,k,t;
for(i=0;i for(j=i+1;j if(array[j] t= array[k]; array[k]= array[i]; array[i]=t; } } #include “stdio.h” main() {int a[10],i; printf(“enter the array:\\n”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); sort(a,10); printf(“the sorted array:\\n”); for(i=0;i<10;i++) printf(“%d”,a[i]); printf(“\\n”); } 实训题目 1、定义函数fun_a()判断某数是否为素数,若是素数返回值为1,不是则返回值为0。 2、编写一个加减乘除运算的小系统,当输入为0时退出,用函数实现各项功能。 ***************************** * 1---------加法 * * 2---------减法 * * 3---------乘法 * * 4---------除法 * * 0---------退出 * ***************************** 请输入你的选择(0-4): 3、编写函数实现求一维数组最大数的功能。 4、编写函数实现字符串连接功能。 第四部分 数据类型构造与模块化程序设计 (指针的应用) [实训目的及要求] 通过本次实训内容,使学生对C语言指针有一个系统的认识,并在此基础上掌握指向简单变量的指针、指向数组的指针、指向字符串的指针的定义、引用及应用,同时指针与函数的结合应用是一个重点和难点,通过具体题目的训练能领会指针的本质,并应用在程序设计中。 程序1:指向简单变量的指针变量的应用。 main( ) { int a,b,*p1,*p2;/*定义指针变量p1和p2*/ a=100; b=10; p1=&a; p2=&b; /*为指针变量p1和p2赋一个指向*/ printf(\ printf(\输出指针变量p1和p2指向的变量的值*/ } 程序2:利用指向数组的指针变量输出数组的全部元素。 #include “stdio.h” main( ) {int *p,i,a[10]; p=&a[0]; /*把数组的首地址赋给指针变量p,使p指向一维数组*/ for(i=0;i<10;i++) scanf(\通过指针变量接收数组元素的值*/ printf(\ p=&a[0]; for (i=0;i<10;i++) printf(\利用指向一维数组的指针变量输出元素的值*/ } 程序3:指针的延伸应用,也可用数组名访问元素。 #include “stdio.h” main ( ) {int a[10]; int i; for (i=0;i<10;i++) scanf(\ printf(\ for (i=0;i<10;i++) printf(\ } 程序4:指针变量作为函数参数的应用--排序。 #include “stdio.h” void sort(int *x,int n) {int i,j,k,t; for (i=0;i for (j=i+1;j if (*(x+j)>*(x+k)) k=j; if (k!=i) { t=*(x+i); *(x+i)=*(x+k); *(x+k)=t;} } } main ( ) { int i,a[10]; for (i=0;i<10;i++) scanf(\ sort(a,10); for (i=0;i<10;i++) printf(\ } 程序5:有一个长度不大于40的字符串,已知其中共包含两个字符“A”,求处于两个字符“A”中间的字符个数,及这些字符。 算法分析: 1.定义字符数组a[40],b[40],计数器n=0; 2.接收字符数组a; /*用户自定义函数 */ {3.定位第一个字符?A?的位置; 4.从?A?的后一个字符开始为字符数组b赋值,同时计数器加一,直到遇到第二个字符?A?; 5.修正字符数组b;} 6.输出字符数组b和计数器n。 #include “stdio.h” int sub(char *x,char *y) { int i,n=0; for(i=0;*(x+i)!='\\0';i++) if(*(x+i)=='A') break; i=i+1; while(*(x+i)!='A') { *(y+n)=*(x+i); n++;} *(y+n)='\\0'; return(n); } main( ) { char a[40],b[40]; int l,sub(); gets(a); l=sub(a,b); printf(\ printf(\ } 程序6:指向二维数组的指针变量变量的应用,利用行指针输出二维数组任一行任一列的元素的值。 #include “stdio.h” main ( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i,j; p=a; scanf(\ printf(\ } 程序7:返回指针值的函数,有一个长度不大于40的字符串,已知其中总包含两个字符?A?,编写函数求处于两个字符?A?中间的这些字符. 解决方法: 1.把求得的字符串在子函数中直接输出。 2.用数组的形式利用共用空间的方式带回到主调函数中。 算法思路: 1.接收字符串; 2.把?A?之间的字符复制到一个字符数组中; 3.把该字符数组的地址返回到主调函数中. #include “stdio.h” char *sub(char *x)