C语言0529A答案.docx
- 文档编号:30077697
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:18
- 大小:19.06KB
C语言0529A答案.docx
《C语言0529A答案.docx》由会员分享,可在线阅读,更多相关《C语言0529A答案.docx(18页珍藏版)》请在冰豆网上搜索。
C语言0529A答案
一、单项选择题:
(10分,每题2分)
1.char*p[10];该语句声明了一个:
c。
A)指向含有10个元素的一维字符型数组的指针变量p
B)指向长度不超过10的字符串的指针变量p
C)有10个元素的指针数组p,每个元素可以指向一个字符串
D)有10个元素的指针数组p,每个元素存放一个字符串
2.若intx;且有下面的程序片断,则输出结果为:
D。
for(x=3;x<6;x++)
{
printf((x%2)?
"##%d":
"**%d\n",x);
}
A)##3B)**3C)**3D)##3**4
**4##4##4**5##5
##5**5
3.在while(!
x)语句中的!
x与下面条件表达式等价的是:
D。
A)x!
=0B)x==1C)x!
=1D)x==0
4.已知
structpoint
{
intx;
inty;
};
structrect
{
structpointpt1;
structpointpt2;
};
structrectrt;
structrect*rp=&rt;
则下面哪一种引用是不正确的__D______。
A)rt.pt1.xB)(*rp).pt1.x
C)rp->pt1.xD)rt->pt1.x
5.若二维数组a有m行n列,则下面能够正确引用元素a[i][j]的为:
C。
A)*(a+j*n+i)B)*(a+i*n+j)
C)*(*(a+i)+j)D)*(*a+i)+j
CDDDC
二、分析程序并写出运行结果。
(25分,每题5分)
1.
#include
main()
{
intn;
staticchar*monthName[]=
{"Illegalmonth","January","February",
"March","April","May","June","July","August",
"September","October","November","December"};
for(n=1;n<=12;n++)
{
printf("%s\n",monthName[n]);
}
}
运行结果是:
January
February
March
April
May
June
July
August
September
October
November
December
2.
#include
#defineARR_SIZE7
voidYH(inta[][ARR_SIZE],intn);
voidPrintYH(inta[][ARR_SIZE],intn);
main()
{
inta[ARR_SIZE][ARR_SIZE];
YH(a,ARR_SIZE-1);
PrintYH(a,ARR_SIZE-1);
}
voidYH(inta[][ARR_SIZE],intn)
{
inti,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
if(j==1||i==j)
{
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
}
voidPrintYH(inta[][ARR_SIZE],intn)
{
inti,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}
运行结果是:
1
11
121
1331
14641
15101051
3.
#include
main()
{
inti,n;
for(i=1;i<=5;i++)
{
printf("Pleaseentern:
");
scanf("%d",&n);
if(n<=0)continue;
printf("n=%d\n",n);
}
printf("Programisover!
\n");
}
程序运行时输入:
1-23-45↙
运行结果是:
n=1
Pleaseentern:
Pleaseentern:
n=3
Pleaseentern:
Pleaseentern:
n=5
Programisover!
4.
#include
voidFunc(intn);
main()
{
inti;
for(i=0;i<2;i++)
{
Func(i);
}
}
voidFunc(intn)
{
staticintt=1;
printf("t=%d\n",t++);
}
运行结果是:
t=1
t=2
5.
#include
intFunc(inti);
main()
{
inti;
for(i=3;i<5;i++)
{
printf("%d",Func(i));
}
printf("\n");
}
intFunc(inti)
{
staticintk=10;
for(;i>0;i--)
{
k++;
}
return(k);
}
运行结果是:
1317
三、阅读并完成程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
(20分,每空2分)
1.下面程序用于读入10个字符串,然后找出最大的字符串并打印。
#include
#include
main()
{
charstr[10][80],maxstring[80];
inti;
printf("Entertenstrings:
\n");
for(i=0;i<10;i++)
{
scanf("%s",str[i]);
}
strcpy(maxstring,str[0]);
for(i=1;i<10;i++)
{
if(strcmp(maxstring,str[i])<0)或strcmp(str[i],maxstring)>0
{
strcpy(maxstring,str[i]);
}
}
printf("Themaxstringis:
%s\n",maxstring);
}
2.下面这个程序用于交换两个数组的对应元素的值。
#include
#defineARRAY_SIZE10
voidSwap(int*x,int*y);
voidExchange(inta[],intb[],intn);
voidInputArray(inta[],intn);
voidPrintArray(inta[],intn);
main()
{
inta[ARRAY_SIZE],b[ARRAY_SIZE],n;
printf("Inputarraylenthn<=10:
");
scanf("%d",&n);
printf("Inputarraya:
\n");
InputArray(a,n);
printf("Inputarrayb:
\n");
InputArray(b,n);
Exchange(a,b,n);
printf("Afterswap:
\n");
printf("Arraya:
\n");
PrintArray(a,n);
printf("Arrayb:
\n");
PrintArray(b,n);
}
voidSwap(int*x,int*y)
{
inttemp;
temp=*x;
*x=*y;
*y=temp;
}
voidExchange(inta[],intb[],intn)
{
inti;
for(i=0;i { Swap(&a[i],&b[i]); } } voidInputArray(inta[],intn) { inti; for(i=0;i { scanf("%d",&a[i]); } } voidPrintArray(inta[],intn) { inti; for(i=0;i { printf("%d",a[i]); } printf("\n"); } 3.从键盘任意输入一个年号,判断它是否是闰年。 若是闰年,输出"Yes",否则输出"No"。 已知符合下列条件之一者是闰年: 能被4整除,但不能被100整除。 能被400整除。 #include main() { intyear,flag; printf("Enteryear: "); scanf("%d",&year); if(year%4==0&&year%100! =0||year%400==0) { flag=1; } else { flag=0; } if(flag) { printf("Yes! \n"); } else { printf("No! \n"); } } 四、在下面给出的4个程序中,共有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。 (在错误的代码下边画一根横线,把正确的代码写在旁边;漏掉的代码正确插入合适的位置。 30分,每找对1个错误,加1分,每修改正确1个错误,再加1分。 ) 1.编程计算矩阵相乘之积。 #include #defineROW2 #defineCOL3 //voidMultiplyMatrix(inta[ROW][COL],intb[COL][ROW],intc[ROW][ROW]); main() { inta[ROW][COL],b[COL][ROW],c[ROW][ROW],i,j; printf("Inputarraya: \n"); for(i=0;i { for(j=0;j { scanf("d",&a[i][j]);//%d } } printf("Inputarrayb: \n"); for(i=0;i { for(j=0;j { scanf("d",&b[i][j]); } } MultiplyMatrix(a,b,c); printf("Results: \n"); for(i=0;i { for(j=0;j { printf("%6d",&c[i][j]);//c[i][j] } printf("\n"); } } voidMultiplyMatrix(inta[ROW][COL],intb[COL][ROW],intc[ROW][ROW]) { inti,j,k; for(i=0;i { for(j=0;j { for(k=0;k {//c[i][j]=0; c[i][j]=c[i][j]+a[i][k]*b[j][k];//b[k][j] } } } } 2.编程输入10个数,找出其中的最大值及其所在的数组下标位置。 #include intFindMax(intnum[],intn,int*pMaxPos); main() { intnum[10],maxValue,maxPos,minValue,minPos,i//; printf("Input10numbers: \n"); for(i=0;i<10;i++) { scanf("%d",num[i]);//&num[i] } maxValue=FindMax(num,10,*maxPos);//&maxPos printf("Max=%d,Position=%d\n",maxValue,maxPos); } intFindMax(intnum[],intn,int*pMaxPos) { inti,max; max=num[0]; for(i=1,i { if(num[i]>max) { max=num[i]; *pMaxPos=i; } } returnmax; } 3.韩信点兵。 韩信有一队兵,他想知道有多少人,便让士兵排队报数: 按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。 你知道韩信至少有多少兵吗? #include main() { intx;//x=0 while (1) { if(x%5=1&&x%6=5&&x%7=4&&x%11=10) //x%5==1&&x%6==5&&x%7==4&&x%11==10 { break; } x++//x++; } printf("x=%d\n",x); } 4.下面函数Squeez()的功能是删除字符串s中所出现的与变量c相同的字符。 voidSqueeze(chars[],charc);//voidSqueeze(chars[],charc) { inti,j; //j=0; for(i=0;s[i]! ='\0';i++) { if(s[i]! ='c')//c { s[j]=s[i]; j++; } s[i]='\0';//s[j]='\0'; }或//s[j]='\0'; } 五、编程(15分) 从键盘任意输入某班10个学生的成绩,调用save函数把数据存入到以你的学号命名的磁盘文件中,然后打开该文件读出数据,对成绩进行由高到低的排序,并打印成绩不及格的学生人数。 最后再次调用save函数把数据存入到原磁盘文件中。 要求按照如下给出的函数原型进行编程: voidsave(floatscore[],intn); voidSort(floatscore[],intn); intFail(floatscore[],intn); 要求用一维数组做函数参数编程实现成绩排序和统计成绩不及格的学生人数,然后在主函数中打印这些结果,不能使用全局变量编程。 参考程序如下: voidload(floatscore[],intn)//3分 {FILE*fp; inti; if((fp=fopen(02406101","rb"))==NULL) {printf("cannotopeninfile\n"); return;} for(i=0;i if(fread(&score[i],sizeof(float),1,fp)! =1) {if(feof(fp)){fclose(fp);return;} printf("filereaderror\n"); } fclose(fp); } voidsave(floatscore[],intn)//3分 {FILE*fp; inti; if((fp=fopen("02406101","wb"))==NULL) {printf("cannotopenfile\n"); return; } for(i=0;i if(fwrite(&score[i],sizeof(float),1,fp)! =1) printf("filewriteerror\n"); fclose(fp); } voidsort(floatscore[],intn)//3分 {inti,j,k; floatt; for(i=0;i {k=i; for(j=i+1;j if(score[j] k=j; t=score[k];score[k]=score[i];score[i]=t;} } intFail(floatscore[],intn)//3分 {inti,k=0; for(i=0;i if(score[i]<60)k++; returnk; } voidmain()//3分 {inti; floatscore[10]; for(i=0;i<10;i++) scanf("%f",&score[i]); save(score,10); load(score,10); sort(score,10); printf("TheFailnumberis%d",Fail(score,10)); save(score,10); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 0529 答案