计算机C语言上机题及答案_第1页
计算机C语言上机题及答案_第2页
计算机C语言上机题及答案_第3页
计算机C语言上机题及答案_第4页
计算机C语言上机题及答案_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

期末考试说明

本次考试全部采用笔试形式,分为如下三种题型

一、程序阅读题(10空X2分/空=20分)

二、程序修改题(10空X2分/空=20分)

三、程序设计题(6题X10分/题=60分)

程序阅读和修改题主要涉及知识点如下:

scanf和printf、switch循环(for、while、do-while)及和break、continue结合、

二维数组处理、字符串处理、函数递归调用、static、宏定义展开、文件定义、打开fopen、

关闭fclose和读写操作(fscanf和fprintf)

程序设计题主要考核如下内容:

1.单纯的分支结构

2.单纯的一层循环结构

3.实现完整的函数:函数的定义、函数体的编写、带返回值的和不带返回值的函数、值

传递、地址传递。涉及到分支、循环、数组、字符串、结构体等。

以下内容不做考试要求:

指向二维数组的指针、指针函数、指针数组、多级指针、共用体、枚举、位运算、文件

fseek、ftelkfread和fwrite

计算机C语言上机题、

第四章

4.1温度转换,第一个数据(1或2)确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);

#include<stdio.h>

intmain()

(

intx;

floatC,F,a;

scanf("%d%f',&x,&a);

if(x==l)

(

C=(a-32)*5/9;

printf("TheCentigradeis%.2f\nu,C);

)

else

(

F=(a*9/5)+32;

printf("ThcFahrenheitis%.2f\n'\F);

)

return0;

)

第五章

5.1输出一行星号

#include<stdio.h>

#include<stdlib.h>

intmain()

(

inta,b=I;

scanf("%d",&a);

while(b<=a)

{

printf("*");

b=b+1;

)

printf("\n");

return0;

}

5.2打印平行四边形

问题描述

输入图形的高n,输出如下例(n=5)所示的图形.

*****

*****

*****

*****

*****

输入

整数n例如5

输出

由*组成的高为5的平行四边形

#include<stdio.h>

#include<stdlib.h>

inimain()

{

inta,b,c,n;

scanf("%d",&n);

a=l;

while(a<=n)

(

b=l;

while(b<=a-l)

(

printfC");

b=b+l;

)

c=l;

while(c<=n)

(

printfC*");

c=c+1;

}printfC\n");

a=a+l;

I

return0;

)

5.3编程计算

问题描述

编写程序,输入n的值,求:i-i/2+i/3-i/4+i/5-i/6+i/7・・・・+i/n(保留四位小数)

输入

n的值

输出

上述算式的求和结果(结果保留四位小数)

输入样例

1

输出样例

sum=i.oooo

#includc<stdio.h>

#include<stdlib.h>

#include<math.h>

intmain()

{

intn,a=l;

doublesum=0;

scanf("%d”,&n);

while(a<=n)

(

sum=sum+(1.0/a)*pow(-1,a-1);

a=a+1;

)

printf("sum=%.41f\n,,,sum);

return0;

}

5.4分数序列

问题描述

2358_1321_

有一个分数序列:1235813输入整数必求出其前n项

的和。

输入

整数n

输出

上述分数序列的前n项之和

提示:输出语句格式为printf(Hsum=%i6.iof\nH,s);

输入样例

1

输出样例

sum=2.0000000000

#include<stdio.h>

#include<stdlib.h>

intmain()

(

intn,c,i=l;

doubles=0,a=2,b=1;

scanf("%d",&n);

while(i<=n)

(

s=s+a/b;

c=a;

a=a+b;

b=c;

i++;

}

printf("sum=%16.1OfXn'^s);

return0;

)

5.5求e的值

问题描述

编写程序,从键盘输入整数n,求e的值。e=i+i/i!+i/2!+i/3!+..+i/n!注意:用

double型数据计算。

输入

整数n

输出

e的值

提示:输出语句printf(ne=%i6.iof\nM,e);

输入样例

2

输出样例

e=2.5000000000

#includc<stdio.h>

#include<stdlib.h>

intmain()

{

intn;

doubleb=l,a=1,i=l,e=l;

scanf(,'%d*',&n);

while(i<=n)

(

while(a<=i)

(

b=b/a;

a++;

I

e=e+b;

i++;

)

printf("e=%16.1Of\nn,e);

return0;

)

5.6求最大公约数

问题描述

输入两个正整数m和n,求它们的最大公约数和最小公倍数

输入

两个正整数m和n

输出

m和n的最大公约数和最小公倍数

输入样例

28

输出样例

thegreatestcommondivisoris2

theleastcommonmultipleis8

#include<stdio.h>

#include<stdlib.h>

inimain()

{

intr=l,m,n,d,a,b;

scanf("%d%d",&m,&n);

a=m;

b=n;

if(m%n==O&&m^>n)

(

r=n;

)

if(m%n==0&&m<n)

(

r=m;

}

while((m%n)!=0)

(

r=m%n;

m=n;

n=r;

I

d=a/r*b;

printf("thegreatestcommondivisoris%d\n",r);

printf("theleastcommonmultipleis%d\n",d);

return0;

I

5.7水仙花数

问题描述

输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本

身。例如153是一水仙花数,因为153=13+53+33

输入

输出

所有的水仙花数提示:输出语句printf(H%d\nH,n);

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inin=IOO,a,b,c,d;

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

(

a=n%10;

b=n/10%10;

c=n/100%10;

d=a*a*a+b*b*b+c*c*c;

if(n==d)

(

printf("%d\n'\n);

}

}

return0;

}

5.8完数

问题描述

一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且

6=1+2+3,因此6是完数。

输入

一个正整数n

输出

判断n是否为完数。如果是,则输出Yes和它的所有因子;否则,输出No

输入样例

6

输出样例

Yes,itsfactorsare123

#include<stdio.h>

#include<stdlib.h>

intmain()

(

intn,a=l,c,b=O;

scanf("%d”,&n);

fbr(a=1;a<n;a++)

(

c=n%a;

if(c==O)

(

b=b+a;

)

}

if(n==b)

1

printf("Yies,itsfactorsare');

fbr(a-1,a<n;a十十)

(

c=n%a;

if(c==O)

(

prinlfC%d",a);

else

{

printf("No");

)

printf("\n");

return0;

)

5.9素数

问题描述

输入两个正整数m和n,求出[m,n]区间的所有素数

输入

两个整数m和n

输出

[m,n]区间的所有素数

输入样例

210

输出样例

2357

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inti,a,n,m;

scanf("%d%d",&m,&n);

fbr(a=m;a<n;a++)

{

fbr(i=2;i<=a;i++)

{

if(a%i==O)

{

break;

)

}

if(i==a)

(

printf("%d",a);

)

)

printfC'\n");

return0;

I

5.10回文数

问题描述

输入一个正整数,判断是否为回文数。

输入

一个正整数n

输出

如果是,输出Yes,否则输出No

输入样例

12321

输出样例

Yes

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inta,n,m=0;

scanf(',%d,,,&n);

a=n;

while(n!=O)

(

m=m*10+n%10;

n=n/10;

)

if(m==a)

(

printf("Yes\n");

)

else

(

prinlf("No'n”);

)

return0;

}

5.11贪吃的猴子

问题描述

有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了

一个。第2天早上乂将剩卜的桃子吃掉一半,还是觉得不过瘾,就乂多吃了两个。以后

每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5

个)。到第n天早上再想吃的时候,就只剩下一个桃子了。

输入

天数n

输出

第一天的桃子个数。提示:输出语句为

printf(HThemonkeygot%dpeachsinfirstday.\nn,sum);

输入样例

5

输出样例

Themonkeygot114peachsinfirstday.

提示:

问题分析:

总共to

日吃掉剩余

1tO/2+1tO-(tO/2+l)=tO/2-ltl=tO/2-l=>to=(tl+l)*2

2tl/2+2tl-(tl/2+2)=tl/2-2t2=tl/2-2=>tl=(t2+2)*2

n-1tn-2/2+(n-l)tn-2-(tn-2/2+(n-l))=tn-2/2-(Il-l)tn-i=tn-2/2-(n-l)=>tn-2=(tn-i+Il-l)*2

H1Otn-i=l

#include<stdio.h>

#includc<stdlib.h>

intmain()

(

doublen,i,m=l;

scanf("%ir,&n);

for(i=l;i<=n-l;i++)

(

m=(n-i+m)*2;

)

printf(,'Themonkeygot%.01fpeachsinfirstday.\n'\m);

return0;

)

5.12马戏团人数

问题描述

一个马戏团表演,n个座位全满,全部门票收入是120元,现在知道,男人每人5元,

女人每人2元,小孩每人1角。根据总人数,计算出男人、女人和小孩各多少人。

输入

总人数n

输出

男人、女人和小孩人数,若n人无法满足条件,则输出“Nooutput'n

#include<stdio.h>

#include<stdlib.h>

intmain()

(

intx,y,z,n;

scanf("%dn,&n);

fbr(x=0;x>=0&&x<=24;x++)

(

for(y=0;y>=0&&y<=60;y++)

(

z=n-x-y;

if(50*x+20*y+z==1200&&z>=0)

{

printf("%d%d%d\n",x,y,z);

if((n%5)!=0&&(n%2)!=0&&(50*x+20*y+z)!=1200)

(

printf("Nooulput\n");

)

return0;

}

5.13迭代法

问题描述

用迭代法求x=。求平方根的迭代公式为:

要求前后两次求出的X的差的绝对值小于1O工

输入

a

输出

右的值

输入样例

4

输出样例

Thesquarerootof4.00is2.00000

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

intmain()

(

floata,xi,x2;

scanf(M%f,,&a);

xi=sqrt(a);

x2=i/2*(xi+a/xi);

do

{

xi=sqrt(a);

x2=i/2*(xi+a/xi);

}while(fabs(x2-xi)<o.oooooi);

printf("Thesquarerootof%.2fis%,5f\n",a,xi);

returno;

}

5.14cos(x)-x=o

利用以下所示的简单迭代方法求方程:cos(x)-x=o的一个实根。

Xn+i=COS(Xn)

迭代步骤如下:

⑴输入数据给XI;

(2)XO=X1,把XI的值赋给X0;

(3)xi=cos(xo),求出一个新的xi;

(4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);

(5)所求XI就是方程cos(x)-x=o的一个实根,输出XI,输出语句为printf(ux=%lf',x);o

提示:本题xo和xi定义为doub加类型

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

intmain()

(

doublea,b;

scanf("%lf\n",&a);

b=cos(a);

while(fabs(b-a)>0.000001)

(

a=b;

b=cos(a);

}

printf("x=%f\n'\b);

return0;

}

5.15求一个三位数,其值等于其各位阶乘之和

问题描述

编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。

输入

输出

满足上述条件的三位数。提示:输出格式为printf("%d\n”,mim);

#include<stdio.h>

#include<stdlib.h>

intmain()

inta,b,c,ij,k,m,n,s;

fbr(a=l;a<=9;a++)

for(b=l;b<=9;b十十)

for(c=l;c<=9;c++)

m=l;

n=l;

s=l;

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

m*=i;

for(j=l;j<=b;j++)

n*=j;

for(k=1;k<=c;k++)

s*=k;

if(lOO*a+lO*b+c==m+n+s)

printf("%d\n",m+n+s);

return0;

第六章

6.1谁能出线

背景:

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,

每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下

一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

输入:

按顺序给出一个小组1O个人的最后得分(int)。

输出:

能够出线的学生序号(o~9)。

#include<stdio.h>

#include<stdlib.h>

#dcfineN10

intmain()

{

inta[N],i,n,m;

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

scanf("%d",&a[i]);

m=a[O];

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

(

if(m<a[i])

{

m=a[i];

)

)

fdr(i=O;i<10;i++)

(

if(m==a[i])

(

n-i;

printf("%d\n",n);

}

}

return0;

)

6.2统计素数个数

求出2到m之间(含m,m<=iooo)所有素数并放在数组a中。

输入:正整数m

输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)

如:

输入:1O

输出:2357

4

#include<stdio.h>

#defineN500

intmain()

{

inta[N],m,ij,x,k=0;

scanf(H%d'\&m);

fbr(i=2;i<=m;i++)

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

if(i%j==O)

(

break;

if(i==j)

(

a[k]=j;

k++;

)

for(x=O;x<k;x++)

(

printf("%4d",a[x]);

}

printf("\n");

printf("%d\n';k);

return0;

)

6.3冒泡法排序

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大

数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后

比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,

将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第

一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第

2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经

是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列

中是第二大的数)。如此下去,重更以上过程,直至最终完成排序。由于在排序

过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

编写程序,对输入的十个数按照从小到大排序

#include<stdio.h>

#includc<stdlib.h>

#defineN10

intmain()

(

inta[N],i,j,t;

fbr(i=O;i<N;i++)

scanff%d”,&a[i]);

for(i=O;i<(N-l);i++)

(

fbr(j=i+l;j<N;j++)

{

if(a[j]<a[i])

{

t=a[j];

a[j]=a[i];

a[i]=t;

printf("%d",a[i]);

)

printfC%d';a[i]);

printf("\n");

return0,

}

6.4插入法排序

如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插

入后的数组元素依然保持有序。

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一

个要插入的元素,使得插入后仍然有序。

#include<stdio.h>

#include<stdlib.h>

#dcfineN10

intmain()

{

inia[N+l],i,x,k;

fbr(i=0;i<N;i++)

{

scanf("%d”,&a[i]);

}

scanf("%d”,&x);

fbr(i=9;i>=0;i-)

if(a[i]<=x)

(

k=i+l;

break;

else

k=0;

}

}

fbr(i=10;i>k;i-)

(

a[i]=a[i-l];

}

a[k]=x;

for(i=O;i<N+l;i++)

1

printf("%d",a[i]);

)

printf("\n");

return0;

1

6.5求各位数字中组成的最大数

任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入1593,则

输出为9531。

输入:自然数n

输出:各位数字组成的最大数

#include<stdio.h>

#include<stdlib.h>

#dcfineN100

intmain()

{

inia[N],i,n,pj,k=0;

scanf("%d",&n);

fbr(i=0;i<N;i++)

{

aliJ=n%10;

n=n/I0;

k++;

if(n==0)

(

break;

for(i=0;i<k-l;i++)

for(j=i+l;j<k;j++)

(

if(a[il<a[j])

{

P=a[il;

a[i]=a[j];

a[j]=p;

I

for(i=O;i<k;i++)

{

printf("%d",a[i]);

)

printf("\n");

return0;

}

6.6数组逆序输出、

问题描述

从键盘上输入一个数组(io个元素),将原数组逆序重新排列后输出。要求输出每个

元素时以一个空格隔开。

提示:

用第一个与最后一个交换。

#include<stdio.h>

#include<stdlib.h>

#defineN10

intmain()

{

inta[N],z,i,j;

fbr(i=0;i<N;i++)

(

scanf("%d",&a[i]);

I

for(j=0;j<i/2;j++)

(

z=a[j];

aU]=a[9-j];

a[9-j]=z;

for(i=0;i<N;i++)

printf("%d",a[i]);

printfC'^");

return0;

)

6.7求最大值

问题描述

要求从键盘输入10个整型数据,找出其中的最大值并显示出来。

输入范例

3o54-71027327671015002

输出范例

3”67

提示

先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。

#include<stdio.h>

#include<stdlib.h>

#dcfineN10

inimain()

{

inta[N],z,ij;

for(i=0;i<N;i++)

(

scanf("%d”,&a[i]);

)

z=a[0];

for(i=0;i<N;i++)

(

if(z<a[i])

(

z=a[i];

}

)

printf("%d\n',,z);

return0;

)

6.8二维数组

问题描述:

程序定义了4X4的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素

中的值乘以no

例如:

数组中的值为

1234

2234

3234

4234

假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4(1)

10234

202034

3020304

40203040

#includc<stdio.h>

#include<sldlib.h>

intmain()

(

inta[4][4];

intn,i,j;

fbr(i=O;i<4;i++)

(

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

(

scanfC%d",&a[i][j]);

)

}

scanf(,'%d,,,&n);

fbr(i=O;i<4;i++)

{

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

I

a[i]|jl=n*a[i][j];

)

}

fbr(i=0;i<4;i++)

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

printf("%4d,\a[ij[j]);

prinifCXn");

I

return0;

}

6.9在屏幕上输出杨辉三角

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排

列。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数

学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。

杨辉三角有如下性质:

1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。

2、第n行的数字个数为n个。

3、每个数字等于上一行的左右两个数字之和。

编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉

三角形(注意数据之间的空格)。例如:n=5图形如下:

1

11

121

1331

14641

15101051

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

{

inta[N][N];

inii,j,n;

scanf("%d",&n);

fbr(i=0;i<=n;i++)

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

if(j==O|U==i)

(

aliJ[j]=U

)

if(j>O&&j<i)

{

a[i]U]=a[(i-l)][(j-l)]+a[(i-l)]U];

)

printf("%3d",a[i][j]);

)

printf("\n");

)

return0;

}

6.10球周边元素之和

编写•个程序,求出4^5的二维数组周边元素之和。

输入:二维数组元素

输出:周边元素之和

如:

输入:

13579

29994

69998

1357。

输出:61

#includc<stdio.h>

#include<stdlib.h>

#defineN4

#defineM5

intmain()

(

inta[N][M],ij,b=O,c=O,d=O,e=O,sum;

for(i=O;><N;i++)

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

scanf("%d",&a[ij|jj);

for(i=0;i<N;i++)

(

if(i==O)

(

for(j=0;j<M-l;j++)

(

b=b+ali](j];

)

)

if(i==3)

(

for(j=0;j<M-l;j++)

(

d-d+a[i]UJ;

}

}

)

fbr(j=O;j<M;j++)

(

if(j==O)

(

for(i=1;i<N-l;i++)

(

c=c+a[i]U];

)

)

if(j==4)

(

for(i=0;i<N;i++)

(

e=e+a[i][j];

)

)

}

sum=b+c+d+e;

printf("%d\n",sum);

return0;

}

6.11存储并输出一个矩阵

编程,输入n,存储并输出如下例(n=5)所示的图形。

12345

11234

11123

11112

11111

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

(

inta[N][N];

inti,j,n;

scanf("%d",&n);

for(i=0;i<n;i++)

{

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

(

a[i]Ul=l;

1

for(j=i+l;j<n;j++)

(

a[i][jl=j+l-i;

)

)

fbr(i=O;i<n;i++)

(

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

(

printf(H%2d",a[i][j]);

)

printf(H\n");

}

return0;

6.12给数组中元素按顺序编号

对数组a[io]中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能

改变数组a中元素的顺序,且相同的整数要具有相同的编号。例如数组是:

A=(5,3,4,7,3,5,6,8,9,1。)则输出为:(4,1,3,7,1,4,6,8,9,10)

#include<stdio.h>

#include<stdlib.h>

#defineN10

#defineM100

intmain()

{

inta[N],b[M],ij;

fbr(i=0;i<N;i++)

(

scanf("%d",&a[i]);

)

fbr(i=0;i<N;i++)

(

b[i]=l;

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

(

if(a[i]>a[j])

(

b[i]++;

)

)

printf(H%3d';b[i]);

)

printf("\n");

return0;

}

6.13矩阵加法

方阵阶数为n(n<ioo),例如当n=3时,矩阵int就3][3],矩阵intb[3][3]。矩阵的数

据由用户输入。输出新的矩阵C=a+bo输出格式:COOCOlC02CIOCllC12C20C21C22

每两个数字之间有1个空格

关于输入

方阵阶数n

矩阵a:

aooaoia02

aioanai2

a2Oa2ia22

矩阵b:

booboibo2

biobnbi2

b20b21b22

关于输出

矩阵C:

COOC01CO2

CIOCllC12

C2OC21C22

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

{

inia[N][N],b[N][N],c[N][N],iJ,n;

scanf("%d”,&n);

for(i=0;i<n;i++)

(

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

{

scanf("%d”,&a[i][jD;

I

)

fbr(i=O;i<n;i++)

(

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

(

scanf("%d",&b[i][j]);

)

}

for(i=0;i<n;i++)

(

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

(

c[i]U]=a[i]U]+b[i]U];

)

)

fbr(i=O;i<n;i++)

(

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

(

|

printf("%d';c[il[j]);

}

else

printf("%d",c[i][j]);

printf("\n");

)

return0;

I

6.14矩阵转置

在数学上,矩阵是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成

的方阵。这一概念由19世纪英国数学家凯利首先提出。矩阵概念在生产实践中也有许

多应用,比如矩阵图法以及保护个人帐号的矩阵卡系统(由深圳网域提出)等等。“矩

阵”的本意也常被应用,比如监控系统中负责对前端视频源与控制线切换控制的模拟设

备也叫矩阵。

设A为nxn阶矩阵(即n行n列),第i行j列的元素是a(i,j),即:A=a(i,j)

定义A的转置为这样一个nxn阶矩阵R,满足B=aG,i),即b(i,j)=aG,i)(R的第i行

第j列元素是A的第j行第i列元素),记A'=B。(有些书记为AT=B,这里T为A的

上标)

直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的

射线作镜面反转,即得到A的转置。

输入:

有n+i行(2wnwio),第一行是一个整数n,代表矩阵为n行n列。后面n行表示矩

阵的取值

输出:

转置后的矩阵

#include<stdio.h>

#include<stdlib.h>

#defineN100

intmain()

(

inta[N][N],ij,n,k;

scanf("%d”,&n);

fbr(i=O;i<n;i++)

(

for(j=O;j<n;j++)

scanf("%dM,&a[i]|j]);

fbr(i=O;i<n;i++)

(

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

(

k=a[ilUl;

a[i]|j]=a[j][i];

aU][i]=k;

)

)

fbr(i=O;i<n;i++)

(

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

(

if(j!=(n-l))

(

piintf("%d

)

else

{

printf("%d';a[i][j]);

)

)

printfCXn1');

}

return0;

)

6.15求一系列整数中出现最多的数

给定一系列整数,对每个整数的每一位数字统计0~9各个数字的出现次数,求出现次

数最多的数字。

输入:

有两行,第一行是整数n(i<=n<=ioo),表示有n个整数;第二行是n个整数值

输出:

出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数

输入样例:

1

1233

输出样例:

出现次数最多2次的数字是3

#include<stdio.h>

#include<stdlib.h>

intmain()

{

inta[IO]={O|;

intn,i=0,maxl=0;

charm;

charb[200]={0);

int1=0;

scanf("%d",&n);

getchar();

gets(b);

l=strlen(b);

for(i=0;i<l;i++)

{

if(b[i]>=<0,&&b[i]<='9')a[b[i]-48J+=l;

}

i=0;

while(i<10)

(

if(a[i]>maxl)maxl=a[i];

i++;

}

printf(”出现次数最多%d次的数字是二maxi);

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

(

if(max1==a[i])printf("%d",i);

1

printf("\nH);

return0;

)

6.16装箱问题

假设有n项物品,大小分别为si,S2,…,sn,其中si是整数且满足:i<=si<=ioOo

要把这些物品装入到容量为100的一批箱子(序号i~n)中。装箱方法是:对每项物品

si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(frst-fit策略)。

写一个程序来模拟这个装箱的过程。

输入:

有两行。第一行是整数n(n<=iooo),表示物品的个数;第二行是n个整数si(si<=ioo),

分别表示n个物品的大小

输出:

每个物品所在的箱子序号,并输出所需的箱子数目

输入样例:

8

6o708o90304。1020

输出样例:

6o1

702

803

904

3。1

405

1O1

202

所需的箱子数目为5

#includc<stdio.h>

#include<sldlib.h>

#defineN100

intmain()

{

inta[N],b[N],n,ij,k;

scanf("%d",&n);

for(i=0;i<n;i++)

(

scanf(M%dM,&a[i]);

b[i]=100;

}

fbr(i=O;i<n;i++)

(

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

(

if(b|j]-a[i]>=0)

(

printf("%d%d\n",a[i],j+l);

bU]=b[j]-a[i];

break;

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

if(b[j]==100)

break;

I

printf("所需的箱子数目为%氏”力;

return0;

}

第八章

8.1字符转换

描述

提取一个字符串中的所有数字字符(‘o'…'9')将其转换为一个整数输出。

输入

一个以回车符为结束标志的字符串(少于8。个字符)。

输出

把字符串中的所有数字字符('o'...'9')转换为一个整数并输出。

#includc<stdio.h>

#include<sldlib.h>

#include<string.h>

#defineN1000

intmain()

(

chara[N];

inti,j=O,lcn,m;

gets(a);

len=strlen(a);

fbr(i=O;i<len;i++)

(

if(aLi]>='0'&&aliJ<='9')

(

m=a[i卜'O';

j=j*10+m;

)

}

printf("%d\n',,j);

return0;

)

8.2合并字符串

输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合

并后的字符串,仍然是从小到大排列。

输入:

两个己经排好顺序(升序)的字符串

输出:

一个合并在一起的有序(升序)的字符串

要求:

设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。

如果采用先进行串连接,然后再进行排序的算法,则效率太低了

#include<stdio.h>

#include<stdlib.h>

#includc<string.h>

#defineN100

intmain()

(

chara[N],b[N],s[N];

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

gets(a);

gets(b);

whiIe((a[i]!='\0')&&(b[j]!=,\0'))

(

if(a[i]<b[j])

(

s[k++]=a[i++];

)

else

(

s[k++]=b[j++];

)

)

while((a[i]==>\0')&&(b[j]!=,\0,))

(

s[k++]=b|j++];

}

while((a[i]!=I\0')&&(b[j]==,\0,))

(

s[k++]=a[i++];

)

puts(s);

return0;

8.3删除重复字符

背景:

输入一个长度不超过100的字符串,删除串中的重复字符。

输入:

输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcdo

输出:

删除重复字符后的字符串。例如:abcedo

#include<stdio.h>

#include<string.h>

#defineN100

intmain()

{

chara[N],b[N];

intij=l,k;

gets(a);

b[O]=a[O];

for(i=l;(a[i]!='\0');i++)

(

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

(

if(b[k]==a[i])

(

break;

)

)

if(k==j)

(

b[j++]=a[i];

)

bljl^O,;

puts(b);

return0;

8.4删除字符串中指定字符

输入两个字符串S1和S2,在S1中删除任何S2中有的字符。例如,S1:

“abci23ad”,S2:“ai",则输出“bc23d"°

输入:两个字符串S1和S2

输出:删除后的字符串S1

#includc<stdio.h>

#include<string.h>

#defineN100

intmain()

{

chara[N],b[N],c[N];

inti,j,len,k=0;

gets(a);

gets(b);

len=strlen(b);

for(i=0;(a[i]!='\0');i++)

(

for(j=0;b|jj!=,\0,;j++)

(

if(b[j]==a[i])

(

break;

)

)

if(len==j)

(

c[k++]=a[i];

cM^O';

puts(c);

return0;

1

8.5单词有多少

用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词“s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论