index=i;
t=a[index];
a[index]=a[0];
a[0]=t;
index=0;
for(i=1;iif(a[i]>a[index])
index=i;
t=a[index];
a[index]=a[n-1];
a[n-1]=t;
printf("Afterswap:
");
for(i=0;iprintf("%d",a[i]);
printf("\n");
}
return0;
}
7.1.6
输入一个正整数n(1输入输出示例:
括号内为说明
输入
3(repeat=3)
4(n=4)
5176
3(n=3)
123
5(n=5)
54321
输出
Aftersorted:
7651
Aftersorted:
321
Aftersorted:
54321
#include
intmain(void)
{
inti,index,k,n,temp;
intrepeat,ri;
inta[10];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
/*---------*/
for(k=0;kindex=k;
for(i=k+1;iif(a[i]>a[index])
index=i;
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
printf("Aftersorted:
");
for(i=0;iprintf("%d",a[i]);
printf("\n");
}
return0;
}
7.1.7
输入一个正整数n(1输入输出示例:
括号内为说明
输入:
2(repeat=2)
6(n=6)
135795
5(x=5)
4(n=4)
1357
2(x=2)
输出:
5:
a[2]
2:
notfound
#include
intmain(void)
{
intflag,i,n,x;
intrepeat,ri;
inta[10];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
scanf("%d",&x);
/*---------*/
flag=0;
for(i=0;iif(a[i]==x){
flag=1;
break;
}
if(flag!
=0)
printf("%d:
a[%d]\n",x,i);
else
printf("%d:
notfound\n",x);
}
return0;
}
7.2.1
输入2个正整数m和n(1<=m<=6,1<=n<=6),然后输入矩阵a(m行n列)中的元素,分别求出各行元素之和,并输出。
输出使用语句:
printf("sumofrow%dis%d\n",i,sum);
输入输出示例:
括号内为说明
输入:
32(m=3,n=2)
63
1-8
312
输出:
sumofrow0is9
sumofrow1is-7
sumofrow2is15
#include
intmain(void)
{
inti,j,m,n,sum;
inta[6][6];
scanf("%d%d",&m,&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
/*---------*/
for(i=0;isum=0;
for(j=0;jsum=sum+a[i][j];
printf("sumofrow%dis%d\n",i,sum);
}
return0;
}
7.2.2
读入1个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
副对角线为从矩阵的右上角至左下角的连线。
输入输出示例:
括号内为说明
输入:
1(repeat=1)
4(n=4)
2341
5611
7181
1111
sum=35(2+3+4+5+6+7+8=35)
#include"stdio.h"
intmain(void)
{
inti,j,n,sum;
intrepeat,ri;
inta[6][6];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
/*---------*/
sum=0;
for(i=0;ifor(j=0;jif((j==n-1)||(j==n-1-i)||(i==n-1))
sum=sum;
else
sum=sum+a[i][j];
}
printf("sum=%d\n",sum);
}
return0;
}
7.2.3
输入一个正整数n(0提示:
将乘数、被乘数和乘积放入一个二维数组中,再输出该数组。
输入输出示例:
括号内为说明
输入:
1(repeat=1)
3(n=3)
输出:
*123
11
224
3369
#include"stdio.h"
intmain(void)
{
inti,j,n;
inta[10][10];
intrepeat,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
/*---------*
for(j=0;j<=n;j++)
for(i=0;i<=n;i++){
if(i==0)
a[i][j]=j;
elseif(j==0)
a[i][j]=i;
else
a[i][j]=i*j;
}
for(i=0;i<=n;i++){
for(j=0;j<=n;j++)
if(i==0&&j==0)
printf("%-4c",'*');
elseif(i==0||j<=i)printf("%-4d",a[i][j]);
printf("\n");
}
}
return0;
}
7.2.4
输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果a是上三角矩阵,输出"YES",否则,输出"NO"。
上三角矩阵指主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。
输入输出示例:
括号内为说明
输入:
2(repeat=2)
3(n=3)
123
045
006
2(n=2)
10
-82
输出:
YES
NO
#include"stdio.h"
#include"math.h"
intmain(void)
{
intflag,i,j,n;
inta[6][6];
intrepeat,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
/*---------*/
flag=0;
for(i=0;ifor(j=0;jif(i>=j&&a[i][j]==0)
flag=1;
if(flag!
=0)
printf("YES\n");
else
printf("NO\n");
}
return0;
}
7.25
输入日期(年、月、日),输出它是该年的第几天。
要求定义与调用函数day_of_year(year,month,day),计算并返回year(年)、month(月)和day(日)对应的是该年的第几天,函数形参year、month和day的类型是int,函数类型也是int。
输入输出示例:
括号内为说明
输入:
2(repeat=2)
198131(1981年3月1日)
200031(2000年3月1日)
输出:
daysofyear:
60(1981年3月1日是该年的第60天)
daysofyear:
61(2000年3月1日是该年的第61天)
#include"stdio.h"
intmain(void)
{
intday,day_year,month,year;
intrepeat,ri;
intday_of_year(intyear,intmonth,intday);
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d%d",&year,&month,&day);
/*---------*/
day_year=day_of_year(year,month,day);
printf("daysofyear:
%d\n",day_year);
}
return0;
}
/*---------*/
intday_of_year(intyear,intmonth,intday)
{
intk,leap;
inttab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
leap=(year%4==0&&year%100!
=0||year%400==0);
for(k=1;kday=day+tab[leap][k];
returnday;
}
7.26
输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,假设方阵a最多有1个鞍点,如果找到a的鞍点,就输出其下标,否则,输出"NO"。
鞍点的元素值在该行上最大,在该列上最小。
输入输出示例:
括号内为说明
输入:
2(repeat=2)
4(n=4)
1741
4836
1612
0789
2(n=2)
17
41
输出:
a[2][1]=6
NO
#include"stdio.h"
intmain(void)
{
intflag,i,j,k,row,col,n;
inta[6][6];
intrepeat,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
/*---------*/
flag=0;
col=0;
for(i=0;irow=i;
for(j=0;jif(a[i][j]>a[i][col])
col=j;
for(k=0;kif(a[row][col]>a[k][col]){
row=k;
break;
}
if(row==i){
flag=1;
break;
}
}
if(flag!
=0)
printf("a[%d][%d]=%d\n",row,col,a[row][col]);
else
printf("NO\n");
}
}
7.3.1
输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。
如"ABCD"的逆序为"DCBA"。
输入输出示例:
括号内为说明
输入:
Welcometoyou!
输出:
!
uoyotemocleW
#include
intmain(void)
{
inti,j,k,temp;
charstr[80];
i=0;
while((str[i]=getchar())!
='\n')
i++;
str[i]=0;
/*---------*/
k=i-1;
for(i=0;itemp=str[i];
str[i]=str[k];
str[k]=temp;
k--;
}
for(i=0;str[i]!
=0;i++)
putchar(str[i]);
return0;
}
7.3.2
输入一个字符,再输入一个以回车结束的字符串(少于80个字符),在字符串中查找该字符,如果找到,输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"NotFound"。
输入输出示例:
括号内为说明
输入:
2(repeat=2)
m(字符'm')
programming(字符串"programming")
a(字符'a')
1234(字符串"1234")
输出:
index=7('m'在"programming"中对应的最大下标是7)
NotFound("1234"中没有'a')
#include"stdio.h"
#defineMAXLEN80
intmain(void)
{
charcc,ch;
charstr[MAXLEN];
intcount,flag,i,index;
intrepeat,ri;
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++){
cc=getchar();
getchar();
i=0;
while((ch