a[i]=i;
for(i=2;i<=100;i++) if (prime(a[i]))
{ if(j++%5==0) printf(\ /*控制每行输出的个数,每行按5个输出*/ printf(\ }}
8.4写一函数,使给定的一个二维数组(3×3)转置,即行列互换。 # define N 3 #define M 3
#include
void fun (int a[N][M],int b[M][N]) { int i,j,t;
for (i=0;i void main ( ) { int i,j,a[N][M],b[M][N]; printf(\ for (i=0;i scanf(\ printf(\ for (i=0;i printf(\ printf(\ } fun(a,b); printf(\ for (i=0;i 【解析】字符串处理方法,一是字符数组,二是指针,编写函数时,采用地址传递。 #include void inverse (char str[ ]) {char t; int i,j; for (i=0,j=strlen(str)-1;i str[j]=t; }} void main ( ) { char str[80]; void inverse (char str[ ]); printf(“Input string:”); gets(str); inverse(str); puts(str); } 8.6写一函数,将两个字符串连接。 【解析】:将串2连接在串1 的后面,形成一新串。新串末尾须加字符串结束标志。 #include char connect(char str1[ ],char str2[ ]) {int i,j; for (j=strlen(str1),i=0;str2[i]!='\\0';i++) str1[i+j]=str2[i]; str1[i+j]='\\0'; /*新串末尾须加字符串结束标志\\0*/ } void main ( ) { char s1[80],s2[80]; printf(\ gets(s1); printf(\ gets(s2); connect(s1,s2); puts(s1); } ng is %s\\n”,s); } 8.7 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。 #include void string_copy(char str[]) { int i,j=0; for(i=0;str[i]!='\\0';i++) if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u') str[j++]=str[i]; str[j]='\\0'; puts(str); } void main ( ) { char str[80]; int n; gets(str); string_copy(str); } 8.8写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字之间有一个空格。如输入1990,应输出”1 9 9 0”。 #include void change(int n,char str[]) /* 该函数的功能将数值转换为数字字符*/ { int i; for(i=3;i>=0;i--) { str[i]=n+'0'; n/=10; } str[4]='\\0'; } void insert(char str[]) /* 该函数的功能插入空格并输出该数字字符*/ { int i; for (i=strlen(str);i>0;i--) { str[2*i]=str[i]; str[2*i-1]=' '; } puts(str); } void main ( ) { char str[80]; int n; printf(\ number :\ do /* 该循环控制输入的数为四位整数*/ scanf(\ while(n<999||n>10000); change(n,str); insert(str); } 8.9编写一函数,有实参传来一个字符串,统计此字符串中字母,数字,空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。 #include int letter,digit,space,others; /* 说明定义为全局变量,全局变量不赋值时自动赋0值 */ int count(char str[ ]) {int i; for (i=0;str[i]!='\\0';i++) if (isalpha(str[i])) letter++; else if (isdigit(str[i])) digit++; else if (str[i]==' ') space++; else others++; } void main ( ) { char str[80]; printf(\ gets(str); printf(\ puts(str); count(str); printf(\} 8.10写一函数,输入一行字符,将此字符串中最长的单词输出。 【解析】先确定单词是如何组成的。假若以空格、数字或其它字符作为单词的分隔。 #include char string_long(char str[]) { int i,j,k=1,flag=1,max=0,si=0,sj; for(i=0;str[i]!='\\0';i++) { if(isalpha(str[i])) if(flag) { j=i; flag=0;} else k++; else { if(max } str[sj]='\\0'; puts(&str[si]); } void main ( ) { int i; char string[80]; printf(\ character:\\n\ gets (string); printf(\ string_long(string); } 8.11写一函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。 #define N 10 #include for (j=0;j str[i]=str[i+1]; str[i+1]=t; }} void main ( ) {char ch[N]; int i,flag; for(i=0;i<10;i++) scanf(\ sort(ch); printf(\ for (i=0;i printf(\} 8.12用牛顿迭代法求根。方程为 ,系数 的值依次为1,2,3,4。求x在1附近的一个实根。求出根后由主函数输出。 【解析】牛顿迭代公式: #include double f(float a,float b,float c,float d,double x) { return a*x*x*x+b*x*x+c*x+d;