c语言课后习题第7章函数

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("The No.%d number is %d.\n",k,fun(n,k));
}
7.8计算s。已知
s=10!+7!*8!
将n!定义成函数。
#include <stdio.h>
double fun(int n)
{ double f=1.0; int i;
for(i=1;i<=n;i++)
if(a[i]!=32) /*a[i]不为空格,说明单词开始了*/
{ j=0;
while(a[i]!=32) /*没有遇到下一个空格,说明单词没有结束*/
{ c[k][j]=a[i]; j++; i++; } /*将单词放入字符串c[k]*/
c[k][j]='\0'; /*人为加串尾标志*/
k++; /*k为下一个单词存入c的行号*/
#include <string.h>
#define N 10
void input(char name[N][8],char no[N][8])
{ int i;
printf("Input %d name and No.\n",N);
for(i=0;i<N;i++)
scanf("%s%s",name[i],no[i]);
if(p!=i)
{ strcpy(t,name[p]); strcpy(name[p],name[i]); strcpy(name[i],t);
strcpy(t,no[p]); strcpy(no[p],no[i]); strcpy(no[i],t);
}
}
} /*按姓名进行从小到大的排序,姓名进行交换的时候,
isprime(int a)
{}
7.3已有变量定义和函数调用语句int a ,b;b=sum(a);函数sum()用以求 ,和数作为函数值返回。若a的值为10,经函数sum的计算后,b的值是55。请编写sum函数。
来自百度文库Sum(int n)
{}
7.3求∑k
#include <stdio.h>
sum(int n)
{ int k,s=0;
for(k=1;k<=n;k++)
s=s+k;
return s;
}
main()
{ int a,b;
printf("Input a: "); scanf("%d",&a);
b=sum(a);
printf("%c(1,%d)=%d\n",228,a,b);
}
7.4一函数,输入一行字符,将此字符串中最长的单词输出。
}
7.7定义一个函数digit(n,k),它回送整数n的从右边开始数第k个数字的值。例如:
digit(15327,4)=5
digit(289,5)=0
7.7回送第k个数字
#include <stdio.h>
int fun(long n,int k)
{ int i,m ;
for(i=1;i<=k;i++)
{ return abs(x-y); }
main()
{ int a=1,b=-5,c;
c=fun(a,b);
printf("|%d-%d|=%d\n",a,b,c);
}
7.2已有变量定义和函数调用语句:int x=57;isprime(x);函数isprime();用来判断一个整型数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。
7.4输出最长的单词,假设只包含字母和空格,单词间以空格分隔,空格个数不限
#include <string.h>
void fun(char a[])
{ int n,i,j,k=0,len[80],p;
char c[80][80],max[80];
n=strlen(a);
for(i=0;i<n;i++)
}
strcpy(message,"no find"); /*找不到,find字符串存入"no find"*/
}
main()
{ char name1[N][8],no1[N][8],No1[8],message1[8]; int i;
clrscr();
input(name1,no1); /*调用输入函数*/
printf("after sorted: \n");
printf("%10s%20s\n","name","No.");
for(i=0;i<N;i++)
printf("%10s%20s\n",name1[i],no1[i]); /*输出排序后的姓名和职工号*/
printf("Input finded No. : "); scanf("%s",No1); /*输入要查找的职工号*/
职工号也进行交换,以保证职工号跟着姓名走,以免打乱
对应的关系*/
void find(char name[N][8],char no[N][8],char No[8],char messge[8])
{ int low=0,high=N-1,mid;
while(low<=high)
{ mid=(low+high)/2;
{m=n%10;/*从右边分离出第i个数字*/
n=n/10;/*为下一次分离作准备*/
}
return m;/*返回第k次分离出的数字*/
}
main()
{ long int n; int k;
printf("Input n: "); scanf("%ld",&n);
printf("Input k: "); scanf("%d",&k);
} /*输入每个人的姓名和学号*/
void sort(char name[N][8],char no[N][8])
{ char t[8]; int i,j,p;
for(i=0;i<N-1;i++)
{ p=i;
for(j=p;j<N;j++)
if(strcmp(name[p],name[j])>0) p=j;
for(i=0;a[i];i++)
{ if(isalpha(a[i]))
/*如果a[i]是字母,求出相应的十进制数*/
switch(a[i])
{ case 'a':
case 'A': m=10; break;
case 'b':
case 'B': m=11; break;
case 'c':
case 'C': m=12; break;
printf("\n");
} /*输出原始数据*/
convert(a); /*调用函数进行处理*/
printf("after converted, output: \n");
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("\n");
void convert(int a[][3])
{ int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{ t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; }
} /*矩阵转置*/
main()
{ int a[3][3],i,j;
printf("Input 3*3 array: \n");
case 1: n=n+31;
}
return n; /*返回天数*/
}
main()
{ int year,month,day;
printf("Input year,month,day: "); scanf("%d%d%d",&year,&month,&day);
printf("%d.%d.%d is No.%d of a year.\n",year,month,day,fun(year,month,day));
}
else if(isdigit(a[i])) /*如果a[i]是数字*/
m=a[i]-'0';
else { printf("Input error!\n"); exit(0); }
/*如果输入了不合法的字符,输出相应的信息*/
n=n*16+m; /*将十六进制数转换成十进制数*/
}
return n;
}
main()
{ char a[80]; int n;
printf("input: "); scanf("%s",a);
n=fun(a);
printf("output: %d\n",n);
}
7.6给出年、月、日,计算该日是该年的第几天。
#include <stdio.h>
int fun(year,month,day)
printf("Input a line string: "); gets(a);
fun(a);
}
7.5一函数,输入一个十六进制数,输出相应的十进制数。
7.5十六进制数转换成十进制数
#include <stdio.h>
#include <ctype.h>
int fun(char a[])
{ int i,n=0,m;
f=f*i; /*求n!*/
return f; /*返回阶乘值*/
}
main()
{ printf("10!+7!*8!=%g\n",fun(10)+fun(7)*fun(8)); }
7.9定义一个函数,使给定的二维数组(3×3)转置,即行列转换,并输出。
7.9矩阵转置
#include <stdio.h>
case 'd':
case 'D': m=13; break;
case 'e':
case 'E': m=14; break;
case 'f':
case 'F': m=15; break;
default: printf("Input error!\n"); exit(0);
/*如果输入了不合法的字母,输出相应的信息*/
{ int n=0,i;
n=n+day; /*累加当月的天数*/
for(i=month-1;i>0;i--) /*累加前面月份的天数*/
switch(i)
{ case 12: n=n+31;
case 11: n=n+30;
case 10: n=n+31;
case 9: n=n+30;
case 8: n=n+31;
case 7: n=n+31;
case 6: n=n+30;
case 5: n=n+31;
case 4: n=n+30;
case 3: n=n+31;
case 2: if(year%4==0&&year%100!=0||year%400==0)
n=n+28;
else n=n+29; /*根据year判断闰年或平年,进行累加*/
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]); /*读入数据*/
printf("before converted, output: \n");
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("%d alerks are: \n",N);
printf("%10s%20s\n","name","No.");
for(i=0;i<N;i++)
printf("%10s%20s\n",name1[i],no1[i]); /*输出每个人的姓名和职工号*/
sort(name1,no1); /*调用排序函数*/
} /*输出转置后的数据*/
}
7.10写几个函数:①输入10个职工的性名和职工号;②按职工号由小到大的顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的姓名。
7.10 编写几个函数,分别实现输入、排序、查找
#include <stdio.h>
if(strcmp(No,no[mid])>0) low=mid+1; /*向下找*/
else if(strcmp(No,no[mid])<0) high=mid-1; /*向上找*/
else { strcpy(message,name[mid]); return; } /*找到了,
就将对应的姓名存入find字符串*/
习题7
7.1已有变量定义和函数调用语句:int a=1,b=–5,c;c=fun(a,b);fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。
Fun(int x,int y)
{}
7.1 求两数之差绝对值
#include <math.h>
fun(int x,int y)
}
for(i=0;i<k;i++)
len[i]=strlen(c[i]); /*求每行字符串的长度*/
p=0;
for(i=1;i<k;i++)
if(len[p]<len[i]) p=i;
/*找最长字符串的行号*/
printf("The word is : %s\n",c[p]);
}
main()
{ char a[80];
相关文档
最新文档