高瑞 2018.7.15
1. 题目: 请编写一个C函数,该函数将一个字符串逆序
#include<stdio.h>
#include<string.h>
#define N 50
void strRev(char *s)
{
char temp;
char *end = s + strlen(s) - 1;
while (end > s)
{
temp = *s;
*s = *end;
*end = temp;
--end;
++s;
}
}
int main()
{
char s[N];
printf("Input string!\n");
fgets(s,N,stdin);
strRev(s);
printf("The strRcv string!");
puts(s);
while(1);
return 0;
}
2. 题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
#include <stdio.h>
void change(int num,int n);
int main()
{
int num,n;
printf("Please enter a number to change:");
scanf("%d",&num);
printf("请输入要转换的进制(如2或8,16等):");
scanf("%d",&n);
change(num,n);
printf("\n");
return 0;
}
void change(int num,int n) //利用递归函数的实现反序输出
{
int r;
r = num % n;
if(num > 0)
change( num / n,n );
putchar( '0' + r);
while(1);
return 0;
}
3. 题目: 输入一个字符串,计算字符串中子串出现的次字数
#include <stdio.h>
float paixu(float b[5]);//声明paixu函数
int main()
{
float a[5];//存放5个数包括小数
int i;
printf("请输入5个数:\n");
for(i = 0;i < 5;i++)//输入5个数
scanf("%f",&a[i]);
paixu(a);
printf("排序后结果是:\n");
for(i = 0;i < 5;i++)
printf("%2.1f\t",a[i]);//以2位,小数部分一位的格式输出,制表
printf("\n");
return 0;
}
float paixu(float b[])//从小到大排序,实参传入形参b[]
{
int i, j;
float t = 0.0;//t用来交换数
for(i = 0;i < 5;i++)
{
for(j = i + 1; j < 5;j++)//将每一个数与后面的数字依次比较
{
if(b[j] < b[i])//将较小的数存放在数组
{
t = b[i];
b[i] = b[j];
b[j] = t;
}
}
}
}
4. 题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,即将句子中的单词位置倒置,而不改变单词内部结构.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int i = 0;
int j = 0;
int len = 0;
char *temp;
char *str[] = { "I", "am","from","shanghai" ,NULL};
while (str[i] != NULL)
{
i++;
len++;
}
for(i = 0, j = len - 1; j > i; i++,j--)
{
temp =*(str+i);
*(str+i) = *(str+j);
*(str+j) = temp;
}
for(i = 0; i < len; i++)
{
printf("%s ", *(str+i));
}
printf("\n");
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;
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)
{
while((s[i] == b[k]) && s[i] != '\0')
{
i++;
k++;
flag = 0;
}
}
if((b[k] == '\0') && !flag)
{
tail = i;
for(i = head;i < tail;i++)
{
printf("%c",s[i]);
}
printf("\n");
break;
}
i++;
}
return 0;
}