浙江大学城市学院程序设计II上机答案.docx
《浙江大学城市学院程序设计II上机答案.docx》由会员分享,可在线阅读,更多相关《浙江大学城市学院程序设计II上机答案.docx(22页珍藏版)》请在冰豆网上搜索。
![浙江大学城市学院程序设计II上机答案.docx](https://file1.bdocx.com/fileroot1/2022-11/25/e7d8c2ec-73f0-435c-ae77-d83eb2b9ea26/e7d8c2ec-73f0-435c-ae77-d83eb2b9ea261.gif)
浙江大学城市学院程序设计II上机答案
浙江大学城市学院程序设计II上机答案
7.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<stdio.h>
intmain(void)
{
inti,j,m,n,sum;
inta[6][6];
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++){
sum=0;
for(j=0;j<n;j++)
sum=sum+a[i][j];
printf("sumofrow%dis%d\n",i,sum);
}
/*---------*/
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入两个正整数m和n(m≥1,n≤6),
然后输入该m行n列二维数组a中的元素,
将该二维数组a中的每个元素向右移一列,
最后一列换到第一列,移动后的数组存到另一二维数组b中,按矩阵形式输出b。
输入输出示例:
括号内为说明
输入:
23(m=2,n=3)
456
123
输出:
Newarray:
645
312
*/
#include<stdio.h>
intmain(void)
{
inta[6][6],b[6][6],i,j,m,n;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
b[i][0]=a[i][n-1];
for(i=0;i<m;i++)
for(j=0;j<n-1;j++)
b[i][j+1]=a[i][j];
/*---------*/
printf("Newarray:
\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%4d",b[i][j]);
printf("\n");
}
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
读入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;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
sum=0;
for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
if(i+j!
=n-1)
sum=sum+a[i][j];
/*---------*/
printf("sum=%d\n",sum);
}
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
输入一个正整数n(0<n<10),输出九九乘法表的前n×n项。
提示:
将乘数、被乘数和乘积放入一个二维数组中,再输出该数组。
输入输出示例:
括号内为说明
输入:
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(i=0;i<=n;i++)
for(j=0;j<=n;j++)
a[i][j]=i*j;
for(i=0;i<=n;i++)
a[i][0]=i;
for(j=0;j<=n;j++)
a[0][j]=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;
}
/*
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
输入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>
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;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
/*---------*/
flag=1;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
if(a[i][j]!
=0)
flag=0;
if(flag!
=0)printf("YES\n");
elseprintf("NO\n");
}
return0;
}
/*
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
输入日期(年、月、日),输出它是该年的第几天。
要求定义与调用函数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)
{
inti,days=0;
intmon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(year%400==0||year%4==0&&year%100!
=0)
days++;
for(i=0;i<month-1;i++)
days=days+mon[i];
days=days+day;
returndays;
}
/*程序填空,不要改变与输入输出有关的语句。
下面是一个特殊的5阶方阵。
输入1个正整数n(n≤6),输出如此形式的n阶的方阵(顺时针方向旋进)。
12345
160006
150007
140008
131211109
输入输出示例:
括号内为说明
输入:
5(n=5)
输出:
12345
160006
150007
140008
131211109
*/
#include<stdio.h>
intmain(void)
{
inta[10][10],i,j,n,k=0;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
for(j=0;j<n;j++)
{
k++;
a[0][j]=k;
}
for(i=1;i<n;i++)
{
k++;
a[i][n-1]=k;
}
for(j=n-2;j>=0;j--)
{
k++;
a[n-1][j]=k;
}
for(i=n-2;i>0;i--)
{
k++;
a[i][0]=k;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
输入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;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
row=col=0;
for(row=0;row<n;row++){
for(col=0;col<n;col++){
flag=1;
for(j=0;j<n;j++){
if(a[row][j]>a[row][col]){
flag=0;
break;
}
}
for(i=0;i<n;i++){
if(a[i][col]<a[row][col]){
flag=0;
break;
}
}
if(flag==1)
{
break;
}
}
if(flag==1){
break;
}
}
/*---------*/
if(flag!
=0)
printf("a[%d][%d]=%d\n",row,col,a[row][col]);
else
printf("NO\n");
}
return0;
}
7.3
/*程序填空,不要改变与输入输出有关的语句。
输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。
如"ABCD"的逆序为"DCBA"。
输入输出示例:
括号内为说明
输入:
Welcometoyou!
输出:
!
uoyotemocleW
*/
#include<stdio.h>
intmain(void)
{
inti,k,temp;
charstr[80];
i=0;
while((str[i]=getchar())!
='\n')
i++;
str[i]=0;
k=i-1;
i=0;
while(i<k)
{
temp=str[i];
str[i]=str[k];
str[k]=temp;
k--;
i++;
}
/*---------*/
for(i=0;str[i]!
=0;i++)
putchar(str[i]);
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入一个以回车结束的字符串(少于80个字符),把字符串中的所有数字字符('0'~'9')转换为整数,去掉其他字符。
例如,字符串“3a56bc”转换为整数后是356。
输入输出示例:
括号内为说明
输入:
free82jeep5
输出:
825
*/
#include<stdio.h>
intmain(void)
{
inti,s;
charstr[80];
i=0;
while((str[i]=getchar())!
='\n')
i++;
str[i]='\0';
s=0;
for(i=0;str[i]!
='\0';i++)
if(str[i]<='9'&&str[i]>='0')
s=s*10+(str[i]-'0');
/*---------*/
printf("%d\n",s);
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
输入一个字符,再输入一个以回车结束的字符串(少于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=getchar())!
='\n'){
str[i++]=ch;
}
str[i]=0;
flag=0;
i=0;
while(str[i]!
=0)
{
if(cc==str[i])
{
flag=1;
index=i;
}
i++;
}
/*---------*/
if(flag!
=0)
printf("index=%d\n",index);
else
printf("NotFound\n");
}
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
输入一个以回车结束的字符串(少于80个字符),
统计并输出其中大写辅音字母的个数。
大写辅音字母:
除'A','E','I','O','U'以外的大写字母。
输入输出示例:
括号内为说明
输入:
2(repeat=2)
HELLO
group
输出:
count=3("HELLO"中有3个大写辅音字母)
count=0("group"中没有大写辅音字母)
*/
#include<stdio.h>
#defineMAXLEN80
intmain(void)
{
charch;
charstr[MAXLEN];
intcount,i;
intrepeat,ri;
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++){
i=0;
while((ch=getchar())!
='\n'){
str[i++]=ch;
}
str[i]=0;
count=0;
i=0;
while(str[i]!
=0)
{
if(str[i]!
='A'&&str[i]!
='E'&&str[i]!
='I'&&str[i]!
='O'&&str[i]!
='U'&&str[i]>='A'&&str[i]<='Z')
count++;
i++;
}
/*---------*/
printf("count=%d\n",count);
}
return0;
}
/*程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0<repeat<10),做repeat次下列运算:
输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串。
原字母对应字母
AZ
BY
CX
DW
……
XC
YB
ZA
输入输出示例:
括号内为说明
输入:
2(repeat=2)
AflagofUSA
1+2=3
输出:
Afterreplaced:
ZflagofFHZ
Afterreplaced:
1+2=3
*/
#include<stdio.h>
#include<string.h>
#defineMAXLEN80