广工C语言编程题目_第1页
广工C语言编程题目_第2页
广工C语言编程题目_第3页
广工C语言编程题目_第4页
广工C语言编程题目_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言编程题目if(max<c)

max=c;

1.025编写一个C程序,用函数printf(char*s)returnmax;}

输出intmax_c(inla,intc)

以下3行信息:{intmax=c;

********************if(max<a)

VeryGood!*max=a;

if(max<b)

注意:max=b;

(1)要求精确到每个字符、空格、字母及returnmax;}

其大小写。voidmain()

(2)可多次调用printf(char*s),每次仅一{inta,b,c,max;

个字符串参数。scanf("%d,%d,%d”,&a,&b,&c);

//max=a>b?a:b;

voidprint1()//max=max>c?max:c;

//max二a;

printf("****************«***\n'');//if(max<b)max=b;

//if(max<c)max=c;

voidprint2()printf("max(%d,%d,%d)=%d\n',,a,b,c,maK_a(a

{,b,c));

printf("*VeryGood!*\n");printf("max(%d,%d,%d)=%d\n,,,a,b,c,maK_b(

)a,b,c));

voidmain()printf("max(%d,%d,%d)=%d\n",a,b,c,max_c(a

{print1();,b,c));

pnnt2();)

print1();6.022n是系统给定的外部变量,编写程序求

)I到n间的

1.055编写一个程序,输入a、b、c三个值,自然数之和。请定义局部变量s存放求和的

输出其中最大值。结果,并用

要求不改变下列给定的程序框架内容,填入下列语句输出结果

合适语句,使其成printf("1+2+...+n=%d\nn,s);

为满足题目要求的正确程序。**********/

**********/voidmain()

inimax_a(in(a,inib,inlc){ints;

{intmax=a;/*请添加相关说明和语句*/

if(max<b)inti;

max=b:for(i=l;i<=n;i++)

if(max<c)s+=i;

max=c;printf(,,14-2+...+n=%d\n',,s);/*注意:不要修

returnmax;}改此输巳语句*/

intmax_b(inta,in(c))

{intmax=b;6.026n和s是系统给定的外部整型变量(不

if(max<a)需要自行定义),

max=a;编写程序求1到n之间的奇数之和,并将结

果存放到s。

**********/s+=1.0/i++*flag;

voidmain()flag*=-l;

{inti;)

for(i=l;i<=n;i++)printf("s=%f\n",s);

if(i%2!=0))

s+=i;intmin(intx,inty,intz)

)/*返回3个整数x,y和z中最小的数*/

6.040m,n和s是系统定义的外部整型变量(

(不需要自行定义),intt;

编写程序,根据m的值求满足i+2+...+n>=ml=x<y?x:y;

的最小n,并将return(t<z?t:z);

l+2+...+n的结果存放到S©例如,若m=50,)

则n=10,s=55o/*8.020编写函数,求用1元、5元和10元

**********/三种纸币支付n元钱

voidmain()共有多少种支付方法?

{inti;例如,16元可有6种支付方法:

fbr(i=l;s<m;i++)方法123456

{s+=i;10元000011

n=i;5元012301

)1元16116161

I*/

/**********intchange(intn)

6.051n和s是系统给定的外部整型变量(不{inti,j,k;

需要自行定义),intsum=0;

编写程序求l-l/2+l/3-l/4+...l/n,并将结果prir.tf("\tl元\t5元V10元\n");

存放到Sofbr(i=O;i<=n;i++)

******木***/for(j=0;j<=n/5;j++)

voidmain()for(k=0;k<=n/10;k++)

if(n==(i+5*j+10*k))

//intsign=l;{sum=sum+l;

//floatdeno=2.0,tenn;printf("%-d",sum);

//s=1.0;printf("\t%-d\t%-d\t%-d\n",i,j,k);

//\vhile(deno<=n))

〃{printf("\n");

//sign=-sign;return(sum);

//term=sign/deno;}

//s=s+term;/*8.030先编写一个判断素数的函数。再编

//deno=deno+1;写一个函数将一个

//)偶数表示为两个素数之和,并返回其中较

//printf("%f\n",s);小的素数。

inti=l,flag=l;注:素数指只能被1和自身整除的正整数。

s=0.0;规定。,1不是素数。

while(i<=n)*/

intprimc(intn)78974I

/*判断素数,如果是素数返回1,不是素数*/

则返回0*/voidinvcrt(chara[N][N])

{intt;{inti,j,b[20][20];

if(n==1)for(i=0;i<N;i++)

return0;for(j=0;j<N;j++)

for(t=2;t<=(n/2);t++)b[i][j]=a[N-l-j][N-l.i];

if(n%t==0)for(i=0;i<N;i++)

return0;for(j=0;j<N;j++)

return1;a[i]U]=b[i]U];

}reium;

intf(inti)}

/*将偶数i表示为两个素数之和,返回其中/*8.064编写函数将一个NxN的二维数组

较小的素数*/“水平”翻转。

{intn;例如:翻转前的数组翻转后的数组

for(n=3;n<=i;n++)123789

if(primc(i-n)&&primc(r))456-->456

returnn;789123

)*/

/*8.050编写函数,将字符串中ASCH码最voidinvertH(chara[N][N])

小的字符放在第一{inti,j;

个字符位置,其余字符依次往后移。chark;

*/for(i=0;i*2<N;i++)

voidfunc(char*str)for(j=O;j<N;j++)

/*将字符串str中ASCII码最小的字符放在{

第一个*/k=a[i]|j];

产字符位置,其余字符依次往后移。a[inj]=a[N-i-l][j];

*/a[N-i-l](j]=k;

{inti,j,min;

for(min=0,i=1;str[i]!='\0*;i++)

(/*8.067编写函数将一个NxN的二维数组

if(str(minl>str[il)的周边元素"顺时针''轮转1位。

min=i;例如:轮转前的数组轮转后的数组

)123412

j=str[min];456-->753

fbr(i=min-1;i>=0;i")789896

str[i+l]=str[i];*/

str[O]=j;voidturningClockwise(chara[N][N])

}{inti,j,row=0,column=0;

/*8.060编写函数将一个nxn的二维数组按int

“次对角线”翻转。intflag=l;

例如:翻转前的数组翻转后的数组printf("原来的数组:\n");

I23963for(i=0;i<N;i++){

456—>852for(j=0;j<N;j++)

printf("%5d",ali]|j]);的元素按行向右轮转1位。

printf("\n");例如:轮转前的数组轮转后的数组

)123312

(mp=a[01(01;456-->645

a[O][O]=a[l][O];789978

column=1;*/

while(!(row==0&&column==0)){voidtumingRight(chara[N][N])

t=a[rowj[column];{introw,col=N-3,tmp;

a[row][columnl=Imp:printf("原来的数组:\n");

tmp=t;for(row=0;ro\v<N;row++)

if(flag==l){{fcr(col=0;col<N;col++)

if(column!=N-l)pr:ntf("%5d",a[row][col]);

column++;printf("\nu);

else{)

flag++;for(ro\v=0;row<N;row++)

row++;{tmp=a[row][N-l];

)for(col=N-l;col;col")

}clscif(Oag==2){(

if(row!=N-l)a[row][col]=a[row][col-I];

row++;)

else{a[row][col]=tmp;

flag++;)

column--;printf("右移一位后的的数组:\n");

)fnr(row=0;ro\v<N;row++)

}elseif(flag==3){{fcr(col=0;coI<N;col++)

if(column!=0)printf("%5d'\a[row][col]);

columnprintf('\n");

else{)

,

flag++;;prir1tf("\n');

row";}

1voidfunc(chars[],chart[],intn)

}elseif(flag==4){/*数组s的前n个元素存放给定的字符序

if(row!=0)列,

row—;数组(的前n个元素存放s的逆序列。

I注意:数组的下标从0开始。

)*/

printf(”\n顺时针旋转后的数组:W);{inti;

for(i=0;i<N;i++){for(i=0;i<n;i++)

for(j=0;j<N;j++)t[i]=s[n-i-l];

printf("%5d",a[i]|j]);t[i]='\0r;

printf("\n");)

Ivoidfunc(char*s,char*t)

)/*s是给定字符串的起始地址,

/*8.072编写函数将一个NxN的二维数组at是求得s的逆串的起始地址

*/

{inti.n=strlen(s);intmonth_day(intyear,intyearday,int

for(i=0;i<n;i++)*pmonth,int*pday)

*(t+i)=*(s+n-i-l);/*year是年,

Iycarday是天数,

voidfunc(char*sl,char*s2,inin)若year和yearday合理,

{intij;则*pmonth和*pday是计算得出的月和

chart;日,函数返回I;

fbr(i=O;i<*n;i++)否则,函数返回0。

*(s2+i)=*(s1+i);*/

for(j=l;j<n-2;j++){int

fbr(i=1;i<=n-2-j;i++)i,z=0,d1(12]={31,28,31,30,31,30,31,31,30,31,

{if(*(s2+i)<*(s2+i+l))30,31},d2[12]=[31,29,31,30,31,30,31,31,30,3

{t=*(s2+i);130,31);

*(s2+i)=*(s2+i+1);*pinonth=I;

*(s2+i+l)=t;if(year%4==0&&year%100!=0||year%400==0)

{if(l<=ycar&&1<=ycarday&&ycarday<=366

)

{z=l;

对字符串除首尾字符外,将其余字符按if((yearday-31)>0)

ASCII码将序排列{yearday二yearday-31;

voidfunc(char*sl,char*s2)for(i=I;i<=l1;i++)

{intij,n;if(yearday/d2[i]==0)

chart;(

n=strlen(sl);*pmon(h=*pmonth+1;

for(i=0;i<n;i++)break;

*(s2+i)="(sl+i);)

forQ=l;j<n-2;j++)else

fbr(i=I;i<=n-2-j;i++){*pmonth=*pmonth+1;

{if(*(s2+i)<*(s2+i+l))if(yearday-d2[il>0)

{t=*(s2+i);ycarday=ycarday-d2[ij;

*(s2+i)=*(s2+i+1);else

*(s2+i+1)=t;break;

)

)

*pday=yearday;

char*match(char*s,charc)}

/*返回字符在串s中首次出现的位置指针)

*/else

{while(*s!='\0'){if(l<=ycar&&1<=ycarday&&yearday<=

if(*s==c)365)

return(s);{z=l;

elses++;if((yearday-31)>0)

return(NULL);{yearday=yearday-31;

for(i=l;i<=ll;i++)注意:要求在函数中采用指针(而不是

下标)灭处理数组元素。

if(ycarday/d1[i]==O&&ycaiday!=O)*/

({inii,max;

*pmonth=*pmonth+l;max=*s;

break;for(i=0;i<n;i++)

)if(*(s+i)>max)

elsemax=*(s+i);

(returnmax;

*pnionth=*pmonth+1;)

if'(yearday-dl[il!=O)intmin3adj(inl*s,intn)

yearday=yearday-dl[i];/*数组s含n(>=3)个整数,

else返回在s中相邻三个数的和中的最小值。

break;*/

){inti,j;

)intsum[20]={0};intmin=0;

*pday=ycarday;for(i=0;i<n-2;i++)

{

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

return(z);(

}sum[i]+=s[i+j];

longfunc(char*s))

/*s是一个数字字符串的地址,函数返回值)

为由S含有的数字字符转或得到的数(包含sum[i+l]-\0';

正负数情况)min=sum[0|;

*/for(i=0;i<n-2;i++)

{inti,j,k=O,a=l;

longn=0;if(suir.[i]<min)

for。=0;*(s+j)!=10';j++)(

{)min=sum[i];

fbr(i=j-1;i>=0;i—)I

{I

if(*(s+i)>=,0,&&*(s+i)<=*9,)returnmin;

()

n=n+(*(s+i)-,0')*a;/*11.023数组s存储了n个人的信息。写一

a=a*10;函数,求这n个人中年龄最大(即出生日期

}最小)者的姓名。

1*/

if(*s=='j)char*oldest(students[],intn)

n=n*(-l);{inti;

returnn;structstudent*p;

Ip=&s[0];

intHndmax(ints[],intn)for(i=l;i<n;i++)

/*返回s中n(>0)个整数的最大值。{if(s[i].birth.year<(*p).birth.year)

{p=&s[i];continue;]

if(s[i].birth.year==(*p).biith.year){if((*head).birth.year==(*head1).birth.year)

{if(s[i].birth.month<(*p).birth.month)(

{p=&s[il;continue;}if((*head).birth.month<(*hea(ll).birlh.mcnlh)

if(s[i].birth.month==(*p).birth.month){head->next=headl->next;

{if(s[i].birth.day<(*p).birth.day)p=(*head).name;

P=&s[i];I

)else

){

Iif((*hcad).birth.month==(*hcadl).birth.month

retum(p->name);)

}(

/*11.033链表L存储了多个人的信息。写if((*head).birth.day<(*headl).birth.day)

一函数,求这些人中年龄最大{head->next=head1->next;

(即出生日期最小)者的名字。p=(*head).name;

结构体类型定义如下:I

structdatc{intyear;intmonth;intday;};else

〃日期结构体类型{hcad=hcad1;

structstudcntNodc〃链表结点的结p=(*hcad).name;

构体类型)

{charname[10];〃人名}

structdatebirlh;//出生日期else

structstudentNode*next{head二head1;

};p=(*hcad).namc;}

*/}

char*oldcst(structstudcntNodc*L))

/*若L是空表,则返回空指针nullelse

否则返回表中年龄最大者的名字{head=head1;

*/p=(*head).name;|

{intj;)

char*p;if(hcad1->ncxt==0)break;

structstudentNode*headl,*head;)

hcad=L;1

p=(*head).name;else

if(hcad->next!=0){p=(*head).name;}

{return(p);

for(j=l;u++)}

(/*11.063结构体类型定义如下:

headl=head->next;structcourse

if((*hcad).birth.ycar<(*head1).birth.ycar){intcID;〃课程号,取值0〜99

{head->next=head1->next;charnameflO];〃课程名

p=(*head).name;floatcredit;〃学分,取值0~5

)intsemester;//学期,取值1~8

else);

结构体数组c存储了n1课程的信息。写structstudent〃结构体类型

一函数,求学期s的总学分。{charname[10];〃人名

*/structdatebirth;〃出生日期

floatcre(litSum(structcoursec[],intn,ints));

{inti;结构体数组s存储了n个人的名字和出生

floatsum=0;日期。写一函数,由数组s中n个人

for(i=0;i<n;i++)的信息及其顺序构造相应的链表。链表的

if(c[i].semester==s)结点的结构体类型定义如下:

sum=sum+c[il.credit;structstudentNode〃结构体类型

returnsum;{charname!10];〃人名

}structdatebirlh;〃出生日期

/*11.073课程链表结点的结构体类型定义structstudentNode*next

如下:);

structcourseNode,/课程链表结点的*/

结构体类型structstudentNode*CreateLinkList(,$truct

(intcID;//课程号,取值0〜99students[],intn)

charnamellOJ;〃课程名{inti,j=0;

floatcredit;〃学分,取值0~5structstudentNode*hcad;

intsemester;〃学期,取值1~8structstudentNode水pl,水p2;

structcourseNode*next;if(n==0)returnNULL;

};while(j<n)

结构体链表Lc存储了各学期多门课程的{pl=(structstudentNode

信息。写一函数,*)malloc(sizeof(structstudentNode));

求学期s的总学分。if(j=O)hcad=p1;

*/else(*p2).next=pl;

floatcrcditSum(structcourseNode*Lc,ints)p2二pl;

/李若Lc是空表,则返回0;for(i=0;i<IO;i++)

否则返回学期s的总学分(*pl).name[i]=s[j].name[i];

*/(*pI).birth.year=s[jJ.birth.year;

{floatsum=0;(*pl).birth.month=s[j].birth.month:

if(Lc==NULL)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论