您的当前位置:首页正文

中国石油大学(华东)c语言习题答案

2023-09-10 来源:易榕旅网
路漫漫其修远兮,吾将上下而求索 -

C语言复习题

【设计型】5.1 输出一行星号

编写程序在一行中输出 N 个星号。 输入: N值

输出: 一行中N个星号 #include int main() {

int a,i; scanf(\"%d\ for(i=1;i<=a;i++) printf(\"*\"); printf(\"\\n\"); return 0; }

【设计型】5.2 打印平行四边形

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

11

路漫漫其修远兮,吾将上下而求索 -

输入: 整数n例如 5 输出:

由*组成的高为5的平行四边形 #include int main() {

int i,j,num; scanf(\"%d\ for(i=0;ifor(j=0;jreturn 0; }

【设计型】5.3 编程计算

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

#include int main() {

22

路漫漫其修远兮,吾将上下而求索 -

double n,i,sum,k=1.0; scanf(\"%lf\ i=1,sum=0; while(i<=n) {

sum=sum+k/i; i++;

k=-k;(用这个式子实现正负交替) }

printf(\"sum=%.4lf\\n\ return 0; }

【设计型】5.4 分数序列

有一个分数序列:

求出其前n项的和。

...............,输入整数n,

输出语句格式为:printf(\"sum=%16.10f\\n\#include int main() {

int n,a,b,i,temp; double sum; scanf(\"%d\

33

路漫漫其修远兮,吾将上下而求索 -

i=1,sum=0,a=2,b=1; while(i<=n) {

sum=sum+a*1.0/b; temp=a;

a=a+b;

b=temp;(几个式子实现数值的变换)

i++; }

printf(\"sum=%16.10f\\n\ return 0; }

【设计型】5.5 求e的值

编写程序,从键盘输入整数 n , 求 e 的值 . e=1+1/1!+1/2!+1/3!+..+1/n! 注意:用 double 型数据计算输出语句:printf(\"sum=%16.10f\\n\ #include int main() {

int n,i;

double sum,jc; scanf(\"%d\

i=1,sum=1.0 jc=1.0; while(i<=n) {

jc=jc*i;

sum=sum+1.0/jc; i++; }

printf(\"sum=%16.10f\\n\ return 0;

44

路漫漫其修远兮,吾将上下而求索 -

}

【设计型】5.6 最大公约数

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

比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。 #include int main() {

int yu,m,n,temp,bei,ji; scanf(\"%d%d\ if(mtemp=m,m=n,n=temp; ji=m*n; yu=m%n; while(yu!=0) { m=n; n=yu; yu=m%n;

} (最大公约数求法) bei=ji/n;(最小公倍数求法)

printf(\"the greatest common divisor is %d\\n\ printf(\"the least common multiple is %d\\n\ return 0;

55

路漫漫其修远兮,吾将上下而求索 -

}

【设计型】5.7 水仙花数

输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33 输出语句:printf(\"%d\\n\

#include int main() {

int a,b,i,j,k; for(i=1;i<=9;i++) {

for(j=0;j<=9;j++) {

for(k=0;k<=9;k++) (三重循环从1到999) {a=i*i*i+j*j*j+k*k*k; b=100*i+10*j+k; if(a==b)

printf(\"%d\\n\ } }

return 0; }

【设计型】5.8 完数

一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如

66

路漫漫其修远兮,吾将上下而求索 -

果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No #include int main() {

int yinzi,num,i,sum=0; scanf(\"%d\

for(yinzi=1; yinziif(num%yinzi==0) sum=sum+yinzi;

}

if(sum==num) {

printf(\"Yes,its factors are \"); for(i=1; iif(num%i==0)

printf(\" %d\

} (输出因子具体值) printf(\"\\n\"); }

else printf(\"No\\n\"); return 0;

77

路漫漫其修远兮,吾将上下而求索 -

}

【设计型】5.9 素数

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

#include int main() {

int m,n,i,j,tag=1; scanf(\"%d%d\ for(i=m; i<=n; i++) {

for(j=2; jif(i%j==0) {

tag=0; break; }

else tag=1; }

if(tag)

printf(\" %d\

88

路漫漫其修远兮,吾将上下而求索 -

}

printf(\"\\n\"); return 0; }

【设计型】5.10 回文数

输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No

#include int main() {

double num; scanf(\"%lf\ int min=0, max=num;

while (max>0) {

min=min*10+(int)max%10;(将数字反过来) max=max/10; }

if(num==min)

printf(\"Yes\\n\"); else printf(\"No\\n\");

return 0;

99

路漫漫其修远兮,吾将上下而求索 -

}

【设计型】5.11 贪吃的猴子

有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。 输入: 天数n 输出:

第一天的桃子个数,输出语句为printf(\"The monkey got %d peachs in first day.\\n\Smaple: Input: 5 Output

The monkey got 114 peachs in first day.

提示:

问题分析: 总共 t0 日 吃掉 剩余

1 t0/2+1 t0-(t0/2+1)=t0/2-1 t1=t0/2-1 =>t0=(t1+1)*2 2 t1/2+2 t1-(t1/2+2)=t1/2-2 t2=t1/2-2 =>t1=(t2+2)*2 ....

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

1010

路漫漫其修远兮,吾将上下而求索 -

n 1 0 tn-1=1

#include int main() {

int i,t,sum; scanf(\"%d\ sum=1;

for(i=t;i>1;i--) {

sum=(sum+i-1)*2;?

}

printf(\"The monkey got %d peachs in first day.\\n\ return 0; }

【创新型】5.12 马戏团观众人数

一个马戏团表演, n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。编程,输入总人数 n ,输出满足要求的男人、女人和小孩人数的全部方案。若 n 人无法满足条件,则输出“No output\\n”。 输入: 人数 n

输出: 男人、女人和小孩人数 #include int main() {

1111

路漫漫其修远兮,吾将上下而求索 -

int man,woman,child,total,sum,tag=0; scanf(\"%d\

for(man=0; man<=total; man++) {

for(woman=0; woman<=(total-man); woman++) {

child=total-man-woman; sum=50*man+20*woman+1*child; if(sum==1200) {

tag=1;

printf(\"%d %d %d\\n\ } } }

if(tag==0)

printf(\"No output\\n\"); return 0; }

【设计型】5.13 迭代法

用迭代法求

.求平方根的迭代公式为:

1212

路漫漫其修远兮,吾将上下而求索 -

要求前后两次求出的x的差的绝对值小于10-5。

#include #include int main() {

double x,a,b; double i; scanf(\"%lf\ b=x; for(i=1;;) { a=i;

i=(i+x/i)/2;

if(fabs(i-a)<=0.00001) {

printf(\"The square root of %.2lf is %.5lf\\n\ break; } }

return 0; }

1313

路漫漫其修远兮,吾将上下而求索 -

【设计型】5.14 cos(x)-x=0

利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。 Xn+1=cos(Xn) 迭代步骤如下: (1)取X1初值为0.0; (2)X0=X1,把X1的值赋给X0; (3)X1=cos(X0),求出一个新的X1;

(4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2); (5)所求X1就是方程cos(X)-X=0的一个实根,输出X1,输出语句为printf(\"x=%lf\。

提示:本题x0和x1定义为double类型

#include #include #include int main() {

double x0,x1; for(x1=0;;) {

x0=x1; x1=cos(x0);

if(fabs(x0-x1)<=0.000001) {

1414

路漫漫其修远兮,吾将上下而求索 -

printf(\"x=%lf\\n\ break; } }

return 0; }

【设计型】5.15 求一个三位数,其值等于其各位阶乘之和

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

输出格式:printf(\"%d\\n\

#include int main() {

int i,j,k,l,ge,shi,bai,s1,s2,s3; for(i=100; i<=999; i++) {

ge=i%10; shi=i%100/10; bai=i/100; s1=1; s2=1; s3=1;

1515

路漫漫其修远兮,吾将上下而求索 -

for(j=1; j<=ge; j++) s1=s1*j;

for(k=1; k<=shi; k++) s2=s2*k;

for(l=1; l<=bai; l++) s3=s3*l; if(i==s1+s2+s3) {

printf(\"%d\\n\ break; } } }

【研究创新型】6.1 谁能出线

背景:

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

输入:

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

输出:

1616

路漫漫其修远兮,吾将上下而求索 -

能够出线的学生序号(0~9)。 #include int main() { }

int i,a[10],max; for(i=0;i<10;i++) scanf(\"%d\max=a[0];

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

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

if(a[i]==max) if(max<=a[i])

max=a[i];

printf(\"%d\\n\ return 0;

【设计型】6.2 统计素数的个数

求出 2 到 m 之间 ( 含 m,m<=1000) 所有素数并放在数组 a 中。 输入:正整数m

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

1717

路漫漫其修远兮,吾将上下而求索 -

输出:2 3 5 7 4

#include int main() {

int i,j,k=0,a[1001],m,yu,tag,num=0; scanf(\"%d\ for(i=2; i<=m; i++) { tag=1; a[k]=i;

for(j=2; jyu=i%j; if(yu==0) {

tag=0; num++; break; }

}

if(tag==1) {

printf(\"%4d\

1818

路漫漫其修远兮,吾将上下而求索 -

} k++; }

printf(\"\\n\");

printf(\"%d\\n\ return 0; }

【设计型】6.3 冒泡法排序

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 编写程序,对输入的十个数按照从小到大排序

#include int main() {

int i,j,a[10],z; for(i=0; i<10; i++) {

scanf(\"%d\ }

1919

路漫漫其修远兮,吾将上下而求索 -

for(j=0; j<9; j++) {

for(i=0; i<9-j; i++) {

if(a[i]>a[i+1]) {

z=a[i+1]; a[i+1]=a[i]; a[i]=z; } } }

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

printf(\" %d\ }

printf(\"\\n\"); return 0; }

【设计型】6.4 插入法排序

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

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。

2020

路漫漫其修远兮,吾将上下而求索 -

#include int main() {

int a[11],i,j,t; for(i=0; i<10; i++) scanf(\"%d\ scanf(\"%d\ for(i=0; i<10; i++) {

if(a[i]>a[10]) {

t=a[10];

for(j=10; j>i; j--) {

a[j]=a[j-1]; } a[i]=t; break; } }

for(i=0; i<11; i++) printf(\" %d\ printf(\"\\n\");

2121

路漫漫其修远兮,吾将上下而求索 -

return 0; }

【设计型】6.5 求各位数字组成的最大数

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

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

#include int main() {

int a[12],num,i,j,k,m,t; scanf(\"%d\ for(i=0;;i++) {

k=num%10;

num=num/10;(分离各个位数) a[i]=k; if(num==0) break; }

for(m=0; m2222

路漫漫其修远兮,吾将上下而求索 -

for(j=0; jif(a[j]>a[j+1]) {

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

for(j=i;j>=0;j--) printf(\"%d\ printf(\"\\n\"); return 0; }

【设计型】6.6 数组逆序输出

问题描述

从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。要求输出每个元素时以一个空格隔开。 提示:

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

#include int main()

2323

路漫漫其修远兮,吾将上下而求索 -

{

int a[10],i,t; for(i=0;i<=9;i++) scanf(\"%d\

for(i=0;i<5;i++)(第一个与最后一个调换) {

t=a[i]; a[i]=a[9-i]; a[9-i]=t; }

for(i=0;i<=9;i++) printf(\"%d \ printf(\"\\n\"); return 0; }

【设计型】6.7 求最大值

问题描述

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

3 0 54 -710 27 32767 10 1 500 2 输出范例 32767 提示

2424

路漫漫其修远兮,吾将上下而求索 -

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

#include #define n 10 int main() {

int a[n],i,max; for(i=0; i<10; i++) scanf(\"%d\ max=a[0];

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

if(a[i]>max) max=a[i]; }

printf(\"%d\ printf(\"\\n\"); return 0; }

【设计型】6.8 二维数组

程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n 。 例如: 数组中的值为

2525

路漫漫其修远兮,吾将上下而求索 -

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

#include int main() {

int a[4][4],i,j,n,count=0; for(i=0; i<=3; i++) {

for(j=0; j<=3; j++) scanf(\"%d\ }

scanf(\"%d\ for(j=0; j<=3; j++) {

for(i=j; i<=3;i++) {

a[i][j]=n*a[i][j]; }

2626

路漫漫其修远兮,吾将上下而求索 -

}

for(i=0; i<=3; i++) {

for(j=0; j<=3; j++) {

count++;

printf(\"%4d\ if(count%4==0) printf(\"\\n\"); } }

return 0; }

【设计型】6.9 在屏幕上显示杨辉三角形

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

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。

杨辉三角有如下性质:

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

2727

路漫漫其修远兮,吾将上下而求索 -

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

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

编写程序,输入正数n, 将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

#include int main() {

int i,j,n; int a[10][10]; scanf(\"%d\ n=n+1;

for(i=0; ia[i][0]=1; a[i][i]=1; }

for(i=2; i2828

路漫漫其修远兮,吾将上下而求索 -

for(j=1; ja[i][j]=a[i-1][j-1]+a[i-1][j]; } }

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

printf(\"%3d\ }

printf(\"\\n\"); }

return 0; }

【设计型】6.10 求二维数组周边元素之和

编写一个程序,求出4×5的二维数组周边元素之和。 输入:二维数组元素 输出:周边元素之和 如: 输入: 1 3 5 7 9

2929

路漫漫其修远兮,吾将上下而求索 -

2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 输出:61

#include int main()

{ int a[4][5],i,j,sum1=0,sum2=0,sum; for(i=0;i<4;i++) {

for(j=0;j<5;j++) scanf(\"%d\ }

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

sum1=sum1+a[0][j]+a[3][j]; for(i=0;i<4;i++)

sum2=sum2+a[i][0]+a[i][4];

sum=sum1+sum2-a[0][0]-a[0][4]-a[3][4]-a[3][0]; printf(\"%d\\n\ return 0; }

【设计型】6.11 存储并输出一个矩阵

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

3030

路漫漫其修远兮,吾将上下而求索 -

1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1

#include int main() {

int a[5][5],i,j,n,count=0; scanf(\"%d\ for(i=0; ifor(j=0; j<=i; j++) {

a[i][j]=1;

} }

for(i=0; ifor(j=i+1; ja[i][j]=a[i][j-1]+1; }

3131

路漫漫其修远兮,吾将上下而求索 -

}

for(i=0; ifor(j=0; jprintf(\" %d\ count++; if(count%n==0) printf(\"\\n\");

}

}

return 0; }

【设计型】6.12 给数组中的元素按顺序编号

对数组 a[10] 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10) 则输出为: (4,1,3,7,1,4,6,8,9,10)

#include int main() {

int a[11],c[11]; int i,j,t,m;

3232

路漫漫其修远兮,吾将上下而求索 -

for(i=1;i<11;i++) {

scanf(\"%d\ c[i]=a[i]; }

for(j=1;j<=10;j++) for(i=1;i<11-j;i++) if(a[i]>=a[i+1]) {

t=a[i]; a[i]=a[i+1]; a[i+1]=t; }

for(m=1;m<11;m++) for(i=1;i<11;i++) if(c[m]==a[i]) {

printf(\"%3d\ break; } printf(\"\\n\"); return 0; }

3333

路漫漫其修远兮,吾将上下而求索 -

【设计型】8.1 字符转换

描述

提取一个字符串中的所有数字字符(‘0’...‘9’)将其转换为一个整数输出。 输入

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

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

#include #include int main() {

char word[20]; int i,n;

scanf(\"%s\ n=strlen(word); for(i=0; i<=n; i++) {

if(word[i]>='0'&&word[i]<='9') {

printf(\"%c\ } }

3434

路漫漫其修远兮,吾将上下而求索 -

printf(\"\\n\"); return 0; }

【设计型】8.2 合并字符串

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

输入:

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

输出:

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

要求:

设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。 如果采用先进行串连接,然后再进行排序的算法,则效率太低了。

#include #include int main() {

char a[100],b[100]; char n[200],t; int i,j,k,m; gets(a); gets(b);

3535

路漫漫其修远兮,吾将上下而求索 -

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

for(j=0;b[j]!=0;j++,i++) n[i]=b[j]; n[i]='\\0'; for(k=0;kfor(m=k+1;mn[m]) {

t=n[k]; n[k]=n[m]; n[m]=t; } }

printf(\"%s\\n\ return 0; }

【设计型】8.3 删除重复字符

背景:

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

输入:

3636

路漫漫其修远兮,吾将上下而求索 -

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

输出:

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

#include #include int main() {

char str1[100],str2[100]; int i,j,n,k=0,tag=0; scanf(\"%s\ str2[0]=str1[0]; printf(\"%c\ n=strlen(str1); for(i=0; ifor(j=0; jif(str1[i]==str2[j]) {

tag=0; break; } tag=1;

3737

路漫漫其修远兮,吾将上下而求索 -

}

if(tag==1) {

str2[k+1]=str1[i]; printf(\"%c\ k++; } }

printf(\"\\n\"); return 0; }

【设计型】8.4 删除字符串中指定字符

输入两个字符串 s1 和 s2 ,在 s1 中删除任何 s2 中有的字符。例如, s1 :“ abc123ad ”, s2 :“ a1 ” ,则输出“bc23d ”。 输入: 两个字符串 s1 和 s2 输出: 删除后的字符串 s1

#include #include int main() {

char str1[100],str2[100]; int i,j,n1,n2,tag=0;

3838

路漫漫其修远兮,吾将上下而求索 -

scanf(\"%s%s\ n1=strlen(str1); n2=strlen(str2); for(i=0; ifor(j=0; jif(str1[i]==str2[j]) {

tag=0; break; } tag=1; }

if(tag==1)

printf(\"%c\ }

printf(\"\\n\"); return 0; }

【设计型】8.5 单词有多少

3939

路漫漫其修远兮,吾将上下而求索 -

用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 \"stop\" 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。 输入: 多个字符串 输出: 单词的数量

#include #include int main() {

char str[10][20],str2[]={'s','t','o','p','\\0'}; int i,num=0; for(i=0;;i++) {

scanf(\"%s\ if(strcmp(str[i],str2)==0) break; num++; }

printf(\"%d\\n\ return 0; }

【设计型】8.6 在指定位置插入字符串

输入两个字符串 s1 、 s2 和 s1 中任意字符 k ,在 s1 中的指定字符 k 第一次出现的位置处插入字符串 s2 并输出。

输入: 两个字符串 s1 、 s2 和 s1 中任意字符 k

4040

路漫漫其修远兮,吾将上下而求索 -

输出: 插入后的字符串 s1

#include #include int main() {

char str1[15],str2[15],t; int i,n,num=0; gets(str1); gets(str2); t=getchar(); n=strlen(str1); for(i=0; iif(str1[i]==t) break; num++; }

for(i=0; i4141

路漫漫其修远兮,吾将上下而求索 -

return 0; }

【研究创新性】8.7 Your Ride Is Here

It is a well-known fact that behind every good comet is a UFO. These UFOs often come to collect loyal supporters from here on Earth. Unfortunately, they only have room to pick up one group of followers on each trip. They do, however, let the groups know ahead of time which will be picked up for each comet by a clever scheme: they pick a name for the comet which, along with the name of the group, can be used to determine if it is a particular group's turn to go (who do you think names the comets?). The details of the matching scheme are given below; your job is to write a program which takes the names of a group and a comet and then determines whether the group should go with the UFO behind that comet. Both the name of the group and the name of the comet are converted into a number in the following manner: the final number is just the product of all the letters in the name, where \"A\" is 1 and \"Z\" is 26. For instance, the group \"USACO\" would be 21 * 19 * 1 * 3 * 15 = 17955. If the group's number mod 47 is the same as the comet's number mod 47, then you need to tell the group to get ready!

4242

路漫漫其修远兮,吾将上下而求索 -

(Remember that \"a mod b\" is the remainder left over after dividing a by b; 34 mod 10 is 4.)

Write a program which reads in the name of the comet and the name of the group and figures out whether according to the above scheme the names are a match, printing \"GO\" if they match and \"STAY\" if not. The names of the groups and the comets will be a string of capital letters with no spaces or punctuation, up to 6 characters long.

#include #include int main() {

char comet[10],group[10]; int i,n1,n2,sum1=1,sum2=1; int yu1,yu2;

scanf(\"%s%s\ n1=strlen(comet); n2=strlen(group); for(i=0;isum1=sum1*(comet[i]-'A'+1); for(i=0;isum2=sum2*(group[i]-'A'+1);

4343

路漫漫其修远兮,吾将上下而求索 -

yu1=sum1%47; yu2=sum2%47; if(yu2==yu1) printf(\"GO\\n\"); else printf(\"STAY\\n\"); return 0; }

【研究创新型】8.8 大数相加

问题描述:

编写C程序,它能以字符串形式读入两个无符号正整数m和n,计算并输出这两个整数之和 输入格式:

输入由两行组成,第一行为无符号整数m,第二行为无符号整数n,且m和n的值最长25位 输出格式:

输出为一行,即两个无符号整数m和n之和 输入样例: 9999888888 355729288 输出样例: 10355618176

#include #include #define N 200 int main() {

char s1[N],s2[N];

int a[N]= {0},b[N]= {0},L1,L2,c,k,i; scanf(\"%s%s\

4444

路漫漫其修远兮,吾将上下而求索 -

L1=strlen(s1); L2=strlen(s2); if(L1for(i=0; i=0; i--) {

a[i]+=b[i]; if(a[i]>=10) {

a[i]-=10; a[i-1]++; } }

if(a[0]!=0) {

for(i=0; i<=c; i++) printf(\"%d\ }

4545

路漫漫其修远兮,吾将上下而求索 -

else {

for(i=1; i<=c; i++) printf(\"%d\ }

printf(\"\\n\"); return 0; }

【设计型】9.1 数的合并

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。 例如:当a=45,b=12,调用该函数后,c=5241。 #include #include int fun(int a,int b) {

int shi,qian,ge,bai,fun; shi=a/10; qian=a%10; ge=b/10; bai=b%10;

fun=qian*1000+bai*100+shi*10+ge; return (fun);

4646

路漫漫其修远兮,吾将上下而求索 -

}

int main() {

int a,b,c;

scanf(\"%d%d\ c=fun(a,b);

printf(\"c=%d\\n\}

【设计型】9.2 素数的判断

请编写函数fun,其功能是判断一个整数n是否为素数,如果是素数,则返回1,否则返回0。 #include int fun(int n) {

int i,flag=1,fun=1; for(i=2; iif(n%i==0) {

flag=0; break; } }

4747

路漫漫其修远兮,吾将上下而求索 -

if(flag==0) fun=0; else fun=1; return fun; }

int main() {

int a;

scanf(\"%d\

if(fun(a)) printf(\"Prime\\n\"); else printf(\"Non Prime\\n\"); return 0; }

【设计型】9.3 求级数

请编写函数fun,它的功能是计算下列级数和,值由函数值返回。

例如,当n=10,x=0.3时,函数值为1.349859。

请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。 #include

double fun(double x,int n) {

4848

路漫漫其修远兮,吾将上下而求索 -

int i,jc=1;

double sum=1.0,m=1.0; for(i=1; i<=n; i++) {

m=m*x; jc=jc*i;

sum=sum+m*1.0/jc; }

return sum; }

int main() {

double x; int n;

scanf(\"%lf%d\ printf(\"%lf\\n\ return 0; }

【设计型】9.4 求大于m且紧靠m的k个素数

请编写一个函数,其功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

例如,若输入17 5,则应输出19 23 29 31 37

4949

路漫漫其修远兮,吾将上下而求索 -

请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。 #include

void fun(int m,int k,int xx[]) {

int num,i,j; num=0;

for(i=m+1;; i++) {

for(j=2; j=i) {

xx[num]=i; num++; }

if(num>=k) break; } }

int main() {

int m,n,zz[1000]; scanf(\"%d%d\ fun(m,n,zz);

5050

路漫漫其修远兮,吾将上下而求索 -

for(m=0;mprintf(\"%6d\ printf(\"\\n\"); return 0; }

【设计型】9.5 删除指定字符

请编写函数fun,其功能是:从字符串中删除指定的字符。同一字母的大、小写按照不同的字符处理。 #include

void fun(char str[] ,char ch) {

int i,j;

for(i=0; str[i]!=0; i++) {

if(str[i]==ch) {

for(j=i; str[j]!=0; j++)

str[j]=str[j+1];

i--;

}

5151

路漫漫其修远兮,吾将上下而求索 -

} }

int main() {

char str[80]; char ch;

gets(str); scanf(\"%c\ fun(str,ch); printf(\"%s\\n\ return 0; }

【设计型】9.6 杀鸡用牛刀——学习递归喽

背景:

哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。 功能:

求整数 n 到 m 区间的累加和,其中n<=m。 输入:

区间的起始点n 区间的终止点m 输出: 累加和 要求:

使用递归算法完成。

5252

路漫漫其修远兮,吾将上下而求索 -

#include int fun(int n,int m) {

int sum=0; if(n==m) sum=sum+m; else

sum=n+fun(n+1,m); return sum; }

int main() {

int m,n,s;

scanf(\"%d%d\ s=fun(n,m); printf(\"%d\\n\ return 0; }

【设计型】9.7 求最大公约数——递归

请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。

5353

路漫漫其修远兮,吾将上下而求索 -

输入: n和m 输出:

n和m的最大公约数 #include void fun(int n,int m) {

int r,t;

if(m<=n&&n%m==0) t=m; else {

r=n%m; while(r!=0) { n=m; m=r; r=n%m; } t=m;

5454

路漫漫其修远兮,吾将上下而求索 -

} if(nfun(m,n); }

printf(\"%d\\n\}

int main() {

int n,m;

scanf(\"%d%d\ fun(n,m); return 0; }

【设计型】9.8 求数列的第N项

已知整数数列第一项和第二项是1,该数列从第三项开始,如果该项是奇数项,则它是前两项之和,如果该项是偶数项,则它是前两项之差,即: f( n ) = 1 当 n = 1 或 2 时,

• f( n ) = f( n-1 ) - f( n-2 ) 当n是偶数时, • f( n ) = f( n-1 ) + f( n-2 ) 当n是奇数时,

编写一个递归函数,求数列的第N项。 #include

5555

路漫漫其修远兮,吾将上下而求索 -

int fun(int n) {

int N;

if(n==1||n==2) N=1; else if(n%2==0)

N=fun(n-1)-fun(n-2); else if(n%2!=0)

N=fun(n-1)+fun(n-2); return N; }

int main() {

int n;

scanf(\"%d\ fun(n);

printf(\"%d\\n\ return 0; }

【设计型】9.9 偶数分解

编写程序,输入若干个大于2的正整数,如果是偶数,则将其分解为两个素数并输出;如果输入的奇数,则输出“××× is odd number!” ;输入为0时程序结束。只有1和它本身这两个因数的自然数叫做素数,0和1既不是素数也不是和数。

5656

路漫漫其修远兮,吾将上下而求索 -

实现分解的过程用函数实现。 输入:整数序列,0

输出:偶数1 = 素数A + 素数B (当输入是偶数时) 奇数1 is odd number! (当输入是奇数时) #include #define N 100 void fun(int xc[]) {

int a,b,j,k,m; int tag1=0,tag2=0; for(j=0;; j++) {

if(xc[j]==0) break; if(xc[j]%2==0) { a=2; b=xc[j]-2; for(m=1;; m++) {

for(k=2; kif(a%k==0)

5757

路漫漫其修远兮,吾将上下而求索 -

{

tag1=1; break; }

else tag1=0; }

for(k=2; kif(b%k==0) {

tag2=1; break; }

else tag2=0; }

if(tag1+tag2==0) {

printf(\"%d=%d+%d\\n\ break; } else { a++;

5858

路漫漫其修远兮,吾将上下而求索 -

b--; } }

}

else printf(\"%d is odd number!\\n\ } }

int main() {

int a[N],i; for(i=0;; i++) {

scanf(\"%d\ if(a[i]==0) break; } fun(a); return 0; }

【设计型】9.10 浮点数四舍五入

5959

路漫漫其修远兮,吾将上下而求索 -

#include #include double fun(double a) {

double temp; int m1,m2; temp=a;

m1=(int)((a+0.005)*100); m2=(int)(temp*100); if(m2a=((int)(a*100)+1.0)/100; }

else a=((int)(a*100)*1.0)/100; return a; }

int main( ) { double a;

scanf ( \"%lf\

printf ( \"%lf\\n\

6060

路漫漫其修远兮,吾将上下而求索 -

return 0; }

【设计型】9.11 长整型截短

编写一个函数fun,其功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 #include int fun(int a) {

int yu,i,j=1,sum=0; for(i=0; a!=0; i++) {

yu=a%10; if(yu%2==0) {

sum=yu*j+sum; j=j*10; } a=a/10; }

return sum; }

int main() { int n;

6161

路漫漫其修远兮,吾将上下而求索 -

scanf(\"%ld\

printf(\"The result is: %ld\\n\ return 0; }

【设计型】9.12 公式求解

#include double fun(int n) {

int i,j,jc; double sum=1; for(i=1;i<=n;i++) { jc=1;

for(j=1;j<=i;j++) jc=jc*j; sum=sum+1.0/jc; }

return sum; }

int main() { int n; double s;

6262

路漫漫其修远兮,吾将上下而求索 -

scanf(\"%d\ s=fun(n);

printf(\"s=%f\\n\ return 0; }

【设计型】7.1 数的合并

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。 例如:当a=45,b=12,调用该函数后,c=5241。 部分源程序如下,只需要完成fun函数的编写即可。 #include #include

void fun(int a,int b,int *pc) {

*pc=a/10*10+a%10*1000+b/10+b%10*100; }

int main() {

int a,b,c;

scanf(\"%d%d\ fun(a,b,&c);

6363

路漫漫其修远兮,吾将上下而求索 -

printf(\"%d\\n\ return 0; }

【设计型】7.2 数组中奇偶数

请编一个函数 fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针 odd 返回奇数之和,利用指针 even 返回偶数之和。

例如:数组中的值依次为: 1 , 8 , 2 , 3 , 11 , 6 ;则利用指针 odd 返回奇数之和 15 ;利用指针 even 返回偶数之和 16 。 #include #define N 20

void fun(int a[], int n ,int *podd,int *peven) { int i;

*podd=0;*peven=0; for(i=0;iif(a[i]%2==0) *peven=*peven+a[i]; else *podd=*podd+a[i]; } }

int main()

{ int a[N],i,n,odd,even; scanf(\"%d\

6464

路漫漫其修远兮,吾将上下而求索 -

for(i=0;iprintf(\"The sum of odd numbers:%d\\n\ printf(\"The sum of even numbers:%d\\n\ return 0; }

【设计型】7.3 浮点数四舍五入

请编一个函数 void fun(double a,double *h) ,函数的功能是对变量 h 中的值保留 2 位小数,并对第三位进行四舍五入(规定 h 中的值为正数)。 例如: h 值为 8.32433 ,则函数返回 8.32 ; h 值为 8.32533 ,则函数返回 8.33 。 #include

void fun(double a,double *ph) {

double temp; int t; temp=a*1000; t=(int)(temp)%10; if(t>=5)

*ph=(int)(a*100+1)*1.0/100; else

*ph=(int)(a*100)*1.0/100;

6565

路漫漫其修远兮,吾将上下而求索 -

}

int main( ) {

double a,h; scanf(\"%lf\fun(a,&h);

printf(\"The result:%lf\\n\return 0; }

【设计型】7.4 字符移动

请编一个函数void fun(char *s) ,函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。

例如:原有的字符串为: Mn.123xyZ ,则调用该函数后,串中的内容为: n.123xyZM 。 部分程序源码如下: #include #define N 81 void fun(char *pa) {

int i; char temp; temp=*pa;

for(i=0; *(pa+1)!=0; i++) {

6666

路漫漫其修远兮,吾将上下而求索 -

*pa=*(pa+1); pa++; }

*pa=temp; }

int main( ) { char a[N]; gets(a); fun(a);

printf(\"%s\\n\return 0; }

【设计型】7.5 生成新数

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。

例如,输入一个数:27638496,新的数:为739。 #include #include void fun(int *pn) {

int a,sum=0,i=0; do {

6767

路漫漫其修远兮,吾将上下而求索 -

a=*pn%10; *pn=*pn/10; if(a%2!=0) {

sum=sum+a*pow(10,i); i++; } }

while(*pn!=0); *pn=sum; }

int main( ) { int n=-1;

while(n>99999999||n<0) { scanf(\"%d\ fun(&n);

printf(\"%d\\n\ return 0; }

【设计型】7.6 字符串转换成整数

请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数。例如,若输入字符串\"-1234\则函数把它转换为整数值 -1234。函数fun中给出的语句仅供参考。

#include

6868

路漫漫其修远兮,吾将上下而求索 -

#include int fun(char *ps) {

int sum=0,x=0,len,i; len=strlen(ps); if(*ps=='-') x=1;

for(i=x; isum=sum*10+(*(ps+i)-'0'); if(x==1) sum=-sum; return sum; }

int main() /* 主函数 */ { char s[10]; int n; gets(s); n = fun(s); printf(\"%d\\n\ return 0; }

【设计型】7.7 二维数组按列优先存放

6969

路漫漫其修远兮,吾将上下而求索 -

请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。 例如, 二维数组中的数据为: W W W W S S S S H H H H

则字符串中的内容应是: WSHWSHWSHWSH。 部分源程序如下: #include #define M 3

#define N 4

void fun(char s[][N],char *qa) { int i,j,num=0; for(i=0;i*(qa+num)=s[j][i]; num++; } } }

int main()

7070

路漫漫其修远兮,吾将上下而求索 -

{ char

a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};

fun(w,a); puts(a); return 0; }

【设计型】7.8 删除字符串中指定的星号

假定输入的字符串中只包含字母和 * 号。请编写函数 fun ,它的功能是:除了尾部的 * 号之外 , 将字符串中其它 * 号全部删除。在编写函数时,不得使用 C 语言提供的字符串函数。

例如,字符串中的内容为: ****A*BC*DEF*G******* ,删除后 , 字符串中的内容应当是: ABCDEFG******* 。 #include

void fun(char s[],char *p) { int i,j;

for(i=p-s;i>=0;i--) if(s[i]=='*') for(j=i;s[j];j++) s[j]=s[j+1]; }

int main()

{ char s[81],*t; gets(s);

7171

路漫漫其修远兮,吾将上下而求索 -

t=s;

while(*t) t++; t--;

while(*t=='*') t--; fun( s , t ); puts(s); return 0; }

【设计型】7.9 统计数字字符

请编写函数 fun ,它的功能是: 统计形参 s 所指字符串中数字字符出现的次数,并存放在形参 t #include void fun(char *ps,int *t) {

int i,num=0;

for(i=0; *(ps+i)!=0; i++)

if(*(ps+i)>='0'&&*(ps+i)<='9') num++; *t=num; }

int main() { char s[80]; int t;

7272

路漫漫其修远兮,吾将上下而求索 -

gets(s); fun(s,&t); printf(\"%d\\n\ return 0; }

【设计型】7.10 将两个串按要求形成一个新串

给定程序的函数 fun 的功能是:逐个比较 p 、 q 所指两个字符串对应位置中的字符,把 ASCII 值大或相等的字符依次存放到 c 所指数组中,形成一个新的字符串。

例如,若主函数中 a 字符串为: aBCDeFgH ,主函数中 b 字符串为:ABcd ,则 c 中的字符串应为: aBcdeFgH 。 #include #include

void fun(char *pa,char *pb,char c[]) {

int i;

for(i=0; *pa&&*pb; i++,pa++,pb++) {

if(*pa>=*pb) c[i]=*pa; else

c[i]=*pb; }

7373

路漫漫其修远兮,吾将上下而求索 -

if(*pb==0)

for(; *pa; i++,pa++) c[i]=*pa;

else for(; *pb; i++,pb++) c[i]=*pb; c[i]=0; }

int main()

{ char a[10], b[10], c[80]; gets(a); gets(b); fun(a,b,c); puts(c); return 0; }

【设计型】7.11 统计子串的个数

请编写函数 fun ,它的功能是: 统计 substr 所指子字符串在 str 所指字符串中出现的次数。 例如,若str中的字符串为 aaas lkaaas ,子字符串为 as ,则应输出 2 。 #include

void fun(char *pstr,char *psubstr,int *pt) {

int i,j,k,count=0; for(i=0; *(pstr+i); i++) if(*(pstr+i)==*psubstr)

7474

路漫漫其修远兮,吾将上下而求索 -

{

for(k=i+1,j=1; *(psubstr+j); k++,j++) if(*(psubstr+j)!=*(pstr+k)) break; if(*(psubstr+j)==0) count++; } *pt=count; }

int main() {

char str[80],substr[80]; int count; gets(str); gets(substr);

fun(str,substr,&count); printf(\"%d\\n\ return 0; }

【设计型】7.12 按要求处理字符串

函数 fun 的功能是: 将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除 , 串中剩余字符所形成的一个新串放在 t 所指的数组中。

7575

路漫漫其修远兮,吾将上下而求索 -

例如,若 s 所指字符串中的内容为: \"ABCDEFG12345\其中字符 A 的 ASCII 码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符 1 的 ASCII 码值为奇数,所在数组中的下标也为奇数 , 因此不应当删除,其它依此类推。最后 t 所指的数组中的内容应是: \"135\" 。 #include #include

void fun(char s[],char *p) { int i,n,j=0; n=strlen(s); for(i=0;iif(s[i]%2!=0&&i%2!=0) { p[j]=s[i]; j++; } p[j]=0; }

int main() {

char s[100], t[100]; scanf(\"%s\ fun(s, t);

printf(\"%s\\n\ return 0; }

7676

路漫漫其修远兮,吾将上下而求索 -

【设计型】7.13 求非偶数的除数

请编写函数 fun ,它的功能是:求出能整除形参 x 且不是偶数的各整数 , 并按从小到大的顺序放在 pp 所指的数组中 , 这些除数的个数通过形参 n 返回。 例如,若 x 中的值为 : 35 ,则有 4 个数符合要求,它们是 : 1, 5, 7, 35 。 #include

void fun(int max,int *paa,int *pn) { int i,num=0; for(i=1;i<=max;i++) if(max%i==0&&i%2!=0) { *(paa+num)=i; num++; } *pn=num; }

int main( )

{ int x, aa[1000], n, i ; scanf(\"%d\ fun(x, aa, &n ) ;

for( i = 0 ; i < n ; i++ ) printf(\" %d\ printf(\"\\n\") ; return 0; }

【设计型】7.14 求最大值及其下标

7777

路漫漫其修远兮,吾将上下而求索 -

请编写函数 fun ,其功能是求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中。

例如 , 输入如下整数 : 876 675 896 101 301 401 980 431 451 777 则输出结果为 : 6, 980 #include

void fun(int *pa,int n,int *pk) {

int i,max=*pa; int *zhuizong=pa; for(i=1; imax=*(pa+i); zhuizong=pa+i; }

*pk=zhuizong-pa; }

void main( ) {

int a[10], k ,i; for(i=0;i<10;i++) scanf(\"%d\ fun(a, 10, &k) ;

7878

路漫漫其修远兮,吾将上下而求索 -

printf(\"%d,%d\\n\}

【设计型】10.1 结构体填空1

给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数modify的功能是将该学生的各科成绩都乘以一个系数a。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构! #include typedef struct { int num; char name[9]; float score[3]; }STU;

void show(STU tt) { int i;

printf(\"%d %s : \for(i=0; i<3; i++)

printf(\"%5.1f\printf(\"\\n\"); }

/**********found**********/ void modify(STU *ss,float a) { int i;

7979

路漫漫其修远兮,吾将上下而求索 -

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

/**********found**********/ ss->score[i]*=a; }

int main( )

{ STU std={ 1,\"Zhanghua\float a; scanf(\"%f\

/**********found**********/ modify(&std,a); show(std); return 0; }

【设计型】10.2 结构体填空2

程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是对形参 b 所指结构体变量中的数据进行修改 , 最后在主函数中输出修改后的数据。

例如 : b 所指变量 t 中的学号、姓名、和三门课的成绩依次是 : 10002 、 \"ZhangQi\" 、 93 、 85 、 87 ,修改后输出 t 中的数据应为: 10004 、 \" LiJie \" 、 93 、 85 、 87 。

请在程序的下划线处填入正确的内容并把下划线删除 , 使程序得出正确的结果。

不得增行或删行,也不得更改程序的结构! #include #include

8080

路漫漫其修远兮,吾将上下而求索 -

struct student { long sno; char name[10]; float score[3]; };

void fun( struct student *b) {

/**********found**********/ b->sno= 10004;

/**********found**********/ strcpy(b->name, \"LiJie\"); }

int main()

{ struct student t={10002,\"ZhangQi\ int i;

/**********found**********/ fun(&t);

printf(\"No: %ld Name: %s\\nScores:\ for (i=0; i<3; i++) printf(\"%6.2f\ printf(\"\\n\"); return 0; }

【设计型】10.3 结构体填空3

8181

路漫漫其修远兮,吾将上下而求索 -

程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。

请在程序的下划线处填入正确的内容并把下划线删除 , 使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构! #include #include struct student { long sno; char name[10]; float score[3]; };

void fun(struct student a[], int n) {

/**********found**********/ struct student t; int i, j;

/**********found**********/ for (i=0; iif (strcmp(a[i].name,a[j].name) > 0) { t = a[i]; a[i] = a[j]; a[j] = t; } }

8282

路漫漫其修远兮,吾将上下而求索 -

int main()

{ struct student s[4]={{10001,\"ZhangSan\{95, 80, 88}},{10002,\"LiSi\{85, 70, 78}}, {10003,\"CaoKai\82, 87}}}; int i, j; fun(s, 4);

printf(\"The data after sorting :\\n\"); for (j=0; j<4; j++)

{ printf(\"\\nNo: %ld Name: %-8s Scores:\ for (i=0; i<3; i++)

printf(\"%6.2f\ }

printf(\"\\n\"); return 0; }

【设计型】10.7 结构体编程1

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中, 请编写函数fun,它的功能是:把指定分数范围内的学生数据放在h所指的数组中,分数范围内的学生人数由函数值返回。

例如,输入的分数是60 69, 则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。

注意: 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #define N 16

8383

路漫漫其修远兮,吾将上下而求索 -

typedef struct {

char num[10]; int s; } STREC;

int fun( STREC *a,STREC *b,int l, int h ) { int i,j=0; for(i=0;i<16;i++) {

if(a[i].s>=l&&a[i].s<=h) {

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

return j; }

int main() {

STREC s[N]= {{\"GA005\ {\"GA001\ {\"GA015\

8484

路漫漫其修远兮,吾将上下而求索 -

{\"GA011\ };

STREC h[N];

int i,n,low,heigh,t; scanf(\"%d%d\ if ( heigh< low ) {

t=heigh; heigh=low; low=t; }

n=fun( s,h,low,heigh );

printf(\"The student's data between %d--%d :\\n\ for(i=0; iprintf(\"%s %4d\\n\ return 0; }

【设计型】10.8 结构体编程2

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中, 请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。 注意: 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

8585

路漫漫其修远兮,吾将上下而求索 -

#include #define N 16 typedef struct {

char num[10]; int s; } STREC;

int fun( STREC *a, STREC *b ) {

int min,j=0,i; min=a[0].s; for(i=0;i<16;i++) {

if(a[i].sfor(i=0;i<16;i++) {

if(a[i].s==min) {

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

8686

路漫漫其修远兮,吾将上下而求索 -

}

return j; }

int main() {

STREC s[N]= {{\"GA05\ {\"GA01\ {\"GA015\ {\"GA011\ };

STREC h[N]; int i,n; n=fun(s,h); for(i=0; iprintf(\"%s %4d\\n\ return 0; }

【设计型】10.9 链表编程1

N 名学生的成绩已在主函数中放入一个带头节点的链表结构中 ,h 指向链表的头节点。请编写函数 fun ,它的功能是:找出学生的最高分,由函数值返回。 注意 : 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 #include

8787

路漫漫其修远兮,吾将上下而求索 -

#include #define N 8 struct slist {

double s;

struct slist *next; };

typedef struct slist STREC; double fun( STREC *h ) {

double max; struct slist *ps; ps=h; max=h->s;

while(ps->next!=NULL) {

if(ps->s>max) max=ps->s; ps=ps->next; }

return max; }

8888

路漫漫其修远兮,吾将上下而求索 -

STREC * creat( double *s) {

STREC *h,*p,*q; int i=0;

h=p=(STREC*)malloc(sizeof(STREC)); p->s=0; while(iq=(STREC*)malloc(sizeof(STREC)); q->s=s[i]; i++; p->next=q; p=q; }

p->next=0; return h; }

void outlist( STREC *h) {

STREC *p; p=h->next; printf(\"head\"); do

8989

路漫漫其修远兮,吾将上下而求索 -

{

printf(\"->%2.0f\ p=p->next; }

while(p!=0); printf(\"\\n\"); }

int main() {

double s[N]= {85,76,69,85,91,72,64,87}, max; STREC *h; h=creat( s ); outlist( h ); max=fun( h );

printf(\"max=%6.1f\\n\ return 0; }

9090

因篇幅问题不能全部显示,请点此查看更多更全内容