北理工C语言3(4)

2019-04-23 10:14

printf(\}

3-28.编程,输入两个字符串s1、s2,将s1复制到s2并输出s1和s2。复制时,若字符串s1

中存在缩写形式 (如: a – z ) 应转换为字符串s2中的完整形式(abcd??xyz)。“-”号之前的字符必须小于“-”号之后的字符才是合法的缩写形式。例如,s1=abc-fg,则s2=abcdefg,如果s1=abc-af,则 s2=abc-af。应能够处理任意可显示的ASCII字符。 结果:输入:asd-fge-ak1-5sj abc

输出:asdefge-ak12345sj

分析:考察s1[i-1]、s1[i]和s1[i+1],若s1[i]==?-?且s1[i-1]< s1[i+1], 则展开s1[i-1]- s1[i+1]:

复制s1[i-1]+k(k=1,2,..)到s2.,否则只复制s1[i]到s2。

#include \main()/* sj1-3-28 */ {char s1[80],s2[80]; int i=1,k,j=1;

gets(s1); gets(s2); s2[0]=s1[0];

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

{if(s1[i]=='-'&&s1[i+1]>s1[i-1]) /* 出现s1[i-1]- s1[i+1]现象 */

for(k=1;s1[i-1]+k

else s2[j++]=s1[i]; /* 未出现s1[i-1]- s1[i+1]现象,则将s1[i]复制到s2*/ ++i; /*考察下一字符 */ }

s2[j]='\\0';

printf(\}

3-29. 编程,输入字符串,输出字符串中每个字符所出现的次数。如: 输入字符串: abcedabcdcd

则输出: a=2 b=2 c=3 d=3 e=1 结果:输入:abcedabcdcd

输出:a=2 b=2 c=3 e=1 d=3 分析:s1存放字符串,s2[k]存放字符s1[k]的个数,扫描s1[i](i=0,1,…),若s1[i]==s1[k](k=0,1,..i-1),则s2[k]加1。 #include \main()/* sj1-3-29 */

{char s1[80];int s2[80]={0},i=1,k; gets(s1);s2[0]++; while(s1[i]!='\\0')

{for(k=0;k

if(s1[i]==s1[k]) {s2[k]++; break;}/* 出现相同字符,该字符数加1 */ if(k>=i) s2[i]=1;/* 出现不同字符, 该字符数为1 */ ++i; }

for(k=0;k<80;k++) /*输出字符数非0的字符s1[k]及其个数s2[k]*/

if(s2[k]!=0) printf(\printf(\}

?????????????3-30. 编程,输入一个长度不超过100的字符串,删除串中的重复字符后输出。如:

输入字符串: abacaeedabcdcd 则输出: abced 结果:输入:abacaeedabcdcd 输出:abced 分析:

#include \main()/* sj1-3-30 */ {char s1[80]; int i=1,n,k,t; gets(s1); n=strlen(s1);

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

{for(k=0;k

i++; /* 考察下一字符 */ }

printf(\}

3-31. 编程,输入一行字符串,请将其中的字符按照单词进行分割,输出该行中包含的全部

单词。(单词是用空格、\\t或\\n分割的字符串。) 结果:输入:china 123 beijing abc 输出:1: china 2: 123 3: Beijing 4: abc

分析:输入一行字符,其中含空格、跳格和换行。用inword(初值为0) 表示单词的开始或

结束(=1,开始,=0,结束)。

读入空格、跳格或换行时,表示单词结束,令inword=0,输出该单词及其序号,若遇换行,表示输出了最后一个单词,退出。 读入非空格、跳格或换行时,

若inword=0,则该字符是单词的起始字符,令inword=1,单词计数器加1(nw++;)将该字符存入s数组(以便判断输出它)。

若inword不为0,则该字符是单词的一个字符,继续将该字符存入s数组。

#include \

#define YES 1 #define NO 0

main()/* sj1-3-31 */ {int nw,k,inword; char c,s[50];

inword=NO; /* inword=NO 已处理的最后一个字符是空格或\\n */ /* inword=YES 已处理的最后一个字符不是空格或\\n */ nw=0; /* 单词计数器置0 */ while(c=getchar())

{ if(c==' '||c=='\\t'||c=='\\n')

{inword = NO; /* 如果读入空格、跳格或换行,则一个单词结束 */ printf(\输出该单词及其序号 */

if(c=='\\n') break; /* 遇换行,表示输出了最后一个单词,退出*/ }

else /* 读入的字符不是空格、跳格或换行 */ if(inword==NO) /* 如果前一个字符是空格*/

{ inword=YES; /* 则c为单词的首字符, 置inword为YES */ k=0;

s[k++]=c; /*将c记入数组s */ ++nw; /*进行单词计数 */ } else

{s[k++]=c; s[k]='\\0';} /*非单词首字符记入数组s并在串尾加\\0*/ } }

?3-32. 编程,将任一正整数转换为二进制形式。 结果:输入:144

输出:n(10)=144

n(2)=1 0 0 1 0 0 0 0

分析:用除2取余数的方法化2进制,用数组存放2进制各位数字(从高位到低位存放)。输出时从高位的第一个非0数字开始输出。

main()/* sj1-3-32 */

{ int j,n,k,a[16]={0}; scanf(\

k=15; j=n;

while(j>0) /* 将十进制数转变为二进制数 */ { a[k--]=j%2; /* 二进制数低位放后面 */ j=j/2; }

printf(\ for(k=0;a[k]==0;k++);

for(j=0;j<16;j++)

printf(\

printf(\ }


北理工C语言3(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:苏维埃的兴亡

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: