第八章习题 83判断一个数是否为素数 include int prime( int n include I int i, k, flag=1; int prime( int n); kesgrt(n); void main( for(i=2, i<=k; i++) i int m, p; if(n%i==0) printf("In input a number: ) i flag=0; scanf(%d”,&m); break p=prime(m); if(p==1) printf(" the number is a prime. ) return(flag) else o printf( the number is not a prime.
第八章 习题 8.3 判断一个数是否为素数 int prime( int n ) { int i , k , flag=1 ; k=sqrt(n); for(i=2 ; i #include int prime( int n ) ; void main( ) { int m , p; printf(“\n input a number:”); scanf(“%d”,&m); p=prime(m); if (p==1) printf(“the number is a prime.”); else printf(“the number is not a prime.”); }
8.5使输入字符串按反序存放。 void maino #include i char sl20]; void daozhi(char s20D) printf( input a string: " i char s2 20; int i, n gets(s1);/输入一行字符串s for(i=0;S[i!="V0y;i++); daozhi(s1);m将s1反序 n=i;Mn为字符串长度 puts(S1);∥输出字符串s1 for(i=0; i<n; i++) s2[ni-1l=s[i];/将s反序存入2 for(i=0; i<n; i++) s[i=s2[il;∥将s2复制到s中
8.5 使输入字符串按反序存放。 #include void daozhi(char s[20]) { char s2[20]; int i,n; for(i=0;s[i]!='\0';i++) ; n=i; //n为字符串长度 for(i=0;i<n;i++) s2[n-i-1]=s[i]; //将s反序存入s2 for(i=0;i<n;i++) s[i]=s2[i]; //将s2复制到s中 } void main() { char s1[20]; printf("\ninput a string:"); gets(s1); //输入一行字符串s1 daozhi(s1); //将s1反序 puts(s1); //输出字符串s1 }
810输入一行字符串,将最长单词输出 思路:找长度最大的单词,必须记录每一个单词的字母个数,取最 大值;并将找到的单词输出 步骤 主程序:1、从键盘上输入一行字符,存入一字符数组str中; 2、调用一函数 maestri(,得到字符串中长度最大的单词; 3、将结果输出 函数 maestrO:1、设一个变量len存放最长单词的长度,其初始值 为0; 2、从字符串最左边开始,获得每一个单词的长度(即遇到一个空 格时,其前面为一个单词,用一个变量记录单词长度),与len比 较,若大于,则将其值赋予len,将此单词传送给另一数组strl;循 环直到整个字符串执行完为止。 在此最好将str1定义为全局变量,使得在函数 maxstr0中得到的值, 在主程序中也可以使用
8.10 输入一行字符串,将最长单词输出 思路:找长度最大的单词,必须记录每一个单词的字母个数,取最 大值;并将找到的单词输出。 步骤: 主程序:1、从键盘上输入一行字符,存入一字符数组str中; 2、调用一函数maxstr(), 得到字符串中长度最大的单词; 3、将结果输出。 函数maxstr():1、设一个变量len存放最长单词的长度,其初始值 为0; 2、从字符串最左边开始,获得每一个单词的长度(即遇到一个空 格时,其前面为一个单词,用一个变量记录单词长度),与len比 较,若大于,则将其值赋予len,将此单词传送给另一数组str1;循 环直到整个字符串执行完为止。 在此最好将str1定义为全局变量,使得在函数maxstr()中得到的值, 在主程序中也可以使用
#include #include char strll10;∥定义全局变量数组str1,用于存放最长单词 maxstrt( char al50],intn);/函数声明 viod main() i char str 501 int den printf("In input a string: ) gets(str);输入一行字符串str dlen= strlen(str);/求出字符串sr的长度 maxson(str;dlen);/调用函数求最长单词 printf( inthe max word=); put(str);∥输出最长单词
#include #include char str1[10]; //定义全局变量数组str1,用于存放最长单词 maxstr(char a[50] , int n) ;//函数声明 viod main( ) { char str[50]; int dlen ; printf("\n input a string:"); gets(str); //输入一行字符串str dlen=strlen(str); //求出字符串str的长度 maxstr(str,dlen); //调用函数求最长单词 printf("\nThe max word="); puts(str1); //输出最长单词 }
maxstr(char a[50, int n) for(m=i-j;mlen) len=J;
for(m=i-j;mlen) { len=j; x=0;
8.13求递归公式 void maino Iint n, x,y #include printf("In input n,x:”) int p(int n, int x) scanf(%d%d&n,。&x); n p(n, x); return(1) printf("p(n, x=%d',y) else if(n==1) return (x) else return((22n-1)*x-p(n-1,x)-(n-1)p(n-2,x)/n);
8.13求递归公式 #include int p(int n,int x) { if(n==0) return(1) else if(n==1) return(x) else return(((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n); } void main() { int n,x,y; printf(“\n input n,x:”); scanf(“%d%d”,&n,&x); y=p(n,x); printf(“p(n,x)=%d”,y); }
第十章习题104将前面各数顺序后移m个位置,最后m个数变成最前面m个 数 分析:可以另外定义一个数组b,先将原数组a中后m个数复制到数组b中, 再将原数组a中的前(n-m)个数,依次后移m位,然后再将b数组中的m个 数复制到数组a中的前m个元素中。程序代码如下: #include void houyi(int a l,int n, int m); viod main( f int n, m, i, a 91 n-9;m=3;/*将长度为9的数组a中的后3个数进行前移*/ printf("Ininput 9 numbers: ) for(i=0;i<9;计+)/*先将处理前的数组的原始状态输出*/ scanf(“%d”,al[); houyi(a, n, m) printf(In ouput 9 numbers for(i=0;i<9;i++)/先将处理后的数组的状态输出*/ printf(“%4d”,a[i);
第十章习题10.4 将前面各数顺序后移m个位置,最后m个数变成最前面m个 数。 分析:可以另外定义一个数组b,先将原数组a中后m个数复制到数组b中, 再将原数组a中的前(n-m)个数,依次后移m位,然后再将b数组中的m个 数复制到数组a中的前m个元素中。程序代码如下: #include void houyi(int a[ ],int n,int m); viod main( ) { int n,m,i,a[9],; n=9;m=3; /*将长度为9的数组a中的后3个数进行前移*/ printf(“\n input 9 numbers:"); for(i=0;i<9;i++) /*先将处理前的数组的原始状态输出*/ scanf(“%d”,&a[i]); houyi(a,n,m); printf(“\n ouput 9 numbers:"); for(i=0;i<9;i++) /*先将处理后的数组的状态输出*/ printf(“%4d”,a[i]); }
void houyi(int al l, int n, int m); f int b[10], *p, *q; =b;/辅助数组b的起始位置* for(q=atn-m; q=0; q-) (q+m)=*q;/将原数组a中的前(n-m)个数,复制到 数组b中* for(p=b, q=a; p<b+m; p++, 9++) q=*p;/将b数组中的n个数复制到数组a中*
void houyi(int a[ ], int n, int m); { int b[10],*p,*q; p=b; /*辅助数组b的起始位置*/ for(q=a+n-m;q=0;q- -) *(q+m)=*q; /*将原数组a中的前(n-m)个数,复制到 数组b中*/ for(p=b,q=a;p<b+m;p++,q++) *q=*p; /*将b数组中的n个数复制到数组a中*/ }
1017写一个函数,实现两个字符串的比较。 #include int strcmp(char *pl, char *p2) ∥定义函数 strcmp进行两字符串的比较 { while(p1!="V0)&&(2p2!="0)) (p1==*p2){p1++;p2++;}若字符相等则比较下一个 else return(pl-*p2) 则返回两字符的差 if(*pl=="0”) f(p2==“10) return(0);∥若两字符串各字符相等并长 度一样,则两字符串相等 else return(-1);∥若两字符串各字符相等但p2比p1长,则 p1p2
#include int strcmp(char *p1,char *p2) //自定义函数strcmp进行两字符串的比较 { while((*p1!='\0')&&(*p2!='\0')) { if (*p1==*p2) {p1++; p2++;} //若字符相等则比较下一个 else return(*p1-*p2); //否则返回两字符的差 } if(*p1=='\0') if(*p2==‘\0’) return(0); //若两字符串各字符相等并长 度一样,则两字符串相等 else return(-1); //若两字符串各字符相等但p2比p1长,则 p1p2 } 10.17 写一个函数,实现两个字符串的比较
void main i char s150, s2 50; int x; printf( input s1: ) gets(s1); printf(“ input s2:”);gets(s2);/输入两个待比较的字符串 x= strcmp(s1,s2);∥调用函数 strcmp比较两个字符串 f(x==0)∥若返回值为0,则两字符串相等 printf(sl=s2); else f(x>0)/若返回值大于0,则s1>s2 printf("sI>s2); else∥若返回值小于0,则s1<s2 printf( s1<s2);
void main() { char s1[50],s2[50]; int x; printf("\ninput s1:"); gets(s1); printf(“input s2:”); gets(s2); //输入两个待比较的字符串 x=strcmp(s1,s2); //调用函数strcmp比较两个字符串 if(x==0) //若返回值为0,则两字符串相等 printf("s1=s2"); else if(x>0) //若返回值大于0,则s1>s2 printf("s1>s2"); else // 若返回值小于0,则s1<s2 printf("s1<s2"); }