C语言练习题答案.docx

上传人:b****7 文档编号:9833676 上传时间:2023-02-06 格式:DOCX 页数:175 大小:58.67KB
下载 相关 举报
C语言练习题答案.docx_第1页
第1页 / 共175页
C语言练习题答案.docx_第2页
第2页 / 共175页
C语言练习题答案.docx_第3页
第3页 / 共175页
C语言练习题答案.docx_第4页
第4页 / 共175页
C语言练习题答案.docx_第5页
第5页 / 共175页
点击查看更多>>
下载资源
资源描述

C语言练习题答案.docx

《C语言练习题答案.docx》由会员分享,可在线阅读,更多相关《C语言练习题答案.docx(175页珍藏版)》请在冰豆网上搜索。

C语言练习题答案.docx

C语言练习题答案

1.已知三角形的三边长为a,b,c,计算三角形面积的公式为:

area=sqrt(s(s-a)(s-b)(s-c)),其中s=(a+b+c)/2。

试编程从键盘输入a,b,c的值(假设a,b,c的值可以保证其构成一个三角形),计算并输出三角形的面积。

**输入格式要求:

"%f,%f,%f"提示信息:

"Inputa,b,c:

"

**输出格式要求:

"area=%.2f\n"

程序运行示例如下:

Inputa,b,c:

3,4,5

area=6.00

答案:

#include

#include

intmain(void)

{

floata,b,c,s,area;

printf("Inputa,b,c:

");

scanf("%f,%f,%f",&a,&b,&c);

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("area=%.2f\n",area);

return0;

}

-----------------1

2.从键盘任意输入一个4位整数,编程计算并输出它的逆序数.例如:

输入1234,分离出千位1、百位2、十位3和个位4,然后计算4*1000+3*100+2*10+1=4321,并输出4321。

**要求输入提示信息为:

**要求输入格式为:

"%d"

**要求输出格式为:

"%d"

程序运行示例如下:

1234此处为输入

4321此处为输出

答案:

#include

intmain(void)

{

inta,b,c,d,e;

scanf("%d",&a);

b=a/1000;

c=a%1000/100;

d=a%100/10;

e=a%10;

a=e*1000+d*100+c*10+b;

printf("%d",a);

return0;

}

--------------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;

scanf("%c",&c);

scanf("%c",&d);

scanf("%d",&f);

scanf("%d",&g);

printf("%c,%c,%c,%c,%f,%d",c,d,f,g,b,k);

}

答案:

#include

main()

{

doubleb;

inta=65535;

charc,d;

intf,g;

b=(1234.0-1)/10;

scanf("%c",&c);

scanf("%c",&d);

scanf("%c\t",&f);

scanf("%c",&g);

printf("%c,%c,%c,%c,%f,%d",c,d,f,g,b,a);

}

--------3

4.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。

请找出以下程序的错误,并改正之。

#include

#include

 

#defineARR_SIZE=80; 

 

main()

{

    charstr[ARR_SIZE];

    int len,i;

    int letter=0,digit=0,space=0,other=0;

 

    printf("请输入一个字符串:

");

    gets(str);

 

    len=strlen(str);   

 

    for(i=0;i

    {

        if(a=

        {

            letter++;  

        }               

        elseif(0=

        {

            digit++;     

        }           

        elseif(str[i]='')  

        {                  

            space++;    

        }       

        else

            other++;            

    }

 

    printf("英文字符数:

%d\n",letter);

    printf("数字字符数:

%d\n",digit);

    printf("空格数:

%d\n",space);

    printf("其他字符数:

%d\n",other);

}

答案:

#include

#include

 

#defineARR_SIZE 80

 

main()

{

    charstr[ARR_SIZE];

    int len,i;

    int letter=0,digit=0,space=0,other=0;

 

    printf("请输入一个字符串:

");

    gets(str);

 

    len=strlen(str);

 

    for(i=0;i

    {

        if('a'<=str[i]&&str[i]<='z'||'A'<=str[i]&&str[i]<='Z')

        {

            letter++;

        }

        elseif('0'<=str[i]&&str[i]<='9')

        {

            digit++;

        }

        elseif(str[i]=='')

        {

            space++;

        }

        else

            other++;

    }

 

    printf("英文字符数:

%d\n",letter);

    printf("数字字符数:

%d\n",digit);

    printf("空格数:

%d\n",space);

    printf("其他字符数:

%d\n",other);

}

--------------------4

5.对输入的一个数判断是否是素数。

所谓素数是指这个数只能被1和自身整除。

要求在主函数输入一个数,调用函数Fun()判断该数是否是素数。

打印信息在主函数中进行。

例如:

从键盘输入5,5是素数则打印如下信息:

"5isaprimenumber"。

又如:

从键盘输入4,4不是素数则打印如下信息:

"4isnotaprimenumber"。

负数、0和1均不是素数。

对输入的数据要考虑数据的合法性,不满足条件的数要重新输入直到满足条件为止。

不能使用全局变量,不按给定的函数原型编写程序

不给分。

Fun()函数原型为:

intFun(intm);

**输入数据提示信息:

"Pleaseinputanumber:

\n"

注:

该提示信息请放在循环体外

**输入数据格式为:

"%d"

**输出格式要求:

若是素数输出数据格式为:

"%disaprimenumber\n"

若不是素数输出数据格式为:

"%disnotaprimenumber\n"

不完整答案:

#include

intFun(inta)

{

    inti;

    if(a>1)

    {

        for(i=2;i

          {

             if(a%i==0)

             return0;

             else

             continue;

          }

        return1;

    }

    else

    return0;

     

}

main()

{

    intb,c;

    printf("Pleaseinputanumber:

\n");

    scanf("%d",&b);

    c=Fun(b);

    if(0==c)

    printf("%disnotaprimenumber\n",b);

    else

    printf("%disaprimenumber\n",b);

     

}

参考答案:

#include"stdio.h"

intFun(intm);

intmain()

{               

    intm,flag;

 

    printf("Pleaseinputanumber:

\n");

    do

    {               

        scanf("%d",&m);//1

    }

    while(m<2);//e1

 

    flag=Fun(m);//3

 

    if(flag)//1

        printf("%disaprimenumber\n",m);

    else

        printf("%disnotaprimenumber\n",m);//1

 

    return0;

}               

intFun(intm)//2

{               

    inti,flag=1;//1

 

    for(i=2;i

    {               

        if(m%i==0)//1

        {               

            flag=0;//1

            break;

        }

    }

    returnflag;//2

}              

----------------------------------------------------------5

6.求1898

现將不超过2000的所有素数从小到大排成第一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。

请编程求出:

第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?

假如存在的话,又有几种这样的情况?

**输入格式要求:

提示信息:

"Therearefollwingprimesinfirstrow:

\n"

**输出格式要求:

"(%d).%3d,......,%d\n"

程序运行示例如下:

Therearefollwingprimesinfirstrow:

(1).101,......,1999

(2).89,......,1987

(3).53,......,1951

(4).3,......,1901

答案:

#include

#defineN330

inta[N];

intmain()

{

intc=0,b=0,d=1;

inti=0,j=0,k=0;

for(i=3;i<=2000;i++)

{

for(j=2;j

{

if(i%j==0)

break;

else

continue;

}

if(j==i)

{

a[k]=i;

k++;

}

else

continue;

}

printf("Therearefollwingprimesinfirstrow:

\n");

for(c=329;c>=0;c--)

for(b=c+1;c

if(b<330)

{

if((a[b]-a[c])==1898)

{

printf("(%d).%3d,......,%d\n",d,a[c],a[b]);

d++;

}

else

continue;

}

else

break;

}

7.从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出"Itisaprimenumber"。

例如,用户输入90时,程序输出90=2*3*3*5;用户输入17时,程序输出"Itisaprimenumber"。

输入提示信息:

"Inputm:

"

输入格式:

"%d"

输出格式:

是素数时输出"Itisaprimenumber\n"

否则输出用"%d=","%d*"

运行示例1:

Inputm:

90↙

90=2*3*3*5

运行示例2:

Inputm:

13↙

Itisaprimenumber

答案:

#include

#include

intIsPrime(intx);

voidOutputPrimeFactor(intx);

intmain()

{

intm;

printf("Inputm:

");

scanf("%d",&m);

if(IsPrime(m))

{

printf("Itisaprimenumber\n");

}

else

{

printf("%d=",m);

OutputPrimeFactor(m);

}

return0;

}

intIsPrime(intx)

{

inti,flag=1;

intsquareRoot=sqrt(x);

if(x<=1)

{

flag=0;

}

for(i=2;i<=squareRoot&&flag;i++)

{

if(x%i==0)

{

flag=0;

}

}

returnflag;

}

voidOutputPrimeFactor(intx)

{

inti;

for(i=2;i

{

if(x%i==0)

{

printf("%d*",i);

OutputPrimeFactor(x/i);

return;

}

}

printf("%d",x);

}

---------------------------7

8.

将任一整数转换为二进制形式。

**输入格式要求:

"%d"提示信息:

"Inputnumber:

"

**输出格式要求:

"numberofdecimalform:

%d\n""it\'sbinaryform:

"

程序运行示例如下:

Inputnumber:

876

numberofdecimalform:

876

it'sbinaryform:

00000000000000000000001101101100

答案:

#include

#include

intmain()

{

inta;

charb[32];

printf("Inputnumber:

");

scanf("%d",&a);

printf("numberofdecimalform:

%d\n",a);

printf("it\'sbinaryform:

");

printf("%s\n",itoa(a,b,2));

}

---------------------------8

9.

求自然数n最近的素数k,k>n。

***输入提示信息**:

"Inputn:

"

***输入数据格式**:

"%d"

***输出数据格式**:

"%d"

示例

输入:

257

输出:

Pleaseinputn:

263

答案:

#include

intmain()

{

intn,i=1,k;

printf("Pleaseinputn:

");

scanf("%d",&n);

for(k=n+1;i;k++)

{

for(i=2;i

if(k%i==0)

break;

else

continue;

if(i==k)

{

printf("%d",k);

i=0;

break;

}

}

}

---------------9

10.

如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么就被称它为完全数。

它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。

注意:

1没有真因子,所以不是完全数。

例如,6就是一个完全数,是因为6=1+2+3。

请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。

要求:

按如下原型编写判断完全数的函数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数。

intIsPerfect(intx);

**要求输入提示信息为:

"Inputm:

\n"

**要求输入格式为:

"%d"

**要求输出格式为

"%disaperfectnumber\n"

"%disnotaperfectnumber\n"

注:

不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程,主函数不能使用intmain和return0。

答案:

#include

intIsPerfect(intx);

intmain()

{

intm;

printf("Inputm:

\n");

scanf("%d",&m);

if(IsPerfect(m))

printf("%disaperfectnumber\n",m);

else

printf("%disnotaperfectnumber\n",m);

}

intIsPerfect(intx)

{

inti=1,b=0;

for(i=1;i

if(x%i==0)

{

b=b+i;

continue;

}

else

continue;

if(b==x)

return1;

else

return0;

}

---------------------10

11.

用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大值。

**输入格式要求:

"%d,%d"提示信息:

"Inputa,b:

"

**输出格式要求:

"max=%d\n"

程序运行示例如下:

Inputa,b:

5,8

max=8

答案:

#include

intmax(inta,intb)

{

if(a>=b)

returna;

else

returnb;

}

main()

{

inta=0,b=0;

printf("Inputa,b:

");

scanf("%d,%d",&a,&b);

printf("max=%d\n",max(a,b));

}

---------------------------11

12.

利用求阶乘函数Fact(),编程计算并输出1!

+2!

+…+n!

的值。

**输入格式要求:

"%u"提示信息:

"Inputn(n>0):

"

**输出格式要求:

"sum=%lu\n"

答案:

#include

intsum_s(inti);

main()

{

unsignedintn=0;

unsignedlongb=0;

printf("Inputn(n>0):

");

scanf("%u",&n);

for(b;n;n--)

{

b=b+sum_s(n);

}

printf("sum=%lu\n",b);

}

intsum_s(inti)

{

inta;

for(a=1;i;i--)

{

if(i>1)

a=a*i;

else

a=a*1;

}

returna;

}

--------------------------------------12

13.

编程输出如下菜单界面(具体的输出则以下面提示中要求的输出格式为准):

=======大学信息管理系统=======

------------------------------

办公室管理财务管理

教务管理图书管理

科研管理设备管理

人事管理后勤管理

退出系统

------------------------------

请您在上述功能中选择(0——8):

 

提示:

输出如下格式

"=======大学信息管理系统=======\n"

"------------------------------\n"

"1.办公室管理5.财务管理\n"

"2.教务管理6.图书管理\n"

"3.科研管理7.设备管理\n"

"4.人事管理8.后勤管理\n"

"0.退出系统\n"

"------------------------------\n"

"请您在上述功能中选择(0——8):

\n"

答案:

#include

main()

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1