2018.7.15

学习日志                     姓名:   徐雪         日期: 2017.07.15

 

今日学习任务

 自主复习并且完成五道编程题

 

今日任务完成情况

(详细说明本日任务是否按计划完成,开发的代码量。)

 

今日任务已按计划完成。完成了traning4的题目。

 

 

 

 

 

今日开发中遇到的问题汇总

  无

今日未解决问题

今日开发收获

 反序字符串只需要将首尾字符依次调换;

掌握了十进制数转换为2,8,16进制数的c程序;

自我评价

(是否规范完成指定任务,需要改进的地方,与他人合作等。)

 按时完成了练习

            其他

                无  

 

 

 

1.  题目: 请编写一个C函数,该函数将一个字符串逆序 

#include <stdio.h>

#include <string.h>

 

char* reverse(char *x)

{

    int len = strlen(x);

    int i, n = len / 2;

    char t;

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

    {

        t = x[i];

        x[i] = x[len - 1 - i];

        x[len - 1 - i] = t;

    }

    return x;

}

int main()

{

    char str[100];

    printf("input a string :");

    gets(str);

    puts(reverse(str));

    return 0;

}

 

 

2. 题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出

#include <stdio.h>

 

int fun2(int num);

int fun16(int num);

int fun8(int num);

 

int main()

{

    int num,kind;    //kind是用户需要变换的进制

 

 printf("Enter the number : \n");        

 scanf("%d",&num);

 printf("what kind of number do you want to change(2 or 16 or 8) :\n");

 scanf("%d",&kind);

 

 if(kind == 2)       

 {

  fun2(num);

 }

 else if(kind == 16)

 {

  fun16(num);

 }

 else if(kind == 8)

 {

  fun8(num);

 }

 else       

 {

  printf("error!\n");

 }

    return 0;

}

 

 

int fun2(int num)        //二进制转换

{

 int s[32] = {0};

 int i,n = 0;

 while(num != 0)

 {

  s[n++] = num % 2;

  num = num / 2;

 }

 printf("二进制数为 :");

 for(i = n - 1;i >= 0;i--)

 {

  printf("%d",s[i]);

 }

 printf("\n");

 return 0;

}

 

int fun16(int num)         //十六进制转换

{

 int s[32] = {0};

 int i,n = 0;

 while(num != 0)

 {

  s[n++] = num % 16;

  num = num / 16;

 }

 printf("十六进制数为 :");

 for(i = n - 1;i >= 0;i--)

 {

  printf("%d",s[i]);

 }

 printf("\n");

 return 0;

}

 

int fun8(int num)        //八进制转换

{

 int s[32] = {0};

 int i,n = 0;

 while(num != 0)

 {

  s[n++] = num % 8;

  num = num / 8;

 }

 printf("八进制数为 :");

 for(i = n - 1;i >= 0;i--)

 {

  printf("%d",s[i]);

 }

 printf("\n");

 return 0;

}

 

 

 

3. 题目: 输入一个字符串,计算字符串中子串出现的次字数

#include <stdio.h>

#include <string.h>

void main()

{

    char str1[20], str2[20], *p1, *p2;

    int sum=0;

    printf("Please enter two strings\n");

    scanf("%s%s", str1, str2);

    p1=str1;

    p2=str2;

    while(*p1 != '\0')

    {

        if(*p1 == *p2)

        {

            while(*p1 == *p2 && *p2 != '\0')

            {

                p1++;

                p2++;

            }

        }

        else

            p1++;

        if(*p2 == '\0')

            sum++;

        p2=str2;

    }

    printf("%d", sum);

    getchar();

}

 

4. 题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,即将句子中的单词位置倒置,而不改变单词内部结构.

 

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

 

int main()

{

     int i=0;

 char str[1000]={0};//用于存放输入的语句,包括空格

 char ch,*p=str;//P指向数组第一个元素

 while((ch=getchar())!='\n')//每次循环获取一个字符(包含空格)

 {

 str[i]=ch;//保存输入语句

 i++;

 }

while(*p!='\0')//把指针p移动到数组的结尾,遇到空格换为\0

{

if(*p==' ')

{

*p='\0';//替换

}

p++;

}

while(p!=str)//p向前移动,打印每个单词,指向每个字符串首地址加1输出

{

p--;

if(*p=='\0')

{

printf("%s ",p+1);

}

}

printf("%s",p);

 

    while(1);

return 0;

}

 

 

5. 题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.

提示:帧头和帧尾分别是head和tail  字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧

#include <stdio.h>

 

int find(char *s,char *a,char *b);

 

int main()

{

    char s[100],a[100],b[100];        //定义三个数组存放字符串和头尾字符串

 

 printf("Enter the long string : \n");        //提示用户输入字符串

 scanf("%s",s);

 printf("Enter the head string : \n");

 scanf("%s",a);

 printf("Enter the tail string : \n");

 scanf("%s",b);

 

 find(s,a,b);        //调用函数

 

    return 0;

}

 

int find(char *s,char *a,char *b)

{

 int head,tail;        //定义头尾节点位置变量

 int i = 0,j = 0,k = 0,flag = 0;        //定义循环变量i,j,k和标志位flag

 

 while(s[i] != '\0')

 {

  if((s[i] == a[j]) && !flag)        //当有一个字符和头字符串相等,继续判断是不是头字符串

  {

   head = i;        //将字符串位置赋值给头节点位置

      while((s[i] == a[j]) && s[i] != '\0')        //进入循环判断头字符串

      {

       i++;

       j++;

    flag = 1;       

      }

  }

 

  if((a[j] == '\0') && flag)        //当头字符串遍历结束并且标志位变为1,就认为已经找到头字符串

  {

      while((s[i] == b[k]) && s[i] != '\0')        //进入循环判断尾字符串

      {

       i++;

       k++;

    flag = 0;

      }

     }

 

  if((b[k] == '\0') && !flag)        //尾字符串遍历结束并且标志位为0,就认为已经找到尾字符串

  {

   tail = i;

   for(i = head;i < tail;i++)        //按照头尾节点位置输出字符串

   {

    printf("%c",s[i]);

   }

   printf("\n");

   break;

  }

  i++;

 }

 

 return 0;

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

15195867336

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值