我的第二次随笔

【第一题】:计算两数的和与差:
1.设计思路:由题目给出的主函数可知,psum(两数之和)指向sum,pdiff(两数之差)指向diff,求两个输入数的和与差,只需计算,在主函数中输出。
2.实验代码:
`
#include <stdio.h>

    void sum_diff( float op1, float op2, float *psum, float *pdiff );

    int main()
    {
            float a, b, sum, diff;

            scanf("%f %f", &a, &b);
            sum_diff(a, b, &sum, &diff);
            printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);

            return 0; 
        }
        void sum_diff(float op1,float op2,float *psum, float *pdiff )
        {
            *psum= op1+op2;
            *pdiff=op1-op2;
    
        } 

3.本题调试过程碰到问题及解决办法:无。 【第二题】:拆分实数的整数与小数部分: 1.设计思路:x可拆分为整数部分(*intpart)和小数部分(*fracpart),*intpart指向intpart,*fracpart指向fracpart,所以计算输入数(x)与其整数和小数部分即可分别输出。 2.实验代码:
#include <stdio.h>

void splitfloat( float x, int *intpart, float *fracpart );

    int main()
    {
        float x, fracpart;
    int intpart;

scanf("%f", &x);
splitfloat(x, &intpart, &fracpart);
printf("The integer part is %d\n", intpart);
printf("The fractional part is %g\n", fracpart);

return 0;
}

    void splitfloat( float x, int *intpart, float *fracpart )
    {
   *intpart=x-*fracpart;
   *fracpart=x-*intpart;
}

`
3.本题调试过程碰到问题及解决办法:无。
【第三题】:在数组中查找指定元素:
1.设计思路:1)输入数组(list[ ]),通过循环将X(待查找元素)与数组中每个元素进行比较,若相等就停止循环,返回下标,否则只需返回-1即可。
2)流程图:

2.实验代码:
`
#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );

int main()
{
    int i, index, n, x;
int a[MAXN];

scanf("%d", &n);
for( i = 0; i < n; i++ )
    scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
    printf("index = %d\n", index);
else
    printf("Not found\n");

return 0;
}
int search( int list[], int n, int x )
{
    int j,i;
    int *p=&list[0];

	for(j=0;j<n;j++)
{
   	if(p[j]==x)
   	{
	   i=j;
	   break;
   	}else
   	{
	   i=-1;
}
}
return(i);

}
`
3.本题调试过程碰到问题及解决办法:
1)错误原因:在写代码时纠结于让自己定义的j等于某个数值,于是在循环的判断中就出现了,返回值出现了错误。
2)改正方法:后来问同学后知道,自己错误的原因,新定义了一个变量i,j的值付给i,最后返回i的值。
【第四题】 :找最大值及其下标:
1.设计思路:1)要求最大值,只需定义一个新变量(max),通过循环使得他与数组中每个元素比较大小,然后将大的值赋给max,将大的值的下标赋给*b,循环结束后得出的max,就是数组中的最大值,返回max
即可得出最大值及其下标。
2)流程图:

2.实验代码:
`
#include<stdio.h>

        #define N 10

            int fun(int *a,int *b,int n);

        int main()


        { int a[N],i,max,p=0;

        for(i=0;i<N;i++) scanf("%d",&a[i]);

         max=fun(a,&p,N);

         printf("max=%d,position=%d\n",max,p);

             return 0;

        }

            int fun(int *a,int *b,int n)

        {

              int max=*a,i;

          for(i=0;i<n;i++)

              {

            if(max<a[i]){

            *b=i;

                max=a[i];

            }

          }

          return max;

            }

`
3.本题调试过程碰到问题及解决办法:无。
【第五题】 :最小数放前最大数放后:
1.设计思路:1)题目中给出了三个调用函数,所以依次进行,先用for循环输入数组arr[i];然后定义两个新的变量(arr[t],arr[s]),在循环中与数组中每一个元素进行比较,然后进行赋值,即可得到最大值与最小值,然后再将arr[t],arr[s]与函数最后一项和第一项交换即可,最后只需在循环中输出格式为%3d的数组arr[i]。
2)流程图:

2.实验代码:
`
#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{ int a[10];
input(a,10);
max_min(a,10);
output(a,10);
return 0;
}
void input(int *arr,int n)
{

     int i;
     for(i=0;i<10;i++)
         {
 	    scanf("%d",arr+i);
     }
} 
void max_min(int *arr,int n)
{

    int t=0,s=0;
    int i;
    for(i=0;i<n;i++)
    {
	    if(*(arr+t)<*(arr+i))
	    {
	    t=i;
	    }
        if(*(arr+s)>*(arr+i)){
    	s=i;
	    }
    }
    i=arr[s];
    arr[s]=	*arr;
    *arr=i;
      i=arr[t];
      arr[t]=*(arr+n-1);
      arr[n-1]=i;
}
void output(int *arr,int n)
{
    int i;

    for(i=0;i<n;i++)
    {
    	printf("%3d",*(arr+i));
    }
}

`
3.本题调试过程碰到问题及解决办法:无。

【第六题】 :指针选择法排序:
1.设计思路:1)定义变量i,j分别对应着两个for循环,使用循环嵌套,并和比较后一项比较大小,然后交换就可以排序。
2)流程图:

2.实验代码:
`
#include<stdio.h>

void sort(int *x,int n);


    int main ( )

    {int *p,i,a[10];

     p=a;

             for (i=0;i<10;i++)  scanf("%d",p++);

         p=a;

         sort(a,10);

     for(i=0;i<10;i++)  printf("%4d",*p++);

         printf("\n");

     return 0;

     }

    void sort(int *x,int n)

        {

        int i,j,t;

        for(i=1;i<=n-1;i++)

            {

	        for(j=0;j<=n-i-1;j++)

	            {

		        if(*(x+j+1)>*(x+j))

		            {

	        t=*(x+j+1);

	        *(x+j+1)=*(x+j);

	        *(x+j)=t;

                }

	        }


            }



    }

`
3.本题调试过程碰到问题及解决办法:无。
【第七题】 :判断回文字符串:
1.设计思路:1)先判断字符串(*s)的长度,然后在循环中,判断字符串第一项和最后一项是否相等,循环之后,即可判断是否为回文字符串。
2)流程图:

2.实验代码:
`
#include <stdio.h>
#include <string.h>

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
    char s[MAXN];    

    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);

    return 0;
}
bool palindrome(char *s)  
{  
    int n=strlen(s);  
    int i, j,count=0;  
    for (i=0, j=n-1;i<n,j>=0;i++,j--)  
    {  
        if(*(s+i)==*(s+j))  
        {  
            count++;  
        }  
    }  
    if (count==n)  
       {
		     return true;  
       }else{
       	return false;
       }
}  

`
3.本题调试过程碰到问题及解决办法:无。
【第八题】 :使用函数实现字符串部分复制:将字符数组t中的元素复制到s上,然后判断*s的长度,通过for循环将数组t[]中的从第m-1元素赋给数组s[],然后定义数组s[]最后一个元素为'\0',即可得到复制后的字符串。
1.设计思路:1)
2)流程图:

2.实验代码:
`
#include <stdio.h>
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char t[MAXN], s[MAXN];
    int m;

    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
}
void strmcpy(char *t, int m, char *s)  
{  
    int i,j,l;  
    strcpy(s,t);  
    l=strlen(s);  
    for(i=m-1;i>0;i--) 
	    {  
        for(j=i;j<l;j++)
	    {  
            *(s+j-1)=*(s+j);  
        }  
    }  
    *(s+l-m+1)='\0';  
}  

`
3.本题调试过程碰到问题及解决办法:无。
***【附加题】:为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。
1.设计思路:1)定义一个新的字符数组,输入,在for循环中通过判断每个字符所处的区间,然后将其换掉,最后输出即可。
2)流程图:

2.实验代码:
·
#include<stdio.h>

int main()
{
        char *t; 
    int j;
    scanf("%s",t);
    for(j= 0;*(t+j) != '\0';j++)
    {
        if(t[j] >= 'a'&&t[j] <= 'x')
        t[j] = t[j]+2;
        else if(t[j] == 'y')
        t[j] = 'a';
        else if(t[j] == 'z')
            t[j] = 'b';
    }
    printf("%s\n",t);
        return 0;
} 

·
3.本题调试过程碰到问题及解决办法:无。

*【图表】


*【git地址】:https://git.coding.net/lfyyyy/seven

*【点评3为同学的作业】:
刘炜旗:http://www.cnblogs.com/ryo-/p/8644256.html
高立彬:http://www.cnblogs.com/gao628526/p/8551285.html
于耀淞:http://www.cnblogs.com/jsjyys/p/8589997.html
*【总结两周里的学习】:
在这两周的学习指针的过程中,我学会了,如何使用指针,如何做到数组与指针的互换,使用,从最开始的不知道如和用指针去写代码,到现在,已经可以用指针写很多程序了,但在指针的使用中,我也发现了自己的不足,就是对函数的调用和形参实参理解的不透彻,是在一些方面做题会难没有思路。

posted on 2018-03-25 14:20  执念丶。  阅读(165)  评论(2编辑  收藏  举报

导航