西北农林科技大学C语言上机实习6答案由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言上机实习报告”。
实习六答案
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 int count(char *);
/* 函数声明 */ 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
num++;
/* 统计 */
p++;
/* 指针后移 */
}
return num;}
3、排序函数设计
/* exer 6-3 利用函数排序 */ 设计一个函数,对任意n个整数排序(从大到小),并在主函数中输入数据个数n和n个整数,调用此函数实现排序。输入: n个整数 输出:排序后的n个整数
输入样例:10
输出样例: 9 8 7 6 5 4 3 2 1 0
#include void sort(int a[ ],int num);
/* 函数声明 */ 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 矩阵转置 */ 设计一个函数,将任意n×n的矩阵转置,并在主函数中调用此函数将一个4*4的矩阵转置。
输入:n×n的矩阵
输出:转置后的n×n的矩阵
输入样例:3 1 2 3 4 5 6 7 8 9 输出样例:1 4 7 2 5 8 3 6 9
#include void transpose(int a[][100],int);
/* 函数声明 */ 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 求素数 */ 设计一个函数,用以判断一个整数是否为素数,如果是,则返回1;如果不是,则返回0;并利用此函数,找出m-n之间的所有素数,并统计其个数,m、n由键盘输入。
#include #include int Prime(int);
/* 函数声明 */ void main(void){
int m,num=0;
/* 定义整型变量 */
for(m=101;m
{
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
/* 循环依次检测条件 */
{
if(n%i ==0)
found = 0;
/* 一旦除尽修正开关变量 */
i++;
}
return found;}
6、进制转换函数设计
/* exer 6-6 八进制数据字符串转换为十进制数据 */ 设计一个函数,将任意一个八进制数据字符串转换为十进制数据,并在主函数中调用此函数。输入一个八进制数转换为八进制 77 63
#include int conver(char *);
/* 函数声明 */ 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 求最大公约数 */ 设计一个函数,找出任意2个整数的最大公约数,并在主函数中调用此函数。输入2个整数,输出最大公约数
#include int comdivi(int ,int);
/* 函数声明 */ 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 判断二维数组是否为对称数组 */ 设计一个函数,判断二维数组是否为对称数组(对称矩阵),如果是,则返回1;如果不是,则返回0,并在主函数中调用此函数,判断一个4*4的数组是否为对称数组。输入:二维数组
输出:是否为对称数组
#include #include int array(int *,int);
/* 函数声明 */ 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;}