学习日志 姓名: 徐雪 日期: 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;
}