- 谭浩强《C程序设计》(第4版)配套题库【考研真题精选+章节题库】
- 圣才电子书
- 532字
- 2024-12-21 10:33:14
二、综合应用题
1对于下列for循环语句,请将其改写为功能完全相同的while循环语句。[北京航空航天大学2018研]
int i,j,count=0;
for(i=0;i<100;i++)
{
for(j=100;j>=i;j-=2)
{
count+=j-i;
}
}
【答案】此题可以在定义时先令i=0,j=100,在第一层while循环时只需判断i<100即可,在第二层while循环时只需判断j>=i即可,j-=2放在内层循环体中即可,具体程序如下:
int i=0, j=100, count=0;
while(i<100)
{
while(j>=i)
{
count+=j-i;
j-=2;
}
i++;
}
2输入一个字符,判别它是否为大写字母,如果是,将它变为小写字母;如果不是,不转换。然后输出最后得到的字符。请在下面空白处填上适当语句。[华南理工大学2018研]
#include<stdio.h>
int main()
{
char ch;
scanf("%c", ① );
ch=(ch>='A'&& ② )?(ch+32): ③ ;
printf( ④ ,ch);
return ⑤ ;
}
【答案】
①&ch
②ch<='Z'
③ch
④"%c"
⑤0
【解析】程序进行输入时要加上地址符&;main函数中的第三行为一个三目运算符,当ch在A~Z之间时ch为真,此时ch+32变为小写字母,否则不变;程序进行输出时应用%加上数据类型进行输出,最后用return 0来结束程序。
3有一个分数序列
求这个数列的前20项之和。请在下面空白处填上适当语句。[华南理工大学2018研]
int main()
{
int i,n=20;
double a=2,b=1,s=0,t;
for(i=1; ① ;i++)
{
s= ② ;
③ ;
a=a+b;
④ ;
}
printf("sum=%16.10f\n", ⑤ );
return 0;
}
【答案】
①i<=n
②s+a/b
③t=a
④b=t
⑤s
【解析】此程序循环是从=1开始,所以要计算数列前20项,则循环条件应为i<=n;s用来累加求和,所以每次进行累加操作,即s=s+a/b;通过分析数列可知,数列中分子是上一项的分子分母之和,而分母是上一项的分子,依照此关系可以通过中间变量t进行换算,最后输出所求结果s。
4从键盘输入10个整数,编程求其中大于3且小于100的数的平均值并输出结果。[华南理工大学2018研]
【答案】此题可以先利用循环从屏幕读取10个数,存放在一个一位数组中,然后循环判断大于3且小于100的数,最后取平均值进行输出,程序如下:
#include<stdio.h>
void main()
{
int num[10],s=0,n=10;
printf("input 10 numbers:");
for(int i=0;i<10;i++)
{
scanf("%d",&num[i]);
if(num[i]<=3||num[i]>=100)
{
num[i]=0;
n--;
}
s+=num[i];
}
if(n==0)
printf("no exist!");
else
printf("%d\n",s/n);
}
5编程求100~200间的全部素数。[华南理工大学2018研]
【答案】素数意思是只能被1和本身整除,因此将1到本身之间的数做除数,进行求余,如果余数为0,则不是素数,否则是素数。根据经验,假设所要判断的数为n,则一般只需要判断1到根号n之间的数即可,具体程序如下:
#include<stdio.h>
#include<math.h>
void main()
{ int i,j,count;
for(i=100;i<=200;i++)
{
count=0;
for(j=2;j<sqrt(i);j++)
{
if(i%j==0)
count++;
}
if(count==0)
printf("%d 是素数!\n",i);
}
}
6有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,如图4-8所示。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。[四川大学2017研]
【答案】N-S图如图1-1所示。
图1-1 计算某点建筑高度的N-S流程图
程序如下:
#include<stdio.h>
int main()
{
int h=10;
float x1=2,y1=2,x2=-2,y2=-2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
printf("请输入一个点(x,y):");
scanf("%f,%f",&x,&y);
d1=(x-x4)*(x-x4)+(y-y4)*(y-y4); //求该点到各中心点距离
d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);
d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);
d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);
if(d1>1&&d2>1&&d3>1&&d4>1) h=0; //判断该点是否在塔外
printf("该点高度为%d\n",h);
return 0;
}
7从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以“!”结束。[四川大学2017研]
【答案】本题先利用循环逐个读入所输入的字符,同时判断所输入字符是否为“!”,若是则停止输入,结束程序;若不是,则判断该字符是否是小写字母,若是则转换为大写字母,最后写入文件text中,具体程序如下:
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char ch;
fp=fopen("text.txt","w+");
if(fp == NULL)
{
printf("Cannot open file strike any key exit!");
exit(1);
}
printf("input the string:");
while(1)
{
scanf("%c",&ch);
if(ch=='!') break;
if(ch>='a'&&ch<='z')
ch-=32;
fprintf(fp,"%c",ch);
}
fclose(fp);
}