第一篇:西北农林科技大学c语言实习答案
实习1
1、简单程序设计 编程写程序,在屏幕上输出信息:Happy New
Year!
/* 输出图形*/ #include
{
printf(“Happy New Year!n”);
}
2、简单计算 由键盘任意输入2个数,分别计算它们的和、差、积、商。/*简单计算*/ #include
{ float a,b;float h,c,j,s;scanf(“%f%f”, &a,&b);
h=a+b;c=a-b;j=a*b;
s=a/b;printf(“和=%f,差=%f,积=%f,商=%fn”,h,c,j,s);
}
3、计算梯形的面积 已知梯形的上底、下底和高,计算梯形的面积。
/*计算梯形的面积*/ #include
{
float supline,dowline,high;
double area;scanf(“%f”,&supline);
scanf(“%f”,&dowline);
scanf(“%f”,&high);area =((supline+dowline)*high)/2.0;
printf(“%f n”,area);
}
4、输出字符对应的ASCII码 任意输入一个字符,输出此字符对应的ASCII码。
/*输出字符对应的ASCII码*/
#include
{
char c;scanf(“%c”,&c);printf(“%dn”,c);
}
5、数据类型长度测试
编写程序,测试所使用的计算机系统字符型、短整型、整形、长整型、单精度实型、双精度实型所占有的字节数量。
/*数据类型长度测试*/ #include
{ printf(“size of char=%dn”,sizeof(char));
printf(“size of short=%dn”,sizeof(short));
printf(“size of int=%dn”,sizeof(int));
printf(“size of long int=%dn”,sizeof(long int));
printf(“size of float=%dn”,sizeof(float));
printf(“size of double=%dn”,sizeof(double));
}
1.成绩判断
输入一个学生的数学成绩,如果它低于60,输出“Fail”,否则,输出“Pass”。不要改变与输入输出有关的语句。
/*成绩判断*/ #include
void main()
{ float mark;
scanf(“%f”,&mark);
if(mark<60)
printf(“Failn”);
else
printf(“Passn”);
} 2.字符转换
输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。不要改变与输入输出有关的语句。
#include
main(){char ch;ch=getchar();
if(ch>='A'&&ch<='Z')
{ch=ch+32;
printf(“%cn”,ch);}
else if(ch>='a'&&ch<='z')
{ch=ch-32;
printf(“%cn”,ch);}
else
printf(“%cn”,ch);
} 3.利用海伦公式求三角形面积 三角形三个边长
/*计算三角形面积*/ #include “math.h” #include “stdio.h” void main()
{
double a,b,c,s,area;
printf(“请输入3条边长:”);scanf(“%lf%lf%lf”,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b)
{
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“三角形的面积是:%fn”,area);
scanf(“%lfn”,area);
} else
printf(“这3个数无法组成三角形!n”);
} 4.判断是否能构成一个三角形
从键盘输三个数,判断是否能将它们作为三角形的三条边构成一个三角形。若能,输出“Yes”,否则,输出“No”。
/*判断是否能构成一个三角形*/
#include
{ float a,b,c;
printf(“请输入3条边长:”);scanf(“%f%f%f”,&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&& b+c>a)
printf(“Yesn”);
else printf(“Non”);
} 5.按从大到小排序三个数 从键盘输入三个数,将它们按从大到小进
行排序,然后输出。/*按从大到小排序三个数*/
#include
main(){ int a,b,c,d,e,f;
printf(“请输入三个整数n1,n2,n3:”);
scanf(“%d%d%d”,&a, &b, &c);
printf(“排序前:%d, %d, %dn”, a, b, c);
if(a>b){ {
d=c;e=a;f=b;
} { if(c
} else { d=a;e=c;f=b;} } }
else{if(b
} 1.数据统计 任意输入n个整数,分别统计奇数的和、奇数的个数、偶数的和、偶数的个数。
/*数据统计*/ #include
void main()
{
int i,n,m,jishuhe=0,oushuhe=0,jishuge=0,oushuge=0;
scanf(“%d”,&n);
for(i=0;i { scanf(“%d”,&m); if(m%2!=0) { jishuhe=jishuhe+m; jishuge++; } else { oushuhe=oushuhe+m; oushuge++; } } printf(“%dn%dn%dn%dn”,jishuhe,jishuge,oushuhe,oushuge); } 2.爱因斯坦阶梯问题 爱因斯坦阶梯问题。设有一阶梯,每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶;每步跨7阶,正好到阶梯顶。问满足条件的最少阶梯数是多少。 /*爱因斯坦阶梯问题*/ #include { int x;x=7;while(!((x%3==2)&&(x%5==4)&&(x%6==5))) x+=14; printf(“%dn”,x); } 3.猴子吃桃问题 一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一个,第2天接着吃了前一天剩下的一半,再多吃了一个,以后每天如此,直到第n天,只剩下1个桃子,问猴子一共摘了多少桃子? /*猴子吃桃问题*/ #include { int n;int x=1,i; scanf(“%d”,&n);for(i=1;i { x=2*(x+1); } printf(“%dn”,x); } ┏(^ω^)=☞✘✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 4.求两个数的最大公约数和最小公倍数 用辗转相除法(即欧几里得算法)求两个正整数的最大公约数和最 小公倍数。 /* 求两个数的最大公约数和最小公倍数*/ #include void main() { int a,b,rem,temp;int Div,Multi;int a1,b1; scanf(“%d%d”,&a,&b); a1=a;b1=b;if(a temp=a;a=b;b=temp;} while(rem) { rem = a%b; a=b;b=rem;} Div=a;Multi = a1*b1/Div; printf(“%dn%dn”,Div,Multi); } 5.求sin(x)的近似值 利用公式求sin(x)的近似值(精度为10e-6)。sin(x)=x-x3/3!+x5/5!-x7/7!+....(-1)nx(2n+1)/(2n+1)!+.../*求sin(x)的近似值*/ #include main(){ float a,b=1;float i,sinx,x;scanf(“%f”,&x); a=x;sinx=0; for(i=1;fabs(a/b)>=1e-6;i++) { sinx+=a/b;a=-a*x*x;b=b*2*i*(2*i+1); } printf(“%fn”,sinx); } 6.图形输出 输入一个字符及行数n,用该字符在屏幕上输出如下图形: * *** ***** ******* ********* 输入: 一个字符及要输出的行数n。 输出: 用该字符在屏幕上构成的要求图形。 #include void main() { int n,i,j;char ch;ch=getchar();scanf(“%d”,&n);for(i=0;i for(j=0;j<(n-1-i);j++) printf(“ ”); for(j=0;j<(2*i+1);j++)printf(“%c”,ch); printf(“n”);} } (^ω^)=☞1.字符串连接 由键盘任意输入两串字符,不用库函 数strcat,连接将两串字符。 输入: 两串字符 输出: 连接将两串字符 输入样例: abc def 输出样例: abcdef /*字符串连接*/ #include { ┏ int i,j,k; char str[20]={“ ”},str1[10],str2[10]; gets(str1); gets(str2); j=strlen(str1),k=strlen(str2); for(i=0;i { if(i else str[i]=str2[i-j]; } puts(str);} /*字符串连接*/ #include { char str1[100],str2[50]; int i,j; gets(str1);gets(str2); for(i=0;str1[i]!=' ';i++) ; for(j=0;str2[j]!=' ';j++) { str1[i]=str2[j]; i++;} str1[i] = ' '; puts(str1); } 2.简单加密程序 描述: 由键盘任意输入一串字符,对其进行加密,加密原则为:如果为字母,将其循环右移2个字母,其他字符保持不变。 输入: 一串字符 输出: 加密后的字符串 输入样例: abl2CDxyz 输出样例: cdl2EFzab 提示: 1.可用gets()和puts()输入输出字符串。 2.利用ASCII码运算进行加密。 3.循环右移的含义是:将a-z,A-Z各看成一个环进行移动,即y右移2个字母后为a,z右移2个字母后为b;Y右移2个字母后为A,Z右移2个字母后为B。 /*简单加密程序*/ #include void main() { char a[80]; int i;gets(a); for(i=0;a[i]!=0;i++){if((a[i]>='A'&& a[i]<='X')||(a[i]>='a'&&a[i]<='x')) a[i]=a[i]+2;else if((a[i]>='y'&&a[i]<='z')||(a[i]>='Y'&&a[i]<='Z')) a[i]=a[i]-24;} puts(a);} 3.矩阵对角线元素求和 描述: 输入一个5×5的数组,分别求其主对角线和辅对角线上 元素之和。 输入: 5×5的数组 输出: 主对角线和辅对角线上元素之和 输入样例: 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 输出样例: 65 65 提示: 主对角线为从矩阵的左上角至右下角的连线,在数组中即指行列下标相同的元素,辅对角线为从矩阵的右上角至左下角的连线,这些元素的下标之间也可用相应的表达式表达。 /*矩阵对角线元素求和*/ #include { int i,j;int a[6][6];int sum1=0,sum2=0; for(i=0;i<5;i++)for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);for(i=0;i<5;i++) { sum1=sum1+a[i][i];sum2=sum2+a[i][4-i]; } printf(“%d %dn”,sum1,sum2); } 4.数据顺序调整 描述: 由键盘任意输入10个数,将最大数调到最前面,最小数 调到最后面。 输入: 任意10个数 输出: 数据调整后的10个数。 输入样例: 0 1 2 3 4 5 6 7 8 9 输出样例: 9 1 2 3 4 5 6 7 8 0 提示: ① 定义四个变量d1、d2、x1、x2,分别存放最大数、最小数及它们的位置; ② 在循环开始前,将第一个元素作为参考,将其值分别存入d1、x1,将其下标分别存入d2、x2; ③ 在循环中将其它元素逐一与d1比较,若比d1大,将其存入d1,并将其下标存入d2;否则将其与x1比较,若比x1小,将其存 入x1,并将其下标存入x2; ④ 结束循环后,将d2所示位置的数与第一个数交换,将x2所示位置的数与最后一个数交换,然后输出数组所有元素即可。 /* 数据顺序调整*/ #include { int i,a[10],temp;int kmax=0,kmin=0; for(i=0;i<10;i++)scanf(“%d”,&a[i]); for(i=0;i<10;i++) { if(a[i]>a[kmax]) kmax=i; if(a[i] kmin=i; 1、字符串连接 /* exer 4-1 两串字符连接 */ #include unsigned int i,j; char soustr[80],desstr[80]; //printf(“please enter soustr:”); gets(soustr); } temp=a[0];a[0]=a[kmax];a[kmax]=temp; if(kmax!=9) { temp=a[9];a[9]=a[kmin];a[kmin]=temp; } 实习四答案 /* 输入原串 */ //printf(“please enter desstr:”); gets(desstr); /* 输入目的串 */ i = strlen(soustr); /* 取目的串尾部位置 */ for(j=0;j<=strlen(soustr);j++,i++) { soustr[i] = desstr[j]; /* 将原串依次接入目的串尾部 */ } puts(soustr);} 2、简单加密程序 /* exer 4-2 字符加密 */ #include unsigned int j; char soustr[80],secstr[80]; //printf(“please enter soustr:”); gets(soustr); /* 输入原串 */ for(j=0;j<=strlen(soustr);j++) { if(soustr[j]>='A' && soustr[j]<='Z') secstr[j] =(soustr[j]-'A'+2)%26+'A';/*计算大写字母密文*/ else if(soustr[j]>='a' && soustr[j]<='z') secstr[j] =(soustr[j]-'a'+2)%26+'a';/*计算小写字母密文*/ else secstr[j] = soustr[j]; /* 其它字符不变 */ } puts(secstr);} 3、矩阵对角线元素求和 /* exer 4-3 主和辅对角线上元素之和 */ #include int i,j; int a[5][5]; int sum1=0,sum2=0; //printf(“please enter soustr:”); for(i=0;i<5;i++) for(j=0;j<5;j++) scanf(“%d”,&a[i][j]); /* 输入数组 */ for(i=0;i<5;i++) { sum1 = sum1+a[i][i]; /* 主对角线 */ sum2 = sum2+a[i][4-i]; /* 辅对角线 */ } printf(“%d %dn”,sum1,sum2);} 4、数据顺序调整 /* exer 4-4 将最大数调到最前面,最小数调到最后面 */ #include int i,a[10],temp; int kmax=0,kmin=0; //printf(“please enter :”); for(i=0;i<10;i++) /* 输入数组 */ scanf(“%d”,&a[i]); for(i=0;i<10;i++) { if(a[i]>a[kmax]) kmax = i; /* 找最大数位置 */ else if(a[i] kmin = i; /* 找最小数位置 */ } if(kmax == 9 && kmin == 0) { temp = a[0]; a[0] = a[kmax]; a[kmax] = temp; /* 与最前面的数交换 */ } else { temp = a[0]; a[0] = a[kmax]; a[kmax] = temp; /* 与最前面的数交换 */ temp = a[9]; a[9] = a[kmin]; a[kmin] = temp; /* 与最后面的数交换 */ } for(i=0;i<9;i++) printf(“%d ”,a[i]); /* 输出数组 */ printf(“%dn”,a[i]);} 5、字符个数统计 /* exer 4-5 统计大写字母、小写字母、数字及其它字符的个数 */ #include unsigned int i; int cap=0,low=0,dig=0,oth=0; /* 定义并初始化 */ char str[80]; //printf(“please enter str:”); gets(str); /* 输入原串 */ for(i=0;i { if(str[i]>='A' && str[i]<='Z') cap++; /* 统计大写字母 */ else if(str[i]>='a' && str[i]<='z') low++; /* 统计小写字母 */ else if(str[i]>='0' && str[i]<='9') dig++; /* 统计数字 */ else oth++; /* 统计其它字符 */ } printf(“%d %d %d %dn”,cap,low,dig,oth);} 6、学生成绩计算 /* exer 4-6 求每一个学生的总成绩和平均成绩 */ #include int i,j; float score[10][5]={0.0f}; float allsco[10],avesco[10]; for(i=0;i<10;i++) for(j=0;j<5;j++) scanf(“%f”,&score[i][j]); /* 输入学生的成绩 */ for(i=0;i<10;i++) { allsco[i] = 0; /* 总成绩清零 */ for(j=0;j<5;j++) { allsco[i] = allsco[i]+score[i][j]; /* 累加总成绩 */ } avesco[i] = allsco[i]/5; /* 计算平均成绩 */ } for(i=0;i<10;i++) printf(“%f %fn”,allsco[i],avesco[i]);/* 输出成绩 */ } 7、姓名排序 /* exer 4-7 姓名排序 */ #include int i,j,k; char name[10][80],temp[80]; //printf(“please enter :”); for(i=0;i<10;i++) gets(name[i]); /* 输入姓名数组 */ for(i=0;i<9;i++) /* 排序 */ { k = i; for(j=i+1;j<10;j++) if(strcmp(name[k],name[j])>0) k = j; if(k!=i) { strcpy(temp,name[i]); strcpy(name[i],name[k]); strcpy(name[k],temp); /* 交换 */ } } for(i=0;i<10;i++) puts(name[i]); /* 输出姓名数组 */ } 8、输出杨辉三角形 /* exer 4-8 打印杨辉三角形 */ #include int i,j; int a[6][6]; for(i=0;i<6;i++) { a[i][i] = 1; /* 主对角线为1 */ a[i][0] = 1; /* 第1列为1 */ } for(i=2;i<6;i++) for(j=1;j a[i][j] = a[i-1][j-1]+a[i-1][j];/* 计算 */ for(i=0;i<6;i++) { for(j=0;j<=i;j++) printf(“%d ”,a[i][j]); /* 输出 */ printf(“n”); /* 换行 */ } } 实习五答案 1、用指针实现排序 /* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ #include int a[10],*p = NULL; /* 说明数组和指针 */ int i, j, temp; for(p = a;p < a + 10;p++) /* 指针从数组首到尾 */ { scanf(“%d”, p); /* 利用指针依次输入 */ } p = a; for(i = 0;i < 9;i++) /* 利用指针依次比较 */ { for(j = i + 1;j < 10;j++) if(*(p + i)> *(p + j)) { temp = *(p + i); *(p + i)= *(p + j); *(p + j)= temp; } } for(p=a;p < a + 9;p++) printf(“%d ”, *p); printf(“%dn”, *p);} 2、用指针实现字符串排序 /*exer 5-2 将 10个长度小于20的字符串排序*/ #include char szStr[10][20],*psz[10],szTemp[20]; int i,j; for(i = 0;i < 10;i++) { psz[i] = szStr[i]; /*指针数组的每个元素指向各行串*/ } for(i = 0;i < 10;i++) { gets(psz[i]); /*输入10个字符串*/ } for(i = 0;i < 9;i++) /*字符串排序*/ { for(j = i + 1;j < 10;j++) { if(strcmp(psz[i], psz[j])> 0) { strcpy(szTemp, psz[i]); strcpy(psz[i], psz[j]); strcpy(psz[j], szTemp); } } } for(i = 0;i < 10;i++) { puts(psz[i]); /*输出字符串*/ } } 3、数据倒置 /*exer 5-3 将具有10个元素的一维数组中的数据倒置 */ #include int a[10], iTemp, *p, *q; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i); /*输入数组*/ } p = a; q = a + 9; for(p = a, q = a + 9;p < q;p++, q--) /*首尾交换*/ { iTemp = *p; *p = *q; *q = iTemp; } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } } 4、用指针实现数据位置调整 /*exer 5-4 输入 10个整数,将最大的调到最后,最小的调到最前*/ #include void swap(int *px, int *py); int main(void){ int a[10], iTemp, *pMax, *pMin; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i);/*输入数组*/ } pMax = a; /*最大值指针指向数组首地址*/ pMin = a; /*最小值指针指向数组首地址*/ for(i = 1;i < 10;i++) { if(*(a+i)> *pMax) pMax = a + i; if(*(a+i)< *pMin) pMin = a + i; } /*最大值是第1个元素,最小值是最后一个元素*/ if(pMax == a && pMin == a + 9) { swap(pMax, pMin); } else { /*最小值与第一个元素交换*/ swap(a, pMin); /*最大值与最后一个元素交换*/ swap(a + 9, pMax); } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } return 0;} void swap(int *px, int *py){ int temp; temp = *px; *px = *py; *py = temp;} 5、用指针实现查找二维数组中最大数及其位置 /*exer 5-5 找出二维数组(设3行4列)中的最大数及其位置 */ #include int a[3][4],(*p)[4], iCol, iRow; int i, j; p = a; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) scanf(“%d”, *(p + i)+ j); /*输入数组*/ } iCol = 0; /*设最大数及其位置 */ iRow = 0; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) { if(*(*(p + i)+ j)> *(*(p + iRow)+ iCol)) { iRow = i; iCol = j; /*修改位置*/ } } } printf(“%d %d %dn”, iRow, iCol, a[iRow][iCol]);} 6、用指针实现子字符串提取 /*exer 5-6 由键盘输入一串字符,从字符串下标为m开始 取出n个字符(m和n由键盘输入),形成一个新的字符串 */ #include char szStrSour[80], szStrDest[80], *pszSour, *pszDest; int i, m, n; gets(szStrSour); /* 输入字符串 */ scanf(“%d%d”, &m, &n); /* 输入位置和长度 */ pszSour = szStrSour + m; /* 确定起始位置 */ pszDest = szStrDest; for(i = 0;i < n;i++) /* 依次取n个字符 */ { *pszDest = *pszSour; pszDest++; pszSour++; } *pszDest = ' '; /* 在字符串末尾追加结束标志 */ puts(szStrDest);} 实习六答案 1、整数交换函数设计 /* exer 6-1 交换2个整数 */ #include void swap(int *, int *); /* 函数声明 */ void main(void){ int a,b; //printf(“please enter 2 data:”); scanf(“%d%d”,&a,&b); /* 输入2个整数 */ //printf(“a=%d,b=%dn”,a,b); swap(&a,&b); /* 调用函数进行交换 */ printf(“%d %dn”,a,b);} void swap(int *p1, int *p2) /* 交换函数 */ { int temp; temp = *p2; /* 交换 */ *p2 = *p1; *p1 = temp;} 2、数字字符个数统计函数设计 /* exer 6-2 统计一串字符中数字字符的个数 */ #include /* 函数声明 */ void main(void){ char pstr[80]; //printf(“please enter string:”); gets(pstr); /* 输入字符串 */ printf(“%dn”,count(pstr));/* 调用函数进行统计 */ } int count(char *p) /* 统计函数 */ { int num=0; while(*p!=' ') /* 循环依次遍历 */ { if(*p>='0' && *p<='9') num++; /* 统计 */ p++; /* 指针后移 */ } return num;} 3、排序函数设计 /* exer 6-3 利用函数排序 */ #include /* 函数声明 */ void main(void){ int n, i, data[10]; //printf(“please enter 10 data:”); scanf(“%d”, &n); for(i=0;i scanf(“%d”,&data[i]); /* 输入数组 */ sort(data,n); /* 调用函数排序 */ for(i=0;i printf(“%d ”,data[i]); /* 输出数组 */ } void sort(int a[ ],int num) /* 排序函数 */ { int i,j,k,temp; for(i=0;i /* 排序 */ { k = i; for(j=i+1;j if(a[k] k = j; if(k!=i) { temp = a[k]; a[k] = a[i]; a[i] = temp; /* 交换 */ } } } 4、矩阵转置函数设计 /* exer 6-4 矩阵转置 */ #include /* 函数声明 */ void main(void){ int n, i, j, data[100][100]; scanf(“%d”, &n); for(i=0;i { for(j=0;j scanf(“%d”,&data[i][j]); /* 输入数组 */ } transpose(data,n); /* 调用函数转置 */ for(i=0;i { for(j=0;j printf(“%d ”,data[i][j]); /* 输出数组 */ printf(“%dn”, data[i][j]); } } void transpose(int a[][100],int n) /* 转置函数 */ { int i,j,temp; for(i=0;i /* 转置 */ { for(j=0;j { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; /* 交换 */ } } } 5、求素数函数设计 /* exer 6-5 求素数 */ #include /* 函数声明 */ void main(void){ int m,num=0; /* 定义整型变量 */ for(m=101;m<=200;m=m+2)/* 循环依次遍历待检测的奇数 */ { if(Prime(m)) /* 调用函数判断此数是否为素数 */ { printf(“%d ”,m); /* 输出素数 */ num++; /* 统计素数 */ } } printf(“n%dn”,num);/* 输出素数个数 */ } int Prime(int n) /* 判断此数是否为素数函数 */ { int found; /* 定义开关变量 */ int i,k; k = sqrt((double)n); found = 1; /* 初始化开关变量 */ i = 2; while(i<=k && found) /* 循环依次检测条件 */ { if(n%i ==0) found = 0; /* 一旦除尽修正开关变量 */ i++; } return found;} 6、进制转换函数设计 /* exer 6-6 八进制数据字符串转换为十进制数据 */ #include /* 函数声明 */ void main(void){ char str[10]; gets(str); /* 输入八进制数据字符串 */ printf(“%dn”,conver(str));/* 调用子函数转换 */ } int conver(char *p) /* 转换子函数 */ { int num=0; for(;*p!=' ';p++) num = num*8+*p-'0'; /* 进行转换 */ return num;} 7、求最大公约数函数设计 /* exer 6-7 求最大公约数 */ #include /* 函数声明 */ void main(void){ int a,b,com; //printf(“please enter two integers:”); scanf(“%d%d”,&a,&b); /* 输入两个正整数 */ com = comdivi(a,b); /* 调用函数 */ printf(“%dn”,com);} int comdivi(int m,int n) /* 求最大公约数子函数 */ { int q; if(n>m) /* 如果m小于n,交换 */ { int z; z = m; m = n; n = z; } do { q = m%n; /* 开始迭代 */ m = n; n = q; } while(q!=0); /* 循环整除取余,直到余数为0 */ return m;} 8、对称数组判断 /* exer 6-8 判断二维数组是否为对称数组 */ #include /* 函数声明 */ void main(void){ int n, i, j, data[100][100]; scanf(“%d”, &n); for(i=0;i { for(j=0;j scanf(“%d”,&data[i][j]); /* 输入数组 */ } if(array((int *)data, 4)) /* 调用函数判断 */ printf(“Yesn”); else printf(“Non”);} int array(int *p,int n) /* 判断此数组是否为对称数组函数 */ { int found; /* 定义开关变量 */ int i,j; found = 1; /* 初始化开关变量 */ for(i=0;i { for(j=0;j { if(*(p+i*100+j)!=*(p+j*100+i))/* 循环依次判断 */ { found = 0; break; } } } return found;} 实习七答案 1、电话薄管理程序设计 /* exer 7-1 手机电话簿管理 */ #include /* 定义全局变量,代表电话簿长度 */ struct stud /* 定义结构类型 */ { char name[15]; char phone_num[15]; char mobile_num[15];} book[100]; /* 定义结构数组 */ void creat(); /* 函数的原型声明 */ void insert();void search();void delete();void output(); int main(void) /* 主函数 */ { int k; do { printf(“ 0: exitn”); /* 打印菜单项 */ printf(“ 1: creatn”); printf(“ 2: searchn”); printf(“ 3: insertn”); printf(“ 4: deleten”); printf(“ 5: outputn”); printf(“please select:”); scanf(“%d”,&k); /* 输入选择项 */ switch(k) { case 0: exit(0); /* 退出函数 */ case 1: creat(); break; case 2: search(); break; case 3: insert(); break; case 4: delete(); break; case 5: output(); break; /* 调用子函数 */ default: exit(0); } } while(1); return 0;} void creat(void) /* 生成子函数 */ { char appella[15]; getchar(); while(1) /* 输入结构数组 */ { gets(appella); if(*appella=='*')break; /* 输入*,则结束 */ strcpy(book[N].name, appella); gets(book[N].phone_num); gets(book[N].mobile_num); N++; /* 统计长度 */ } } void search(void) /*查找子函数 */ { char appella[15]; int i=0; getchar(); gets(appella); while(i { i++; } if(i printf(“%s %s %sn”,book[i].name,book[i].phone_num,book[i].mobile_num); else printf(“not found”);} void insert(void) /* 插入子函数 */ { getchar(); gets(book[N].name); gets(book[N].phone_num); gets(book[N].mobile_num); N++; /* 长度加1 */ } void delete(void) /*删除子函数 */ { char appella[15]; int i=0,j; getchar(); gets(appella); while(i { i++; } if(i { for(j=i+1;j { book[j-1] = book[j]; } N--; /* 长度减1 */ } else printf(“not found”);} void output(void) /* 输出子函数 */ { int i; for(i=0;i printf(“%s %s %sn”,book[i].name,book[i].phone_num,book[i].mobile_num);} 2、正负数判断 /* exer 8-1 判断数是正数、负数 */ #include short num,mask,bit; mask = 0x8000; /* 构造掩码 */ scanf(“%hx”,&num); /* 输入数据 */ bit =(mask & num)?1:0; /* 取出第一位 */ if(bit == 0) printf(“is positive numbern”); /* 输出正数 */ else printf(“is negative numbern”); /* 输出负数 */ return 0;} 3、偶数位清零 /* exer 8-3 将偶数位清零,其它位保留 */ #include unsigned short a,b,mask; mask = 0x5555; /* 构造掩码 */ scanf(“%hx”,&a); /* 输入数据a */ b = a & mask; /* 与掩码按位与 */ printf(“%xn”,b); /* 输出 */ return 0;} 4、结构体的定义与引用 #include /*定义结构体*/ struct employee { char name[100]; char ID[20]; int age; float salary;}; int main(){ /*定义结构体变量*/ struct employee staff; /*输入数据*/ gets(staff.name); gets(staff.ID); scanf(“%d”, &staff.age); scanf(“%f”, &staff.salary); /*输出数据*/ puts(staff.name); puts(staff.ID); printf(“%dn”, staff.age); printf(“%.2fn”, staff.salary); return 0;} 5、结构体数组的定义与引用 #include /*定义结构体*/ struct employee { char name[100]; char ID[20]; int age; float salary;}; int main(){ int i = 0; float MaxSalary = 0.0f; /*定义结构体变量*/ struct employee staff[5]; /*输入数据*/ for(i = 0;i < 5;i++) { scanf(“%s”, staff[i].name); scanf(“%s”, staff[i].ID); scanf(“%d”, &staff[i].age); scanf(“%f”, &staff[i].salary); } MaxSalary = staff[0].salary; for(i = 1;i < 5;i++) { if(staff[i].salary > MaxSalary) MaxSalary = staff[i].salary; } printf(“%.2fn”, MaxSalary); return 0;} 实习五答案 1、用指针实现排序 /* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ #include int a[10],*p = NULL; /* 说明数组和指针 */ int i, j, temp; for(p = a;p < a + 10;p++) /* 指针从数组首到尾 */ { scanf(“%d”, p); /* 利用指针依次输入 */ } p = a; for(i = 0;i < 9;i++) /* 利用指针依次比较 */ { for(j = i + 1;j < 10;j++) if(*(p + i)> *(p + j)) { temp = *(p + i); *(p + i)= *(p + j); *(p + j)= temp; } } for(p=a;p < a + 9;p++) printf(“%d ”, *p); printf(“%dn”, *p);} 2、用指针实现字符串排序 /*exer 5-2 将 10个长度小于20的字符串排序*/ #include char szStr[10][20],*psz[10],szTemp[20]; int i,j; for(i = 0;i < 10;i++) { psz[i] = szStr[i]; /*指针数组的每个元素指向各行串*/ } for(i = 0;i < 10;i++) { gets(psz[i]); /*输入10个字符串*/ } for(i = 0;i < 9;i++) /*字符串排序*/ { for(j = i + 1;j < 10;j++) { if(strcmp(psz[i], psz[j])> 0) { strcpy(szTemp, psz[i]); strcpy(psz[i], psz[j]); strcpy(psz[j], szTemp); } } } for(i = 0;i < 10;i++) { puts(psz[i]); /*输出字符串*/ } } 3、数据倒置 /*exer 5-3 将具有10个元素的一维数组中的数据倒置 */ #include int a[10], iTemp, *p, *q; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i); /*输入数组*/ } p = a; q = a + 9; for(p = a, q = a + 9;p < q;p++, q--) /*首尾交换*/ { iTemp = *p; *p = *q; *q = iTemp; } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } } 4、用指针实现数据位置调整 /*exer 5-4 输入 10个整数,将最大的调到最后,最小的调到最前*/ #include void swap(int *px, int *py); int main(void){ int a[10], iTemp, *pMax, *pMin; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i);/*输入数组*/ } pMax = a; /*最大值指针指向数组首地址*/ pMin = a; /*最小值指针指向数组首地址*/ for(i = 1;i < 10;i++) { if(*(a+i)> *pMax) pMax = a + i; if(*(a+i)< *pMin) pMin = a + i; } /*最大值是第1个元素,最小值是最后一个元素*/ if(pMax == a && pMin == a + 9) { swap(pMax, pMin); } else { /*最小值与第一个元素交换*/ swap(a, pMin); /*最大值与最后一个元素交换*/ swap(a + 9, pMax); } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } return 0;} void swap(int *px, int *py){ int temp; temp = *px; *px = *py; *py = temp;} 5、用指针实现查找二维数组中最大数及其位置 /*exer 5-5 找出二维数组(设3行4列)中的最大数及其位置 */ #include int a[3][4],(*p)[4], iCol, iRow; int i, j; p = a; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) scanf(“%d”, *(p + i)+ j); /*输入数组*/ } iCol = 0; /*设最大数及其位置 */ iRow = 0; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) { if(*(*(p + i)+ j)> *(*(p + iRow)+ iCol)) { iRow = i; iCol = j; /*修改位置*/ } } } printf(“%d %d %dn”, iRow, iCol, a[iRow][iCol]);} 6、用指针实现子字符串提取 /*exer 5-6 由键盘输入一串字符,从字符串下标为m开始 取出n个字符(m和n由键盘输入),形成一个新的字符串 */ #include char szStrSour[80], szStrDest[80], *pszSour, *pszDest; int i, m, n; gets(szStrSour); /* 输入字符串 */ scanf(“%d%d”, &m, &n); /* 输入位置和长度 */ pszSour = szStrSour + m; /* 确定起始位置 */ pszDest = szStrDest; for(i = 0;i < n;i++) /* 依次取n个字符 */ { *pszDest = *pszSour; pszDest++; pszSour++; } *pszDest = ' '; puts(szStrDest);} /* 在字符串末尾追加结束标志 */ 实习六答案 1、整数交换函数设计 /* exer 6-1 交换2个整数 */ #include void swap(int *, int *); /* 函数声明 */ void main(void){ int a,b; //printf(“please enter 2 data:”); scanf(“%d%d”,&a,&b); /* 输入2个整数 */ //printf(“a=%d,b=%dn”,a,b); swap(&a,&b); /* 调用函数进行交换 */ printf(“%d %dn”,a,b);} void swap(int *p1, int *p2) /* 交换函数 */ { int temp; temp = *p2; /* 交换 */ *p2 = *p1; *p1 = temp;} 2、数字字符个数统计函数设计 /* exer 6-2 统计一串字符中数字字符的个数 */ #include /* 函数声明 */ void main(void){ char pstr[80]; //printf(“please enter string:”); gets(pstr); /* 输入字符串 */ printf(“%dn”,count(pstr));/* 调用函数进行统计 */ } int count(char *p) /* 统计函数 */ { int num=0; while(*p!=' ') /* 循环依次遍历 */ { if(*p>='0' && *p<='9') num++; /* 统计 */ p++; /* 指针后移 */ } return num;} 3、排序函数设计 /* exer 6-3 利用函数排序 */ #include /* 函数声明 */ void main(void){ int n, i, data[10]; //printf(“please enter 10 data:”); scanf(“%d”, &n); for(i=0;i scanf(“%d”,&data[i]); sort(data,n); for(i=0;i printf(“%d ”,data[i]); } void sort(int a[ ],int num) { int i,j,k,temp; for(i=0;i { k = i; for(j=i+1;j if(a[k] k = j; if(k!=i) { temp = a[k]; a[k] = a[i]; a[i] = temp; } } } 4、矩阵转置函数设计 /* exer 6-4 矩阵转置 */ #include void main(void){ int n, i, j, data[100][100]; /* 输入数组 */ /* 调用函数排序 */ /* 输出数组 */ /* 排序函数 */ /* 排序 */ /* 交换 */ /* 函数声明 */ scanf(“%d”, &n); for(i=0;i { for(j=0;j scanf(“%d”,&data[i][j]); /* 输入数组 */ } transpose(data,n); /* 调用函数转置 */ for(i=0;i { for(j=0;j printf(“%d ”,data[i][j]); /* 输出数组 */ printf(“%dn”, data[i][j]); } } void transpose(int a[][100],int n) /* 转置函数 */ { int i,j,temp; for(i=0;i /* 转置 */ { for(j=0;j { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; /* 交换 */ } } } 5、求素数函数设计 /* exer 6-5 求素数 */ #include /* 函数声明 */ void main(void){ int m,num=0; /* 定义整型变量 */ for(m=101;m<=200;m=m+2)/* 循环依次遍历待检测的奇数 */ { if(Prime(m)) /* 调用函数判断此数是否为素数 */ { printf(“%d ”,m); /* 输出素数 */ num++; /* 统计素数 */ } } printf(“n%dn”,num);/* 输出素数个数 */ } int Prime(int n) /* 判断此数是否为素数函数 */ { int found; /* 定义开关变量 */ int i,k; k = sqrt((double)n); found = 1; /* 初始化开关变量 */ i = 2; while(i<=k && found) /* 循环依次检测条件 */ { if(n%i ==0) found = 0; /* 一旦除尽修正开关变量 */ i++; } return found;} 6、进制转换函数设计 /* exer 6-6 八进制数据字符串转换为十进制数据 */ #include /* 函数声明 */ void main(void){ char str[10]; gets(str); /* 输入八进制数据字符串 */ printf(“%dn”,conver(str));/* 调用子函数转换 */ } int conver(char *p) /* 转换子函数 */ { int num=0; for(;*p!=' ';p++) num = num*8+*p-'0'; /* 进行转换 */ return num;} 7、求最大公约数函数设计 /* exer 6-7 求最大公约数 */ #include /* 函数声明 */ void main(void){ int a,b,com; //printf(“please enter two integers:”); scanf(“%d%d”,&a,&b); /* 输入两个正整数 */ com = comdivi(a,b); /* 调用函数 */ printf(“%dn”,com);} int comdivi(int m,int n) /* 求最大公约数子函数 */ { int q; if(n>m) /* 如果m小于n,交换 */ { int z; z = m; m = n; n = z; } do { q = m%n; /* 开始迭代 */ m = n; n = q; } while(q!=0); /* 循环整除取余,直到余数为0 */ return m;} 8、对称数组判断 /* exer 6-8 判断二维数组是否为对称数组 */ #include /* 函数声明 */ void main(void){ int n, i, j, data[100][100]; scanf(“%d”, &n); for(i=0;i { for(j=0;j scanf(“%d”,&data[i][j]); /* 输入数组 */ } if(array((int *)data, 4)) /* 调用函数判断 */ printf(“Yesn”); else printf(“Non”);} int array(int *p,int n) /* 判断此数组是否为对称数组函数 */ { int found; /* 定义开关变量 */ int i,j; found = 1; /* 初始化开关变量 */ for(i=0;i { for(j=0;j { if(*(p+i*100+j)!=*(p+j*100+i))/* 循环依次判断 */ { found = 0; break; } } } return found;} 实习四答案 1、字符串连接 /* exer 4-1 两串字符连接 */由键盘任意输入两串字符,不用库函数strcat,连接将两串字符。 输入: 两串字符 输出: 连接将两串字符 输入样例: abc def 输出样例: abcdef #include unsigned int i,j; char soustr[80],desstr[80]; //printf(“please enter soustr:”); gets(soustr); /* 输入原串 */ //printf(“please enter desstr:”); gets(desstr); /* 输入目的串 */ i = strlen(soustr); /* 取目的串尾部位置 */ for(j=0;j<=strlen(soustr);j++,i++) { soustr[i] = desstr[j]; /* 将原串依次接入目的串尾部 */ } puts(soustr);} 2、简单加密程序 /* exer 4-2 字符加密 */ 由键盘任意输入一串字符,对其进行加密,加密原则为:如果为字母,将其循环右移2个字母,其他字符保持不变。 输入: 一串字符 输出: 加密后的字符串 输入样例: abl2CDxyz 输出样例: cdl2EFzab 提示: 1.可用gets()和puts()输入输出字符串。 2.利用ASCII码运算进行加密。 3.循环右移的含义是:将a-z,A-Z各看成一个环进行移动,即y右移2个字母后为a,z右移2个字母后为b;Y右移2个字母后为A,Z右移2个字母后为B。 #include unsigned int j; char soustr[80],secstr[80]; //printf(“please enter soustr:”); gets(soustr); /* 输入原串 */ for(j=0;j<=strlen(soustr);j++) { if(soustr[j]>='A' && soustr[j]<='Z') secstr[j] =(soustr[j]-'A'+2)%26+'A';/*计算大写字母密文*/ else if(soustr[j]>='a' && soustr[j]<='z') secstr[j] =(soustr[j]-'a'+2)%26+'a';/*计算小写字母密文*/ else secstr[j] = soustr[j]; /* 其它字符不变 */ } puts(secstr);} 3、矩阵对角线元素求和 /* exer 4-3 主和辅对角线上元素之和 */ 输入一个5×5的数组,分别求其主对角线和辅对角线上元素之和。输入: 5×5的数组 输出: 主对角线和辅对角线上元素之和 输入样例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 输出样例: 65 65 主对角线为从矩阵的左上角至右下角的连线,在数组中即指行列下标相同的元素,辅对角线为从矩阵的右上角至左下角的连线,这些元素的下标之间也可用相应的表达式表达。 #include int i,j; int a[5][5]; int sum1=0,sum2=0; //printf(“please enter soustr:”); for(i=0;i<5;i++) for(j=0;j<5;j++) scanf(“%d”,&a[i][j]); /* 输入数组 */ for(i=0;i<5;i++) { sum1 = sum1+a[i][i]; /* 主对角线 */ sum2 = sum2+a[i][4-i]; /* 辅对角线 */ } printf(“%d %dn”,sum1,sum2);} 4、数据顺序调整 /* exer 4-4 将最大数调到最前面,最小数调到最后面 */ 由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。输入: 任意10个数 输出: 数据调整后的10个数。输入样例: 0 1 2 3 4 5 6 7 8 9 输出样例: 9 1 2 3 4 5 6 7 8 0 提示:① 定义四个变量d1、d2、x1、x2,分别存放最大数、最小数及它们的位置; ② 在循环开始前,将第一个元素作为参考,将其值分别存入d1、x1,将其下标分别存入d2、x2; ③ 在循环中将其它元素逐一与d1比较,若比d1大,将其存入d1,并将其下标存入d2;否则将其与x1比较,若比x1小,将其存入x1,并将其下标存入x2; ④ 结束循环后,将d2所示位置的数与第一个数交换,将x2所示位置的数与最后一个数交换,然后输出数组所有元素即可。 #include int i,a[10],temp; int kmax=0,kmin=0; //printf(“please enter :”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) { if(a[i]>a[kmax]) kmax = i; else if(a[i] kmin = i; } if(kmax == 9 && kmin == 0) { temp = a[0]; a[0] = a[kmax]; a[kmax] = temp; } else { temp = a[0]; a[0] = a[kmax]; a[kmax] = temp; temp = a[9]; a[9] = a[kmin]; a[kmin] = temp; } for(i=0;i<9;i++) printf(“%d ”,a[i]); printf(“%dn”,a[i]); /* 输入数组 */ /* 找最大数位置 */ /* 找最小数位置 */ /* 与最前面的数交换 */ /* 与最前面的数交换 */ /* 与最后面的数交换 */ /* 输出数组 */ } 5、字符个数统计 /* exer 4-5 统计大写字母、小写字母、数字及其它字符的个数 */ 由键盘输入任意一串字符串,将其存入一个字符数组,统计其中的大写字母、小写字母、数字以及其他字符的个数。 输入: 任意一串字符串 输出: 大写字母、小写字母、数字以及其他字符的个数。 输入样例: abcdefg123456ABCDEFG 输出样例: 7 7 6 #include unsigned int i; int cap=0,low=0,dig=0,oth=0; /* 定义并初始化 */ char str[80]; //printf(“please enter str:”); gets(str); /* 输入原串 */ for(i=0;i { if(str[i]>='A' && str[i]<='Z') cap++; /* 统计大写字母 */ else if(str[i]>='a' && str[i]<='z') low++; /* 统计小写字母 */ else if(str[i]>='0' && str[i]<='9') dig++; /* 统计数字 */ else oth++; /* 统计其它字符 */ } printf(“%d %d %d %dn”,cap,low,dig,oth);} 6、学生成绩计算 /* exer 4-6 求每一个学生的总成绩和平均成绩 */ 已知10个学生的5门课程的成绩,将其存入一个二维数组,求每一个学生的总成绩和每一个学生的平均成绩。 输入: 10个学生的5门课程的成绩 输出: 每一个学生的总成绩和每一个学生的平均成绩 输入样例: 90.5 80 70 89 84.6 91.5 81 71 88 84.7 92.5 82 72 87 84.8 93.5 83 73 86 84.9 94.5 84 74 85 84.0 95.5 85 75 84 84.1 96.5 86 76 83 84.2 97.5 87 77 82 84.3 98.5 88 78 81 84.4 99.5 89 79 80 84.5 输出样例: 414.100006 82.820000 416.200012 83.240005 418.299988 83.659996 420.399994 84.080002 421.500000 84.300003 423.600006 84.720001 425.700012 85.139999 427.799988 85.559998 429.899994 85.979996 432.000000 86.400002 #include int i,j; float score[10][5]={0.0f}; float allsco[10],avesco[10]; for(i=0;i<10;i++) for(j=0;j<5;j++) scanf(“%f”,&score[i][j]); /* 输入学生的成绩 */ for(i=0;i<10;i++) { allsco[i] = 0; /* 总成绩清零 */ for(j=0;j<5;j++) { allsco[i] = allsco[i]+score[i][j]; /* 累加总成绩 */ } avesco[i] = allsco[i]/5; /* 计算平均成绩 */ } for(i=0;i<10;i++) printf(“%f %fn”,allsco[i],avesco[i]);/* 输出成绩 */ } 7、姓名排序 /* exer 4-7 姓名排序 */ 由键盘任意输入10个学生的姓名(以拼音形式),将它们按照ASCⅡ码的顺序从小到大排序。10个学生的姓名(以拼音形式) 输出: 按照ASCⅡ码的顺序从小到大排序 输入样例: 输入: zhang ziang zaang zbang zcang zdang zeang zfang zgang zhang 输出样例: zaang zbang zcang zdang zeang zfang zgang zhang zhang ziang #include int i,j,k; char name[10][80],temp[80]; //printf(“please enter :”); for(i=0;i<10;i++) gets(name[i]); /* 输入姓名数组 */ for(i=0;i<9;i++) /* 排序 */ { k = i; for(j=i+1;j<10;j++) if(strcmp(name[k],name[j])>0) k = j; if(k!=i) { strcpy(temp,name[i]); strcpy(name[i],name[k]); strcpy(name[k],temp); /* 交换 */ } } for(i=0;i<10;i++) puts(name[i]); /* 输出姓名数组 */ } 8、输出杨辉三角形 /* exer 4-8 打印杨辉三角形 */ 编程实现n阶(n<10)杨辉三角形的输出,n=6时,杨辉三角形如下所示: 1 1 1 2 1 3 1 4 1 5 10 5 输入: 杨辉三角形的阶数n。 输出: n阶杨辉三角形。 输入样例: 6 输出样例: 1 1 1 1 2 1 3 1 4 1 5 10 5 提示: ① 杨辉三角形的特点:第一列和对角线上的元素值均为1,即a[i][0]=a[i][i]=1;其余位置元素的值=上一行本列元素值+上一行前一列元素值,如第三行第二列2就是第二行第一列+第二行第二列,计算公式为a[i][j]=a[i-1][j-1]+ a[i-1][j]。 ② 应先对第一列和对角线元素赋值,然后再为其它元素赋值。 #include int i,j; int a[6][6]; for(i=0;i<6;i++) { a[i][i] = 1; /* 主对角线为1 */ a[i][0] = 1; /* 第1列为1 */ } for(i=2;i<6;i++) for(j=1;j a[i][j] = a[i-1][j-1]+a[i-1][j];/* 计算 */ for(i=0;i<6;i++) { for(j=0;j<=i;j++) printf(“%d ”,a[i][j]); /* 输出 */ printf(“n”); /* 换行 */ } } 或者 #include int main(){ int n,i,j; int a[20][20]; printf(“please input one number:”); scanf(“%d”,&n); for(i=0;i { a[i][i]=1; a[i][0]=1; } for(i=2;i for(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i { for(j=0;j<=i;j++) printf(“%d ”,a[i][j]); printf(“n”); } return 0;} 实习六答案 1、整数交换函数设计 /* exer 6-1 交换2个整数 */ 设计一个函数,将任意2个整数交换,并在主函数中调用此函数。 输入: 任意2个整数 输出: 交换后的2个整数 输入样例: 1 2 输出样例: 2 1 #include void swap(int *, int *); /* 函数声明 */ void main(void){ int a,b; //printf(“please enter 2 data:”); scanf(“%d%d”,&a,&b); /* 输入2个整数 */ //printf(“a=%d,b=%dn”,a,b); swap(&a,&b); /* 调用函数进行交换 */ printf(“%d %dn”,a,b);} void swap(int *p1, int *p2) /* 交换函数 */ { int temp; temp = *p2; /* 交换 */ *p2 = *p1; *p1 = temp;} 2、数字字符个数统计函数设计 /* exer 6-2 统计一串字符中数字字符的个数 */ 设计一个函数,统计任意一串字符中数字字符的个数,并在主函数中调用此函数。输入:任意一串字符 输出:字符串中数字字符的个数 输入样例:abs1234ajbkc #include /* 函数声明 */ void main(void){ char pstr[80]; //printf(“please enter string:”); gets(pstr); /* 输入字符串 */ printf(“%dn”,count(pstr));/* 调用函数进行统计 */ } int count(char *p) /* 统计函数 */ { int num=0; while(*p!=' ') /* 循环依次遍历 */ { if(*p>='0' && *p<='9') num++; /* 统计 */ p++; /* 指针后移 */ } return num;} 3、排序函数设计 /* exer 6-3 利用函数排序 */ 设计一个函数,对任意n个整数排序(从大到小),并在主函数中输入数据个数n和n个整数,调用此函数实现排序。输入: n个整数 输出:排序后的n个整数 输入样例:10<----数据个数 0 1 2 3 4 5 6 7 8 9<----数据 输出样例: 9 8 7 6 5 4 3 2 1 0 #include /* 函数声明 */ void main(void){ int n, i, data[10]; //printf(“please enter 10 data:”); scanf(“%d”, &n);第二篇:西北农林科技大学 c语言上机 实习5答案
第三篇:西北农林科技大学 c语言上机 实习6答案
第四篇:西北农林科技大学C语言上机实习4答案
第五篇:西北农林科技大学C语言上机实习6答案