printf("max(%d,%d,%d)=%d\n",a,b,c,max_a(a,b,c));
printf("max(%d,%d,%d)=%d\n",a,b,c,max_b(a,b,c));
printf("max(%d,%d,%d)=%d\n",a,b,c,max_c(a,b,c));
}
6.022n是系统给定的外部变量,编写程序求1到n间的
自然数之和。
请定义局部变量s存放求和的结果,并用
下列语句输出结果
printf("1+2+...+n=%d\n",s);
**********/
voidmain()
{ints;
/*请添加相关说明和语句*/
inti;
for(i=1;i<=n;i++)
s+=i;
printf("1+2+...+n=%d\n",s);/*注意:
不要修改此输出语句*/
}
6.026n和s是系统给定的外部整型变量(不需要自行定义),
编写程序求1到n之间的奇数之和,并将结果存放到s。
**********/
voidmain()
{inti;
for(i=1;i<=n;i++)
if(i%2!
=0)
s+=i;
}
6.040m,n和s是系统定义的外部整型变量(不需要自行定义),
编写程序,根据m的值求满足1+2+...+n>=m的最小n,并将
1+2+...+n的结果存放到s。
例如,若m=50,则n=10,s=55。
**********/
voidmain()
{inti;
for(i=1;s{s+=i;
n=i;
}
}
/**********
6.051n和s是系统给定的外部整型变量(不需要自行定义),
编写程序求1-1/2+1/3-1/4+...1/n,并将结果存放到s。
**********/
voidmain()
{
//intsign=1;
//floatdeno=2.0,term;
//s=1.0;
//while(deno<=n)
//{
//sign=-sign;
//term=sign/deno;
//s=s+term;
//deno=deno+1;
//}
//printf("%f\n",s);
inti=1,flag=1;
s=0.0;
while(i<=n)
{
s+=1.0/i++*flag;
flag*=-1;
}
printf("s=%f\n",s);
}
intmin(intx,inty,intz)
/*返回3个整数x,y和z中最小的数*/
{
intt;
t=xx:
y;
return(tt:
z);
}
/*8.020编写函数,求用1元、5元和10元三种纸币支付n元钱
共有多少种支付方法?
例如,16元可有6种支付方法:
方法123456
10元000011
5元012301
1元16116161
*/
intchange(intn)
{inti,j,k;
intsum=0;
printf("\t1元\t5元\t10元\n");
for(i=0;i<=n;i++)
for(j=0;j<=n/5;j++)
for(k=0;k<=n/10;k++)
if(n==(i+5*j+10*k))
{sum=sum+1;
printf("%-d",sum);
printf("\t%-d\t%-d\t%-d\n",i,j,k);
}
printf("\n");
return(sum);
}
/*8.030先编写一个判断素数的函数。
再编写一个函数将一个
偶数表示为两个素数之和,并返回其中较小的素数。
注:
素数指只能被1和自身整除的正整数。
规定0,1不是素数。
*/
intprime(intn)
/*判断素数,如果是素数返回1,不是素数则返回0*/
{intt;
if(n==1)
return0;
for(t=2;t<=(n/2);t++)
if(n%t==0)
return0;
return1;
}
intf(inti)
/*将偶数i表示为两个素数之和,返回其中较小的素数*/
{intn;
for(n=3;n<=i;n++)
if(prime(i-n)&&prime(n))
returnn;
}
/*8.050编写函数,将字符串中ASCII码最小的字符放在第一
个字符位置,其余字符依次往后移。
*/
voidfunc(char*str)
/*将字符串str中ASCII码最小的字符放在第一个*/
/*字符位置,其余字符依次往后移。
*/
{inti,j,min;
for(min=0,i=1;str[i]!
='\0';i++)
{
if(str[min]>str[i])
min=i;
}
j=str[min];
for(i=min-1;i>=0;i--)
str[i+1]=str[i];
str[0]=j;
}
/*8.060编写函数将一个nxn的二维数组按“次对角线”翻转。
例如:
翻转前的数组翻转后的数组
123963
456--->852
789741
*/
voidinvert(chara[N][N])
{inti,j,b[20][20];
for(i=0;ifor(j=0;jb[i][j]=a[N-1-j][N-1-i];
for(i=0;ifor(j=0;ja[i][j]=b[i][j];
return;
}
/*8.064编写函数将一个NxN的二维数组“水平”翻转。
例如:
翻转前的数组翻转后的数组
123789
456--->456
789123
*/
voidinvertH(chara[N][N])
{inti,j;
chark;
for(i=0;i*2for(j=0;j{
k=a[i][j];
a[i][j]=a[N-i-1][j];
a[N-i-1][j]=k;
}
}
/*8.067编写函数将一个NxN的二维数组的周边元素“顺时针”轮转1位。
例如:
轮转前的数组轮转后的数组
123412
456--->753
789896
*/
voidturningClockwise(chara[N][N])
{inti,j,row=0,column=0;
inttmp,t;
intflag=1;
printf("原来的数组:
\n");
for(i=0;ifor(j=0;jprintf("%5d",a[i][j]);
printf("\n");
}
tmp=a[0][0];
a[0][0]=a[1][0];
column=1;
while(!
(row==0&&column==0)){
t=a[row][column];
a[row][column]=tmp;
tmp=t;
if(flag==1){
if(column!
=N-1)
column++;
else{
flag++;
row++;
}
}elseif(flag==2){
if(row!
=N-1)
row++;
else{
flag++;
column--;
}
}elseif(flag==3){
if(column!
=0)
column--;
else{
flag++;;
row--;
}
}elseif(flag==4){
if(row!
=0)
row--;
}
}
printf("\n顺时针旋转后的数组:
\n");
for(i=0;ifor(j=0;jprintf("%5d",a[i][j]);
printf("\n");
}
}
/*8.072编写函数将一个NxN的二维数组a的元素按行向右轮转1位。
例如:
轮转前的数组轮转后的数组
123312
456--->645
789978
*/
voidturningRight(chara[N][N])
{introw,col=N-3,tmp;
printf("原来的数组:
\n");
for(row=0;row{for(col=0;colprintf("%5d",a[row][col]);
printf("\n");
}
for(row=0;row{tmp=a[row][N-1];
for(col=N-1;col;col--)
{
a[row][col]=a[row][col-1];
}
a[row][col]=tmp;
}
printf("右移一位后的的数组:
\n");
for(row=0;row{for(col=0;colprintf("%5d",a[row][col]);
printf("\n");
}
printf("\n");
}
voidfunc(chars[],chart[],intn)
/*数组s的前n个元素存放给定的字符序列,
数组t的前n个元素存放s的逆序列。
注意:
数组的下标从0开始。
*/
{inti;
for(i=0;it[i]=s[n-i-1];
t[i]='\0';
}
voidfunc(char*s,char*t)
/*s是给定字符串的起始地址,
t是求得s的逆串的起始地址
*/
{inti,n=strlen(s);
for(i=0;i*(t+i)=*(s+n-i-1);
}
voidfunc(char*s1,char*s2,intn)
{inti,j;
chart;
for(i=0;i*(s2+i)=*(s1+i);
for(j=1;jfor(i=1;i<=n-2-j;i++)
{if(*(s2+i)<*(s2+i+1))
{t=*(s2+i);
*(s2+i)=*(s2+i+1);
*(s2+i+1)=t;
}
}
}
对字符串除首尾字符外,将其余字符按ASCII码将序排列
voidfunc(char*s1,char*s2)
{inti,j,n;
chart;
n=strlen(s1);
for(i=0;i*(s2+i)=*(s1+i);
for(j=1;jfor(i=1;i<=n-2-j;i++)
{if(*(s2+i)<*(s2+i+1))
{t=*(s2+i);
*(s2+i)=*(s2+i+1);
*(s2+i+1)=t;
}
}
}
char*match(char*s,charc)
/*返回字符在串s中首次出现的位置指针*/
{while(*s!
='\0')
if(*s==c)
return(s);
elses++;
return(NULL);
}
intmonth_day(intyear,intyearday,int*pmonth,int*pday)
/*year是年,
yearday是天数,
若year和yearday合理,
则*pmonth和*pday是计算得出的月和日,函数返回1;
否则,函数返回0。
*/
{inti,z=0,d1[12]={31,28,31,30,31,30,31,31,30,31,30,31},d2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
*pmonth=1;if(year%4==0&&year%100!
=0||year%400==0){if(1<=year&&1<=yearday&&yearday<=366)
{z=1;
if((yearday-31)>0)
{yearday=yearday-31;
for(i=1;i<=11;i++)
if(yearday/d2[i]==0)
{
*pmonth=*pmonth+1;
break;
}
else
{*pmonth=*pmonth+1;
if(yearday-d2[i]>0)
yearday=yearday-d2[i];
else
break;
}
}
*pday=yearday;
}
}
else
{if(1<=year&&1<=yearday&&yearday<=365)
{z=1;
if((yearday-31)>0)
{yearday=yearday-31;
for(i=1;i<=11;i++)
if(yearday/d1[i]==0&&yearday!
=0)
{
*pmonth=*pmonth+1;
break;
}
else
{
*pmonth=*pmonth+1;
if(yearday-d1[i]!
=0)
yearday=yearday-d1[i];
else
break;
}
}
*pday=yearday;
}
}
return(z);
}
longfunc(char*s)
/*s是一个数字字符串的地址,函数返回值为由s含有的数字字符转换得到的数(包含正负数情况)
*/
{inti,j,k=0,a=1;
longn=0;
for(j=0;*(s+j)!
='\0';j++)
{}
for(i=j-1;i>=0;i--)
{
if(*(s+i)>='0'&&*(s+i)<='9')
{
n=n+(*(s+i)-'0')*a;
a=a*10;
}
}
if(*s=='-')
n=n*(-1);
returnn;
}
intfindmax(ints[],intn)
/*返回s中n(>0)个整数的最大值。
注意:
要求在函数中采用指针(而不是下标)来处理数组元素。
*/
{inti,max;
max=*s;
for(i=0;iif(*(s+i)>max)
max=*(s+i);
returnmax;
}
intmin3adj(int*s,intn)
/*数组s含n(>=3)个整数,
返回在s中相邻三个数的和中的最小值。
*/
{inti,j;
intsum[20]={0};intmin=0;
for(i=0;i{
for(j=0;j<3;j++)
{
sum[i]+=s[i+j];
}
}
sum[i+1]='\0';
min=sum[0];
for(i=0;i{
if(sum[i]{
min=sum[i];
}
}
returnmin;
}
/*11.023数组s存储了n个人的信息。
写一函数,求这n个人中年龄最大(即出生日期最小)者的姓名。
*/
char*oldest(students[],intn)
{inti;
structstudent*p;
p=&s[0];
for(i=1;i{if(s[i].birth.year<(*p).birth.year)
{p=&s[i];continue;}
if(s[i].birth.year==(*p).birth.year)
{if(s[i].birth.month<(*p).birth.month)
{p=&s[i];continue;}
if(s[i].birth.month==(*p).birth.month)
{if(s[i].birth.day<(*p).birth.day)
p=&s[i];
}
}
}
return(p->name);
}
/*11.033链表L存储了多个人的信息。
写一函数,求这些人中年龄最大
(即出生日期最小)者的名字。
结构体类型定义如下:
structdate{intyear;intmonth;intday;};//日期结构体类型
structstudentNode//链表结点的结构体类型
{charname[10];//人名
structdatebirth;//出生日期
structstudentNode*next
};
*/
char*oldest(structstudentNode*L)
/*若L是空表,则返回空指针null
否则返回表中年龄最大者的名字
*/
{intj;
char*p;
structstudentNode*head1,*head;
head=L;
p=(*head).name;
if(head->next!
=0)
{
for(j=1;;j++)
{
head1=head->next;
if((*head).birth.year<(*head1).birth.year)
{head->next=head1->next;
p=(*head).name;
}
else
{if((*head).birth.year==(*head1).birth.year)
{
if((*head).birth.month<(*head1).birth.month)
{head->next=head1->next;
p=(*head).name;
}
else
{
if((*head).birth.month==(*head1).birth.month)
{
if((*head).birth.day<(*head1).birth.day)
{head->next=head1->next;
p=(*head).name;
}
else
{head=head1;
p=(*head).name;
}
}
else
{head=head1;
p=(*head).name;}
}
}
else
{head=head1;
p=(*head).name;}
}
if(head1->next==0)break;
}
}
else
{p=(*head).name;}
return(p);
}
/*11.063结构体类型定义如下:
structcourse
{intcID;//课程号,取值0~99
charname[10];//课程名
floatcredit;//学分,取值0~5
intsemester;//学期,取值1~8
};
结构体数组c存储了n门课程的信息。
写一函数,求学期s的总学分。
*/
floatcreditSum(structcoursec[],intn,ints)
{inti;
floatsum=0;
for(i=0;iif(c[i].semester==s)
sum=sum+c[i].credit;
returnsum;
}
/*11.073课程链表结点的结构体类型定义如下:
structcourseNode//课程链表结点的结构体类型
{intcID;//课程号,取值0~99
charname[10];//课程名
floatcredit;//学分,取值0~5
intsemester;//学期,取值1~8
structcourseNode*next;
};
结构体链表Lc存储了各学期多门课程的信息。
写一函数,
求学期s的总学分。
*/
floatcreditSum(structcourseNode*Lc,ints)
/*若Lc是空表,则返回0;