高分求编程题程序(C语言)

1,完成一个数据文件(文本文件和二进制文件)拆分和组装程序:如果文件是5.3MB,拆成5个1MB大小的文件和1个0.3MB大小的文件;将拆分后的程序拷贝到另一个目录,并组装起来。比较和原文件有何区别!
2.完成一个压缩文件和解压文件实用程序:有一个文本文件,其内容是由英文大小写字母(A-Z,a-z)和数字(0-9)组成。采用如下压缩算法:原文内容是采用ASCII码编码,每个字符占八位,请将英文大小写字母(A-Z.a-z)和数字(0-9)用6位编码(如000000b表示数字0,0001001b表示数字9,001010表示A,依次类推),压缩原文本文件的内容并编写压缩程序,还原压缩后的文本文件。
3.完成一个加密和解密程序。加密的方法是将原文依次和密钥做异或,解密的方法同加密方法。密钥的长度为6-128个字符长!
4.你的C语言参考书上肯定有N!(N阶乘)的程序吧?输入书上的代码(采用循环和递归两种方法),然后输入几个自然数5、10、20、40、100、1000、10000查看结果是否正确?用高等数学中的方法来确定n!有多少位。判断程序的结果是否正确(位数不对,结果肯定不对).如果书上的程序有问题,请设计一个正确求解n!的程序!
5.输入中文表示的钱的多少,用数字显示出来。例如:一块八、一元八角、一块八毛均表示为1.8.请尽量穷举所有的中文表示方法。

我要程序源代码,而且一定要对的,如果不对,分是不会给的。要是对了,加100,重赏之下必有勇夫,大家努力吧,先行谢过了~

哥们,你这些题目真是无聊死了,而且很不清楚。
1.怎么拆分一个文件?如果一个文件是5.30004MB该怎么拆?拆到B为止?组装是怎么组装?随机合并?
2.你的例子到底是二进制还是十六进制?为什么0是000000b?
3.输入是什么?文本文件?还是从终端输入?密匙是提前决定还是程序运行的时候决定?
4.这个还好。试着做做吧。
5.这个无聊到极点,要不要把全国各种方言的说法也都给你算上?
讲清楚了再提问,否则10000分也没人给你做。

这是第四题的,虽说答案没问题,一旦输入太大就会很慢。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

struct digit{
char d;
struct digit *previous;
struct digit *next;
};

typedef struct digit Digit;

struct bigint{
Digit *head;
Digit *tail;
};

typedef struct bigint BigInt;

void display(BigInt b){
int c=0;
while(b.tail!=0){
printf("%d",b.tail->d);
c++;
b.tail=b.tail->previous;
}
printf("\n");
printf("%d digits in total.\n",c);
}

void free_memory(BigInt *b){
Digit *p;
while(b->head!=0){
p=b->head->next;
free(b->head);
b->head=p;
}
b->head=0;
b->tail=0;
}

BigInt copy(BigInt b){
BigInt b2={0,0};
Digit *p,*q;
q=b.head;
while(q!=0){
if(b2.head==0){
b2.head=(Digit *)malloc(sizeof(Digit));
b2.head->next=0;
b2.head->previous=0;
p=b2.head;
}
else{
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
}
p->d=q->d;
q=q->next;
}
b2.tail=p;
return b2;
}

BigInt add(BigInt b1,BigInt b2){
char carry=0;
BigInt result={0,0};
Digit *p;
while(b1.head!=0&&b2.head!=0){
if(result.head==0){
result.head=(Digit *)malloc(sizeof(Digit));
result.head->next=0;
result.head->previous=0;
p=result.head;
}
else{
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
}
char c=b1.head->d+b2.head->d+carry;
if(c>=10){
carry=1;
c=c-10;
}
else carry=0;
p->d=c;
b1.head=b1.head->next;
b2.head=b2.head->next;
}
while(b1.head!=0){
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
p->d=b1.head->d+carry;
b1.head=b1.head->next;
carry=0;
}
while(b2.head!=0){
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
p->d=b2.head->d+carry;
b2.head=b2.head->next;
carry=0;
}
if(carry>0){
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
p->d=carry;
}
result.tail=p;
return result;
}

BigInt substract(BigInt b,char d){
BigInt result={0,0};
Digit *p;
char borrow=0,d2;
if(b.head->d>=d) d2=b.head->d-d;
else{
d2=b.head->d+10-d;
borrow=1;
}
while(b.head!=0){
if(result.head==0){
result.head=(Digit *)malloc(sizeof(Digit));
result.head->next=0;
result.head->previous=0;
result.head->d=d2;
p=result.head;
}
else{
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
if(b.head->d>=borrow){
p->d=b.head->d-borrow;
borrow=0;
}
else{
p->d=b.head->d+10-borrow;
borrow=1;
}
}
b.head=b.head->next;
}
if(p->d==0&&p!=result.head){
result.tail=p->previous;
result.tail->next=0;
free(p);
}
else result.tail=p;
return result;
}

BigInt multiply(BigInt b1,BigInt b2){
BigInt result,temp1,temp2={0,0},temp3,b;
result.head=(Digit *)malloc(sizeof(Digit));
result.head->previous=0;
result.head->next=0;
result.tail=result.head;
result.head->d=0;
char d1,d2,carry;
Digit *p;
b=copy(b1);
do{
temp1=b;
d1=b2.head->d;
b2.head=b2.head->next;
carry=0;
while(temp1.head!=0){
if(temp2.head==0){
temp2.head=(Digit *)malloc(sizeof(Digit));
temp2.head->next=0;
temp2.head->previous=0;
p=temp2.head;
}
else{
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
}
d2=temp1.head->d*d1+carry;
if(d2>=10){
carry=d2/10;
d2=d2%10;
}
else carry=0;
p->d=d2;
temp1.head=temp1.head->next;
}
if(carry>0){
p->next=(Digit *)malloc(sizeof(Digit));
p->next->previous=p;
p=p->next;
p->next=0;
p->d=carry;
}
temp3=result;
temp2.tail=p;
result=add(temp3,temp2);
free_memory(&temp2);
free_memory(&temp3);
Digit *d2=(Digit *)malloc(sizeof(Digit));
d2->previous=0;
d2->next=b.head;
b.head->previous=d2;
d2->d=0;
b.head=d2;
}while(b2.head!=0);
free_memory(&b);
return result;
}

BigInt factorial(BigInt b){
BigInt result,temp1,temp2=copy(b);
result.head=(Digit *)malloc(sizeof(Digit));
result.head->previous=0;
result.head->next=0;
result.tail=result.head;
result.head->d=1;
while(temp2.tail->d!=0){
temp1=result;
result=multiply(temp1,temp2);
free_memory(&temp1);
temp1=temp2;
temp2=substract(temp1,1);
free_memory(&temp1);
}
free_memory(&temp2);
return result;
}

int main(){
BigInt b={0,0};
Digit *p;
char c;
int i;
c=getchar();
while(c!='\n'){
if(!isdigit(c)){
printf("Invalid input.\n");
return 1;
}
if(b.tail==0){
b.tail=(Digit *)malloc(sizeof(Digit));
b.tail->next=0;
b.tail->previous=0;
p=b.tail;
}
else{
p->previous=(Digit *)malloc(sizeof(Digit));
p->previous->next=p;
p=p->previous;
p->previous=0;
}
i=c-'0';
p->d=(char)i;
c=getchar();
}
b.head=p;
BigInt r=factorial(b);
display(r);
free_memory(&r);
free_memory(&b);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-13
呵呵,楼上说的很对啊,而且要稍微花点时间呢~~以我的预算,40 RMB一题,我给你做
第2个回答  2009-07-16
楼主,谁要是帮你都做出来,我给他再加400分!
第3个回答  2009-07-13
money奉上 这个问题可行 这样的程序是要收费的 这点分也没有激情 看看有没有谁 闲的无聊 为你做吧
第4个回答  2009-07-13
200分远远不够。
200元还差不多。
第5个回答  2009-07-21
哇塞~

(高分求)谁能帮忙搞一个C语言编的模拟现实中一个实例的程序
include<stdio.h> include<stdlib.h> include<malloc.h> include<ctype.h> main(){ for(;;){ FILE *fp;int *pa,*pb,*pc;float dd=0,sum=0,sum0=0,x_value=0,y_value=0;int i,j,p,x=0,y=0;printf("***\\n");printf("this is a programme for the Opitical Fiber length!...

高分求编程题程序(C语言)
2.你的例子到底是二进制还是十六进制?为什么0是000000b?3.输入是什么?文本文件?还是从终端输入?密匙是提前决定还是程序运行的时候决定?4.这个还好。试着做做吧。5.这个无聊到极点,要不要把全国各种方言的说法也都给你算上?讲清楚了再提问,否则10000分也没人给你做。这是第四题的,虽说答案...

高分求解C语言编程题
int IsNumberEqual(int number);void ntos (int number, int c[]);void sort (int a[]);int getmaxn(int a[]);int getminn(int b[]);int main(){ int num;int s[4];int i;do { printf("Input:");scanf("%d",&num);}while(IsNumberEqual(num));i=0;while(num!=6174 & i...

高分求 编程 c语言 已知2点求角度
printf("%f\\n",atan(1)*double(180)\/pi);写的真累,看你题目是C语言,所以没用C++类来写 用类来写,又好写,又好读,又不容易出错 point点(x,y)其实可以直接用COORD,又怕你没有数据结构COORD 比如:struct line { point A;point B;double deg;};改成 struct line { COORD dian; \/\/COOR...

高分求C语言简单数学计算
int main(){ float A,B,C,D,E,F,G,SUM;do { A=0;B=0;C=0;D=0;E=0;F=0;G=0;scanf("%f,%f,%f,%f,%f,%f,%f",&A,&B,&C,&D,&E,&F,&G);SUM=1.5*A+1.2*B+1*C+1*D+0.7*E+0.5*F+0.3*G;printf("\\n%f\\n",SUM);}While(1)return 0;} 上面的程序,...

C语言编程 题目:输入30个学生成绩,求最高分,最低分和平均分(用数组存放...
,max,min,avg);return0;} 文件输入\/输出 在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件;中。标准输入\/输出 有三个标准输入\/输出是标准I\/O库预先定义的:stdin标准输入 stdout标准输出 stderr输入输出错误 以上内容参考:百度百科-c语言 ...

C语言。高分急求。高手进。(做好再加高分,编程题6题)
void main(){ int a[MAX][MAX];int i,j,t;int n;puts("输入幻方的阶数:");scanf("%d",&n);\/\/将数组中所有的数都置零 for(i=0;i<n;i++){ for(j=0;j<n;j++)a[i][j]=0;} \/\/幻方阵赋值 i=0;j=n\/2;a[i][j]=1;\/\/第一行中间的数为1 for(t=2;t<=n*n;t+...

高分求C语言算法:从2000年一月一日00:00:00:开始,过了N秒后是哪年哪...
define SEC 86400 \/\/每天为86400秒 void main(){ int Day,Year,Month;char Mon[12]={31,29,31,30,31,30,31,31,30,31,30,31};\/\/一年中每个月的天数,2000年是闰年所以2月初始化为29 unsigned int Second;printf("Input Seconds from 1\/1\/2000 00:00:00 \\n");scanf("%d",&Second)...

C语言简单编程题目两道,求高手做一下。高分!!!
第1题 :include <stdio.h> include <stdlib.h> define MAX 200 int main(void){ int a[MAX], i = 0;srand(time(NULL)); \/\/ 时间种子, 保证真随机, 每次不会相同 while (i < MAX) { a[i] = rand() % 10000; \/\/ 随机获得10000以下数字, 0-9999 if (a[i] < 1000) { ...

高分求一道C语言程序 急
int expn;struct node * next;}PLOY;void start()\/\/用户选择界面 {printf("***\\n");printf(" 两个一元多项式的相加\\n");printf(" 北京航空航天大学 机械设计系 孙兴涛\\n");printf("***\\n");printf("请选择操作:\\n");printf("0.退出\\n");printf("1.两个一元多项式相加\\n");pri...

相似回答