C语言编程题Word格式.docx
《C语言编程题Word格式.docx》由会员分享,可在线阅读,更多相关《C语言编程题Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
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;
{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;
{x=5;
cude();
printf(“%d\n”,x);
cude()
{x=x*x*x;
练习3:
以下程序的运行结果是()inti=0;
{inti=5;
reset(i/2);
printf(“i=%d\n”,i);
reset(i=i/2);
workover(i);
printf(“i=%d\n”,i);
workover(inti)
{i=(i%i)*((i*i)/(2*i)+4);
return(i);
reset(inti)
{i=i<
=2?
5:
0;
return(i);
练习4:
{increment();
increment();
}
increment()
{staticintx=0;
x+=1;
printf(“%d”,x);
}练习5:
以下程序的输出是()
try(inta)
{staticintx=3;
x=x+1;
return(a+x);
{inti,x,y=2;
for(i=0;
=1;
i++)
x=try(y);
练习6:
intn=1;
{staticintx=5;
inty;
y=n;
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:
练习7:
下面递归程序的输出是()
{intx;
x=try(6);
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
{intm=1,n=2,k=3;
intsum=ADD(m+n)*k;
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
{inta;
a=Y;
Z);
--a);
}Z展开:
例题7:
#definePOWER(x)((x)*(x))main()
{inti=1;
while(i<
=4)printf("
%d\t"
POWER(i++));
例题8:
程序运行的结果是()
#defineMAX(a,b,c)((a)>
(b)?
((a)>
(c)?
(a):
(c)):
((b)>
(b):
(c)))main()
{intx,y,z;
x=1;
y=2;
z=3;
%d,"
MAX(x,y,z));
MAX(x+y,y,y+x));
MAX(x,y+z,z));
指针练习题
练习题:
1.读程序:
xts91演示
sub(intx,inty,int*z)
{*z=y-x;
{inta,b,c;
sub(10,5,&
a);
sub(7,a,&
b);
sub(a,b,&
c);
%4d,%4d,%4d\n"
a,b,c);
A)5,2,3B)-5,-12,-7C)-5,-12,-17D)5,-2,-72.读程序:
xts92演示
{inta,b,k=4,m=6,*p1=&
k,*p2=&
m;
a=p1==&
a=%d\n"
a);
b=(-*p1)/(*p2)+7;
b=%d\n"
b);
[1]A)-1B)1C)0D)4
[2]A)5B)6C)7D)10
3.下面程序应能对两个整型变量的值进行交换,以下正确的
说法是()xts93
{inta=10,b=20;
printf(“
(1)a=%d,b=%d\n”,a,b);
swap(&
a,&
printf(“
(2)a=%d,b=%d\n”,a,b);
}swap(intp,intq)
{intt;
t=p;
p=q;
q=t;
}A)程序正确
B)程序有错,只要将swap(&
中的参数改为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:
下面程序