C语言程序设计题库二.docx
《C语言程序设计题库二.docx》由会员分享,可在线阅读,更多相关《C语言程序设计题库二.docx(29页珍藏版)》请在冰豆网上搜索。
![C语言程序设计题库二.docx](https://file1.bdocx.com/fileroot1/2022-11/25/fa6321f0-a89d-44ec-9a41-65d6f897f39c/fa6321f0-a89d-44ec-9a41-65d6f897f39c1.gif)
C语言程序设计题库二
C语言程序设计题库二
1、写出下面函数的运行结果。
#include
voidfx701(intk,intn,floata);
intmain()
{
intk=1,n=5;
floata=3.2,b=8.5;
printf("调用前:
k=%dn=%da=%.2fb=%.2f\n",k,n,a,b);
fx701(k,n,a);
printf("调用后:
k=%dn=%da=%.2fb=%.2f\n",k,n,a,b);
return0;
}
voidfx701(intk,intn,floata)
{
intq=100;
floatb,x=6.2;
k+=q;n*=q;a-=x;b=3.5*a;
printf("函数中:
k=%dn=%da=%.2fb=%.2f\n",k,n,a,b);
}
解:
调用前:
k=1n=5a=3.20b=8.50
函数中:
k=101n=500a=-3.00b=-10.50
调用后:
k=1n=5a=3.20b=8.50
2、编写一个函数,实现从键盘输入一个整数,如果该整数为素数,则返回1,否则返回0。
解:
#include
#include
intIs_prime(inti)
{
intj=0;
for(j=2;j
{
if(0==(i%j))
{
return0;
}
}
return1;
}
intmain()
{
inti;
printf("Pleaseinputanumber:
");
scanf("%d",&i);
if(1==Is_prime(i))
{
printf("%disaprime.\n",i);
}
else
printf("%disnotaprime.\n",i);
system("pause");
return0;
}
程序运行结果如下:
Pleaseinputanumber:
13↙
13isaprime.
Pleaseinputanumber:
8↙
8isnotaprime.
3、设计两个函数,分别求矩形的周长和面积,并在主函数中调用这两个函数。
解:
#include
floatarea(floata,floatb)
{
floats;
s=a*b;
return(s);
}
floatzc(floata,floatb)
{
floatp;
p=2*(a+b);
return(p);
}
intmain()
{
floata,b,s,p;
printf("请输入长方形的边长a,b:
");
scanf("%f%f",&a,&b);
s=area(a,b);
p=zc(a,b);
printf("长方形的周长为p=%f,长方形的面积为s=%f",p,s);
}
程序运行情况如下:
请输入长方形的边长a,b:
34↙
长方形的周长为p=14.000000,长方形的面积为s=12.000000
4、编写一个函数求一个整数n的阶乘,在主函数中计算并输出10!
的值。
解:
#include
floatfc(intn)
{
floats;
if(n==1||n==0)s=1;
elses=n*fc(n-1);
return(s);
}
intmain()
{
floatk;
k=fc(10);
printf("10!
=%f\n",k);
return0;
}
程序运行结果如下:
10!
=3628800.000000
5、已知函数fun2的原型说明为“longfun2(intm,intn);”,调用该函数计算m~n的和(其中n>m>0),例如:
若m=5,n=20,则计算5+6+7+8+…+20的值。
要求在主函数中通过键盘输入m和n的值,并输出和的值。
解:
#include
longfun2(intm,intn)
{
longs;
inti;
s=0;
for(i=m;i<=n;i++)
s=s+i;
return(s);
}
intmain()
{
intn,m,sum;
printf("请输入m,n的值n>m:
\n");
scanf("%d%d",&m,&n);
sum=fun2(m,n);
printf("sum=%d\n",sum);
return0;
}
程序运行结果如下:
请输入m,n的值n>m:
520↙
sum=200
6、编写一个函数重复打印给定的字符n次。
解:
#include
voidfun2(charm,intn)
{
inti;
for(i=1;i<=n;i++)
printf("%c",m);
printf("\n");
}
intmain()
{
charm;
intn;
printf("请输入给定的字符\n");
scanf("%c",&m);
printf("请输入打印的次数\n");
scanf("%d",&n);
fun2(m,n);
return0;
}
程序运行结果如下:
请输入给定的字符
*↙
请输入打印的次数
5↙
*****
7、写出程序的运行结果,并上机验证其结果。
#include
voidfun1()
{
intx=5;
printf("x=%d\n",x);
}
voidfun2(intx)
{
printf("x=%d\n",++x);
}
intmain()
{
intx=2;
fun1();
fun2(x);
printf("x=%d\n",x);
return0;
}
解:
x=5
x=3
x=2
8、指出下列程序中各变量的存储属性,并写出程序的执行结果。
(1)#include
voidadd(inti);
intmain()
{
inti=1;
add(i);
printf("main:
i=%d\n",i);
return0;
}
voidadd(inti)
{
i=i+3;
printf("add:
i=%d\n",i);
}
解:
add:
i=4
main:
i=1
其中,i是自动型变量。
(2)#include
inti=1;
voidadd1();
intmain()
{
add1();
printf("i=%d\n",i);
return0;
}
voidadd1()
{
i=i+3;
}
解:
i=4
其中,该变量是外部型变量。
(3)#include
voidadd2(inti);
intmain()
{
inti=2;
add2(i);
add2(i);
return0;
}
voidadd2(inti)
{
staticintj=5;
j=i+j;
printf("j=%d\n",j);
}
解:
j=7
j=9
其中,变量i是静态型变量。
9、编写程序实现以下图形的输出。
解:
#include
voidmain()
{
inti,j,k;
for(i=1;i<=5;i++)//先打印上边的四行
{
for(j=1;j<=5-i;j++)//控制要打印的空格数量
printf("");
for(k=1;k<=2*i-1;k++)//控制要打印的星号数
printf("*");
printf("\n");
}
}
10、写出程序的运行结果。
#include
#defineX5
#defineYX+1
#defineZY*X/2
intmain()
{
inta;
a=Y;
printf("%d%d\n",Z,--a);
return0;
}
解:
75
11、编写一个函数,将一个十进制整数转换为二进制数。
解:
#include
voidmain()
{
longnum;
intozb();
printf("请输入一个十进制数:
");
scanf("%ld",&num);
printf("%ld的二进制数为:
",num);
ozb(num);
}
intozb(longnum)
{
inta[32]={0},i=0;
while(num>=1)
{
a[i]=num%2;
num=num/2;
i++;
}
for(i=i-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
return(a[i]);
}
程序运行结果如下:
请输入一个十进制数:
5↙
5的二进制数为:
101
12、编写一个函数,找出任意整数的全部因子。
解:
#include
intN;
voidmain()
{
voidyz();
scanf("%d",&N);/*输入N的值*/
yz(N);
}
voidyz()
{
inti,p=1;
for(i=1;i{
if(N%i==0)/*判断是否是N的因子,如果是则加上*/
{
p=i;
printf("%d",p);
}
}
}
程序运行结果如下:
15↙
13515
13、数组是相同数据类型的集合,分为一维数组、二维数组及多维数组。
在什么情况下使用数组?
在什么情况下使用一维数组?
解:
当需要处理的数据为相同类型的数据的集合时,可以使用数组。
如果这些数据的描述用一个量就可以,这时就用一维数组。
例如,一组学生的学号,就可以使用一维数组。
14、数组元素又称为下标变量,数组元素的下标有何意义?
解:
下标的意义是对数组的各个数组元素进行标识和区分。
由数组名和下标结合起来形成数组元素的名字。
15、使用字符数组来存储字符串应注意什么问题?
解:
需要注意的问题是字符数组在存储字符串时是以'\0'作为结束标记的。
这个'\0'是系统自动加上的。
所以字符数组的长度需要比它要存储的字符串的长度至少多1。
例如,要存储字符串"abcd",因为它的长度为4,所以存储它的字符数组的长度至少为5。
16、常用的字符处理函数有哪些?
解:
常用的字符处理函数有以下8个。
(1)puts(字符串):
作用为将一个字符串输出到终端。
(2)gets(字符数组):
作用为从终端输入一个字符串到字符数组,并且得一个函数值。
(3)strcat(字符串1,字符串2):
作用为进行字符串的连接。
(4)strcpy(字符串1,字符串2):
作用为进行字符串的复制。
(5)strcmp(字符串1,字符串2):
作用为进行字符串的比较。
(6)strlen(字符串):
作用为求字符串的长度。
(7)strlwr(字符串):
作用为将字符串中的大写字母转换成小写字母。
(8)strupr(字符串):
作用为将字符串中的小写字母转换成大写字母。
17、随机产生10个两位整数存储到一个一维数组中,找出其中的最大数。
解:
#include
#include
#definerandom(x)(rand()%x)
intmain()
{
inta[10],max;
intx;
for(x=0;x<10;x++)
a[x]=random(100);
max=a[0];
for(x=0;x<10;x++)
{
if(a[x]>max)
max=a[x];
printf("%4d",a[x]);
}
printf("\nmax=%d\n",max);
return0;
}
程序运行结果如下:
4167340692478586264
max=78
18、输入10个整数,要求按照从小到大的顺序输出。
解:
#include
voidmain()
{
inti,j,min,t,a[10];
printf("请输入10个数:
\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10-1;i++)
{
min=i;
for(j=i;j<10;j++)
if(a[min]>a[j])min=j;
t=a[i];
a[i]=a[min];
a[min]=t;
}
printf("\n排序结果如下:
\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
程序运行情况如下:
请输入10个数:
6904556115447858101
排序结果如下:
1615444556587890101
19、输入10个字符,并将它们的顺序颠倒后输出。
解:
#include
#defineN10
voidmain()
{
chara[N],t;
inti;
/*输入10个字符并输出*/
printf("请输入10个字符:
\n");
for(i=0;i<10;i++)
{
scanf("%c",&a[i]);
}
/*顺序颠倒*/
for(i=0;i{
t=a[i];
a[i]=a[N-i-1];
a[N-i-1]=t;
}
printf("顺序颠倒后的字符:
\n");
for(i=0;iprintf("%c",a[i]);
}
程序运行情况如下:
请输入10个字符:
0123456789↙
顺序颠倒后的字符:
9876543210
20、写出下列程序的运行结果。
(1)#include
voidfun(intb[])
{
inti=0;
while(b[i]<=10)
{
b[i]+=2;
i++;
}
}
intmain()
{
inti,a[]={1,5,7,9,11,13,15};
fun(a+2);
for(i=0;i<7;i++)
printf("%5d",a[i]);
return0;
}
解:
15911111315
(2)#include
intmain()
{
inta[3][3],i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=i;
for(i=0;i<3;i++)
printf("%5d",a[1][i]);
return0;
}
解:
111
(3)#include
intmain()
{
intk;
inta[3][3]={1,2,3,4,5,6,7,8,9};
for(k=0;k<3;k++)
printf("%d",a[k][2-k]);
return0;
}
解:
357
(4)#include
#include
intmain()
{
charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcpy(p+strlen(q),r);strcat(p,q);
printf("%d\n%d\n",sizeof(p),strlen(p));
return0;
}
解:
20
11
(5)#include
#include
voidf(charp[][10],intn)/*字符串从小到大排序*/
{
chart[10];
inti,j;
for(i=0;ifor(j=i+1;jif(strcmp(p[i],p[j])>0)
{strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[i],t);}
}
intmain()
{
charp[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};
f(p,5);
printf("%d\n",strlen(p[0]));
return0;
}
解:
3
21、求一个3×3矩阵对角线元素之和。
解:
#include
main()
{
floata[3][3],sum=0;
inti,j;
printf("请输入矩阵元素:
\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("对角线元素之和=%.2f\n",sum);
}
程序运行情况如下:
请输入矩阵元素:
123456789↙
对角线元素之和=15.00
22、找出一个二维数组中的鞍点,所谓鞍点是指该位置上的数在该行最大,在该列最小。
需要注意的是,并不是所有的二维数组都有鞍点。
解:
#defineN10
#defineM10
#include
voidmain()
{
inti,j,k,m,n,flag1,flag2,a[N][M],max,maxj;
printf("\n输入行数n:
");
scanf("%d",&n);
printf("\n输入列数m:
");
scanf("%d",&m);
for(i=0;i{
printf("第%d行?
\n",i);
for(j=0;jscanf("%d",&a[i][j]);
}
for(i=0;i{
for(j=0;jprintf("%5d",a[i][j]);
printf("\n");
}
flag2=0;
for(i=0;i{
max=a[i][0];
maxj=0;
for(j=0;jif(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
for(k=0,flag1=1;kif(max>a[k][maxj])
flag1=0;
if(flag1)
{
printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max);
flag2=1;
}
}
if(!
flag2)
printf("\n矩阵中无鞍点!
\n");
}
矩阵中有鞍点,运行情况如下:
输入行数n:
2↙
输入列数m:
2↙
第0行?
4↙
5↙
第1行?
4↙
6↙
45
46
第0行,第1列的5是鞍点
矩阵中无鞍点,运行情况如下:
输入行数n:
2↙
输入列数m:
2↙
第0行?
90↙
7↙
第1行?
5↙
8↙
907
58
矩阵中无鞍点!
23、某班有30个学生,每个学生参加了5门课程的考试,请编程显示该班的期末成绩单,并求出每个学生的所有课程的总分。
解:
#include
voidmain()
{
intscore[31][7];
inti,j;
for(i=1;i<=30;i++)
score[i][0]=i;
printf("请依次输入30个学生的五门课的成绩\n");
for(i=1;i<=30;i++)
{
printf("请依次输入第%d个学生的五门课的成绩\n",i);
for(j=1;j<=5;j++)
scanf("%d",&score[i][j]);
}
for(i=1;i<=30;i++)
{
score[i][6]=0;
for(j=1;j<=5;j++)
score[i][6]+=score[i][j];
}
printf("期末成绩单\n");
printf("%10s%10s%10s%10s%10s%10s%10s\n","学号","课程1","课程2","课程3","课程4","课程5","总分");
for(i=1;i<=30;i++)
{
for(j=0;j<=6;j++)
printf("%10d",score[i][j]);
printf("\n");
}
}
程序运行情况如下:
请依次输入30个学生的五门课的成绩
请依次输入第1个学生的五门课的成绩
7889989698↙
请依次输入第2个学生的五门课的成绩
8995989796↙
请依次输入第3个学生的五门课的成绩
7879747875↙
按照上面示例自行输入27个学生的五门课的成绩。
期末成绩单
学号课程1课程2课程3课程4课程5总分
17889989698459
28995989796475
37879747875384
程序将在此处依次打印出另外27个学生的成绩。
24、打印出如下方阵:
13141516
9101112
5678
1234
解:
#include
voidmai