奇迹少女小鸠结局:c语言的高手帮帮忙

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/09 09:32:55
将下面的程序改成只含main不含子函数的程序!!!最好再把文件加上
密码是一个数字串,例如,以下是两条密码:
第一条:7.21, 7, 17, 6.7.1,13, 19, 10, 2.18, 25, 9, 3.25, 18, 16, 7, 14.18, 13.18, 6, 3.11, 13, 13, 12, -2
第二条:12, 20.8, 23, 16, 1, 1.18, 4, 2, 20.16, 9.8, 24.13, 15
破译原则如下:
1) 每个数字串的最后一个数为密码钥匙(它不是密码原文),设为key。每个数表示译文中的一个大写英文字母,用这些数减去key后所得到的值经适当修改后,为大写英文字母的相应序号。例如,相减后的值为1,对应的字母为A。修正方法为:①若相减后的值小于或等于零,则将其加上26。②若相减后的值大于26(当Key为负数时),则将其减去26。
2) 密码中的逗号为数字间的分隔符,密码中的圆点既是数字间的分隔符又代表译文中的空格。
假如一个密码为16,9.8,24,13,15
按照上述原则破译结果为“AT SIX”
将任给的若干条密码存入数据文件IN.DAT,设计程序,按上面的方法逐个进行破译。输出破译结果,并将结果输出到文件OUT.DAT中。

# i"stdio.h"
# include "string.h"
# include "math.h"
main( )
{int secret(char p[]);
void output(char s[],int key);
char str[160],s[5];
int i,key,k;
printf("Input:");
getchar(str);
key=setret(str);
k=0;
for(i=0;str[i]!='\0';i++)
if(str[i]!='.'&&str[i]!=',')
s[k++]=str[i];
else
{s[k]='\0';
k=0;
output(s,key);
if(str[i]=='.')
putchar(' ');
}
}
int secret(char str[])
{char s[5];
int i,j;
for(i=strlen(str)-1;str[i]!='.'&&str[i]!=',';i--);
for(j=0;str[i+j+1]!='\0';j++)
s[j]=str[i+j+1];
s[j]='\0';
str[i+1]='\0';
return(atoi(s));
}
void output(char s[],int key)
{ int c
c=atoi(s)-key;
if(c<0)
c=c+26;
else if (c>26)
c=c-26;
putchar(c+64);
}

真搞不懂,为什么不要函数呢,函数是最好的方法,这正是高级语言的特点.
如果不用函数的话,那只有在调用函数的地方把函数再写一遍了.