一套编程题 编程11-20

11.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数
char* my_strcpy(char* strdest, const char* strsrc)
{ 
assert((strdest != NULL) && (strsrc != NULL))
char* address = strdest;
while((*strdest++ = *strsrc++) != NULL)
return address;
}

12. 为管理业务培训信息,建立3个表:
  S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
  C(C#,CN)C#,CN分别代表课程编号,课程名称
  SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩
  1)使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?
  	   select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’税收基
础’)
  2) 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?
select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
  3) 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?
select sn,sd from s where s# not in(select s# from sc where c#=’c5’)
  4) 查询选修了课程的学员人数
select 学员人数=count(distinct s#) from sc
  5) 查询选修课程超过5门的学员学号和所属单位?
select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)

13. 字符串倒序 :写一个函数将"tom is cat" 倒序打印出来,即"cat is tom"
//a.ch 
#define SPACE ' ' 
#define ENDL '\0' 
char* str = "Tom is cat"; // 字符串 
char* p1 = str+strlen(str)-1; 
char* p2 = p1; // 开始时,p1,p2都指向字符串结尾处 
char t=0; // 临时变量,用来保存被临时替换为ENDL的字符 
while(str!=p1--) 
{ 
if(SPACE!=*p1){ 
 		for(p2=p1+1;SPACE!=*p1; p1--, t=*p2, *p2=ENDL); 
 		// p1+1指向单词的第一个字母,p2指向单词的结尾,此时输出这个单词 
 		printf("%s ",p1+1); 
 		*p2=t; 
 		p2=p1; 
} 
} 
Output: 
cat is Tom 

14. 写一个递归函数将内存中的字符串翻转"abc"->"cba" 
写一个函数将"tom is cat" 将内存中的字符串翻转,即"cat is tomm"
#include <stdio.h> 
#define SPACE ' ' 
#define ENDL '\0' 
char* s = "The quick brown fox jumps over the lazy dog"; 
void str_reverse(char* p1,char* p2){ 
 	if(p1==p2)return; 
*p1 = (*p1)+(*p2); 
*p2 = (*p1)-(*p2); 
*p1 = (*p1)-(*p2); 
 	if(p1==p2-1)return; 
 	else str_reverse(++p1,--p2); 
} 
void str_word_reverse(char* str){ 
 	char *q1=str, *q2=str, *t; 
 	while(*q1==SPACE)q1++; 
 	if(*q1==ENDL)return; //! 
else q2=q1+1; 
 	while( (*q2!=SPACE) && (*q2!=ENDL) )q2++; 
 	t=q2--;
str_reverse(q1,q2); 
 	if(*t==ENDL)return; 
 	else str_word_reverse(t); 
} 
int 
main(int a ,char** b) 
{ 
printf("%s\n",s); 
str_reverse(s,s+strlen(s)-1); 
printf("%s\n",s); 
str_word_reverse(s); 
printf("%s\n",s); 
return 0; 
} 
Output: 
The quick brown fox jumps over the lazy dog 
god yzal eht revo spmuj xof nworb kciuq ehT 
dog lazy the over jumps fox brown quick The 

15. 用递归算法判断数组a[N]是否为一个递增数组。 
递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束: 
bool fun( int a[], int n ) 
{ 
if( n= =1 ) 
return true; 
if( n= =2 ) 
return a[n-1] >= a[n-2]; 
return fun( a,n-1) && ( a[n-1] >= a[n-2] ); 
} 

16.编写strcat函数
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc); 
其中strDest是目的字符串,strSrc 是源字符串。 
不调用C++/C 的字符串库函数,请编写函数strcat 
char * __cdecl strcat (char * dst, const char * src) 
{ 
char * cp = dst; 
while( *cp ) 
cp++; /* find end of dst */ 
while( *cp++ = *src++ ) ; /* Copy src to end of dst */ 
return( dst ); /* return dst */ 
} 

17.编写类String 的构造函数、析构函数和赋值函数
已知类String 的原型为:
class String 
{ 
public: 
String(const char *str = NULL); // 普通构造函数 
String(const String &other); // 拷贝构造函数 
~ String(void); // 析构函数 
String & operate =(const String &other); // 赋值函数 
private: 
char *m_data; // 用于保存字符串 
}; 
请编写String 的上述4 个函数。  

// String 的析构函数 
String::~String(void) 
{ 
delete [] m_data; 
//由于m_data 是内部数据类型,也可以写成delete m_data; 
}

// String 的普通构造函数 
String::String(const char *str) 
{ 
if(str==NULL) 
{ 
m_data = new char[1]; // 若能加NULL 判断则更好 
*m_data = ‘\0’; 
} 
else 
{ 
int length = strlen(str); 
m_data = new char[length+1]; // 若能加NULL 判断则更好 
strcpy(m_data, str); 
} 
} 

//拷贝构造函数 
String::String(const String &other) 
{ 
int length = strlen(other.m_data); 
m_data = new char[length+1]; // 若能加NULL 判断则更好 
strcpy(m_data, other.m_data); 
} 

//赋值函数 
String & String::operate =(const String &other)
{ 
// (1) 检查自赋值 
if(this == &other) 
return *this; 
// (2) 释放原有的内存资源 
delete [] m_data; 
//(3)分配新的内存资源,并复制内容 
int length = strlen(other.m_data); 
m_data = new char[length+1]; // 若能加NULL 判断则更好 
strcpy(m_data, other.m_data); 
//(4)返回本对象的引用 
return *this; 
} 

18.二分查找算法实现
int Search(elemtype a[],keytype key,int n)
{
int low,high,mid;
low=0;high=n-1;
while(low<=high) 
{
mid=(low+high)/2;
if(a[mid].key==key) 
return mid;
else if(a[mid].key<key) 
low=mid+1;
else 
high=mid-1;
}
return -1;
}

19.冒泡排序算法实现
void bubble(int a[],int n)
{
  		int i,j;
  		for(i=0;i<n-1;i++)
  		{
    			bool x=ture;
    			for(j=0;j<n-1-i;j++)
    			{
      			int temp;
      			if(a[j]>a[j+1])
      			{
       				 temp=a[j];
        				 a[j]=a[j+1];
       		 		 a[j+1]=temp;
        				 x=false;
      			}
   			 }
    			if(x) break;
  		}
}

20.选择排序算法实现
void select (int a[],int n)
{
  		int i,j;
  		for(i=0;i<n-1;i++)
  		{
   			int min=i;
    			for(j=i+1;j<n;j++)
    			{
      			if(a[j]<a[min])
        			min=j;
      			if(min!=i)
      			{
        				int temp=a[j];
        				a[j]=a[min];
        				a[min]=temp;
      			}
    			}
 		 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值