电子科技大学820计算机复试自己编写C复试答案.docx

上传人:b****6 文档编号:6317675 上传时间:2023-01-05 格式:DOCX 页数:38 大小:24.17KB
下载 相关 举报
电子科技大学820计算机复试自己编写C复试答案.docx_第1页
第1页 / 共38页
电子科技大学820计算机复试自己编写C复试答案.docx_第2页
第2页 / 共38页
电子科技大学820计算机复试自己编写C复试答案.docx_第3页
第3页 / 共38页
电子科技大学820计算机复试自己编写C复试答案.docx_第4页
第4页 / 共38页
电子科技大学820计算机复试自己编写C复试答案.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

电子科技大学820计算机复试自己编写C复试答案.docx

《电子科技大学820计算机复试自己编写C复试答案.docx》由会员分享,可在线阅读,更多相关《电子科技大学820计算机复试自己编写C复试答案.docx(38页珍藏版)》请在冰豆网上搜索。

电子科技大学820计算机复试自己编写C复试答案.docx

电子科技大学820计算机复试自己编写C复试答案

1、单链表逆序(考频:

5次)——不用输入就在函数生成

函数生成数据如下:

Head=malloc(sizeof(structLNode));

Head->next=NULL;

For(i=5;i>=0;i--)

{

P=malloc(sizeof(structLNode));

P->val=i;

P->next=head->next;

Head->next=p;//头插法建立数据

}

#include

#include

structLNode

{

intval;

structLNode*next;

}LNode[5]={{1,NULL},{2,NULL},{3,NULL},{4,NULL},{5,NULL}};

//建立单链表

voidreverse(structLNode*Head)

{

structLNode*p,*q;

p=Head->next;

Head->next=NULL;

while(p)//注意这里,重点在这里!

{

q=p->next;

p->next=Head->next;

Head->next=p;

p=q;

}

p=Head->next;

while(p)

{

printf("%-4d",p->val);

p=p->next;

}

printf("\n");

}

voidmain()

{

inti,e,n;

structLNode*p,*Head,*q;

Head=(structLNode*)malloc(sizeof(structLNode));

p=Head;

printf("输入建立单链表所需的整数个数:

");

scanf("%d",&n);

printf("输入%d个数据,以回车键隔开:

\n",n);

for(i=0;i

{

q=(structLNode*)malloc(sizeof(structLNode));

scanf("%d",&e);

q->val=e;

p->next=q;

p=q;

}

p->next=NULL;//至关重要的一步!

p=Head->next;

printf("建立单链表的结果如下\n");

while(p)

{

printf("%-4d",p->val);

p=p->next;

}

printf("\n");

/*for(i=0;i<5;i++)

{

printf("%-7d",LNode[i].val);

}

printf("\n");

*/

printf("单链表逆序结果如下:

\n");

reverse(Head);

}

2、计算1-x+x^2/2!

-x^3/3!

+...+x^n/n!

,x是单浮点数,n是整数(考频:

3次)

#include

voidmain()

{

intj,n,flag=-1;

floatx,sum1=1,sum2=1,sum=1;

printf("请输入求和用到的x和n,用英文逗号隔开\n");

scanf("%f,%d",&x,&n);

if(n==0)//等于和赋值弄错了!

!

!

{

printf("求和的值为1.0\n");

return;

}

for(j=1;j<=n;j++)

{

sum1*=x;

sum2*=j;

sum+=flag*(sum1/sum2);

flag=-flag;

}

printf("求和的值=%f\n\n",sum);

}

3、数质因数分解(考频:

2次)

#include

#defineN20

intisPrime(intn)

{

inti=2;

while(n%i!

=0)

i++;

if(i==n)

return1;

else

return0;

}

voidmain()

{

intnum,i,a[N],j=-1;

printf("请输入需要分解的正整数:

\n");

scanf("%d",&num);

printf("%d=",num);

if(num<=0)

{

printf("输入数据错误!

请重新输入!

\n");

return;

}

while(num>=4)

{

for(i=2;i<=num;i++)

{

if(num%i==0&&isPrime(i))

{

a[++j]=i;

num/=i;

break;

}

}

}

if(num>1)

{

a[++j]=num;

}

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

{

printf("%d",a[i]);

if(i

printf("*");

}

printf("\n");

}

4、字符串逆序,不申请新的数组空间

#include

#include

#defineN100

voidreverse(charstr[])

{

intlen,i;

chartemp;

len=strlen(str);

for(i=0;i<(len/2);i++)//次数这里出错,相当于没有交换

{

temp=str[i];

str[i]=str[len-i-1];

str[len-i-1]=temp;

}

//str[i]='\0';结束符一直在

}

voidmain()

{

charstr[N],*res;

printf("请输入字符串:

\n");

scanf("%s",str);

reverse(str);

printf("逆序的结果如下:

\n%s\n",str);

}

5、file1的容全部复制到file2中,且在file2的每一行都要加上行号,最后返回file1中的字符个数。

#include

#include

/*

voidmain()

{

FILE*fp1,*fp2;

fp1=fopen("c:

\\1.txt","r");//重要,不存在不会创建新文件!

if(fp1!

=NULL)

printf("成功打开\n");

}

*/

/*

#defineMAX1000

voidmain()

{

FILE*fp1,*fp2;

charc='\n';

fp1=fopen("1.txt","r");

fp2=fopen("2.txt","w");

while(!

feof(fp1))

{

chartemp[MAX];

fgets(temp,MAX,fp1);//每次都读到换行符结束,换行符算一位,字符串最后面一定是'\0',有换行符则加在'\0'前面,'\n'==10==换行符

fputs(temp,fp2);

}

fclose(fp1);

fclose(fp2);

}*/

 

voidmain()

{

FILE*fp1,*fp2;

chartemp;

intcounts=0,row=1;

fp1=fopen("file1.txt","r");

fp2=fopen("file2.txt","w+");

while(!

feof(fp1))

{

temp=fgetc(fp1);

if(temp!

=32&&temp!

='\n'&&temp!

=EOF)//32代表'',10代表'\n'

{

++counts;

}

if(temp!

='\n')

{

fputc(temp,fp2);

}

else

{

fprintf(fp2,"行号为:

%d",row++);

fprintf(fp2,"\n");

}

}

fprintf(fp2,"行号为:

%d",row);

fclose(fp1);

fclose(fp2);

printf("file1.doc文件中的字符总数为:

%d\n",counts);

}

5、分数四则运算

#include

longgcd(longm,longn)

{

while(n)

{

longt=m%n;

m=n;

n=t;

}

returnm;

}

voidcount(charflag,longup1,longup2,longdown1,longdown2)

{

longt;

switch(flag)

{

case'+':

up1=up1*down2+up2*down1;

down1=down1*down2;

break;

case'-':

up1=up1*down2-up2*down1;

down1=down1*down2;

break;

case'*':

up1=up1*up2;

down1=down1*down2;

break;

case'/':

up1=up1*down2;

down2=down1*up2;

break;

}

t=gcd(up1,down1);

if(up1==down1)

printf("1\n");

else

printf("%d/%d\n",up1/t,down1/t);

}

intmain()

{

longup1,up2,down1,down2;

charflag;

printf("请输入两个正分数\n");

while(~scanf("%ld/%ld%c%ld/%ld",&up1,&down1,&flag,&up2,&down2))

{

count(flag,up1,up2,down1,down2);

}

return0;

}

7、编写一个函数,使之能完成以下功能:

利用递归方法找出一个数组中的最大值和最小值,要求递归调用函数的格式如下:

MinMaxValue(arr,n,&max,&min),其中arr是给定的数组,n是数组的个数,max、min分别是最大值和最小值。

#include"stdio.h"

#defineN10

voidMinMaxValue(intarr[],intn,int*max,int*min)

{

if(n>=0)

{

if(*max

*max=arr[n];

if(*min>arr[n])

*min=arr[n];

MinMaxValue(arr,n-1,max,min);

}

}

intmain()

{

intmax=-32768,min=32767;

inta[]={1,54,23,65,87,12,54,87,98,233};

MinMaxValue(a,N-1,&max,&min);

printf("Max=%d,Min=%d\n",max,min);

return0;

}

8、编写一个完整的程序,使之能完成以下功能:

一段名为file.c的程序,该程序中含有括号,现要检查程序中的括号是否配对,提示:

利用堆栈实现。

(15分)

#include

#defineStackchar

#defineMax999

intjudge(charp[])

{

intlen=strlen(p);

inttop=-1,i;

Stacks[Max];

for(i=0;i

{

switch(p[i])

{

case'(':

case'[':

case'{':

s[++top]=p[i];//只要是左括号就放进去

break;

case')':

if(s[top]=='(')

top--;

elsereturn0;

break;

case']':

if(s[top]=='[')

top--;

elsereturn0;

break;

case'}':

if(s[top]=='{')

top--;

elsereturn0;

break;

}

}

if(top==-1)

return1;

else

return0;

}

voidmain()

{

charp[Max];

FILE*fin;

if(!

(fin=fopen("file.txt","r")))

printf("failed");

while(!

feof(fin))

{

fscanf(fin,"%s",p);

}

printf("%d\n",judge(p));

fclose(fin);

}

9、统计字符串中的数字字符次数,字符串仅由数字字符构成

#include

voidmain()

{

chartemp[50];

char*str;

inti,counts[10]={0};

printf("请输入长度不超过50的字符串(只含有数字字符):

\n");

str=temp;

scanf("%s",str);

for(i=0;i<50;i++)

{

counts[str[i]-'0']++;

}

for(i=0;i<10;i++)

printf("数字%d出现的次数--------%d\n",i,counts[i]);

}

10、利用结构数组和指向结构的指针,输出学生最低、最高成绩以及相应的学号(若有相同的分数,要输出多个学号)

#include

#defineN10

structstudent

{

intnum;

intscore;

}student_info[100],*pS;

voidmain()

{

inti,max,min;

printf("请输入学生学号和成绩,以逗号进行隔开\n");

for(i=0;i

{

scanf("%d,%d",&(student_info[i].num),&(student_info[i].score));

}

max=min=student_info[0].score;

pS=student_info+1;

for(i=1;i

{

if(pS->score>max)

max=pS->score;

if(pS->score

min=pS->score;

}

//printf("最高分为%d,最低分为%d\n",max,min);

pS=student_info;

for(i=0;i

{

if(pS->score==max)//又把等号弄错了

printf("最高分为%d,学号为%d\n",pS->score,pS->num);

}

pS=student_info;

for(i=0;i

{

if(pS->score==min)

printf("最低分为%d,学号为%d\n",pS->score,pS->num);

}

 

}

11、删除输入的字符串中的大小写字母和数字,并统计有重复的字符及其重复次数

#include

#include

structcharInfo{

charval;

intcount;

}strInfo[100];

 

intdelChar(char*str,charc)

{

inti=0,count=0;

//len=strlen(str);不算结束符

while(str[i]!

='\0')

{

if(str[i]==c)

{

memcpy(&str[i],&str[i+1],strlen(&str[i+1])+1);

++count;

}

else

++i;

}

returncount;

}

voidmain()

{

char*str,temp[1000];

inti;

str=temp;

for(i=0;i<10;i++)

{

strInfo[i].val='0'+i;

strInfo[i].count=0;

}

for(i=0;i<26;i++)

{

strInfo[i+10].val='A'+i;

strInfo[i].count=0;

}

for(i=0;i<26;i++)

{

strInfo[i+36].val='a'+i;

strInfo[i].count=0;

}

scanf("%s",str);//str本来就是地址

for(i=0;i<62;i++)

{

strInfo[i].count=delChar(str,strInfo[i].val);

}

printf("\n\nresult=%s\n\n\n",str);

for(i=0;i<62;i++)

{

printf("%c出现次数%d\n",strInfo[i].val,strInfo[i].count);

}

printf("\n\n");

}

12、小括号匹配

#include

#defineMAX100

typedefintBOOL;//注意这个分号,bool是c++独有的

#definetrue1

#definefalse0

BOOLIsPair(FILE*fp)

{

charSTACK[MAX],temp;

inttop=-1;

while(!

feof(fp))

{

temp=fgetc(fp);

if(temp=='(')

STACK[++top]=temp;

if(temp==')')

{

if(STACK[top]=='(')

--top;

else

returnfalse;

}

}

if(top==-1)

returntrue;

else

returnfalse;

}

voidmain()

{

FILE*fp;

fp=fopen("file.txt","r");

if(IsPair(fp))

printf("配对成功!

\n");

else

printf("配对失败!

\n");

 

}

13、生日大小比较

#include

intcmpBirth(char*st1,char*st2)

{

inti;

for(i=0;i<8;i++)

{

if(*st1&&*st2&&(*st1==*st2))

{

++st1;

++st2;

}

elseif(*st1-*st2>0)

return1;

else

return0;

}

}

voidmain()

{

charstr1[20],str2[20];

char*st1,*st2;

printf("请输入要进行对比的两个,以回车键进行隔开\n");

scanf("%s",str1);

scanf("%s",str2);

if(cmpBirth(str1+6,str2+6))

printf("第二个人年龄更大一些\n");

else

printf("第一个人年龄更大一些\n");

}

简洁版答案

intisbothsame(charstr1[19],charstr2[19])

{

intlow=6,hight=13;

while(low

returnstr1[low]-str2[low];

}

14、移动链表最大结点至尾部

#include

#include

structLNode

{

intdata;

structLNode*next;

};

structLNode*CreateLinklist()

{

structLNode*p,*Head,*q;

intn,i;

Head=(structLNode*)malloc(sizeof(structLNode));

Head->next=NULL;

printf("请输入链表结点个数\n");

scanf("%d",&n);

q=Head;

printf("输入数据\n");

for(i=0;i

{

p=(structLNode*)malloc(sizeof(structLNode));

scanf("%d",&(p->data));

q->next=p;

q=p;

}

q->next=NULL;

printf("输入的链表如下所示\n");

p=Head->next;

while(p)

{

printf("%-4d",p->data);

p=p->next;

}

returnHead;

}

voidLNodeFind(structLNode*Linklist)

{

structLNode*p=Linklist->next,*q,*r;

intmax=p->data,counts=0,flag=1;

p=p->next;

while(p)

{

if(p->data>=max)

{

max=p->data;

++counts;

}

p=p->next;

}

while(counts)

{

p=Linklist->next;

q=Linklist;

flag=1;//利用flag控制不

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1