#include<math.h>
void main()
{
int a,b,c
printf(" \3\3 \3\3\n") \\轿迟反斜杠 "\"表示转义字符这里输出四个ASCII值为3 的字符
\\ 中闭羡李间有空格的照常输出 最后 \n是换行符
for(a=1a<=6a++) \\这for循环语句 以a为循环控制变量a从1开始 当a不大于6是继续循环
\\否则结束循环
{
for(b=1b<=ab++) \\同上 当b<=a满足时执行
printf(" ")\\输出空格
for(c=1c<=11-2*ac++) \\
{
if(a>1&&(c==1||c==11-2*a)||a==1&&(c==2||c==5||c==8)) \\满足条件执行下面的语句
printf("\3")\\输出 ASCII为3的字符
else printf(" ") \\输出空格派肢
}
printf("\n") \\换行
}
getch()
}
不知道这大哥在哪弄的这程序,真是高手,没怎么细看,就是不知道为什么这么个程序居旁瞎然弄到***这么复杂呵呵,建议:类似的程序不用太深究。程序员的最高境界不是能编出谁看都费劲的程序,而是编出可读性很强,运行不累赘的程序,这种程序...........本人不怎么恭维。
象这种:
void main()
{
int i,n,j,k=2
printf("输入菱形行数,注意为奇数:\n")
scanf("%d",&n)
for(i=1i+1i+=k)
{
for(j=0j <(n-i)/2j++)
printf(" ")
for(j=0j <ij++)printf("*")
printf("\n")
if (i==n)
k=-2
}
}大部分人看到for(i=1i+1i+=k)都会晕一下吧,死循环?不是,当输入奇数的时候他不是死循环,输入偶数就是死循环,这样的程序有意义闭橘么?感觉......怪怪的轿启团,是不是90后编的啊呵呵
这是对字符串 *** 作的程序#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char *ch
int length //串长度
}HString
void StrAssign(HString *T,char *chars) //生成一个值等于串常量chars的串T
{
int i,j
char *c
if(T->ch)
free(T->ch) //释放T原有空间
for(i=0,c=chars*c++i,++c) //求chars长度
printf("the length is %d\n",i)
if(!i)
{
T->ch = NULL
并野咐T->length = 0
}
else
{
if(!(T->ch=(char*)malloc((i+1)*sizeof(char))))
exit(1)
for(j=0j<i++j)
T->ch[j] = chars[j]
T->ch[i] = '\0'
T->length = i
}
}
int StrLength(HString s) //返回S的元素个数,称串的长度
{
return s.length
}
int StrCompare(HString S,HString T) //串比较
{
//若S>T,则返回值>0若S=T,则返回值=0,若S<T,则返回值<0
int i
for(i=0i<S.length &&i<T.length++i)
if(S.ch[i]!=T.ch[i])
return S.ch[i] - T.ch[i]
return S.length - T.length
}
void ClearString(HString *S) //将S清为空串
{
if(S->ch)
{
free(S->ch)
S->ch = NULL
}
S->length = 0
}
void Concat(HString *T,HString s1,HString s2)
{
//用T返回由绝纯s1,s2联接而成的新串
int i,j
if(T->ch) free(T->ch) //释放旧空间
if(!(T->ch=(char*)malloc((s1.length+s2.length+1)*sizeof(char))))
exit(1)
T->length = s1.length + s2.length
for(i=0i<s1.length++i)
T->ch[i] = s1.ch[i]
for(j=0j<=s2.length++j,++i)
T->ch[i] = s2.ch[j]
}
void SubString(HString *sub,HString s,int pos,int len)
{
//用sub返回串s的第pos个字符起长度为len的子串
//其中,1<=pos<=strlenth(s)且0<=len<=strlength(s)-pos + 1.
int i,j
if(pos<1 || pos>s.length || len<0 || len>s.length-pos+1)
{
printf("SubString's Location error!\n")
exit(1)
}
if(sub->ch) free(sub->ch)//释放旧空间
if(!len)
{
sub->ch = NULLsub->length = 0
}
else
{
sub->ch = (char*)malloc((len+1)*sizeof(char))
for(i=0,j=pos-1j<=pos+len-2++i,++j)
sub->ch[i] = s.ch[j]
sub->length = len
sub->ch[sub->length] = '\0'
}
脊野 }
int Index(HString S,HString T,int pos)
{
//T为非空串,若主串S中第pos个字符之后存在与T相等的子串,
//则返回第一个这样的子串在S中的位置,否则返回0
int i,j,k
i = 0
for(i=i+pos-1S.ch[i]++i)
for(j=i,k=0S.ch[j]==T.ch[k]++j,++k)
if(!T.ch[k+1])
return i
return -1
}
void StrInsert(HString *s,int pos,HString T) //在pos位置插入字符串T
{
int i,j
printf("%d,%d\n",pos,s->length+1)
if(pos<1 || pos>(s->length+1))
{
printf("strInsert's Location error!\n")
exit(1)
}
//SubString(&sub,*s,pos,s->length-pos+1) //取得POS位置开始以后的字符串
//printf("s->length=%s\n",s->ch)
if(T.length)
s->ch = (char*)realloc(s->ch,(s->length+T.length+1)*sizeof(char))//增加S的空间
for(j=s->lengthj>=pos-1--j) //POS位置到最后的字符往后移
s->ch[j+T.length] = s->ch[j]//这就已经把'\0'移动到最后
for(i=0i<T.length++i) //T复制到S
{
s->ch[i+pos-1] = T.ch[i]
}
//for(i=0i<sub.length++i) //刚刚取出S的POS后的字符串,复制回S
//s->ch[pos+T.length-2+i] = sub.ch[i]
s->length = s->length + T.length
}
void StrDelete(HString *s,int pos,int len)//S存在,从S中删除第POS个字符起长度为LEN的子串
{
int i,j
if(pos<1 || pos>s->length-len)//判断删除位置是否合理
printf("delete Location error!\n")
else
{
for(i=pos+len-1,j=0i<s->length++i,++j) //删除中间元素,后面的元素往前移
s->ch[pos-1+j] = s->ch[i]
s->length = s->length - len
s->ch[s->length] = '\0'
s->ch = (char*)realloc(s->ch,(s->length+1)*sizeof(char))//将它占用空间改回来更好
}
}
void Replace(HString *s,HString t,HString v) //将V替换掉S中的T
{
int i
i = Index(*s,t,1)
printf("location:%d",i)
while(i>=0)
{
StrDelete(s,i+1,t.length)
StrInsert(s,i+1,v)
i = Index(*s,t,1)
}
}
void display(HString s)
{
printf("the string is :%s\n",s.ch)
}
void main()
{
HString obj,obj2,obj3,obj4
obj.ch = NULL//(char*)malloc(sizeof(char))
obj2.ch = NULL
obj3.ch = NULL
obj4.ch = NULL
StrAssign(&obj,"august")
StrAssign(&obj2,"yx")
StrAssign(&obj4,"ax")
display(obj)
display(obj2)
SubString(&obj3,obj,3,3)
display(obj3)
StrInsert(&obj3,1,obj2)
display(obj3)
Replace(&obj3,obj2,obj4)
display(obj3)
StrDelete(&obj3,1,3)
display(obj3)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)