C语言:去除一个字符串中所有的空格。-函数fun传入形参m,求t=1/2-1/3+1/4.....+1/m的值。-判断形参a指定的矩阵是不是“幻方“。

//函数fun功能:判断形参a指定的矩阵是不是“幻方“,若是返回1。(”幻方”:每列,每行,对角线,反对角线相加都相等)

 1 #include  <stdio.h>
 2 #define   N   3
 3 int fun(int  (*a)[N])
 4 { int  i,j,m1,m2,row,colum;
 5   m1=m2=0;
 6   for(i=0; i<N; i++)
 7   { j=N-i-1;  m1+=a[i][i];  m2+=a[i][j];  }
 8   if(m1!=m2) return  0;
 9   for(i=0; i<N; i++) {
10 /**********found**********/
11      row=colum= 0;
12      for(j=0; j<N; j++)
13      {  row+=a[i][j];  colum+=a[j][i];  }
14 /**********found**********/
15      if( (row!=colum) || (row!=m1) ) return 0;
16   }
17 /**********found**********/
18   return  1;
19 }
20 void main()
21 { int  x[N][N],i,j;
22   printf("Enter number for array:\n");
23   for(i=0; i<N; i++)
24     for(j=0; j<N; j++)  scanf("%d",&x[i][j]);
25   printf("Array:\n");
26   for(i=0; i<N; i++)
27   {  for(j=0; j<N; j++)  printf("%3d",x[i][j]);
28      printf("\n");
29   }
30   if(fun(x)) printf("The Array is a magic square.\n");
31   else printf("The Array isn't a magic square.\n");
32 }

//函数fun传入形参m,求t=1/2-1/3+1/4.....+1/m的值。

 1 #include  <stdlib.h>
 2 #include  <conio.h>
 3 #include  <stdio.h>
 4 double fun(int m)
 5 {
 6   double t=1.0;
 7   int i;
 8   for(i=2;i<=m;i++)
 9 /*************found**************/
10       t=t-(double)1/i;//i为int类型变量,需要转换类型。
11 /*************found**************/
12       return t;
13 }
14 void main()
15 {int m;
16  system("CLS");
17  printf("\nPlease enter 1 integer numbers:\n");
18  scanf("%d",&m);
19  printf("\n\nThe result is %1f\n",
20  fun(m));
21 }

//输入一串字符串,去除之中的所有空格。

//下面为自己书写的代码,略有瑕疵。

 1 #include <stdio.h>
 2 #include <ctype.h>
 3 #include <conio.h>
 4 #include <stdlib.h>
 5 void fun (char *str)
 6 {
 7     char s[81];
 8     int i = 0,x=0,c=0;
 9     while (*str != '\0')//注意这里是单引号
10     {
11         if (*str!=' ')//这里也是单引号
12         {
13             s[i] = *str;
14             printf("%c", s[i]);
15             i++;//切记这句代码的位置
16         }
17         str++;
18         x++;
19     }
20     str = str - x;
21     //str = s;//不可以这样赋值,因为s为数组名,不可以直接用数组赋值。
22     for (int j = 0; j < i; j++)
23     {
24         *str = s[j];
25         printf("%c", *str);
26         str++;
27         c++;
28         if (j == i - 1) { *str = '\0'; }//这里一定要加结束符,不然会出错。
29     }
30     str = str - c;
31 }
32 void main()
33 {
34   char str[81];
35   char Msg[]="Input a string:";
36   int n;
37   FILE *out;
38   printf(Msg);
39   gets(str);
40   puts(str);
41   fun(str); 
42   printf("*** str: %s\n",str); 
43   /******************************/
44   out=fopen("out.dat","w");
45   fun(Msg);
46   fprintf(out,"%s",Msg);
47   fclose(out);
48   /******************************/
49 }

//标准答案:

 1 void fun(char *str)
 2 {
 3     int i=0;
 4     char *p=str;
 5     while(*p)
 6     {
 7          if(*p!=' ')
 8          {
 9               str[i++]=*p;
10           }
11            p++;
12     }
13     str[i]='\0';
14 }    

 

posted @ 2019-02-26 19:06  小大大小  阅读(571)  评论(0编辑  收藏  举报