#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
//hex:16 oct:8 dec:10 bin:2
/*void d2x(int n,int x){//十进制到任意进制转换
int i=0,m;
int a[32]={0};
while(n>=x){
m=n%x;
n=n/x;
a[i++]=m;
}
a[i]=n;
for(;i>=0;i--)
switch(a[i]){
case 10:printf("%c",'A');break;
case 11:printf("%c",'B');break;
case 12:printf("%c",'C');break;
case 13:printf("%c",'D');break;
case 14:printf("%c",'E');break;
case 15:printf("%c",'F');break;
default:printf("%d",a[i]);
}
}
void o2x(char *c,int n,int x){//八进制到二进制,十进制,十六进制转换,n代表字符串位数,x代表进制
switch(x){
case 2:{
for(int i=0;i<n;i++){
switch(c[i]){
case '0':printf("%s","000 ");break;
case '1':printf("%s","001 ");break;
case '2':printf("%s","010 ");break;
case '3':printf("%s","011 ");break;
case '4':printf("%s","100 ");break;
case '5':printf("%s","101 ");break;
case '6':printf("%s","110 ");break;
case '7':printf("%s","111 ");break;
default:break;
}
}
break;
}
case 10:{
int sum=c[0]-'0';
for(int i=1;i<n;i++)
sum=sum*8+c[i]-'0';
printf("%d ",sum);
break;
}
case 16:{
int sum=c[0]-'0';
for(int i=1;i<n;i++)
sum=sum*8+c[i]-'0';
d2x(sum,16);
break;
}
}
}
void b2x(char *c,int n,int x){//二进制到八进制,十六进制转换
int sum=c[0]-'0';
for(int i=1;i<n;i++)
sum=sum*2+c[i]-'0';
switch(x){
case 8:
d2x(sum,8);
break;
case 16:
d2x(sum,16);
break;
default:printf("%s","error");break;
}
}
int main(){
char c;
d2x(168,2);
printf("%c\n",' ');
d2x(168,4);
printf("%c\n",' ');
d2x(168,8);
printf("%c\n",' ');
d2x(168,13);
printf("%c\n",' ');
o2x("7543",4,2);
o2x("7543",4,10);
o2x("7543",4,16);
printf("%c\n",' ');
b2x("1001001011",10,8);
printf("%c\n",' ');
b2x("1001001011",10,16);
c=getchar();
while(!c) getchar();
return 1;
}*/
//用户输入一个文本名,编程实现输出文本中最长的一行和最短的一行。如果最长和最短的不止一行,请全部输出。
/*void output(char *s){//该函数有点问题。
int offmax[10];//record the position of offset;
int offmin[10];
int num1=0;
int num2=0;
int i=0;
int max=0;
int min=1000;
char buf1[200]={0};
char buf2[200]={0};
char c;
FILE* fd=fopen(s,"r");
if(fd==NULL){
fprintf(stderr,"%s","can't open this file!");
exit(0);
}
c=fgetc(fd);
//while(c!=feof(fd)){
while(c!=EOF){
i=0;
while(c!='\n'){
while(c==' '&&c!='\n')
c=fgetc(fd);
i++;
c=fgetc(fd);
}
if(i==max){
offmax[num1++]=ftell(fd)-i;
}
if(i>max){
max=i;
num1=0;
offmax[num1++]=ftell(fd)-i;
}
if(i==min){
offmin[num2++]=ftell(fd)-i;
}
if(i<min){
min=i;
num2=0;
offmin[num2++]=ftell(fd)-i;
}
c=fgetc(fd);
}
for(;num1>0;num1--){
fseek(fd,offmax[num1-1],0);
fgets(buf1,max,fd);
fprintf(stdout,"%s\n",buf1);
}
for(;num2>0;num2--){
fseek(fd,offmin[num2-1],0);
fgets(buf2,min,fd);
fprintf(stdout,"%s\n",buf2);
}
}
int main(int argc,char argv[]){
char c;
char filename[256];
printf("please input filename!\n");
scanf("%s",filename);
output(filename);
c=getchar();
while(c!=3) getchar();
return 1;
}*/
//输入学生信息:学号,三门课程的成绩,学号为0时结束,将其存储在链表A中,
//从中找出分数大于平均分的学生,并将该学生信息按平均分降序排列存入到链表B中,最后输出链表B。
/*#define len 10
typedef struct lNode{
int sNum;
//char[len] sNum;
float grade1;
float grade2;
float grade3;
float average;
struct lNode *next;
}lNode,*head;
void listInsert(head *h,lNode *n){
lNode *p,*q,*pre;
if(!(*h)) *h=n;
else {
p=*h;
pre=NULL;
while(p!=NULL&&p->average>=n->average){
pre=p;
p=p->next;
}
if(p==*h){
n->next=p;
*h=n;
}
else if(!p){
pre->next=n;
n->next=NULL;
}
else {
pre->next=n;
n->next=p;
}
}
}
int main(){
//char* str;
char c;
int seq;
int n=0;
float score1=0.0;
float score2=0.0;
float score3=0.0;
float aver=0.0;
float sumaver=0.0;
head h=NULL;
lNode* s;
printf("please input the snum and grades ,end of 0!\n");
//scanf("%s",&str);
scanf("%d",&seq);
//while(strcmp(str,"0")){
//while(atoi(str)!=0){
while(seq!=0){
//printf("%s","->:");
n++;
scanf("%f",&score1);
scanf("%f",&score2);
scanf("%f",&score3);
//printf("%c",'\t');
//scanf("%f",&score2);
//printf("%c",'\t');
//scanf("%f",&score3);
//printf("%c",'\t');
aver=(score1+score2+score3)/3;
sumaver+=aver;
s=(lNode*)malloc(sizeof(struct lNode));
//s={str,score1,score2,score3,aver,NULL};
//s->sNum=str;
s->sNum=seq;
s->grade1=score1;
s->grade2=score2;
s->grade3=score3;
s->average=aver;
s->next=NULL;
listInsert(&h,s);
//printf("%c",'\n');
scanf("%d",&seq);
}
aver=sumaver/n;
if(!h)return 1;
else{
head headbh=NULL;
lNode *t=h;
printf("the ilnklist B:\n");
while(t&&t->average>aver){
listInsert(&headbh,t);
printf("{snum=%d,grade1=%f,grade2=%f,grade3=%f,average=%f}",t->sNum,t->grade1,t->grade2,t->grade3,t->average);
t=t->next;
}
}
c=getchar();
while(c!=3) getchar();
return 1;
}*/
//采用命令行方式复制任意多个文件内容到一个文件中,如下所示:
//命令行形式:mycopy 1.txt 2.txt 3.txt 4.txt ...
//功能:复制2.txt 3.txt 4.txt …的内容到1.txt中
/*#define maxlen 1000
int main(int argc,char *argv[]){
FILE* fp1,*fp;
int off1=0;
int off2=0;
int size=0;
char c;
char buf[maxlen]={0};
if(argc<3){
printf("parameter error!");
exit(0);
}
fp1=fopen(argv[1],"w");
fseek(fp1,0,2);
for(int i=2;i<argc;i++){
fp=fopen(argv[i],"r");
fseek(fp,0,2);
off2=ftell(fp);
fseek(fp,0,0);
off1=ftell(fp);
size=off2-off1;
fread(buf,1,size,fp);
fwrite(buf,1,size,fp1);
fseek(fp1,0,2);
fclose(fp);
}
fclose(fp1);
c=getchar();
while(c!=3) getchar();
return 1;
}*/
/*
//这个函数在main中scanf或者gets处会发生错误;
//建立一种数据结构,可以存储任意个、任意长度的整数,利用这个数据结构,输入一串数,排序,求累加和
#define maxNum 10
struct varInt{
//char s[100];
char *s;
};
//char *result=(char*)malloc(sizeof(char)*100);//gloabal variable.
//result="";
void substr(char *s,int m,int n,char* ret){//求字符串s的子串
//char *ret=(char*)malloc(n);
//memset(ret,0,n);
memcpy(ret,s+m,n);
//return ret;
}
void reverse(varInt var){
char temp;
int lenth=strlen(var.s);
for(int i=0;i<lenth;i++){
temp=var.s[i];
var.s[i]=var.s[lenth-1-i];
var.s[lenth-i-1]=temp;
}
var.s[lenth]='\0';
}
void addVarInt(varInt var1,varInt var2,varInt *sum){
int i=0,j=0;
int carry=0;
int add1=0;
int add2=0;
int tmp=0;
int n1=strlen(var1.s);
int n2=strlen(var2.s);
reverse(var1);
//reverse(var2);
char *result=(char*)malloc(sizeof(char)*100);
result="";
//result="\0";
//static char mid[1];
char *mid=(char*)malloc(100);
//char *ret=(char*)malloc(2);
char *ret=(char*)malloc(2);
//ret=NULL;
/*while((n1>0)&&(n2>0)){
substr(var1.s,n1-1,1,ret);
add1=atoi(ret);
substr(var2.s,n2-1,1,ret);
add2=atoi(ret);
tmp=add1+add2+carry;
if(tmp>=10){
carry=1;
tmp=tmp-10;
}
else carry=0;
itoa(tmp,mid,10);
//mid[1]='\0';
result=strcat(result,mid);
n1--;
n2--;
}
while(n1>0){
substr(var1.s,n1-1,1,ret);
add1=atoi(ret);
tmp=add1+carry;
if(tmp>=10){
carry=1;
tmp=tmp-10;
}
else carry=0;
itoa(tmp,mid,10);
//mid[1]='\0';
result=strcat(result,mid);
n1--;
}
while(n2>0){
substr(var2.s,n2-1,1,ret);
add2=atoi(ret);
tmp=add1+carry;
if(tmp>=10){
carry=1;
tmp=tmp-10;
}
else carry=0;
itoa(tmp,mid,10);
//mid[1]='\0';
result=strcat(result,mid);
n2--;
}
if(carry==1){
itoa(carry,mid,10);
result=strcat(result,mid);
}*/
/*
while(i<n1&&j<n2){
substr(var1.s,i,1,ret);
add1=atoi(ret);
subs