上机程序调试及程序设计练习 2Word文件下载.docx
《上机程序调试及程序设计练习 2Word文件下载.docx》由会员分享,可在线阅读,更多相关《上机程序调试及程序设计练习 2Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。
![上机程序调试及程序设计练习 2Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/14/f0730dcc-0cac-479c-a426-de2efa210e20/f0730dcc-0cac-479c-a426-de2efa210e201.gif)
例如:
"
a"
变成"
f"
,"
w"
b"
。
{charc;
c=getchar();
if(______1______)//c>
a'
&
c<
u'
c=c+5;
else
if(c>
v'
&
c<
z'
______2______//c=(c-'
+5)%26+'
putchar(c);
(4)将字符串s中所有的字符'
c'
删除。
{chars[80];
inti,j;
gets(s);
for(i=j=0;
______1______;
i++)//s[i]!
='
if(s[i]!
{s[j]=s[i];
______2______//j++;
s[j]='
puts(s);
(5)对x=1,2,……,10,求f(x)=x*x-5*x+sin(x)的最大值。
math.h>
#definef(x)x*x-5*x+sin(x)
{intx;
floatmax;
______1______//max=f
(1);
for(x=2;
x<
=10;
x++)
______2______//if(f(x)>
max)max=f(x);
%f\n"
max);
(6)输入三个整数,按由小到大的顺序输出这三个数。
voidswap(______1______)//int*pa,int*pb
{/*交换两个数的位置*/
inttemp;
temp=*pa;
*pa=*pb;
*pb=temp;
{inta,b,c,temp;
scanf("
%d%d%d"
&
a,&
b,&
c);
if(a>
b)
swap(&
b);
if(b>
c)
if(______2______)//if(a>
b)
%d,%d,%d"
a,b,c);
(7)调用函数f,去除数组中的负数,输入数组x[7],输出结果为:
1346
//数组元素的删除
voidf(int*a,int*m)
{inti,j;
for(i=0;
i<
*m;
i++)
if(a[i]<
0){
for(j=i--;
j<
*m-1;
j++)a[j]=a[j+1];
_____1_____;
//*m=*m-1;
{inti,n=7,x[7]={1,-2,3,4,-5,6,-7};
_______2_______;
//f(x,&
n);
n;
i++)printf("
%5d"
x[i]);
\n"
);
(8)调用函数f计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时的值。
floatf(float,float*,int);
{floatb[5]={1.1,2.2,3.3,4.4,5.5};
f(1.7,b,5));
floatf(_______1________)//floatx,float*a,intn
{floaty=a[0],t=1;
inti;
for(i=1;
i<
i++){t=t*x;
y=y+a[i]*t;
_____2_____//returny;
(9)分别统计字符串中英文字母、数字、和其他字符出现的次数。
intn[3]={0},i;
gets(a);
________1________//for(i=0;
a[i]!
i++)
{if(tolower(a[i])>
tolower(a[i])<
)/*统计字母个数*/
n[0]++;
elseif(________2________)/*统计数字个数*///a[i]>
0'
a[i]<
9'
n[1]++;
n[2]++;
%d\n"
n[i]);
(10)将输入的十进制整数n通过函数DtoH函数转换为十六进制数,并将转换结果以字符串形式输出。
(例如:
输入十进制数79,将输出十六进制4f。
#include<
chartrans(intx)
{
if(x<
10)return'
+x;
else_______1________//return'
+x-10;
intDtoH(intn,char*str)
inti=0;
while(n!
=0)
________2________//str[i]=trans(n%16);
n/=16;
i++;
}
returni-1;
inti,k,n;
char*str;
scanf("
n);
k=DtoH(n,str);
for(i=0;
=k;
%c"
str[k-i]);
(11)将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。
voidDec2Bin(intm)
intbin[32],j;
for(j=0;
m!
=0;
j++)
bin[j]=______1______;
//m%2
m=m/2;
for(;
j!
j--)
______2______);
//bin[j-1]
intn;
Dec2Bin(n);
(12)数列的第1、2项均为1,此后各项值均为该项前二项之和。
计算数列第30项的值。
_______1______//longf(intn);
或者longf(int);
{printf("
%ld\n"
f(30));
longf(intn)
{if(______2______)//n==1||n==2
return1;
returnf(n-1)+f(n-2);
(13)该程序计算四位学生的平均成绩,保存在结构中,然后列表输出这些学生的信息。
structSTUDENT
{charname[16];
intmath;
intenglish;
intcomputer;
intaverage;
};
voidGetAverage(structSTUDENT*pst)/*计算平均成绩*/
{intsum=0;
sum=______1______;
//pst->
math+pst->
english+pst->
computer
pst->
average=sum/3;
{inti;
structSTUDENTst[4]={{"
Jessica"
98,95,90},{"
Mike"
80,80,90},
{"
Linda"
87,76,70},{"
Peter"
90,100,99}};
4;
{GetAverage(______2______);
//st+i
Name\tMath\tEnglish\tCompu\tAverage\n"
{printf("
%s\t%d\t%d\t%d\t%d\n"
st[i].name,st[i].math,st[i].english,
st[i].computer,st[i].average);
(14)输入m、n(要求输入数均大于0)。
输出它们的最大公约数。
#include<
{intm,n,k;
while(scanf("
%d%d"
&
m,&
n),______1______);
//m<
=0||n<
=0
for(___2___;
n%k!
=0||m%k!
=0;
k--);
//k=m>
n?
n:
m
k);
(15)求出a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。
b[1]=a[0]+a[1],……,b[9]=a[8]+a[9]。
{inta[10],b[10],i;
\nInput10numbers:
"
for(i=0;
10;
i++)/*数组输入*/
a[i]);
for(i=1;
b[i]=______1______;
/*计算b数组中的元素*///a[i-1]+a[i]
%3d"
b[i]);
if(______2______)printf("
/*每行打印3个数据*///i%3==0
(16)输入整数n(n>
0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。
{intm=0,t=1,n;
while(_____1________);
//scanf(“%d”,&
n),n<
=0//逗号表达式
while(!
(t<
=n&
t*2>
=n)){
_____2_____//t=t*2;
m++;
printf(“%d\n”,m);
二、程序改错
(1)输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
{charstr[256];
inti,j,k=0,n;
n=strlen(str);
/********1********/
if(tolower(str[i])<
'
||tolower(str[i])>
)//if(tolower(str[i])>
tolower(str[i])<
/********2********/
str[n]=str[i];
n++;
//str[k]=str[i];
k++;
str[k]='
%s\n"
str);
(2)输入一个字符串,将组成字符串的所有字符先按顺序存放到字符串t中,再将字符串中的字符按逆序连接到字符串t后面。
输入"
ABCD"
,则字符串t为"
ABCDDCBA"
voidfun(char*s,char*t)
{inti,sl;
sl=strlen(s);
sl;
i++)
t[i]=s[i];
t[sl+i]=s[sl-i];
//t[sl+i]=s[sl-1-i];
t[sl]="
\0"
//t[sl+i]='
{chars[100],t[100];
%s"
s);
fun(s,t);
t);
(3)运行时输入10个数,然后分别输出其中的最大值、最小值。
{floatx,max,min;
/********1*******/
for(i=0;
i++){//for(i=1;
i++){
%f"
x);
/*******2********/
if(i=1){max=x;
min=x;
}//if(i==1){max=x;
if(x>
max)max=x;
if(x<
min)min=x;
%f,%f\n"
max,min);
(4)用选择法对10个整数按升序排序。
#defineN10
{inti,j,min,temp;
inta[N]={5,4,3,2,1,9,8,7,6,0};
\nThearrayis:
/*输出数组元素*/
N;
a[i]);
N-1;
i++)/*排序操作*/
{min=i;
for(j=i+1;
j++)
/******1******/
if(a[min]<
=a[j])min=j;
//if(a[min]>
a[j])min=j;
/******2******/
temp=a[min];
a[min]=a[j];
a[j]=temp;
/*数据交换*/
//改成temp=a[min];
a[min]=a[i];
a[i]=temp;
\nThesortednumbers:
\n"
/*输出排序结果*/
(5)输入x和正数eps,计算多项式1-x+x*x/2-x*x*x/3!
+……的和直到末项的绝对值小于eps为止。
{floatx,eps,s=1,t=1,i=1;
%f%f"
x,&
eps);
do{
/*****1*****/
t=-t*x/++i;
//t=-t*x/i++;
s+=t;
/*****2*****/
}while(fabs(t)<
//}while(fabs(t)>
=eps);
(6)运行时若输入a、n分别为3、6,则输出下列表达式的值:
3+33+333+3333+33333+333333。
{inti,a,n;
longt=0;
/*********1*******/
s=0;
//longs=0;
=n;
i++){
/*******2******/
t=t*10+i;
//t=t*10+1;
s=s+t;
s=s*a;
(7)用递归法将一个六位整数n转换称字符串。
输入123456,应输出字符串"
123456"
voiditoa(longi,char*s)
{if(i==0)
return;
*s='
1'
+i%10;
//*s=i%10+'
itoa(i/10,s-1);
{longn;
charstr[7]="
%ld"
itoa(n,str+6);
//itoa(n,str+5);
(8)输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。
stdlib.h>
{inti,n;
structaxy{floatx,y;
}a;
//structaxy{floatx,y;
}*a;
a=(float*)malloc(n*2*sizeof(float));
a[i].x,a[i].y);
//scanf("
a[i].x,&
a[i].y);
if(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<
=5)
(9)运行时输入n,则输出n的所有质数因子。
n=13860,则输出2、2、3、3、5、7、11。
{intn,i;
i=1;
//i=2;
while(n>
1)
if(n%i==0){
%d\t"
i);
n/=i;
/********2*******/
n++;
//i++;
三、编写程序
(1)在正整数中找出1个最小的、被3、5、7、9除余数分别为1、3、5、7的数,将该数以格式"
写入到考生文件夹中Paper子文件夹下的新建文件Design1.dat中。
/*考生在这里添加代码*/
FILE*p;
p=fopen("
Design1.dat"
"
for(i=1;
;
if(i%3==1&
i%5==3&
i%7==5&
i%9==7)break;
fprintf(p,"
fclose(p);
(2)若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。
如:
220、284是1对亲密数,284、220也是1对亲密数。
在6~5000内找出所有的亲密数对,并将每对亲密数用语句fprintf(p,"
%6d,%6d\n"
a,b)写入到考生文件夹中Paper子文件夹下的新建文件Design2.dat。
{FILE*p;
inta,b,c,k;
design.dat"
/*考生在这里添加代码*/
for(k=6;
k<
=5000;
k++)
{b=0;
c=0;
for(a=1;
a<
k;
a++)
if(k%a==0)b+=a;
b;
if(b%a==0)c+=a;
if(k==c&
k!
=b)fprintf(p,"
%6d,%d\n"
k,b);
(3)设计程序:
计算字符串s中每个字符的权重值,所谓权重值就是字符在字符串中的位置值与该字符的ASCII码值的乘积。
位置值从1开始依此递增。
将每个字符的权重值,以格式"
%d"
写入到源程序目录中Paper子目录下的新建文件design.dat中。
inti,w;
char*s="
we45*&
y3r