C语言练习题答案Word下载.docx
《C语言练习题答案Word下载.docx》由会员分享,可在线阅读,更多相关《C语言练习题答案Word下载.docx(151页珍藏版)》请在冰豆网上搜索。
,&
a);
b=a/1000;
c=a%1000/100;
d=a%100/10;
e=a%10;
a=e*1000+d*100+c*10+b;
a);
--------------2
3.有关输入输出问题。
输入为:
12a↙
b↙
运行结果为:
1,2,a,b,123.300000,65535
请改正程序中的错误,使它能得出正确的结果。
#include<
main()
intb;
unsignedshorta=65535;
shortk=a;
charc,d;
intf,g;
b=(1234.0-1)/10;
%c"
d);
f);
g);
%c,%c,%c,%c,%f,%d"
c,d,f,g,b,k);
doubleb;
inta=65535;
charc,d;
intf,g;
b=(1234.0-1)/10;
scanf("
%c\t"
printf("
c,d,f,g,b,a);
--------3
4.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。
请找出以下程序的错误,并改正之。
string.h>
#defineARR_SIZE=80;
charstr[ARR_SIZE];
int
len,i;
letter=0,digit=0,space=0,other=0;
请输入一个字符串:
gets(str);
len=strlen(str);
for(i=0;
i<
len;
i++)
if(a=<
str[i]<
=z||A=<
=Z)
letter++;
}
elseif(0=<
=9)
digit++;
elseif(str[i]='
'
)
{
space++;
else
other++;
英文字符数:
%d\n"
letter);
数字字符数:
digit);
空格数:
space);
其他字符数:
other);
答案:
#defineARR_SIZE
80
letter=0,digit=0,space=0,other=0;
for(i=0;
if('
a'
<
=str[i]&
&
str[i]<
='
z'
||'
A'
Z'
)
letter++;
elseif('
0'
=str[i]&
str[i]<
9'
digit++;
elseif(str[i]=='
space++;
other++;
--------------------4
5.对输入的一个数判断是否是素数。
所谓素数是指这个数只能被1和自身整除。
要求在主函数输入一个数,调用函数Fun()判断该数是否是素数。
打印信息在主函数中进行。
例如:
从键盘输入5,5是素数则打印如下信息:
5isaprimenumber"
。
又如:
从键盘输入4,4不是素数则打印如下信息:
4isnotaprimenumber"
负数、0和1均不是素数。
对输入的数据要考虑数据的合法性,不满足条件的数要重新输入直到满足条件为止。
不能使用全局变量,不按给定的函数原型编写程序
不给分。
Fun()函数原型为:
intFun(intm);
**输入数据提示信息:
Pleaseinputanumber:
\n"
注:
该提示信息请放在循环体外
**输入数据格式为:
若是素数输出数据格式为:
%disaprimenumber\n"
若不是素数输出数据格式为:
%disnotaprimenumber\n"
不完整答案:
intFun(inta)
inti;
if(a>
1)
for(i=2;
i<
a;
i++)
if(a%i==0)
return0;
continue;
return1;
intb,c;
b);
c=Fun(b);
if(0==c)
b);
参考答案:
#include"
stdio.h"
intFun(intm);
intmain()
intm,flag;
do
m);
//1
while(m<
2);
//e1
flag=Fun(m);
//3
if(flag)//1
m);
intFun(intm)//2
inti,flag=1;
for(i=2;
i<
m;
i++)//1
if(m%i==0)//1
flag=0;
break;
returnflag;
//2
----------------------------------------------------------5
6.求1898
现將不超过2000的所有素数从小到大排成第一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。
请编程求出:
第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?
假如存在的话,又有几种这样的情况?
提示信息:
Therearefollwingprimesinfirstrow:
(%d).%3d,......,%d\n"
(1).101,......,1999
(2).89,......,1987
(3).53,......,1951
(4).3,......,1901
#defineN330
inta[N];
intc=0,b=0,d=1;
inti=0,j=0,k=0;
for(i=3;
i<
=2000;
{
for(j=2;
j<
i;
j++)
{
if(i%j==0)
break;
else
continue;
}
if(j==i)
a[k]=i;
k++;
else
continue;
}
for(c=329;
c>
=0;
c--)
for(b=c+1;
c<
b;
b++)
if(b<
330)
{
if((a[b]-a[c])==1898)
{
printf("
d,a[c],a[b]);
d++;
}
else
continue;
}
7.从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出"
Itisaprimenumber"
例如,用户输入90时,程序输出90=2*3*3*5;
用户输入17时,程序输出"
输入提示信息:
Inputm:
输入格式:
输出格式:
是素数时输出"
Itisaprimenumber\n"
否则输出用"
%d="
,"
%d*"
运行示例1:
90↙
90=2*3*3*5
运行示例2:
13↙
Itisaprimenumber
intIsPrime(intx);
voidOutputPrimeFactor(intx);
intm;
if(IsPrime(m))
m);
OutputPrimeFactor(m);
intIsPrime(intx)
inti,flag=1;
intsquareRoot=sqrt(x);
if(x<
=1)
flag=0;
for(i=2;
=squareRoot&
flag;
if(x%i==0)
voidOutputPrimeFactor(intx)
x;
i);
OutputPrimeFactor(x/i);
return;
x);
---------------------------7
8.
将任一整数转换为二进制形式。
Inputnumber:
numberofdecimalform:
it\'
sbinaryform:
876
it'
00000000000000000000001101101100
stdlib.h>
inta;
charb[32];
a);
%s\n"
itoa(a,b,2));
---------------------------8
9.
求自然数n最近的素数k,k>
n。
***输入提示信息**:
Inputn:
***输入数据格式**:
***输出数据格式**:
示例
输入:
257
输出:
Pleaseinputn:
263
intn,i=1,k;
n);
for(k=n+1;
i;
k++)
for(i=2;
k;
if(k%i==0)
break;
else
continue;
if(i==k)
k);
i=0;
---------------9
10.
如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么就被称它为完全数。
它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。
注意:
1没有真因子,所以不是完全数。
例如,6就是一个完全数,是因为6=1+2+3。
请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。
要求:
按如下原型编写判断完全数的函数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数。
intIsPerfect(intx);
**要求输出格式为
%disaperfectnumber\n"
%disnotaperfectnumber\n"
注:
不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程,主函数不能使用intmain和return0。
intm;
if(IsPerfect(m))
intIsPerfect(intx)
inti=1,b=0;
for(i=1;
x;
if(x%i==0)
b=b+i;
if(b==x)
return1;
---------------------10
11.
用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大值。
%d,%d"
Inputa,b:
max=%d\n"
5,8
max=8
intmax(inta,intb)
if(a>
=b)
returna;
returnb;
inta=0,b=0;
a,&
max(a,b));
---------------------------11
12.
利用求阶乘函数Fact(),编程计算并输出1!
+2!
+…+n!
的值。
%u"
Inputn(n>
0):
sum=%lu\n"
intsum_s(inti);
unsignedintn=0;
unsignedlongb=0;
for(b;
n;
n--)
b=b+sum_s(n);
intsum_s(inti)
for(a=1;
i--)
if(i>
1)
a=a*i;
a=a*1;
--------------------------------------12
13.
编程输出如下菜单界面(具体的输出则以下面提示中要求的输出格式为准):
=======大学信息管理系统=======
------------------------------
办公室管理财务管理
教务管理图书管理
科研管理设备管理
人事管理后勤管理
退出系统
请您在上述功能中选择(0——8):
提示:
输出如下格式
=======大学信息管理系统=======\n"
------------------------------\n"
1.办公室管理5.财务管理\n"
2.教务管理6.图书管理\n"
3.科研管理7.设备管理\n"
4.人事管理8.后勤管理\n"
0.退出系统\n"