C语言编程题.docx
《C语言编程题.docx》由会员分享,可在线阅读,更多相关《C语言编程题.docx(9页珍藏版)》请在冰豆网上搜索。
C语言编程题
C语言编程题
第1次上机题
1.每个苹果0.8元,第一天买2个苹果,第二天开始,每天
买前一天的2倍,直至当天购买的苹果个数达到不超过
100个最大值。
编写程序求每天平均花多少钱2.已知两个相邻奇数的乘积是399,求这两个相邻的奇数各
是什么,(要求用多种方法编程)
3.筐里有鸡蛋若干,若每次拿2个、3个、4个、5个、6个,
则筐里总会剩一个鸡蛋,若每次拿7个鸡蛋,则筐里不剩
鸡蛋,问筐里有鸡蛋多少个,(要求用多种方法编程,并
比较算法的优劣)
第2次上机题
1(统计1900年到2000年有多少个闰年,先将闰年的年份显示出
来,显示时每行显示十个年份;然后显示出闰年的个数。
2(从键盘输入3个学生的5门课成绩,分别统计出每个学生的平
均成绩。
此题为程序查错题,程序名称为CJTJ.CPP,其中既
有语法错误,也有逻辑错误,将错误查出并改正,使程序能正
确运行。
#inc1ude
#include
main()
{inti,j,
floatg,sum,ave;c1rscr();
sum=0;
for(i=1;i<=3,i++)
{for(j=1;j<=5;j++)
{scanf("%f",g);
sum+=g;
}
ave=sum/5;
printf("No.%fave=%5.2f\n",i,ave),
getch();
}
第3次上机题
1(定义一个含有30个整型元素的数组,按顺序分别赋予从2开
始的偶数;然后按顺序每5个数求出一个平均值,放在另一个
数组中并输出。
2(通过赋初值按行顺序给2×3的二维数组赋予2、4、6、…等偶
数,然后按列的顺序输出该数组。
3(数组a包括10个整数,把a中所有的后项除以前项之商取整
后放入数组b中,并按每行3个元素的格式输出数组b。
4(某班有学生5人,每个人有5门成绩(成绩从键盘输入),求
每门课的最高分,最低分,每个人的平均分,每门课的平均分
及每门课及格和不及格的人数。
要求将最后的结果完整地显示
在屏幕上,平均分取两位小数。
第4次上机题
1.编写求最大公约数的函数,在主函数中输入要求最大公约数的两个数,使用辗转相除法求最大公约数。
222.求方程ax+bx+c=0的根,用3个函数分别求当b-4ac大于零,等于零和小于零时的根,并输出结果。
在主函数中输入a,b,c的值。
使用如下数据进行计算并验证:
编号abcX1X21241-0.2828931-1.7071072121-1.000000-1.0000003243-1.000000+0.701071i-1.000000-0.701071i3.猴子第一天摘桃若干,当天吃了一半又多吃了一个,第二天将剩下的桃子吃了一半又多吃了一个,以后每天如此,到第七天时只剩下一个桃子,分别用递推和递归法求猴子第一天摘了多少个桃子。
函数练习题
练习1:
以下程序的运行结果是()
inta=5;intb=7;
main()
{inta=4,b=5,c;
c=plus(a,b);
printf(“A+B=%d\n”,c);
}
plus(intx,inty)
{intz;
z=x+y;
return(z);
}
练习2:
以下程序的运行结果是()intx;
main()
{x=5;
cude();
printf(“%d\n”,x);
}
cude()
{x=x*x*x;
}
练习3:
以下程序的运行结果是()inti=0;
main()
{inti=5;
reset(i/2);printf(“i=%d\n”,i);
reset(i=i/2);printf(“i=%d\n”,i);
reset(i/2);printf(“i=%d\n”,i);
workover(i);printf(“i=%d\n”,i);
}
workover(inti)
{i=(i%i)*((i*i)/(2*i)+4);printf(“i=%d\n”,i);
return(i);
}
reset(inti)
{i=i<=2?
5:
0;return(i);
}
练习4:
以下程序的运行结果是()
main()
{increment();increment();increment();}
increment()
{staticintx=0;x+=1;printf(“%d”,x);}练习5:
以下程序的输出是()
try(inta)
{staticintx=3;
x=x+1;
return(a+x);
}
main()
{inti,x,y=2;
for(i=0;i<=1;i++)
x=try(y);
printf(“%d\n”,x);
}
练习6:
以下程序的运行结果是()
intn=1;
main()
{staticintx=5;inty;
y=n;
printf(“MAIN:
x=%2dy=%2dn=%2d\n”,x,y,n);
func();
printf(“MAIN:
x=%2dy=%2dn=%2d\n”,x,y,n);
func();
}
func()
{staticintx=4;inty=10;
x=x+2;
n=n+10;
y=y+n;
printf(“FUNC:
x=%2dy=%2dn=%2d\n”,x,y,n);}
练习7:
下面递归程序的输出是()
main()
{intx;
x=try(6);
printf(“%d\n”,x);
}
try(intn)
{if(n>0)
return(n*try(n-2));
else
return
(1);
}
预处理练习题例题1:
以下叙述中不正确的是:
(1)预处理命令行都必须以#号开始;()
(2)在程序中凡是以#号开始的语句行都是预处理命令行;()(3)C程序在执行过程中对预处理命令行进行处理;()(4)在程序的一行上可以出现多个有效的预处理命令行;()(5)使用带参的宏时,参数的类型应与宏定义时的一致;()(6)宏替换不占用运行时间,只占编译时间;()(7)在以下定义中CR是称为“宏名”的标识符;()
#defineCR045(8)宏名必须用大写字母表示;()
(9)预处理指令只能位于C源程序文件的首部;()
(10)C语言的编译预处理就是对源程序进行初步的语法检查。
()例题2:
在宏定义#definePI3.14159中,用宏名PI代替一个()A)常量B)单精度数C)双精度数D)字符串
例题3:
程序运行结果是()
#defineADD(x)x+x
main()
{intm=1,n=2,k=3;intsum=ADD(m+n)*k;
printf("sum=%d",sum);
}展开:
例题4:
程序运行结果是()
#defineMIN(x,y)(x)<(y)?
(x):
(y)main()
{inti=10,j=15,k;clrscr();
k=10*MIN(i,j);printf("%d\n",k);}展开:
例题5:
程序运行结果是()
#defineFUDGE(y)2.84+y
#definePR(a)printf("%d",(int)(a))#definePRINT1(a)PR(a);putchar('\n')main()
{intx=2;clrscr();
PRINT1(FUDGE(5)*x);
}
例题6:
程序输出的结果是()
#defineX5
#defineYX+1
#defineZY*X/2
main()
{inta;a=Y;clrscr();printf("%d\n",Z);
printf("%d\n",--a);
}Z展开:
例题7:
程序运行结果是()
#definePOWER(x)((x)*(x))main()
{inti=1;clrscr();
while(i<=4)printf("%d\t",POWER(i++));
}
例题8:
程序运行的结果是()
#defineMAX(a,b,c)((a)>(b)?
((a)>(c)?
(a):
(c)):
((b)>(c)?
(b):
(c)))main()
{intx,y,z;x=1;y=2;z=3;clrscr();
printf("%d,",MAX(x,y,z));
printf("%d,",MAX(x+y,y,y+x));
printf("%d\n",MAX(x,y+z,z));
}
指针练习题
练习题:
1.读程序:
xts91演示
sub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;clrscr();
sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);}
A)5,2,3B)-5,-12,-7C)-5,-12,-17D)5,-2,-72.读程序:
xts92演示
main()
{inta,b,k=4,m=6,*p1=&k,*p2=&m;clrscr();
a=p1==&m;printf("a=%d\n",a);
b=(-*p1)/(*p2)+7;printf("b=%d\n",b);}
[1]A)-1B)1C)0D)4
[2]A)5B)6C)7D)10
3.下面程序应能对两个整型变量的值进行交换,以下正确的
说法是()xts93
main()
{inta=10,b=20;printf(“
(1)a=%d,b=%d\n”,a,b);
swap(&a,&b);printf(“
(2)a=%d,b=%d\n”,a,b);}swap(intp,intq)
{intt;t=p;p=q;q=t;}A)程序正确
B)程序有错,只要将swap(&a,&b);中的参数改为a,b即可C)程序有错,只要将swap()函数中的形参p和q以及t均定
义为指针(执行语句不变)即可
D)以上说法都不正确
4.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()xts95main()
{int*p,*q,a,b;p=&a;printf(“inputa:
”);scanf(“%d”,*p);...}A)*p表示的是指针变量p的地址
B)*p表示的是变量a的值,而不是变量a的地址C)*p表示的是指针变量p的值
D)*p只能用来说明p是一个指针变量
练习题:
例题1:
已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()A)k=*ptr1+*ptr2;B)ptr2=k;
C)ptr1=ptr2;D)k=*ptr1*(*ptr2);xts98
例题2:
下面程序