沈工大C语言程序设计复习题.docx

上传人:b****4 文档编号:11970734 上传时间:2023-04-16 格式:DOCX 页数:17 大小:20.33KB
下载 相关 举报
沈工大C语言程序设计复习题.docx_第1页
第1页 / 共17页
沈工大C语言程序设计复习题.docx_第2页
第2页 / 共17页
沈工大C语言程序设计复习题.docx_第3页
第3页 / 共17页
沈工大C语言程序设计复习题.docx_第4页
第4页 / 共17页
沈工大C语言程序设计复习题.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

沈工大C语言程序设计复习题.docx

《沈工大C语言程序设计复习题.docx》由会员分享,可在线阅读,更多相关《沈工大C语言程序设计复习题.docx(17页珍藏版)》请在冰豆网上搜索。

沈工大C语言程序设计复习题.docx

沈工大C语言程序设计复习题

C语言程序设计复习题

题型:

填空、选择、读程序写结果(参看实验教程)、编程题

编程题如下:

1.输出100~1000以内的所有3位水仙花数。

所谓水仙花数是指所有位的数字的立方和等于该数。

例如153=1³+5³+3³(实验教程P25)

解:

#include

voidmain()

{

inti;

intw1,w2,w3;

for(i=100;i<999;i++)

{

w1=i%10;

w2=i/10%10;

w1=i/100%10;

if(i==w1*w1*w1+w2*w2*w2+w3*w3*w3)/*判断是否是水仙花数*/

printf(“%d”,i);

}

}

2.使用冒泡法对从键盘上输入的10个数进行排序(由大到小)。

(实验教程P33)

解:

#include

voidmain()

{

inti,j,temp;

inta[10];

printf(“Input10numbers:

\n”);

for(j=0;j<10;i++)

scanf(“%d”,&a[j]);

printf(“\n”);

for(i=1;i<10;i++)

for(j=0;j<10-I;j++)

if(a[j]

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

Printf(“Thesortednumbersis:

\n”);

for(j=0;j<10;j++)

printf(“%5d”,a[j]);

printf(“\n”);

}

3.设计一个实用程序,为比赛选手评分。

要求:

从十名评委的评分中扣除一个最高分,扣除一个最低分,然后统计总分,并除以8,最后得到这个选手的最后得分(打分采用百分制)。

(实验教程P37)

解:

分析:

定义一个一维数组用来存放10名评委为选手所给的成绩,从键盘上输入10名评委所给的成绩,计算成绩的总和,然后减掉最高分和最低分,再除以8,就可以得到选手的最后得分。

程序清单:

#include

voidmain()

{

intscore[10];/*定义数组存放10个评委的成绩*/

floatmark;

inti;

intmax=0;/*最高分*/

intmin=0;/*最低分*/

intsum=0;/*10评委的总和*/

for(i=0;i<10;i++)/*输入10个评委的成绩*/

{

printf(“PleaseEntertheScoreofNo.%d:

”,i+1);

scanf(“%d”,&score[i]);

sum=sum+score[i];/*将10个成绩求和*/

}

for(i=0;i<10;i++)/*查找最高分*/

{

if(scanf[i]>max)

max=score[i];

}

for(i=0;i<10;i++)/*查找最低分*/

{

if(score[i]

min=score[i];

}

mark=(sum-max-min)/8.0;/*计算平均成绩*/

printf(“Themarkoftheplayeris%.2f\n”,mark);

}

4.在主函数中输2~100之间的整数,调用函数判断其是否为素数,在主函数中输出这些素数。

(实验教程P60)

提示:

在第四章中的4.4.5中第2题给出了判断素数的方法。

还有一种方法就是:

如果一个整数能被小于它的某一个整数出尽,该数一定不是素数。

解:

#include

voidmain()

{

inti;

for(i=2;i

if(a%i==0)

return(0);

return

(1);

}

voidmain()

{

intj;

for(j=2;j<100;j++)

if(is_prime(j))

printf(“\n”);

}

 

5.使用递归方法,利用碾转相除法,求两个正整数的最大公约数,并在主函数调用该函数,输出计算结果。

(实验教程P64)

解:

#include

Intgcd(inta,intb)

{

if(a%b==0)

returnb;

else

returngcd(b,a%b);/*递归调用*/

}

voidmain()

{

intx,y,t;

printf(“Pleaseinput2number(x,y):

\n”);

scanf(“%d%d”,&x,&y);

while(x<0||y<0)/*如果是负数重新输入*/

{

printf(“ERROR!

Pleaseinput2number(x,y):

\n”);

scanf(“%d%d”,&x,&y);

}

t=gcd(x,y);/*函数调用*/

printf(“G,C,D(%d,%d)=%d\n”,x,y,t);

}

 

6.使用递归调用的方法计算n阶勒让德多项式的值。

(实验教程P66)

提示:

n阶勒让德多项式的递推公式为:

=

{

1(n=0)

fn(x)

X(n=1)

((2n-1)xfn-1(x)-(n-1)fn-2(x)/n(n>1)

解:

#include

floatfun(intn,intx);/*定义递归函数*/

{

intt;

if(n==0)/*如果n=0返回1*/

return

(1);

elseif(n==1)/*如果n=1返回x*/

return(x);

else/*否则递归计算*/

return(((2*n-1)*x*fun((n-1),x)-(n-1)*fun((n-2),x))/n;

}

voidmain()

{

intx,n;

printf(“Pleaseinputnandx:

\n”);

scanf(“%d%d”,&n,&x);

printf(“Theresultis:

%f\n”,fun(n,x));

}

7.编写程序,利用子函数实现计算字符串的长度。

(实验教程P92)

解:

程序代码如下:

#include

intlength(char*s);

voidmain()

{

chara[100];

inti;

printf(“Pleaseinputthestring:

\n”);

gets(a);

i=length(a);

printf(“\nThelengthofstringis%d”,i);

}

intlength(char*s)

{

char*p=s;

while(*p)

p++;

return(p-s);

}

8.编写程序,利用字符串实现两个字符串的合并。

(实验教程P93)

解:

程序代码如下:

#include“stdio.h”

char*link(char*p1,char*p2);

voidmain()

{

charstr1[100],str2[100];

printf(“Pleaseinputthefirststring:

\n”);

gets(str1);

printf(“nPleaseinputthesecondstring:

\n”);

gets(str2);

link(str1,str2);

printf(“\nThelinkedresultis:

\n”);

puts(str1);

}

char*link(char*p1,char*p2)

{

char*p;

p=p1;

while(*p1)

pl++;

while(*p2)

{

*p1=*p2;

P1++;

P2++;

}

*p1=’\0’;

return(p);

}

 

9.将一个整数字符串转换为一个整数,如“-1234”转换为-1234。

(实验教程P98)

解:

#include

#include

intchnum(char*p);

voidmain()

{

chars[6];

intn;

gets(s);

if(*s==’-’)

n=-chnum(s+1);

printf(“%d\n”,n);

}

chnum(char*p)

{

intnum=0,k,len,j;

len=strlen(p);

for(;*p!

=’\0’;p++)

{

k=*p-‘0’;

j=(--len);

while(j-->0)

k=k*10;

num=num+k;

}

Return(num);

}

 

10.编写计算个人所得税的程序输入一个纳税人的个人月收入,计算应纳的个人所得税。

(程序设计教程P65)

纳税是每个公民的义务。

我国的个人所得税税率表如下表所示:

级数

应纳税金额(月收入-1600)

税率%

1

不超过500元

5

2

500元~2000元

10

3

2001~5000元

15

4

5001~20000元

20

5

20001~40000元

25

6

40001元~60000元

30

7

60001元~80000元

35

8

80001元~100000元

40

9

超过100000元

45

解:

源程序清单如下:

#include”stdio.h”

voidmain()

{

doublesalary,s,tax;

printf(“pleaseinputyoursalaryonemonth:

”);

scanf(“%lf”,&salary);

s=salary-1600;

if(s<=500)

tax=s*0.05;

elseif(s<=2000)

tax=(s-500)*0.1+500*0.05;

elseif(s<=5000)

tax=(s-2000)*0.15+1500*0.1+500*0.05;

elseif(s<=20000)

tax=(s-5000)*0.2+3000*0.15+1500*0.1+500*0.05;

elseif(s<=40000)

tax=(s-20000)*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.\05;

elseif(s<=60000)

tax=(s-40000)*0.3+20000*0.25+15000*0.2+3000*0.15+1500*\0.1+500*0.05;

elseif(s<=80000)

tax=(s-60000)*0.35+20000*0.3+20000*0.25+15000*0.2+3000\*0.15+1500*0.1+500*0.05;

elseif(s<=100000)

tax=(s-80000)*0.4+20000*0.35+20000*0.3+20000*0.25+1500\0*0.2+3000*0.15+1500*0.1+500*0.05;

elseif(s<=100000)

tax=(s-100000)*0.45+20000*0.4+20000*0.35+20000*0.3+200\00*0.25+15000*0.2+3000*0.15+1500*0.1+500*0.05;

printf(“taxis%10.2f\n”,tax);

}

程序说明:

1)变量salary中存放的是月收入;s存放月收入中应纳税的金额,月收入减去减免税金额,即月收入减去1600元;

tax是计算出来的纳税额。

2)公式中的“\”是换行符,由于写不下,用“\”符号标识下一行是本行的续行。

3)本例要处理多种情况,最适合使用elseif形式。

因为很难找到月收入中应纳税的金额与一个常量之间的关系,因此不适合使用switch语句。

11.求出斐波那契数列的前20项,存在数组中,并将他们输出。

(程序设计教程P73){说明:

【斐波那契数列是一递推数列,满足下面关系:

fib(0)=1,fib

(1)=1,fib(n)=fib(n-1)+fib(n-2)(n≧2)】对于这个问题,可以定义一个整形数组,用于存放20个整数,先将fib(0)和fib

(1)赋初值,然后建立一个循环,每次取出两个数进行递推求值,并将其存入数组中,每输出5项数据换行,直到前20项都被计算出来为止。

}

解:

源程序清单如下:

#include

voidmain()

{

inti,fib[20]={1,1};/*初始化*/

printf(”\n”);

for(i=2;i<20;i++)/*计算后18项斐波那契数列中的数据并存入数组*/

fib[i]=fib[i-2]+fib[i-1];

for(i=0;i<20;i++)/*输出数组*/

{

if(i%5==0)/*每输出5个数据换行*/

printf(“\n”);

printf(“%10d”,fib[i]);

}

printf(“\n”)

}

{注:

数组fib采用部分初始化法,将fib(0)和fib

(1)初始化为1,其他各元素默认为0,用于存储后18项结果。

使用for循环语句从数组的第3个元素开始递推计算后18项数据,并存储在数组fib中(从数组的第3位开始)。

接下来又使用循环语句输出数据的全部元素,每输出5个数据就换行}

 

12.编写一函数,求x的m次方的值,其中m是整数。

(程序设计教程P102)

{求任意m个x的乘积,可把x和m作为函数的参数,数据从主调函数里传递,增强了函数的灵活性。

使用循环结构设计该算法,最后将计算所得的值返回}

解:

#include

doublemul(doublex,intm)

{

inti=0;

doublep=1.0;

for(;i

p=-p*x;

return(p);

}

voidmain()

{

doublex,y;

intm;

printf(“Inputthenumbers(x,m):

\n”);

scanf(“%lf%d”,&x,&m);

y=mul(x,m);/*函数调用*/

printf(“Theresultis:

%6.5lf\n”,y);

}

说明:

在程序中定义了mul()函数,其类型为double型,形参表中有两个形参x、m。

由于函数定义在主调函数之前,在主调函数中就可以不对其进行函数声明。

使用用户自定义函数时,要分清形参如何设定,包括其类型、个数及顺序,以便在发生函数调用时,准确地将实参值传递给实参,这样才不会出项错误。

x、y定义为double类型,它的格式控制符为%lf,不能写成%f,以免出错。

函数调用结束后,将计算结果输出。

 

13.在主调函数调用函数计算5!

的值。

(程序设计教程P120)

解:

源程序清单如下:

#include

intfun(intn)/*定义函数计算阶乘值*/

{

inti;

staticintf=1;/*定义静态局部变量*/

for(i=1;i<=n;i++)/*循环计算n!

乘值*/

f=f*i;

return(f);/*返回函数值*/

}

voidmain()

{

intn;

printf(“Inputthenumber:

\n”);/*输入数据*/

scanf(“%d”,&n);

printf(“%d!

=%d\n”,n,fun(n));/*调用函数*/

}

说明:

在自定义函数fun()中,程序定义了静态局部变量f,用来存放每一次调用此函数计算后的值,该值在每次调用后保留其值并在下一次调用时继续使用,所以输出值为累乘的结果。

 

14.求一个数组中所有元素的最大值和最小值,并将其放入数组的最前面的两个元素的位置。

(程序设计教程P143)

解:

#include

voidmaxmin(int*p,intlength);

voidmain()

{

inta[10]={2,5,7,1,10,4,6,33,20,9};

maxmin(a,10);

printf(“max=%d,min%d”,a[0],a[1]);

}

voidmaxmin(int*p,intlength)

{

intk,max=0,min=0;

for(k=1;k

{

if(p[k]>p[max])

max=k;

elseif(p[k]

min=k;

}

p[0]=p[max];

p[1]=p[min];

}

说明:

在子函数中实现了对数组中元素的最大值和最小值的求值,并把最大值和最小值放到了数组的最前面的两个元素中。

因为函数传递的参数是数组的首地址,因此在子函数中对数组的全部操作,就是对主函数中数组的操作。

 

15.编写一个程序,将一个字符串写入文件“E:

\test.txt”后,再从该文件中读出该字符串。

(程序设计教程P198)

解:

#include“stdio.h”

voidmain()

{

FILE*fp;

charch[]=”Clanguage”,*str;

intx;

fp=fopen(“E:

\\test.txt”,”w”);

if(fp==NULL)

{

printf(“\nCan’topenthefile!

”);

return;

}

x=fputs(ch,fp);/*测试函数的返回值*/

printf(”x=%d”,x);

printf(“\nCharacterinputfinished!

\n”);

fclose(fp);

fp=fopen(“E:

\\test.txt”,”r”);

if(fp==NULL)

{

printf(“\nCan’topenthefile!

”);

return;

}

puts(fgets(str,20,fp));

fclose(fp);

}

程序说明:

首先,程序以只写的方式打开E盘根下的文本文件test.txt,向文件中一次性写入字符串“CLauguage”后,返回最后一个字符的ASCII值。

最后一个字符是“e”,因此返回“e”的ASCII值,“x=101”。

显示写入完成,并关闭文件。

重新以只读的方式打开该文件,从文件中读出刚才写入的内容,最后关闭文件。

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

当前位置:首页 > 经管营销 > 经济市场

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

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