c语言经典31题
1. 求1+2+3+……100的和。(易)main()
{
int i,sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf("1+2+3+.....+99+100=%d\n",sum);
return 0;
}
2,输入年份year,判断该年是否是闰年。(易)
main()
{
int year;
printf("请输入年份:");
scanf("%d",&year);
if (((year%100!=0)&&(year%4==0))||((year%100==0)&&(year%400==0)))
printf("你输入的是%d年,%d年是闰年!!",year,year);
else
printf("你输入的是%d年,%d年不是闰年!!",year,year);
return 0;
}
3,对100以内的素数求和并输出。(较难)
#define N 100
main()
{
int n,i,a,sum=0;
for(n=1;n<=100;n++)
{
for(i=1;i<=n;i++)
if(n%i==0)
{
a++;
if(a==3)
break;
}
if (a<3)
{
printf("%4d",n);
sum=sum+n;
}
a=0;
}
printf("\n");
printf("sum=%d\n",sum);
return 0;
}
4. 打印出下列图形(较易)
*
***
*****
*******
*********
***********
*************
***************
*****************
(1)
*
**
***
****
*****
******
*******
********
*************
(2)
main()
{
int i,j,k;
for(i=0;i<9;i++)
{
for(j=1;j<10-i-1;j++)
printf(" ");
for(k=0;k<2*i+1;k++)
printf("*");
printf("\n");
}
for(i=0;i<9;i++)
{
for(j=1;j<10-i-1;j++)
printf(" ");
for(k=0;k<i+1;k++)
printf("*");
printf("\n");
}
return 0;
}
5.将每一个字母变成它后面的字母,如将A变成B,Z变成A,非字母字符不变,‘!’作为电文结束标志。例如,有一电文“right”,翻译成“sjhiu”。 (较难)
main()
{
char ch;
printf("请输入英文字母,按!结束");
ch=getchar();
while(ch!='!')
{
if(((ch>'a')&&(ch<'z'))||((ch>'A')&&(ch<'Z')))
{
ch=ch+1;
putchar(ch);
}
else
putchar(ch);
ch=getchar();
}
putchar(ch);
return 0;
}
6. 百元买百鸡(穷举):已知公鸡每只5元,母鸡每只3元,小鸡1元3只,100元可买公鸡、母鸡、小鸡几只? (难)
main()
{
int cock_num,hen_num,chicken_num;
// int cock_prc=5,hen_prc=3,chicken_thprc=1;
int i,j,k;
printf("可选的方案有:");
for(cock_num=0;cock_num<=20;cock_num++)
for(hen_num=0;hen_num<=33;hen_num++)
for(chicken_num=0;chicken_num<=100;chicken_num++)
if((cock_num+hen_num+chicken_num==100)&&(cock_num*5+hen_num*3+chicken_num==300))
printf("公鸡%d只母鸡%d只小鸡%d只\n",cock_num,hen_num,chicken_num*3);
return 0;
}
7.求数组float a[N]中最大元素和次大元素及它们的下标,并将其进行输出。(较难)
main()
{
float a[N],max,min;
int i,j,max_pos,min_pos;
for(i=0;i<N;i++)
scanf("%f",&a[i]);
max=a[0];
for(i=0;i<N;i++)
{
if(a[i]>max)
{
max=a[i];
max_pos=i+1;
}
}
min=a[0];
for(j=0;j<N;j++)
{
if(a[j]<min)
{
min=a[j];
min_pos=j+1;
}
}
printf("最大元素是%f在第%d位最小元素是%f在第%d位",max,max_pos,min,min_pos);
return 0;
}
8.输入正整数m,按从小到大的次序输出m的所有因子。如,输入625,输出:1 5 25 125 625(难)
main()
{
int num,i;
printf("请输入正整数:");
scanf("%d",&num);
for(i=1;i<=num;i++)
if(num%i==0)
printf("%4d",i);
return 0;
}
9. 输入数组a[N]中的m个元素(m<N),再输入一个数x,将x插在数组a中。(较难)
分别按照下述规定进行插入:
(1)将x插在数组末端。
(2)将x插在数组前端。
#define N 7
void main()
{ int m,i,x,a[N],b[N],k=0;
for(;;)
{
printf("请输入数组元素个数:");
scanf("%d",&m);
if(m>=N){printf("数组要满了,无法插入.\n");continue;}
printf("请输入数组的%d个元素:",m);
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
printf("请输入x= ");
scanf("%d",&x);
printf("插在前\n");
for(k=m;k>=0;k--)
{
a[k]=a[k-1];
}
a[0]=x;
for(i=0;i<=m;i++)printf("%4d",a[i]);
printf("\n");
printf("插在后\n");
b[m]=x;
for(i=0;i<=m;i++)printf("%4d",b[i]);
printf("\n");
}
}
10.编写一个程序,将两个字符串连接起来,不要用strcat函数。(易)
#define N 100
void main()
{ char a[N],b[N];
int i,j,k=0;
for (;;){
printf("请输入字符串s1: \n");
for(i=0;i<N-1;i++)
{a[i]=getchar();
if(a[i]=='\n'||i==N-1)break;
}
printf("请输入字符串s2: \n");
for(i=0;i<N-1;i++)
{b[i]=getchar();
if(b[i]=='\n'||i==N-1)break;
}
if(a[i]!='\n')
while(getchar()!='\n');
a[i]='\0';
printf("您输入的字符串s1为: \n");
for(i=0;a[i]!='\0';i++)putchar(a[i]);
putchar('\n');
if(b[i]!='\n')
while(getchar()!='\n');
b[i]='\0';
printf("您输入的字符串s2为: \n");
for(i=0;b[i]!='\0';i++)putchar(b[i]);
putchar('\n');
i=0;
while(a[i]!='\n')
i++;
while(b[k]!='\n')
k++;
for(j=0;j<k;j++)
{a[i]=b[j];i++;}
for(i=0;a[i]!='\0';i++)putchar(a[i]);
putchar('\n');
}
}
11. 将a[N]中的m个元素(m<N),按照从小到大的次序排列。(难)
要求:排序方法分别选用冒泡法、简单选择法和直接插入法。
#define N 100
void Sinsert_sort(int a[],int n)
{
int i,j,x;
for(i=1;i<n;i++)
{x=a[i];
for(j=i-1;j>=0&&x<a[j];j--)a[j+1]=a[j];
a[j+1]=x;
}
}
void outa(int a[],int n)
{int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
}
void sort()
{int a[N],n,i;
printf("请输入元素个数: n=");
scanf("%d",&n);
if(n<=0)return;
printf("请输入 %d个数元素: ",n);
for(i=0;i<n;i++) scanf("%d",&a[i]);
printf("请核对输入数据: \n",n);
outa(a,n);
Sinsert_sort(a,n);
outa(a,n);
}
void main()
{int c;
while(1)
{ printf("请输入操作码, 1: 运行一个实例; 0: 结束, c=");
scanf("%d",&c);
if(!c)break;
sort();
}
printf("程序结束, 再见! \n");
}
void SUbubble_sort(int a[],int n)
{
int i,j,x;
for(j=0;j<n-1;j++)
for(i=n-2;i>=j;i--)
if(a[i]>a[i+1])
{x=a[i]; a[i]=a[i+1]; a[i+1]=x;}
}
void select_sort(int a[],int n)
{
int i,j,x,k;
for(j=0;j<n-1;j++)
{k=j;
for(i=j+2;i<n;i++)
if(a[k]>a[i])k=i;
x=a[j]; a[j]=a[k]; a[k]=x;}
}
12. 输入数组a[N]中的m个元素(m<N),再输入一个数x,查看a中是否有值为x的元素,若有,则把a中值为x的元素去掉(删除元素),后面的元素向前移(假定数组所有元素值都不相同);若没有,则将x加在a中,接在原来元素的后面(插入元素)。并输出程序所做的操作是“插入”还是“删除”的相应信息。(较难)
#define N 7
void main()
{ int m,i,x,k,a[N];
for(;;){
printf("请输入数组元素个数: ");
scanf("%d",&m);
if(m>=N){printf("数组要满了,无法插入.\n");continue;}
printf("请输入数组的%d个元素:",m);
for(i=0;i<m;i++)scanf("%d",&a[i]);
printf("请输入x= ");
scanf("%d",&x);
for(k=-1,i=0;i<m;i++)if(a[i]==x){k=i;break;}
if(k>-1)
{printf("原数组中有现在删除它:\n",x);
for(i=k;i<m;i++)a[i]=a[i+1];
m--;
printf("数组现有%d个元素: ",m);
for(i=0;i<m;i++)printf("%4d",a[i]);
printf("\n");
}
else
{printf("原数组中没有现在插入它:\n",x);
a[m++]=x;
printf("数组现有个元素: ",m);
for(i=0;i<m;i++)printf("%4d",a[i]);
printf("\n");
}
}
}
13.按要求编写子函数,并给出相应的主函数。(易)
要求:返回某字母在某个字符串中出现的次数。
#define N 10
int count(char x[],char c)
{int i,k;
i=k=0;
while(x[i]){if(x[i]==c)k++;i++;}
return k;
}
void main()
{ char a[N],b;
int i;
for (;;){
printf("请输入字符串: \n");
for(i=0;i<N-1;i++)
{a[i]=getchar();
if(a[i]=='\n'||i==N-1)break;
}
if(a[i]!='\n')
while(getchar()!='\n');
a[i]='\0';
printf("您输入的字符串为: \n");
for(i=0;a[i]!='\0';i++)putchar(a[i]);
putchar('\n');
printf("请输入要找的字符串: ");
b=getchar();
printf("字符 %c 在串中出现 %d 次.\n",b,count(a,b));
printf("\n");
while(getchar()!='\n');
}
}
14.用子函数实现找出数组a[n]中的最长回文串(正反读相同的串)。(难)
int serch(char test[])
{
int len,k=0;
len=strlen(test);
if(len==0)
{
return 2;
}
while(len>0&&k<len)
{
if(test[len-1]==test[k])
{
k++;
len--;
}else
{
return 0;
}
}
return 1;
}
main()
{
char p[100];
int ReturnValue=1;
printf("input the string\n");
scanf("%s",p);
ReturnValue=serch(p);
if(ReturnValue==2)printf("please input corrert string");
else if(ReturnValue==1)
{
printf("是回文\n");
}else
{
printf("不是回文\n");
}
return 0;
}
15.编写函数,形参为两个整数,返回这两个整数的和、差、积、商。(易)
sort1(int a, int b)
{
return a+b;
}
sort2(int a, int b)
{
return a-b;
}
sort3(int a, int b)
{
return a*b;
}
sort4(int a, int b)
{
return a/b;
}
main()
{int i,j,a,b,c,d;
printf("please input:");
scanf("%d%d",&i,&j);
a=sort1(i,j);
b=sort2(i,j);
c=sort3(i,j);
d=sort4(i,j);
printf("%d%d%d%d",a,b,c,d);
}
16.用指针函数编写实现以下功能的程序。(易)
有10个学生,每个学生有4门课程,要求:(1)在用户输入学生序号以后能输出学生的全部成绩 ;(2)能找出其中有不及格课程的学生及其学号。
typedef struct student{
char name[10];
char stu_id[15];
int score1;
int score2;
int score3;
int score4;
}stu,*pstu;
stu *serch_by_id(char stu_id[],stu student[])
{
int i=0;
while(i<10)
{
if(strcmp(student[i].stu_id,stu_id)==0)
{
return &student[i];
/**/
}
i++;
}
return NULL;
}
stu *choose_stu(stu student[],int *flag)
{
int i=*flag;
while(i<10)
{
*flag=i+1;
if(student[i].score1<60||student[i].score2<60||student[i].score3<60||student[i].score4<60)
{
return &student[i];
}
i++;
}
return NULL;
}
void main(int argc, char* argv[])
{
FILE *fp;
stu studen[10],*ReturnValue;
char stu_id_tmp[15];
int num=0,selected;
int flag=0;
if(!(fp=fopen("student.txt","r")))
{
printf("faile to open file\n");
return;
}
while(num<10)
{
fscanf(fp,"%s %s %d %d %d %d",
studen[num].name,
studen[num].stu_id,
&studen[num].score1,
&studen[num].score2,
&studen[num].score3,
&studen[num].score4);
num++;
}
while(1)
{
printf("输入学号查询成绩,请按1\n");
printf("不及格课程的学生及其学号,请按2\n");
printf("按其他任意键退出\n");
scanf("%d",&selected);
if(selected==1)
{
printf("请输入学号:\n");
scanf("%s",stu_id_tmp);
ReturnValue=serch_by_id(stu_id_tmp,studen);
if(ReturnValue)
{
printf("姓名 学号 科目1 科目2 科目3 科目4\n");
printf("%-7s %-10s %d %d %d %d\n",
ReturnValue->name,
ReturnValue->stu_id,
ReturnValue->score1,
ReturnValue->score2,
ReturnValue->score3,
ReturnValue->score4);
}
}else if(selected==2)
{
printf("姓名 学号 科目1 科目2 科目3 科目4\n");
while((ReturnValue=choose_stu(studen,&flag))!=NULL)
{
printf("%-7s %-10s %d %d %d %d\n",
ReturnValue->name,
ReturnValue->stu_id,
ReturnValue->score1,
ReturnValue->score2,
ReturnValue->score3,
ReturnValue->score4);
printf("\n");
}
}
else break;
printf("------------------------------------------------------------------\n");
}
return;
}
17.设有一10个整数的数组,编程实现逆序存放数组中的各元素。(易)
#define N 10
void main(int argc, char* argv[])
{
int a[N],i,m;
printf("请输入十个数:\n");
for(i=0;i<N;i++)scanf("%d",&a[i]);
printf("原数组为:%d",a[0]);
for(i=1;i<10;i++)printf(",%d",a[i]);
for(i=0;i<5;i++)
{
m=a[9-i];
a[9-i]=a[i];
a[i]=m;
}
printf("\n逆序后的数组为:%d",a[0]);
for(i=1;i<10;i++)printf(",%d",a[i]);
printf("\n");
}
18.试写出一个函数,把首指针为head2的简单链表中的结点全部接在首指针为head1的简单链表的结点之后,形成一个新链表(表头指针仍为head1)。(易)
typedef struct intnode
{
int data;
struct intnode *next;
}node,*ptr;
ptr creatlinked() //构造链表
{
int x;
ptr head,p;
head=NULL;
scanf("%d",&x);
while(x!=0)
{
p=new node;
p->data=x;
p->next=head;
head=p;
scanf("%d",&x);
}
return(head);
}
void outlinked(ptr p) //遍历链表
{
while(p!=NULL)
{
printf("%8d",p->data);
p=p->next;
}
printf("\n");
}
ptr cat(ptr h1,ptr h2) //连接链表
{
ptr p=h1;
if(h1==NULL)return h2;
while(p->next!=NULL)p=p->next;
p->next=h2;
printf("连接成功!");
return h1;
}
void main()
{
ptr head1,head2;
printf("请输入第一个链表元素,以0结束:");
head1=creatlinked();
printf("\n第一个链表元素为:");
outlinked(head1);
printf("\n请输入第二个链表元素,以0结束:");
head2=creatlinked();
printf("\n第二个链表元素为:");
outlinked(head2);
head1=cat(head1,head2);
printf("\n连接后的链表元素为:");
outlinked(head1);
printf("\n");
}
19. 用结构类型描述学生信息,含有:姓名、学号、语文成绩、数学成绩、英语成绩,平均成绩,排名次序。(易)
输入全班学生(假定人数不超过50人)的数据(不包括平均成绩和排名次序),分别计算并填写各人的平均成绩,以及各单科成绩和平均成绩在全班中的排名次(要考虑并列名次),最后输出这些学生的所有数据。
typedef struct
{
char name[20]; //姓名
int number,chn,math,eng,ord; //学号,语文成绩,数学成绩,英语成绩,名次(假设各科成绩均为整数)
float ave; //平均成绩
}student;
void main()
{
int n,i,j,maxi;
student class1[N],anyone;
printf("请输入总人数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入学号和姓名:\n");
scanf("%d%s",&class1[i].number,class1[i].name);
printf("请输入该学生的语文、数学和英语成绩:\n");
scanf("%d%d%d",&class1[i].chn,&class1[i].math,&class1[i].eng);
class1[i].ave=(float)(class1[i].chn+class1[i].math+class1[i].eng)/3;
}
for(i=0;i<n-1;i++) //排序
{
maxi=i;
for(j=i+1;j<n;j++)
if(class1[j].ave>class1[maxi].ave)maxi=j;
anyone=class1[i];
class1[i]=class1[maxi];
class1[maxi]=anyone;
}
class1[0].ord=1; //排名次
for(i=1;i<n;i++)
if(class1[i].ave==class1[i-1].ave)
class1[i].ord=class1[i-1].ord;
else class1[i].ord=i+1;
printf("输出学生的信息:\n"); //输出学生信息
for(i=0;i<n;i++)
printf("%d,%d,%s,%d,%d,%d,%6.1f\n",class1[i].ord,class1[i].number,
class1[i].name,class1[i].chn,class1[i].math,class1[i].eng,class1[i].ave);
}
20.设计复数四则运算的函数。(较难)
typedef struct
{
double re,im;
}cmplx;
cmplx cadd(cmplx x,cmplx y) //加法
{
cmplx a;
a.re=x.re+y.re;
a.im=x.im+y.im;
return a;
}
cmplx csub(cmplx x,cmplx y) //减法
{
cmplx a;
a.re=x.re-y.re;
a.im=x.im-y.im;
return a;
}
cmplx cmult(cmplx x,cmplx y) //乘法
{
cmplx a;
a.re=x.re*y.re-x.im*y.im;
a.im=x.im*y.re+y.im*x.re;
return a;
}
cmplx cdiv(cmplx x,cmplx y) //除法
{
cmplx a;
double r;
r=y.re*x.re+y.im*y.im;
a.re=(x.re*y.re+x.im*y.im)/r;
a.im=(x.im*y.re-y.im*x.re)/r;
return a;
}
void write(cmplx a,char c) //输出
{
if(a.im>=0)printf("%c=%g+i%g\n",c,a.re,-a.im);
else printf("%c=%g-i%g\n",c,a.re,-a.im);
}
void main()
{
cmplx x,y,a,b,c,d;
printf("请输入两个复数的实部和虚部:\n");
scanf("%f%f%f%f",&x.re,&x.im,&y.re,&y.im);
//调用相关函数
a=cadd(x,y);
a=csub(x,y);
a=cmult(x,y);
a=cdiv(x,y);
//输出结果
write(x,'x');
write(y,'y');
write(a,'a');
write(b,'b');
write(c,'c');
write(d,'d');
}
21.创建一个五结点的链表,输入数据并且按照从小到大的顺序排序。(易)
typedef struct intnode
{
int data;
struct intnode *next;
}node,*ptr;
ptr creatlinked() //构造链表
{
int x,i=0;
ptr head,p;
head=NULL;
while(i<5)
{
scanf("%d",&x);
p=new node;
p->data=x;
p->next=head;
head=p;
i++;
}
return(head);
}
void outlinked(ptr p) //遍历链表
{
while(p!=NULL)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n");
}
void px(ptr p) //排序
{
int a[5],i=0,j,n;
ptr head;
head=p;
while(p!=NULL)
{
a[i++]=p->data;
p=p->next;
}
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(a[i]>a[j]){n=a[i];a[i]=a[j];a[j]=n;}
p=head;
while(p!=NULL)
{
p->data=a[i++];
p=p->next;
}
}
void main()
{
ptr head;
printf("请输入链表的五个元素:");
head=creatlinked();
printf("\n原链表元素为:");
outlinked(head);
printf("\n排序后的链表元素为:");
px(head);
outlinked(head);
printf("\n");
}
22.定义一个可以存储学生信息的结构,其中学生信息包括:学号、姓名、性别、年龄、系名、成绩。并编写程序输入10组数据,然后按照成绩从大到小排序。(较难)
#define N 10
typedef struct
{
char name[20],dean[20]; //姓名,系名
char sex; //性别(m表示男,f表示女)
int number,age,grade; //学号,年龄,成绩(假设成绩为整数)
}student;
void main()
{
int i,j,maxi;
student class1[N],anyone;
for(i=0;i<N;i++) //输入学生信息
{
printf("请输入第%d个学生的学号和姓名:\n",i+1);
scanf("%d%s",&class1[i].number,class1[i].name);
printf("请输入第%d个学生的性别,年龄,系名,成绩:\n",i+1);
scanf("%c%d%s%d",&class1[i].sex,&class1[i].age,class1[i].dean,&class1[i].grade);
printf("\n");
}
for(i=0;i<N-1;i++) //排序
{
maxi=i;
for(j=i+1;j<N;j++)
if(class1[j].grade>class1[maxi].grade)maxi=j;
anyone=class1[i];
class1[i]=class1[maxi];
class1[maxi]=anyone;
}
printf("输出学生的信息:\n"); //输出学生信息
for(i=0;i<N;i++)
printf("%d,%s,%c,%d,%s,%d\n",class1[i].number,class1[i].name[20],class1[i].sex,
class1[i].age,class1[i].dean[20],class1[i].grade);
}
23. 编写程序实现:将文件file2中的内容接到文件file1的内容之后。(较难)
void main()
{
FILE *fp1,*fp2;
if((fp1=fopen("file1","a"))==NULL)
{
printf("can't open file1!");
exit(0);
}
if((fp1=fopen("file2","r"))==NULL)
{
printf("can't open file2!");
exit(0);
}
while(!feof(fp2))
fputc(fgetc(fp2),fp1);
fclose(fp1);
fclose(fp2);
}
24.显示正文文件D:\mafile\f1.txt中的内容。(易)
main()
{
FILE *fp;
char string[256];
if( (fp = fopen( "D:\\1.txt", "r" )) == NULL )
{
printf( "The file D:\\1.txt was not opened\n" );
exit(0);
}
else
while(!feof(fp))
{
fgets(string,20,fp);
printf("%s",string);
}
fclose(fp);
return 0;
}
25. 将2至4000中所有的素数分别输出到两个文件中,一个是文本文件,另一个是二进制文件。(难)
#define n 4000
FILE *f,*g;
void prime()
{
int i,j,a[n+1];
for(i=2;i<=n;i++)
a[i]=1;
for(i=2;i*i<=n;i++)
if(a[i])
{j=i*i;
while(j<=n)
{a[j]=0;j=j+i;}
}
for(i=2;i<=n;i++)
if(a[i])
{
printf("%8d",i);
fprintf(f,"%8d",i);
fwrite(&i,sizeof(int),1,g);
}
}
void main()
{
if((f=fopen("e:\\ex23.txt","w"))==NULL)
{
printf("Cann't open file f !");
exit(0);
}
if((g=fopen("e:\\exb23.dat","wb"))==NULL)
{
printf("Cann't open file g!");
exit(0);
}
prime();
fclose(f);
fclose(g);
printf("正文文件ex23.txt和二进制文件exb23.dat已经生成.\n");
}
26. 编写比较两个文件内容是否相同的程序,若相同,显示“Compare OK!”;否则,显示“Not Equal!”。 (较难)
FILE *f,*g;
int compare()
{
char c,d;
while(!feof(f)&&(!feof(g)))
{
fread(&c,sizeof(char),1,f);
fread(&d,sizeof(char),1,g);
if(c!=d) return 0;
}
if(!feof(f)||(!feof(g))) return 0;
return 1;
}
void main()
{
if((f=fopen("e:\\ex23.txt","rb"))==NULL)
{
printf("Cann't open file f !");
exit(0);
}
if((g=fopen("e:\\exb23.dat","rb"))==NULL)
{
printf("Cann't open file g!");
exit(0);
}
if(compare()) printf("Compare OK!\n");
else printf("Not Equal!\n");
fclose(f);
fclose(g);
}
27. 设某文件中存放了1000个整数,要求将该文件中的数据按从小到大的顺序排列后存入原文件中(覆盖原内容)。(较难)
#define m 1000
FILE *f;
main()
{
int i=0,j,k,x,h=0,a[m];
if((f=fopen("e:\\bc.txt","r"))==NULL)
{
printf("cann't open file f!");
exit(0);
}
while(!feof(f)){ fscanf(f,"%d",&a[i++]);h++;}
for(i=0;i<h;i++)
{
for(k=i,j=i+1;j<h;j++) if(a[j]<a[k])
{
k=j;
x=a[k],a[k]=a[i],a[i]=x;
}
}
if((f=fopen("e:\\bc.txt","w"))==NULL)
{
printf("cann't open file f!");
exit(0);
}
for(i=0;i<h;i++) fprintf(f,"%5d",a[i]);
fclose(f);
return 0;
}
28.用递归法求n!。(较难)
int jc(int n)
{
if (n==1)
return 1;
else
return n*jc(n-1);
}
main()
{
int i,n;
printf("please input n:\n");
scanf("%d",&n);
i=jc(n);
printf("%d",i);
return 0;
}
29.编写实现:从键盘输入一些字符,逐个将它们写入磁盘文件file1.txt中,直到输入一个“#”为止。(较难)
main()
{
char a;
FILE *f;
if((f=fopen("e:\\file1.txt","w"))==NULL)
{
printf("cann't open file f!");
exit(0);
}
a=getchar();
while(a!='#')
{
fputc(a,f);
a=getchar();
}
return 0;
}
30.编程实现:读出上题中生成的file1.txt文件,并将其中的小写字母改为大写字母,按逆序写入file2.txt中。(难)
#define n 1000
main()
{
char a[n];
int i=0,j;
FILE *f,*p;
if((f=fopen("e:file1.txt","r"))==NULL)
{
printf("Cann't open file f !");
exit(0);
}
while(!(feof(f)))
{
fread(&a[i],1,1,f);
i++;
}
for(j=0;j<=i;j++)
{
if(a[i]>='a'&&a[i]<='z')
a[i]-='a'-'A';
}
if((p=fopen("e:\\file2.txt","w"))==NULL)
{
printf("Cann't open file g!");
exit(0);
}
for(;i>=0;i--)
fputc(a[i],p);
return 0;
}
31.编程实现:将上述两个文本文件file1.txt和file2.txt连接成一个文件。(较难)
main()
{
FILE *fp1,*fp2;
if((fp1=fopen("e:\\file1.txt","a"))==NULL)
{
printf("Cann't open file fp1 !");
exit(0);
}
if((fp2=fopen("e:\\file2.txt","r+"))==NULL)
{
printf("Cann't open file fp2!");
exit(0);
}
while(!feof(fp2))
fputc(fgetc(fp2),fp1);
fclose(fp1);
fclose(fp2);
return 0;
}