二级C语言程序设计上机题汇总教学提纲.docx
《二级C语言程序设计上机题汇总教学提纲.docx》由会员分享,可在线阅读,更多相关《二级C语言程序设计上机题汇总教学提纲.docx(31页珍藏版)》请在冰豆网上搜索。
二级C语言程序设计上机题汇总教学提纲
二级(C语言程序设计)上机题汇总
二级(C语言程序设计)上机题汇总
一、程序调试题
(一)程序填空
练习一:
/*该程序功能:
对x=1,2,。
。
。
。
。
,10,f(x)=x*x*-5*x+sin(x)的最大值。
*/
#include
#include
#definef(x)x*x-5*x+sin(x)
voidmain()
{intx;floatmax;
____max=f
(1);____
for(x=2;x<=10;x++)
___if(maxprintf("%f\n",max);
}
练习二:
/*该程序功能:
输入三个整数,按由小到大的顺序输出这三个数。
*/
#include
voidswap(__int*pa,int*pb____)
{/*交换两个数的位置*/
inttemp;
temp=*pa;
*pa=*pb;
*pb=temp;
}
voidmain()
{
inta,b,c,temp;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
swap(&a,&b);
if(b>c)
swap(&b,&c);
if(__a>b___)
swap(&a,&b);
printf("%d,%d,%d",a,b,c);
}
练习三:
/*该程序功能:
将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。
*/
#include
voidDec2Bin(intm)
{
intbin[32],j;
for(j=0;m!
=0;j++)
{
bin[j]=__m%2___;
m=m/2;
}
for(;j!
=0;j--)
printf("%d",____bin[j-1]______);
}
voidmain()
{
intn;
scanf("%d",&n);
Dec2Bin(n);
}
练习四:
/*该程序功能:
输入数组x[7],调用函数f,去除数组中的负数,输出结果为:
1346*/
#include
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];
___*m=*m-1;___
}
}
voidmain()
{inti,n=7,x[7]={1,-2,3,4,-5,6,-7};
_f(x,&n);_____
for(i=0;iprintf("\n");
}
练习五:
/*该程序功能:
输出6~1000之间的完数(1个数的因子和等于其自身的数:
6=1+2+3,28=1+2+4+7+14,则6,28都是完数)*/
#include
voidmain()
{inti,j,s;
for(i=6;i<=1000;i++){
___s=1;___
for(j=2;___jif(s==i)printf("%d\n",s);
}
}
练习六:
/*该程序功能:
输入整数n(n>0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。
*/
#include
voidmain()
{intm=0,t=1,n;
while(__scanf(“%d”,&n),n<=0___);
while(!
(t<=n&&t*2>=n)){
___t=t*2;___
m++;
}
printf("%d\n",m);
}
练习七:
/*该程序功能:
函数f将数组循环左移k个元素,数组x[7]调用函数f后的输出结果为:
4567123*/
#include
voidf(int*a,intn,intk)
{inti,j,t;
for(i=0;i_t=a[0];
for(j=1;ja[n-1]=t;
}
}
voidmain()
{inti,x[7]={1,2,3,4,5,6,7};
f(x,7,3);
for(i=0;i<7;i++)printf("%5d",x[i]);printf("\n");
}
练习八:
/*该程序功能:
调用函数f,求二维数组a中全体元素的和.*/
#include
floatf(_float*x[],intm,intn_____)
{floaty=0;inti,j;
for(i=0;ireturny;
}
voidmain()
{floata[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*b[3];
inti;
for(i=0;i<3;i++)b[i]=__a[i]__;
printf("%.2f\n",f(b,3,4));
}
练习九:
/*该程序功能:
求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
*/
#include
#include
voidmain()
{
intn,s=0;
scanf("%d",&n);
____n=fabs(n);____
while(n!
=0){
____s+=n%10;____
n=n/10;
}
printf("%d\n",s);
}
练习十:
/*该程序功能:
数组的第1,2项均为1,此后各项值均为该项前二项之和。
计算数组第30项的值。
*/
#include
__longf(intn);
voidmain()
{
printf("%ld\n",f(30));
}
longf(intn)
{
if(_____n==1||n==2)
return1;
else
returnf(n-1)+f(n-2);
}
练习十一:
/*该程序功能:
输入m,n(要求输入均大于0,且m>=n),输出它们的最大公约数*/
#include
voidmain()
{intm,n,k;
while(scanf("%d%d",&m,&n),m<=0||n<=0||mfor(k=n;n%k!
=0||m%k!
=0;k--);
printf("%d\n",k);
}
练习十二:
/*程序功能:
输入一个整数后,输出该数的位数,如3114,则输出4。
*/
#include
voidmain()
{intn,k=0;
scanf(“%d”,&n);
while(n!
=0){
k++;
n=n/10;
}
printf(“%d\n”,k);
}
练习十三:
/*程序功能:
调用函数f,计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*xx,当x=1.7时的值。
*/
#include
floatf(float,float*,int);
voidmain()
{floatb[5]={1.1,2.2,3.3,4.4,5.5};
printf("%f\n",f(1.7,b,5));
}
floatf(floatx,float*a,intn)
{floaty=a[0],t=1;inti;
for(i=1;ireturny;
}
练习十四:
/*程序功能:
调用函数f,从字符串中删除所有的数字字符。
*/
#include
#include
#include
voidf(char*s)
{inti=0;
while(s[i]!
='\0')
if(isdigit(s[i]))strcpy(s+i,s+i+1);
elsei++;
}
(二)程序修改
练习一:
/*该程序功能:
运行是输入n,输出n各位数字之和(如n=1308则输出12,n=-3204则输出9)。
*/
#include
#include
voidmain()
{intn,s=0;
scanf("%d",&n);
n=fabs(n);
/********1*******/
while(n>1){//n>1改成n!
=0
s=s+n%10;
/********2******/
n=n%10;//n=n%10;改成n=n/10;
}
printf("%d\n",s);
}
练习二:
/*该程序功能:
输入m,n(要求输入均大于0,且m>=n),输出它们的最小公倍数*/
#include
voidmain()
{intm,n,k;
/********1*********/
while(scanf("%d%d",&m,&n),m<0&&n<0);//m<0&&n<0改成m<=0||n<=0||mfor(k=m;k%n!
=0;)
/********2********/
k=k+n;//k=k+n;改成k=k+m;
printf("%d\n",k);
}
练习三:
/*该程序功能:
输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母,输出该字符串。
*/
#include
#include
#include
voidmain()
{intn,i;
/*****1*****/
charstr;//charstr;改成char*str;
scanf("%d\n",&n);str=(char*)malloc(n);gets(str);
/*****2*****/
for(i=1;iif(str[i]>='a'&&str[i]<='z')str[i]=str[i]-('a'-'A');
puts(str);
}
练习四:
/*该程序功能:
输人1个字符串,按字母出现次序输出其中所出现过的大写英文字母。
如运行时输入字符串“FONTNAMEandFILENAME”应输出“FONTAMEIL”。
*/
#include
voidmain()
{charx[80],y[26];inti,j,ny=0;
gets(x);
for(i=0;x[i]!
='\0';i++)
if(x[i]>='A'&&x[i]<='Z'){
for(j=0;j/*****1*****/
if(y[i]==x[j])continue;//y[i]==x[j]改成y[j]==x[i]continue;改成break;
if(j==ny){y[ny]=x[i];ny++;}
}
/*****2*****/
for(i=0;i<26;i++)//i<26;改成iprintf("%c",y[i]);
printf("\n");
}
练习五:
/*程序功能:
将一个char型数的高4位和低4位分离,分别输出,如22(二进制:
00010110)输出1,6*/
#include
voidmain()
{
chara,b1,b2,c;
scanf("%d",&a);
/******1******/
b1=a<<4;/*b1存放高4位*///b1=a<<4;改成b1=a>>4;
c=~(~0<<4);
/******2******/
b2=a|c;/*b2存放低4位*///b2=a|c;改成b2=a&c;
printf("%d,%d",b1,b2);
}
练习六:
/*在考生目录下的Paper子目录下,有Modify.c文件,该文件中”/*****N*****/”的下一行中有错误,请改正(注意:
不得加行,减行,加句,减句,否则后果自负)。
该程序功能:
输入x和正数,eps计算多项式1-x+x*x/2!
-x*x*x/3!
….的和直到末项的绝对值小于eps为止。
*/
#include
#include
voidmain()
{floatx,eps,s=1,t=1,i=1;
scanf("%f%f",&x,&eps);
do{
/*****1*****/
t=-t*x/++i;//t=-t*x/++i;改成t=-t*x/i++;
s+=t;
/*****2*****/
}while(fabs(t)>=eps)//while(fabs(t)>=eps);
printf("%f\n",s);
}
练习七:
/*程序功能:
输入n,输出n的所有质数因子,(如n=13860,输出2、2、3、3、5、7、11)。
*/
#include
voidmain()
{intn,i;
scanf(“%d”,&n);
/********1*******/
i=1;//i=1;改成i=2;
while(n>1)
if(n%i==0){
printf(“%d\t”,i);
n/=i;
}
else
/*******2********/
n--;//n--;改成i++;
}
练习八:
/*程序功能:
输入a,n,分别为3,6,则输出表达式的值3+33+333+3333+33333+333333*/
#include
voidmain()
{inti,a,n;longt=0;
/********1*******/
s=0;//s=0;改成longs=0;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++){
/********2*******/
t=t*10+i;//t=t*10+i;改成t=t*10+1;
s=s+t;
}
s=s*a;
printf("%ld\n",s);
}
练习九:
程序功能:
输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。
#include
#include
#include
voidmain()
{
inti,n;
/*****1*****/
structaxy{floatx,y;}a;//structaxy{floatx,y;}*a;
scanf("%d",&n);
a=(structaxy*)malloc(n*2*sizeof(float));
for(i=0;i/*****2*****/
scanf("%f%f",a[i].x,a[i].y);//scanf("%f%f",&a[i].x,&a[i].y);
for(i=0;iif(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5)
printf("%f,%f\n",a[i].x,a[i].y);
}
练习十:
程序功能:
分别统计字符串中所有英文字母中的各元音字母个数。
#include
#include
voidmain()
{chara[80];intn[5]={0},i;gets(a);
for(i=0;a[i]!
='\0';i++)
/*****1*****/
switch(toupper(a[i])){//switch(tolower(a[i]))
case'a':
n[0]++;break;
case'e':
n[1]++;break;
case'i':
n[2]++;break;
case'o':
n[3]++;break;
/*****2*****/
case'U':
n[4]++;//case'u':
n[4]++;
}
for(i=0;i<5;i++)printf("%d\n",n[i]);
练习十一:
/*考生的目录Paper子目录下,有Modify.c文件,该文件中/*****N*****/的下一行中请改正。
该程序功能:
运行时输入10个数,然后分别输出其中的最大,最小的值。
*/
#include
voidmain()
{floatx,max,min;inti;
/********1*******/
for(i=0;i<=10;i++){//i<=10;改成i<10;
scanf("%f",&x);
/*******2********/
if(i=1){max=x;min=x;}//i=1改成i==0
if(x>max)max=x;
if(x}
printf("%f,%f\n",max,min);
}
二、程序设计题
练习一:
/*设计程序:
z=f(x,y)=10*cos(x-4)+5*sin(y-2),若x,y取值区间为[0,10]的整数,找出
使z取最小值的x1,y1,并将x1,y1以格式“%d,%d”写到考生目录中Paper下目录下的新建文件design.dat中*/
#include
#include
voidmain()
{
FILE*p;
intx,y,x1,y1;floatz,z1;
/*考生在这里添加程序*/
p=fopen("design.dat","w");
z1=0;
for(x=0;x<=10;x++)
for(y=0;y<=10;y++)
{z=10*cos(x-4)+5*sin(y-2);
if(z{z1=z;x1=x;y1=y;}
}
fprintf(p,"%d,%d",x1,y1);
fclose(p);
}
练习二:
/*设计程序:
计算多项式a0+a1*sin(x)+a2*sin(x*x)+a3*sin(x*x*x)+......的值,并将其值
以格式"%.6f"写到考生目录中Paper下目录下的新建文件design.dat中*/
#include
#include
voidmain()
{
FILE*p;
inti;floatx=2.345,t=1.0,y=0.0;
floata[10]={1.2,-1.4,-4.0,1.1,2.1,-1.1,3.0,-5.3,6.5,-0.9};
/*考生在这里添加程序*/
y=a[0];
p=fopen("design.dat","w");
for(i=1;i<10;i++)
{t=t*x;
y+=a[i]*sin(t);}
fprintf(p,"%.6f",y);
fclose(p);
}
练习三:
/*设计程序:
计算多项式a0+a1*x+a2*x*x+a3*x*x*x+...的值,并将其值一格式"%f"写到考生目录中Paper下目录下的新建文件design.dat中*/
#include
#include
voidmain()
{FILE*p;inti;floatx=1.279,t=1,y=0;
floata[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
/*考生在这里添加程序*/
y=a[0];
p=fopen("design.dat","w");
for(i=1;i<10;i++)
{t=t*x;
y+=a[i]*t;}
fprintf(p,"%f",y);
fclose(p);
}
练习四:
/*设计程序:
累加a字符串各个字符的ASCII码值,然后将累加和以形式“%d”写到考生目录中Paper下目录下的新建文件design.dat中*/
#include
voidmain()
{FILE*p;ints=0,i=0;
char*a="r235%^%34cdDW,.";
/*考生在这里添加程序*/
p=fopen("design.dat","w");
for(;a[i]!
='\0';i++)
s+=a[i];
fprintf(p,"%d",s);
fclose(p);
}
练习五:
/*设计程序:
寻找并输出11到999之间的数m,它满足m,m*m,m*m*m均为回文数。
所谓回文数是指各位数字左右对称,例如121,676,94249等。
满足上述条件的数如m=11,m^2=121,m^3=1331皆为回文数。
请编制函数intJSValue(longm)实现此功能,如果是回文数,则函数返回为1,反之则返回0。
*/
#include
#include
#include
intJSValue(longm)
{
/*考生在这里添加程序*/
inta[10],i=0,n;
while(m)
{a[i]=m%10;
m=m/10;
i++;}
for(--i,n=i;i>n/2;i--)
if(a[i]!
=a[n-i])
return0;
return1;
}
voidmain()
{
FILE*p;longm;
p=fopen("design.dat","w");
for(m=11;m<1000;m++)