中国石油大学C语言答案5篇

时间:2019-05-12 17:59:14下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《中国石油大学C语言答案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《中国石油大学C语言答案》。

第一篇:中国石油大学C语言答案

中国石油大学c语言答案

1.1 Hello world.让我们用C语言向世界问好。最早的程序基本是这个样子的: 程序一:

#include void main(){

printf(“Hello world.n”);} 程序二:

#include int main(){

printf(“Hello world.n”);

return 0;} 输出:Hello world.#include int main(){

printf(“Hello world.n”);} 1.2 Welcome to Beijing.输入:无

输出:就是下面的那段文字。#include void main(){printf(“Welcomen”);printf(“ton”);printf(“Beijing.n”);} 1.3 练习最简单的printf和scanf printf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。输入:整型变量x的值。

输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真观察-1的八进制和十六进制输出,请想想是为什么。#include int main(){int x;

scanf(“%d”,&x);printf(“x=%d,”,x);printf(“x=%o,”,x);printf(“x=%xn”,x);return 0;} 1.4 练习两个整数之间的运算 背景:基本练习。

输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出进行+、-、*、/、*之后的运行结果。#include int main(){int x,y;

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

printf(“%d+%d=%dn”,x,y,x+y);

printf(“%d-%d=%dn”,x,y,x-y);

printf(“%d*%d=%dn”,x,y,x*y);

printf(“%d/%d=%dn”,x,y,x/y);

printf(“%d%%%d=%dn”,x,y,x%y);

return 0;} 1.5 学习打印你的第一个图形

背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。程序如下:

#include int main(){

printf(“****n”);

printf(“****n”);

printf(“****n”);

printf(“****n”);

return 0;} 要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。输入:无。

输出:指定图形。#include int main(){

printf(“

*n”);

printf(“ ***n”);

printf(“ *****n”);

printf(“*******n”);

return 0;} 2.1 整型数的表示范围

编写一个循环程序,输入 N 值,输出 N 的阶乘。关于循环程序怎么编写,可以参考教材第3章P66页的例题4.2和第5章P82的例题5.1的内容。注意整型数的表示范围,如果当输入的 N 比较大时,例如 N 等于 20 时,输出怎么是负数了?自己想明白吧!#include void main(){int N,i;int sum=1;N>=2;scanf(“%d”,&N);if(N<=16){for(i=1;i<=N;i++)sum=sum*i;printf(“%dn”,sum);} if(N>=17)printf(“N is too big!n”);} 2.2 求正弦函数值

已知求正弦 sin(x)的近似值的多项式公式为:

sin(x)= xx7/7!+ …… +(-1)n x2n+1/(2n+1)!+ …

编写程序,要求输入 x(单位是弧度)和ε,按上述公式计算 sin(x)的近似值,要求计算的误差小于给定的ε。此题当然要用到循环语句,到第5章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的ε。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。

友情提示:给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用+键退出程序。#include #include int main(){ float x,eps,s,y=0,y0,t;

int n,j;

scanf(“%f%f”,&x,&eps);

n=t=j=1;

s=x;

do { y0=y;

if(n%2==0)y=y-s/t;

else

y=y+s/t;

s*=x*x;

t*=(j+1)*(j+2);

j+=2;

n++;} while(fabs(y0-y)>eps);printf(“%fn”,sin(x));system(“PAUSE”);

return 0;} 2.3 判断输入的字符的类型

我们将字符分为五类:大写字母、小写字母、数字、控制字符、其他字符。

编写程序,从键盘输入一个字符,输出字符所属的类型:大写字母时输出capital letters,小写字母时输出small letters,数字是输出figures,其他字符时输出 others。#include void main(){ char c;

c = getchar();

if(c < 0x20)

printf(“The character is a control charactern”);

else if(c >= '0' && c <= '9')

printf(“figuresn”);

else if(c >= 'A' && c <= 'Z')

printf(“capital lettersn”);

else if(c >= 'a' && c <= 'z')

printf(“small lettersn”);

else

printf(“othersn”);} 3.1 找零钱

假定有 5 角、1 角、5 分、2 分和 1 分共 5 种硬币,在给顾客找硬币时,一般都会尽可能地选用硬币个数最小的方法。例如,当要给某顾客找 7 角 2 分钱时,会给他一个 5 角,2 个 1 角和 1 个 2 分的硬币。试编写一个程序,输入的是要找给顾客的零钱(以分为单位),输出的是应该找回的各种硬币数目,并保证找回的硬币数最少。#include int main()

{

int x1,x2,x3,x4,x5;

int x;

scanf(“%d”,&x);

x1=x/50;

x2=x%50/10;

x3=x%50%10/5;

x4=x%50%10%5/2;

x5=x%50%10%5%2/1;

printf(“%dn”,x1);

printf(“%dn”,x2);

printf(“%dn”,x3);

printf(“%dn”,x4);

printf(“%dn”,x5);

return 0;

} 3.2 计算时钟的夹角

背景:钟面上的时针和分针之间的夹角总是在 0 度~ 359 度之间。举例来说,在十二点的时候两针之间的夹角为 0 度,而在六点的时候夹角为 180 度,在三点的时候为 90 度。本题要解决的是计算 0:00 到 12:00之间任意一个时间的夹角。

输入:每组测试数据包含两个数字:第一个数字代表小时(大于等于 0 小于 12),第二个数字代表分(在区间 [0, 59] 上)。

输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。

友情提示:以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。提示:时钟夹角计算公式|5.5m-30h|,h为时针,m为分针。求浮点型绝对值的函数为fabs,需要包含math.h头文件 #include “stdio.h” #include “math.h” int main(){ int h,m;double angle;scanf(“%d%d”,&h,&m);angle=fabs(5.5*m-30*h);if(angle>180)

angle=360-angle;printf(“At %d:%02d the angle is %.1f degrees.n”,h,m,angle);} 3.3 照猫画猫:计算圆柱的侧面积及体积

如果已知圆柱的底面半径 r,以及高 h,则可计算出圆柱的侧面积 s=2πrh,体积 v=π r 2 h。其中π=3.1415926 输入第一行输入圆柱的底面半径 r 第二行输入圆柱的高 h

输出 s=<圆柱的侧面积>,v=<圆柱的体积> 要求 1.所有变量都定义为双精度类型 2.结果精确到小数点后两位 #include “stdio.h”

#define n 3.1415926

int main()

{

float r,h,s,v;

printf;

scanf(“%f%f”,&r,&h);

s=2*n*r*h;

v=n*r*r*h;

printf(“s=%6.2f,v=%6.2fn”,s,v);

} 3.4 分离整数

任意从键盘上输入一个三位正整数,要求正确地分离出它的个位、十位和百位,并分别在屏幕上输出。

比如输入的三位正整数 #include “stdio.h” int main(){ int x,hundreds,tens,units;printf;scanf(“%d”,&x);hundreds=x/100;tens=x%100/10;units=x%100%10;printf(“units=%d,tens=%d,hundreds=%dn”,units,tens,hundreds);} 3.5 鸡兔同笼

已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只? 输入:头和脚的数目

输出:兔子和鸡的数目(输出语句为:printf(“rabbit=%d,chicken=%d”,rabbit,chicken);)Sample 输入:10 20 输出:rabbit=0,chicken=10 #include “stdio.h” int main(){ int chicken,rabbit,f,h;scanf(“%d%d”,&h,&f);rabbit=(f-2*h)/2;chicken=(4*h-f)/2;printf(“rabbit=%d,chicken=%dn”,rabbit,chicken);} 4.1 温度转换

背景:经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。

温度转换的公式为:F=(C×9/5)+32 ;C=(F-32)×5/9 ;式中F--华氏温度,C--摄氏温度。

输入:第一个数据(1 或 2)确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);

第二个数据是相应需要转换的温度值。

输出:相应的转换后的温度值(保留小数点后 2 位)。#include void main(){

int lx;double f,c;

scanf(“%d”,&lx);if(lx==1){

scanf(“%lf”,&f);

c=(f-32)*5/9;

printf(“The Centigrade is %.2fn”,c);} else{

scanf(“%lf”,&c);

f=(c*9/5)+32;

printf(“The Fahrenheit is %.2fn”,f);} } 4.2 分段函数

有一分段函数,y=f(x)。当x小于6时,y=x-12;当x大于等于6且小于15时,y=3x-1;当x大于等于15时,y=5x+9.从键盘上输入一个整数x,输出对应的y值。#include void main(){ int x,y;scanf(“%d”,&x);if(x<6)

y=x-12;else if(x<15)

y=3*x-1;else

y=5*x+9;printf(“%dn”,y);return 0;} 4.3 整数位数判断

输入一个不多于5位的正整数,要求:(1)求它是几位数;(2)逆序打印出各位数字。#include #include #define SIZE 5 int main(void){

int bit_count;//位数

long int input_num;//输入数

int

result[SIZE];//存放各个位的数

inti;

scanf(“%ld”, &input_num);

if(input_num < 0 || input_num > 99999){

printf(“Invalid inputn”);

exit(1);

}

for(bit_count = 0;input_num;++bit_count){

result[bit_count] = input_num % 10;

input_num /= 10;

}

printf(“%dn”,bit_count);

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

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

printf(“n”);

exit(0);} 4.4 四位数拆分

输入一个四位数,判断千位、百位、十位和个位数字之和是否为偶数,如果是,输出Yes,如果不是,输出No;如果不是四位数,输出Invalid data。#include void main(){ int x,a,b,c,d,e;scanf(“%d”,&x);if(x/1000<1||x/10000>=1)

printf(“Invalid datan”);else {

a=x/1000;

b=x%1000/100;

c=x%1000%100/10;

d=x%1000%100%10;

e=(a+b+c+d)%2;

if(e==0)

printf(“Yesn”);

else

printf(“Non”);} } 4.5 磨磨你的砍柴刀:判断三角形的形状

要求:输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。输入:三角型的3条边的长度(int型)。

输出:等边三角形:equilateral triangle.等腰三角形:isoceles triangle.不构成三角形:non-triangle.一般三角形:triangle.#include void main(){ float a,b,c;scanf(“%f%f%f”,&a,&b,&c);if(a+b

printf(“non-triangle.n”);else if(a==b&&b==c)

printf(“equilateral triangle.n”);else if(a==b||b==c||a==c)

printf(“isoceles triangle.n”);else

printf(“triangle.n”);} 4.6 字符加密输出

从键盘上输入一个字符,进行加密以后再输出在屏幕上。加密规律是:输入小写英文字母时,输入a 输出Z、输入b输出Y、输入c输出X、...、输入z输出A。输入大写英文字母时,将该字母ASCII码值再加上该值的1/2后输出所对应的字符,例如数字A的ASCII码值是65,加上其值的1/2后是98(小数四舍五入),则输出字符‘b’。输入数字时,将该数字原ASCII码值再加上该值十进制的十位上的数后输出,例如数字9的ASCII码值是57,加上十位上的数5后是62,则输出字符‘>’。输入其他字符时原样输出。友情提示:整数之间运算的结果要取整,例如5/2的结果是2,而5.0/2.0对小数四舍五入的结果就是3.0了。所以输入大写英文字母时的输出要仔细考虑。#include int main()

{ char ch;

int a;

ch=getchar();

if(ch>=97&&ch<=122)

{ch=187-ch;putchar(ch);}

else if(ch>=65&&ch<=90)

{a=ch%2;

if(a==1)(char)a=(ch+1)/2+ch;

else

(char)a=ch/2+ch;

putchar(a);}

else if(ch>=48&&ch<=57)

{ch=ch/10+ch;

putchar(ch);}

else putchar(ch);

printf(“n”);

} 4.7 判断某年某月的天数

一年有365天,有的月份有31天,有的有30天,2月份闰年的时候是29天,非闰年的时候是28天。现在要求从键盘上输入一个年份和月份,输出其对应的天数。#include main(){ int year,month,days;

scanf(“%d %d”, &year,&month);

switch(month)

{ case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: days=31;break;

case 4:

case 6:

case 9:

case 11:days=30;break;

case 2:if((year % 4 ==0)&&(year % 100!=0)||(year % 400==0))

days=29;

else days=28;

}

printf(“%dn”,days);} 4.8 花多少钱买衣服

周末商场促销呢,某品牌服装既可以买套装,也可以买单件。若买的不少于50套,每套80元;不足50套的每套90元,只买上衣每件60元,只买裤子每条45元。编写程序,输入计划购买的上衣数量 a 和裤子的数量 b,计算并输出应该付的款 m。#include void main(){ int a,b,y;scanf(“%d%d”,&a,&b);if(b<=a&&b<50)

y=90*b+(a-b)*60;if(b<=a&&b>=50)

y=80*b+(a-b)*60;if(a

y=90*a+(b-a)*45;if(a=50)

y=80*a+(b-a)*45;printf(“%dn”,y);

} 4.9 到邮局去寄包裹 你去邮局给朋友寄礼物。发现邮局对邮寄包裹的费用是这样规定的:如果包裹长宽高任意一个尺寸超过1米,或重量超过30千克,不予邮寄;对可以邮寄的包裹每件收手续费 0.2 元,不同重量的邮资按下表计算:重量(千克)收费标准(元)小于10 0.80

大于等于10但不超过20 0.75

大于等于20但不超过30 0.70

编写程序,输入包裹的长、宽、高尺寸和重量,输出所需的邮资(输出结果中包含两位小数即可),超出尺寸或重量的输出 “Error”.#include void main(){ float a,b,c,m,y;scanf(”%f,%f,%f,%f“,&a,&b,&c,&m);if(a>1||b>1||c>1||m>30)

printf(”Errorn“);else {

if(m<10)

y=0.80*m+0.2;else if(m<20)

y=0.75*m+0.2;else

y=0.70*m+0.2;

printf(”%.2fn“,y);} } 4.10 输出星期几的英文表示

输入用数字(1--7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词”Error(回车)“。#include void main(){ int a;scanf(”%d“,&a);switch((int)(a)){ case 1:printf(”Mondayn“);break;case 2:printf(”Tuesdayn“);break;case 3:printf(”Wednesdayn“);break;

case 4:printf(”Thursdayn“);break;case 5:printf(”Fridayn“);break;case 6:printf(”Saturdayn“);break;case 7:printf(”Sundayn“);break;default:printf(”Errorn“);

} }

5.1输出一行星号 问题描述

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

星号个数值N 输出

一行中N个星号 #include int main(){ int N,i;scanf(”%d“,&N);for(i=1;i<=N;i++){

printf(”*“);} printf(”n“);} 5.2 打印平行四边形 问题描述

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

整数n例如 5 输出

由*组成的高为5的平行四边形 #include int main(){ int N,i,j;scanf(”%d“,&N);for(i=1;i<=N;i++){

for(j=1;j

printf(” “);

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

printf(”*“);

printf(”n“);}

} 5.3 编程计算 问题描述

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

上述算式的求和结果(结果保留四位小数)输入样例 1 输出样例 sum=1.0000

#include int main(){ int n,i,j,sign=-1;double f, sum=0;scanf(”%d“,&n);for(i=1;i<=n;i++){

f=1.0/i;

sign=-sign;

sum=sum+sign*f;}

printf(”sum=%.4lfn“,sum);} 5.4 分数序列 问题描述

有一个分数序列:和。输入 整数n 输出

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

提示:输出语句格式为 printf(”sum=%16.10fn“,s);输入样例 1 输出样例,输入整数n,求出其前n项的sum= 2.0000000000

#include int main(){ int i,n,k;double f,sum=0,a=1.0,b=1.0;

scanf(”%d“,&n);

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

k=a;

a=b;

b=a+k;

f=b/a;

sum=sum+f;}

printf(”sum=%16.10lfn“,sum);} 5.5 求e的值 问题描述 编写程序,从键盘输入整数 n , 求 e 的值。e=1+1/1!+1/2!+1/3!+..+1/n!型数据计算。输入 整数n 输出 e的值

提示:输出语句printf(”e=%16.10fn“,e);输入样例 2 输出样例

e= 2.5000000000

#include void main(){ int n,i,j;double k,f,sum=1;

scanf(”%d“,&n);

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

for(j=1,k=1;j<=i;j++)

k=k*j;

f=1.0/k;

sum=sum+f;}

printf(”e=%16.10lfn“,sum);

注意:用 double

} 5.6 最大公约数 问题描述

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

两个正整数m和n 输出

m和n的最大公约数和最小公倍数 输入样例 2 8 输出样例

the greatest common divisor is 2 the least common multiple is 8

#include int main()

{

int m,n,r,t,M,N,a,b,c;

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

if(m

{t=m;

m=n;

n=t;

}

a=m;

b=n;

while((r=m%n)!=0)

{

m=n;

n=r;}

printf(”the greatest common divisor is %dn“,n);

M=a/n;

N=b/n;

c=M*N*n;

printf(”the least common multiple is %dn“,c);

return 0;

} 5.7 水仙花数 问题描述

输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33 输入 无 输出

所有的水仙花数 提示:输出语句printf(”%dn“,n);

#include void main(){ int i,a,b,c,d;

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

a=i/100;

b=(i%100)/10;

c=i%10;

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

if(i==d)

printf(”%dn“,i);} } 5.8 完数 问题描述

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

一个正整数n 输出

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

Yes,its factors are 1 2 3

#include int main(){ int a,i,sum=0;scanf(”%d“,&a);

for(i=1;i

sum=sum+i;if(sum==a){

printf(”Yes,its factors are “);

for(i=1;i

if(a%i==0)printf(” %d“,i);

printf(”n“);} else printf(”Non“);

}

5.9 素数 问题描述

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

两个整数m和n 输出

[m,n]区间的所有素数 输入样例 2 10 输出样例 2 3 5 7

#include int main(){ int m,n,i,j;scanf(”%d%d“,&m,&n);for(i=m;i<=n;i++){

for(j=2;j

if(i%j==0)break;

if(j==i)printf(” %d“,i);} printf(”n“);

return 0;}

5.10 回文数 问题描述

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

一个正整数n 输出

如果是,输出Yes,否则输出No 输入样例 12321 输出样例 Yes #include int main(){ int a,b,c;

scanf(”%d“,&a);c=a;b=0;while(c>0){

b=b*10+(int)c%10;

c=c/10;} if(a==b)printf(”Yesn“);else printf(”Non“);}

5.11 贪吃的猴子 问题描述

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

第一天的桃子个数。提示:输出语句为printf(”The monkey got %d peachs in first day.n“,sum);输入样例 5 输出样例

The monkey got 114 peachs in first day.提示: 问题分析: 总共 t0 日吃掉剩余 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 n 1 0 tn-1=1

#include int main(){ int n,i;double sum;scanf(”%d“,&n);i=n,sum=1;for(;i>1;i--)

sum=(sum+(i-1))*2;printf(”The monkey got %.0lf peachs in first day.n“,sum);

return 0;}

5.12 马戏团观众人数

问题描述

一个马戏团表演,n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。根据总人数,计算出男人、女人和小孩各多少人。输入

总人数 n 输出

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

#include int main(){ int n,x,y,z,tag=0;scanf(”%d“,&n);for(x=0;x<=n;x++)

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

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

if(x+y+z==n&&50*x+20*y+1*z==1200)

{

tag=1;

printf(”%d %d %dn“,x,y,z);

} if(tag==0)printf(”No outputn“);

return 0;} 5.13 迭代法 问题描述 用迭代法求。求平方根的迭代公式为:

要求前后两次求出的x的差的绝对值小于10-5。输入 a 输出 的值 输入样例 输出样例

The square root of 4.00 is 2.00000

#include #include int main(){ double i,a,sq,d;scanf(”%lf“,&a);d=a;for(sq=1;;){

i=sq;

sq=(sq+a/sq)/2;

if(fabs(sq-i)<=0.00001)

{

printf(”The square root of %.2lf is %.5lfn“,d,sq);

break;

} } }

5.14 cos(x)-x=0 利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。xn+1=cos(xn)迭代步骤如下:(1)输入数据给x1;

(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“,x)。提示:本题x0和x1定义为double类型 #include #include int main(){ double a,b,i;scanf(”%lf“,&b);for(i=1;;){

a=b;

b=cos(a);

if(fabs(a-b)<=0.000001)

{

printf(”x=%lfn“,b);

break;

} } } 5.15 求一个三位数,其值等于其各位阶乘之和 问题描述

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

满足上述条件的三位数。提示:输出格式为printf(”%dn“,num);

#include void main(){ int a,b,c,d,i,j,k,l,x,y,z;for(i=100;i<1000;i++){

a=i/100;b=(i%100)/10;c=i%10;

for(j=1,x=1;j<=a;j++)x=x*j;

for(k=1,y=1;k<=b;k++)y=y*k;

for(l=1,z=1;l<=c;l++)z=z*l;

if(x+y+z==i)printf(”%dn“,i);} }

6.1 谁能出线 背景:

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

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

能够出线的学生序号(0~9)。#include #define N 10 int main(){ int i,max=0,j;int a[N];

for(i=0;i

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

if(a[i]>=max)

max=a[i];}

for(j=0;j

if(a[j]==max)

printf(”%dn“,j);

return 0;} 6.2 统计素数的个数

求出 2 到 m 之间(含 m,m<=1000)所有素数并放在数组 a 中。输入:正整数m 输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)如:

输入:10 输出:2 3 5 7 4 #include #define N 10 int main(){ int i,j,m,count=0;int a[N];scanf(”%d“,&m);for(i=2;i<=m;i++){

for(j=2;j

if(i%j==0)break;

if(i==j)

{

count++;

printf(”%4d“,i);

} } printf(”n%dn“,count);

return 0;} 6.3 冒泡法排序

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在

倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

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

编写程序,对输入的十个数按照从小到大排序 #include #define N 10 int main(){ int i,j,t;int a[N];for(j=0;j

for(j=1;j

if(a[j]

{

t=a[j-1];

a[j-1]=a[j];

a[j]=t;

} for(j=0;j

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

return 0;} 6.4 插入法排序

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

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#include int main(){ int i,j,n,m;int a[11];for(i=0;i<10;i++)

scanf(”%d“,&a[i]);scanf(”%d“,&n);a[10]=n;for(i=10;i>0;i--)

if(a[i]

{

m=a[i];

a[i]=a[i-1];

a[i-1]=m;

}

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

{

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

} printf(”n“);return 0;} 6.5 求各位数字组成的最大数

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

#include int main(){ int i,j,n,count=0,t,m;int a[100];scanf(”%d“,&n);for(i=0;n>0;i++){

m=n%10;

a[i]=m;

count++;

n=n/10;} for(i=0;i

for(j=1;j

if(a[j]>a[j-1])

{

t=a[j-1];

a[j-1]=a[j];

a[j]=t;

}

for(i=0;i

{

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

} printf(”n“);return 0;} 6.6 数组逆序输出 问题描述

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

提示:

用第一个与最后一个交换。#include #define N 10 int main(){ int j;int a[N];for(j=0;j

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

printf(”%d “,a[9-j]);printf(”n“);

return 0;} 6.7 求最大值 问题描述

要求从键盘输入10个整型数据,找出其中的最大值并显示出来。输入范例 0 54-710 27 32767 10 1 500 2 输出范例 32767 提示

先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。#include #define N 10 int main(){ int j,t;int a[N];for(j=0;j

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

if(a[j+1]

{

t=a[j];

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

a[j+1]=t;

}

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

return 0;}

6.8二维数组

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

例如:

数组中的值为

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

#include #define N 4 int main(){ int i,j,n;int a[N][N];for(i=0;i

for(j=0;j

scanf(”%d“,&a[i][j]);scanf(”%d“,&n);for(i=0;i

for(j=0;j

a[i][j]=a[i][j]*n;for(i=0;i

for(j=0;j

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

printf(”n“);}

return 0;} 6.9 在屏幕上显示杨辉三角形

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

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

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

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

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

编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下: 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[100][100];scanf(”%d“,&n);for(i=0;i

a[i][0]=1;

a[i][i]=1;} for(i=2;i

for(j=1;j

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

for(j=0;j

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

printf(”n“);}

return 0;}

6.10求二维数组周边元素之和 编写一个程序,求出4×5的二维数组周边元素之和。输入:二维数组元素 输出:周边元素之和 如: 输入: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 输出:61 #include int main(){ int i,j,sum=0;int a[4][5];for(i=0;i<4;i++)

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

scanf(”%d“,&a[i][j]);for(i=0;i<4;i++)

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

sum=sum+a[0][1]+a[0][2]+a[0][3]+a[3][3]+a[3][1]+a[3][2];

printf(”%dn“,sum);

return 0;} 6.11存储并输出一个矩阵

编程,输入 n,存储并输出如下例(n=5)所示的图形。1 2 3 4 5 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1 #include int main(){ int i,j,k,n;int a[100][100];scanf(”%d“,&n);for(i=0;i

for(j=0;j

a[i][j]=1;for(i=0;i

for(j=i;j

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

for(i=0;i

{

for(j=0;j

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

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 i,j,t;int a[10],b[10];for(i=0;i<10;i++){

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

b[i]=a[i];} for(i=0;i<10;i++)

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

if(b[j]

{

t=b[j-1];

b[j-1]=b[j];

b[j]=t;

}

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

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

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

{

printf(”%3d“,j+1);

break;

} printf(”n“);return 0;} 6.13 矩阵加法

方阵阶数为n(n<100),例如当n=3时,矩阵int a[3][3],矩阵int b[3][3]。矩阵的数据由用户输入。输出新的矩阵c=a+b。输出格式: c00 c01 c02 c10 c11 c12 c20 c21 c22 每两个数字之间有1个空格 关于输入 方阵阶数n 矩阵a: a00 a01 a02 a10 a11 a12 a20 a21 a22 矩阵b: b00 b01 b02 b10 b11 b12 b20 b21 b22

关于输出 矩阵c: c00 c01 c02 c10 c11 c12 c20 c21 c22 注意:输出时每行最后不能有空格

#include int main(){ int i,j,n;int a[100][100],b[100][100],c[100][100];scanf(”%d“,&n);for(i=0;i

for(j=0;j

scanf(”%d“,&a[i][j]);for(i=n;i

for(j=0;j

scanf(”%d“,&b[i-n][j]);for(i=0;i

for(j=0;j

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

for(i=0;i

{

for(j=0;j

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

printf(”%dn“,c[i][n-1]);

} return 0;}

6.14 矩阵转置

在数学上,矩阵是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。矩阵概念在生产实践中也有许多应用,比如矩阵图法以及保护个人帐号的矩阵卡系统(由深圳网域提出)等等。“矩阵”的本意也常被应用,比如监控系统中负责对前端视频源与控制线切换控制的模拟设备也叫矩阵。

设A为n×n阶矩阵(即n行n列),第i 行j 列的元素是a(i,j),即:A=a(i,j)定义A的转置为这样一个n×n阶矩阵B,满足B=a(j,i),即 b(i,j)=a(j,i)(B的第i行第j列元素是A的第j行第i列元素),记A'=B。(有些书记为AT=B,这里T为A的上标)

直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。输入:

有n+1行(2 ≤n≤10),第一行是一个整数n,代表矩阵为n行n列。后面n行表示矩阵的取值 输出:

转置后的矩阵

#include int main(){ int i,j,n;int a[100][100],b[100][100];scanf(”%d“,&n);

for(i=0;i

for(j=0;j

scanf(”%d“,&a[i][j]);for(i=0;i

for(j=0;j

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

for(i=0;i

for(j=0;j

printf(”%d “,b[i][j]);

printf(”%dn“,b[i][n-1]);} return 0;} 6.15求一系列整数中出现最多的数字

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

有两行,第一行是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值 输出:

出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数 输入样例: 1 1233 输出样例:

出现次数最多2次的数字是 3 #include int main(){ int i,n,max;int a[100],b[10]={0};scanf(”%d“,&n);for(i=0;i

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

while(a[i]>0)

{

b[a[i]%10]++;

a[i]=a[i]/10;

} } max=b[0];for(i=1;i<10;i++)

if(max

max=b[i];

printf(”出现次数最多%d次的数字是“,max);

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

if(max==b[i])

printf(” %d“,i);

printf(”n“);return 0;} 6.16 装箱问题

假设有n项物品,大小分别为s1,s2,...,sn,其中si是整数且满足:1<=si<=100。要把这些物品装入到容量为100的一批箱子(序号1~n)中。装箱方法是:对每项物品si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(first-fit策略)。写一个程序来模拟这个装箱的过程。输入: 有两行。第一行是整数n(n<=1000),表示物品的个数;第二行是n个整数si(si<=100),分别表示n个物品的大小 输出:

每个物品所在的箱子序号,并输出所需的箱子数目 输入样例: 8 60 70 80 90 30 40 10 20 输出样例: 60 1 70 2 80 3 90 4 30 1 40 5 10 1 20 2 所需的箱子数目为5

#include int main(){int u,s[1000]={0},b[1000]={0},i=0,j;scanf(”%d“,&u);for(;i<=u-1;i++)scanf(”%d“,&s[i]);for(i=0;i<=u-1;i++)

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

if(s[i]+b[j]<=100)

{

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

printf(”%d %dn“,s[i],j+1);

break;

}

else continue;}

}

printf(”所需的箱子数目为“);

for(i=0;i<=1000;i++)if(b[i]==0){

printf(”%dn“,i);

break;}

return 0;}

7.1 数的合并

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。

例如:当a=45,b=12,调用该函数后,c=5241。#include void fun(int x,int y,int *p){ *p=(x%10)*1000+(y%10)*100+(x/10)*10+y/10;} int main(){ int a,b,c;scanf(”%d%d“,&a,&b);fun(a,b,&c);printf(”%dn“,c);} 7.2 数组中奇偶数

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

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

void fun(int a[],int n,int *odd,int *even){ int i;

*odd=0;*even=0;for(i=0;i

if(a[i]%2==0)

*even=*even+a[i];

else

*odd=*odd+a[i];} } int main()

{

int a[N],i,n,odd,even;

scanf(”%d“,&n);

for(i=0;i

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

fun(a,n,&odd,&even);

printf(”The sum of odd numbers:%dn“,odd);

printf(”The sum of even numbers:%dn“,even);

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 *h){ double i;i=(int)(a*100+0.5);*h=(i/100);} int main()

{

double a,h;

scanf(”%lf“,&a);

fun(a,&h);

printf(”The result:%lfn“,h);

return 0;

} 7.4 字符移动

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

例如:原有的字符串为: Mn.123xyZ,则调用该函数后,串中的内容为: n.123xyZM。

#include #define N 81

#include void fun(char *p){ int i,count=0;char j;j=p[0];for(i=0;*(p+i)!='';i++){

*(p+i)=*(p+i+1);

count++;} *(p+count-1)=j;} int main()

{

char a[N];

gets(a);

fun(a);

printf(”%sn“,a);

} 7.5 生成新数

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。#include #include #include void fun(int *p){ int i,j,a,b,c[20],count=0,flag=-1;for(i=0;*p!=0;i++){

c[i]=*p%10;

*p=*p/10;

count++;} *p=0;for(j=0;j

if(c[j]%2!=0)

{

flag++;

*p=*p+c[j]*pow(10,flag);

} } } int main()

{ int n=-1;

while(n>99999999||n<0)

{

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

fun(&n);

printf(”%dn“,n);

return 0;

} 7.6 字符串转换成整数

请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数。例如,若输入字符串”-1234“,则函数把它转换为整数值-1234。函数fun中给出的语句仅供参考。#include #include #include int fun(char *p){ int y;y=atof(p);return y;}

int main()

{ char s[10];

int n;

gets(s);

n = fun(s);

printf(”%dn“,n);

return 0;

} 7.7 二维数组按列优先存放

请编写函数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 p[][N],char q[]){ int i,j,count=0;

for(j=0;j

for(i=0;i

{

q[count++]=p[i][j];

}

q[count]='';} int main()

{

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,count=0;for(i=0;s+i<=p;i++)

if(*(s+i)!='*')

{

*(s+count)=*(s+i);

count++;

}

for(s+i==p;*(s+i)!='';i++)

*(s+count++)=*(s+i);*(s+count)='';} int main(){ char s[81],*t;

gets(s);

t=s;

while(*t)t++;

t--;

while(*t=='*')t--;

fun(s , t);

puts(s);

return 0;} 7.9 统计数字字符

请编写函数 fun,它的功能是:统计形参 s 所指字符串中数字字符出现的次数,并存放在形参 t 所指的变量中,最后在主函数中输出。例如,字符串s为: abcdef35adgh3kjsdf7。输出结果为: 4。#include void fun(char *p,int *q){ int i,count=0;for(i=0;*(p+i)!='';i++)

if(*(p+i)>='0'&&*(p+i)<='9')

count++;*q=count;}

int main(){ char s[80]=”abcdef35adgh3kjsdf7“;

int t;

gets(s);

fun(s,&t);

printf(”%dn“,t);

return 0;} 7.10 将两个串按要求形成一个新串

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

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

#include

void fun(char *p,char *q,char *c){ int i,count=0;char max;for(i=0;*(p+i)!='';i++){

max=*(p+i);

if(*(p+i)<*(q+i))

max=*(q+i);

*(c+count)=max;

count++;} if(strlen(q)>strlen(p))

for(i=count;*(q+i)!='';i++)

{

*(c+count)=*(q+count);

count++;

} *(c+count)='';} 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*str,char*substr,int*count){

int i=0;

*count=0;

for(;*str!=0;str++)

{

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

if(*(substr+i)!=*(str+i))

break;

if(*(substr+i)==0)

(*count)++;

} } int main(){

char str[80],substr[80];

int count;

gets(str);

gets(substr);

fun(str,substr,&count);

printf(”%dn“,count);

return 0;

} 7.12 按要求处理字符串

函数 fun 的功能是:将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除 , 串中剩余字符所形成的一个新串放在 t 所指的数组中。例如,若 s 所指字符串中的内容为: ”ABCDEFG12345“, 其中字符 A 的 ASCII 码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符 1 的 ASCII 码值为奇数,所在数组中的下标也为奇数 , 因此不应当删除,其它依此类推。最后 t 所指的数组中的内容应是: ”135“。

#include #include void fun(char *s,char *t){

int i,count=0;

for(i=0;*(s+i)!='';i++)

if(i%2!=0&&*(s+i)%2!=0)

{ *(t+count)=*(s+i);count++;

}

*(t+count)='';} int main()

{

char s[100], t[100];

scanf(”%s“, s);

fun(s, t);

printf(”%sn“, t);

return 0;

} 7.13 求非偶数的除数

请编写函数 fun,它的功能是:求出能整除形参 x 且不是偶数的各整数 , 并按从小到大的顺序放在 pp 所指的数组中 , 这些除数的个数通过形参 n 返回。

例如,若 x 中的值为 : 35,则有 4 个数符合要求,它们是 : 1, 5, 7, 35。#include void fun(int x,int *aa,int *y){

int i;

*y=0;

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

if(x%i==0&&i%2!=0)

{

*aa=i;

aa++;

(*y)++;

} } void main(){ int x, aa[1000], n, i;

scanf(”%d“, &x);

fun(x, aa, &n);

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

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

printf(”n“);} 7.14 求最大值及其下标 请编写函数 fun,其功能是求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中。

例如 , 输入如下整数 : 876 675 896 101 301 401 980 431 451 777 则输出结果为 : 6, 980 #include void fun(int *a,int m,int *k){

int i;

*k=0;

for(i=1;i

{

if(*(a+i)>*(a+*k))

*k=i;

} } void main(){

int a[10], k ,i;

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

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

fun(a, 10, &k);

printf(”%d,%dn“, k, a[k]);} 8.1 字符转换 描述

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

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

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

# include int main(){ char a[100];int i,m=0,b[100],n=0;gets(a);for(i=0;a[i]!='';i++)if(a[i]>='0'&&a[i]<='9'){ b[n]=a[i]-'0';n++;} for(i=0;i

printf(”%d“,b[i]);}} if(m==0)printf(”0“);printf(”n“);return 0;}

8.2合并字符串

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

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

一个合并在一起的有序(升序)的字符串 #include #include int main(){ char a[100],b[100];int i,j,k,t;gets(a);gets(b);strcat(a,b);k=strlen(a);for(j=1;j

for(i=0;i

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

{

t=a[i];

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

a[i+1]=t;

} puts(a);} 8.3 删除重复字符 背景:

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

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

删除重复字符后的字符串。例如:abced #include void main()

{

char a[100];

int i,j,flag;

gets(a);

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

{

flag=1;

for(j=0;j

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

flag=0;

if(flag==0)

a[i]='0';

}

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

if(a[i]!='0')

printf(”%c“,a[i]);

printf(”n“);

} 8.4 删除字符串中指定字符 输入两个字符串 s1 和 s2,在 s1 中删除任何 s2 中有的字符。例如,s1 :“ abc123ad ”,s2 :“ a1 ”,则输出“bc23d ”。输入:两个字符串 s1 和 s2 输出:删除后的字符串 s1 #include #include int main(){ char s1[100],s2[100];int i,j,k,t;gets(s1);gets(s2);for(j=0;s1[j]!='';j++)

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

if(s1[j]==s2[i])

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

if(s1[i]!='0')

printf(”%c“,s1[i]);printf(”n“);} 8.5 单词有多少

用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 ”stop“ 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。输入:多个字符串 输出:单词的数量 #include #include int main(){ char str[100];int i,count=0;

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

scanf(”%s“,str);

count++;

if(strcmp(str,”stop“)==0)

break;} printf(”%dn“,count-1);} 8.6 在指定位置插入字符串

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

输入:两个字符串 s1、s2 和 s1 中任意字符 k 输出:插入后的字符串 s1 #include #include int main(){ char k,s1[100],s2[100],s3[100],s4[100];int i,m,n,c=-1;

gets(s1);gets(s2);scanf(”%c“,&k);for(i=0;s1[i]!='';i++){

c++;

if(s1[i]==k)

break;

} m=strlen(s2);n=strlen(s1);

for(i=0;i

s3[i]=s1[i];

for(i=c;i

s3[i]=s2[i-c];

for(i=c+m;i<=m+n;i++)

s3[i]=s1[i-m];

puts(s3);} 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!(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.INPUT FORMAT Line 1: An upper case character string of length 1..6 that is the name of the comet.Line 2: An upper case character string of length 1..6 that is the name of the group.OUTPUT FORMAT A single line containing either the word ”GO“ or the word ”STAY“.#include #include int main(){ char s1[7],s2[7];int i,j=1,k=1;

gets(s1);gets(s2);

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

{

s1[i]=s1[i]-'A'+1;

j=s1[i]*j;}

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

s2[i]=s2[i]-'A'+1;

k=k*s2[i];} if(j%47==k%47)

printf(”GOn“);else printf(”STAYn“);} 8.8大数相加 问题描述:

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

输入格式:

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

输出格式:

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

#include #include #include int main()

{

int i,j,k,t,a[27]={0},b[27]={0},c[27]={0};

char m[26],n[26];

gets(m);

gets(n);

i=strlen(m);

j=strlen(n);

for(k=i-1,t=0;k>=0;k--,t++)

a[t]=m[k]-'0';

for(k=j-1,t=0;k>=0;k--,t++)

b[t]=n[k]-'0';

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

{

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

if(c[k]>=10)

{

c[k]=c[k]-10;

c[k+1]=1;

}

}

for(k=26;k>=0;k--)

if(c[k]>0)break;

for(k=k;k>=0;k--)

printf(”%d“,c[k]);

printf(”n“);

return 0;

} 8.9 字符串重排列

判断一个字符串是否可以由另一个字符串通过重排字符而得到。注意,此处区分字符大小写!输入

输入只有一行,为两个字符串,字符串之间以一个空格分隔。输出

如果两个字符串由同一组字符组成(且每一个字符出现次数相同),则输出“YES”; 否则输出“NO”。注意YES和NO都是大写字母!#include int main(){ int i,j,flag=0,count=0;char a[10],b[10];scanf(”%s%s“,a,b);for(i=0;a[i]!='';i++)

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

for(j=0;b[j]!='';j++)

if(a[i]==b[j]||a[i]==b[j]+'a'-'A'||a[i]+'a'-'A'==b[j])

{

flag++;

b[j]='0';

break;

} if(flag==count)

printf(”YESn“);else printf(”NOn“);} 8.10上课啦!要点名啊!

小凡的老师每次上课前都要点名,但是这样就浪费了老师的上课时间。所以老师让小凡来完成点名,让小凡在早自习的时候就点好名。老师给了小凡名单,小凡只要照着名单点名就好了是不是很简单啊。输入

输入有多组数据,直到文件结束。每组测试数据有三行,第一行为两个整数m, n(50 >= m >= n)。第二行有m个名字,名字之间用空格隔开,是小凡班上同学的名单。后面有n个名字是来上课的同学。名字间用空格隔开。名字的长度不超过20个字符。输出

按照第一行的名单,每个人对应输出是否到了。到的人输出Yes,没到的人输出No。#include int main()

{

int m,n,i,j;

char a[51][21],b[51][21];

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

for(i=0;i

scanf(”%s“,a[i]);

for(j=0;j

scanf(”%s“,b[j]);

for(i=0;i

{

for(j=0;j

{

if(strcmp(a[i],b[j])==0)

{

printf(”YESn“);

break;

}

}

if(j==n)printf(”NOn“);

}

} 8.11找第一个只出现一次的字符 问题描述:

给定t个字符串,这个字符串只可能由26个小写字母组成,请你找到第一个仅出现一次的字符,如果没有符合要求的字符,就输出no。输入:

第一行是t,接下来是t个字符串,每个字符串长度小于100 输出:

你的输出需要由t行组成。

对于每个字符串,输出第一个仅出现一次的字符,没有输出NO。输入样例: aabb abcdab 输出样例: NO c

#include #include int main()

{

int i,j,t,k,l;

char a[1000][100],c;

scanf(”%d“,&t);

for(i=0;i

scanf(”%s“,a[i]);

for(i=0;i

{

k=strlen(a[i]);

a[i][k]='0';

a[i][k+1]='';

for(j=0;j

{

for(l=0;l

{

if(l==j)

l++;

if(a[i][j]==a[i][l])break;

}

if(l==k+1)

{

c=a[i][j];

putchar(c);

putchar('n');

break;

}

}

if(j==k+1)printf(”NOn“);

}

} 8.12 提取数据

输入一个字符串,长度不超过30,内有数字字符和非数字字符,统计其中包含了多少个非负整数,并输出这样的非负整数。关于输入

一个字符串,最大长度为30 关于输出

输出字符串中包含的数据,一个数据一行.(不用输出总数)#include #include int main(){ int i,j,k,b[30]={0},c[30]={0};char d[31];gets(d);j=strlen(d);for(i=0;d[i]!='';i++){ if(d[i]<='9'&&d[i]>='0'){ b[i]=1;k=d[i]-'0';c[i]=k;} if(d[i]=='-')b[i]=2;} i=0;if(b[0]==1){ for(;b[i]!=0&&b[i]!=2;i++)printf(”%d“,c[i]);printf(”n“);} for(;i

第二篇:中国石油大学(华东)-C语言学习心得

C语言学习心得

开课之前信息的收集:在高中的时候就听过程序员这个职业,当时也只知道这些人是写程序的,然而程序是什么具体我也不知道。终于上大学了,我看到自己的课表上有C程序设计,感到很兴奋,自己终于要开始学程序。于是我问大二的学长学姐C语言学习经验,他们只对我说,有点难学(可能是他们没认真学的原因)要好好学,在老乡会上刚刚找到工作的大四学长对我讲述他求职百度的时候的经历,百度面试官问他说你会什么编程语言,他说会C,C#,java。面试官接着问你最擅长哪个,他说C语言,紧着接面试官问了一系列关于C语言的问题,一个比一个深入,他答不出来,最后的结果就是直接被拒绝。临走的时候百度面试官对他说,只要你能掌握一门编程语言就能要你。学长告诫我,信管会学很多课但都是只知道一点,因此要学既然要学一门编程就要把它学精,哪怕其它的编程语言不擅长也没关系,我现在就后悔当时没好好学。知道这些情况后我决心学好C语言。

开课后学习的经历:第一节课上,老师说由于课程的安排,前四章的知识会讲的很快,对编程有用的就说,还有些理论课下自己看看,介绍了C语言的发展和编程格式输入和输出。紧接着的上机课我写了人生的第一个程序,觉得很有意思,从此就喜欢上了编程,喜欢这种逻辑的推理与设计,课前我会将书上的知识点掌握,然后上课认真听老师讲课,看看自己有没有漏掉什么知识点,书上没说的和老师给的程序要记下来,回来后自己来体验下这个程序。就这样到了期中考试,结果并不好,让我认识到自己不能只停留在programe上,要多做acm上的题目,并且课下要多读别人的代码来学习方法,就这样白天在图书馆里看书,晚上回来编程,两个月后发现有了很大进步,也发现C语言更有趣了。我也很积极报了来年三月份的计算机二级等级考试,虽然只学了一半,但是我想通过自己的学习和请教老师,拿到那个证书应该不是问题,就这样我开始了自学后半部分,发现真的很晕,果然后面不简单。但是我想到每件事开始的时候都是困难的,就这样我坚持了下来,在老师的帮助下我也成功的过了,并且还是优秀,而且由于自己事先学过了,所以下学期的学习并没有特别困难。

通过学习Funcode让我真正的看到了C语言的应用,课上学的只是C语言的理论,而最重要的是应用。经过实验每个函数的功能,掌握每种函数的接口,再根据自己的设计将这些函数通过一定的组合和排列,制作出一个属于自己的动画,这种感觉真的很棒。我都迫不及待地想给我爱看动画的小表弟展示我制作的动画和体验我设计的游戏,虽然这些动画和游戏还比较低级,但我想他看到后一定会很开心。

一年的学习经历不仅让我C语言入门,更教会了我许多许多。教会了我如何自主学习;教会了我只要你肯努力,就能学有所成;教会了我坚持自己所喜欢的,并为之汗水,结果也一定让人满意。感谢老师一年来一直以来对我的指导和教诲,课下牺牲自己休息的时间来为我解答问题,为我提前开放作业题。

结课之后的打算:希望能通过自己的努力进入学校的ACM团队,继续深入的学习C语言,毕竟自己也才入门而已,离精通还很远。同时大二的时候去蹭课学习算法和数据结构来进一步提升自己的编程能力。

第三篇:中国石油大学(华东)C语言习题答案

付子文

C语言习题集

C语言复习题

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

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

输出: 一行中N个星号 #include int main(){ int a,i;scanf(“%d”,&a);for(i=1;i<=a;i++)printf(“*”);printf(“n”);return 0;} 【设计型】5.2 打印平行四边形

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

付子文

C语言习题集

整数n例如 5 输出:

由*组成的高为5的平行四边形 #include int main(){ int i,j,num;scanf(“%d”,&num);for(i=0;i

编写程序,输入n的值,求 :1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n(保留四位小数)#include int main(){ double n,i,sum,k=1.0;scanf(“%lf”,&n);

付子文

C语言习题集

i=1,sum=0;while(i<=n){ sum=sum+k/i;i++;k=-k;(用这个式子实现正负交替)} printf(“sum=%.4lfn”,sum);return 0;} 【设计型】5.4 分数序列

有一个分数序列:求出其前n项的和。

...............,输入整数n,输出语句格式为:printf(“sum=%16.10fn”,s);#include int main(){ int n,a,b,i,temp;double sum;scanf(“%d”,&n);i=1,sum=0,a=2,b=1;while(i<=n)3

付子文

C语言习题集

{ sum=sum+a*1.0/b;temp=a;a=a+b;b=temp;(几个式子实现数值的变换)

i++;} printf(“sum=%16.10fn”,sum);return 0;} 【设计型】5.5 求e的值

编写程序,从键盘输入整数 n , 求 e 的值.e=1+1/1!+1/2!+1/3!+..+1/n!注意:用 double 型数据计算输出语句:printf(“sum=%16.10fn”,sum);#include int main(){ int n,i;double sum,jc;scanf(“%d”,&n);i=1,sum=1.0 jc=1.0;while(i<=n){ jc=jc*i;sum=sum+1.0/jc;i++;} printf(“sum=%16.10fn”,sum);return 0;} 【设计型】5.6 最大公约数

付子文

C语言习题集

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

比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。#include int main(){ int yu,m,n,temp,bei,ji;scanf(“%d%d”,&m,&n);if(m

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

printf(“the greatest common divisor is %dn”,n);printf(“the least common multiple is %dn”,bei);return 0;} 【设计型】5.7 水仙花数

付子文

C语言习题集

输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33 输出语句:printf(“%dn”,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(“%dn”,b);} } } return 0;} 【设计型】5.8 完数

一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No #include int main()6

付子文

C语言习题集

{ int yinzi,num,i,sum=0;scanf(“%d”,&num);for(yinzi=1;yinzi

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

付子文

C语言习题集

#include int main(){ int m,n,i,j,tag=1;scanf(“%d%d”,&m,&n);for(i=m;i<=n;i++){ for(j=2;j

if(i%j==0){ tag=0;break;} else tag=1;}

if(tag)printf(“ %d”,i);} printf(“n”);return 0;

付子文

C语言习题集

} 【设计型】5.10 回文数

输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No #include int main(){ double num;scanf(“%lf”,&num);int min=0, max=num;while(max>0){ min=min*10+(int)max%10;(将数字反过来)max=max/10;}

if(num==min)printf(“Yesn”);else printf(“Non”);return 0;} 【设计型】5.11 贪吃的猴子

有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃

付子文

C语言习题集

了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入: 天数n 输出:

第一天的桃子个数,输出语句为printf(“The monkey got %d peachs in first day.n”,sum);Smaple: Input: 5 Output The monkey got 114 peachs in first day.提示:

问题分析: 总共 t0 日 吃掉 剩余 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 n 1 0 tn-1=1 #include int main(){

付子文

C语言习题集

int i,t,sum;scanf(“%d”,&t);sum=1;for(i=t;i>1;i--){ sum=(sum+i-1)*2;?

} printf(“The monkey got %d peachs in first day.n”,sum);return 0;} 【创新型】5.12 马戏团观众人数

一个马戏团表演,n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。编程,输入总人数 n,输出满足要求的男人、女人和小孩人数的全部方案。若 n 人无法满足条件,则输出“No outputn”。输入: 人数 n 输出: 男人、女人和小孩人数 #include int main(){ int man,woman,child,total,sum,tag=0;scanf(“%d”,&total);for(man=0;man<=total;man++){ 11

付子文

C语言习题集

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 %dn”,man,woman,child);} } } if(tag==0)printf(“No outputn”);return 0;} 【设计型】5.13 迭代法

用迭代法求

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

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

#include #include 12

付子文

C语言习题集

int main(){ double x,a,b;double i;scanf(“%lf”,&x);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 %.5lfn”,b,i);break;} } return 0;} 【设计型】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);

付子文

C语言习题集

(5)所求X1就是方程cos(X)-X=0的一个实根,输出X1,输出语句为printf(“x=%lf”,x)。

提示:本题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){ printf(“x=%lfn”,x1);break;} } return 0;} 【设计型】5.15 求一个三位数,其值等于其各位阶乘之和

付子文

C语言习题集

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

输出格式:printf(“%dn”,num);#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;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){

付子文

C语言习题集

printf(“%dn”,i);break;} } } 【研究创新型】6.1 谁能出线

背景:

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

输入:

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

输出:

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

int i,a[10],max;for(i=0;i<10;i++)scanf(“%d”,&a[i]);max=a[0];for(i=0;i<10;i++){

付子文

C语言习题集

}

} if(max<=a[i])max=a[i];for(i=0;i<10;i++)if(a[i]==max)printf(“%dn”,i);return 0;【设计型】6.2 统计素数的个数

求出 2 到 m 之间(含 m,m<=1000)所有素数并放在数组 a 中。输入:正整数m 输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)如:输入:10 输出:2 3 5 7 4 #include int main(){ int i,j,k=0,a[1001],m,yu,tag,num=0;scanf(“%d”,&m);for(i=2;i<=m;i++){ tag=1;a[k]=i;

付子文

C语言习题集

for(j=2;j

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直

付子文

C语言习题集

至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。编写程序,对输入的十个数按照从小到大排序

#include int main(){ int i,j,a[10],z;for(i=0;i<10;i++){ scanf(“%d”,&a[i]);} 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;} 19

付子文

C语言习题集

} } for(j=0;j<10;j++){ printf(“ %d”,a[j]);} printf(“n”);return 0;} 【设计型】6.4 插入法排序

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

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#include int main(){ int a[11],i,j,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);scanf(“%d”,&a[10]);for(i=0;i<10;i++){ if(a[i]>a[10])

付子文

C语言习题集

{ 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”,a[i]);printf(“n”);return 0;} 【设计型】6.5 求各位数字组成的最大数

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

#include int main()21

付子文

C语言习题集

{ int a[12],num,i,j,k,m,t;scanf(“%d”,&num);for(i=0;;i++){ k=num%10;num=num/10;(分离各个位数)a[i]=k;if(num==0)break;} for(m=0;ma[j+1]){ t=a[j+1];a[j+1]=a[j];a[j]=t;} } } for(j=i;j>=0;j--)

付子文

C语言习题集

printf(“%d”,a[j]);printf(“n”);return 0;} 【设计型】6.6 数组逆序输出

问题描述

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

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

#include int main(){ int a[10],i,t;for(i=0;i<=9;i++)scanf(“%d”,&a[i]);for(i=0;i<5;i++)(第一个与最后一个调换){ t=a[i];a[i]=a[9-i];a[9-i]=t;} for(i=0;i<=9;i++)23

付子文

C语言习题集

printf(“%d ”,a[i]);printf(“n”);return 0;} 【设计型】6.7 求最大值

问题描述

要求从键盘输入10个整型数据,找出其中的最大值并显示出来。输入范例 0 54-710 27 32767 10 1 500 2 输出范例 32767 提示

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

#include #define n 10 int main(){ int a[n],i,max;for(i=0;i<10;i++)scanf(“%d”,&a[i]);max=a[0];for(i=1;i<10;i++)24

付子文

C语言习题集

{ if(a[i]>max)max=a[i];} printf(“%d”,max);printf(“n”);return 0;} 【设计型】6.8 二维数组

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

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

#include int main(){ 25

付子文

C语言习题集

int a[4][4],i,j,n,count=0;for(i=0;i<=3;i++){ for(j=0;j<=3;j++)scanf(“%d”,&a[i][j]);} scanf(“%d”,&n);for(j=0;j<=3;j++){ for(i=j;i<=3;i++){ a[i][j]=n*a[i][j];} }

for(i=0;i<=3;i++){ for(j=0;j<=3;j++){ count++;printf(“%4d”,a[i][j]);if(count%4==0)printf(“n”);}

付子文

C语言习题集

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

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

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

杨辉三角有如下性质:

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

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(){

付子文

C语言习题集

int i,j,n;int a[10][10];scanf(“%d”,&n);n=n+1;for(i=0;i

付子文

C语言习题集

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

编写一个程序,求出4×5的二维数组周边元素之和。输入:二维数组元素 输出:周边元素之和 如: 输入: 1 3 5 7 9 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”,&a[i][j]);} for(j=0;j<5;j++)

付子文

C语言习题集

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(“%dn”,sum);return 0;} 【设计型】6.11 存储并输出一个矩阵

编程,输入 n,存储并输出如下例(n=5)所示的 图形。1 2 3 4 5 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”,&n);for(i=0;i

付子文

C语言习题集

a[i][j]=1;

} } for(i=0;i

付子文

C语言习题集

【设计型】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;for(i=1;i<11;i++){ scanf(“%d”,&a[i]);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++)

付子文

C语言习题集

for(i=1;i<11;i++)if(c[m]==a[i]){ printf(“%3d”,i);break;} printf(“n”);return 0;} 【设计型】8.1 字符转换

描述

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

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

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

#include #include int main(){ char word[20];int i,n;scanf(“%s”,word);

付子文

C语言习题集

n=strlen(word);for(i=0;i<=n;i++){ if(word[i]>='0'&&word[i]<='9'){ printf(“%c”,word[i]);} } printf(“n”);return 0;} 【设计型】8.2 合并字符串

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

输入:

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

输出:

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

要求:

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

#include #include

付子文

C语言习题集

int main(){ char a[100],b[100];char n[200],t;int i,j,k,m;gets(a);gets(b);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]='';for(k=0;kn[m]){ t=n[k];n[k]=n[m];n[m]=t;} } printf(“%sn”,n);return 0;

付子文

C语言习题集

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

背景:

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

输入:

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

输出:

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

#include #include int main(){ char str1[100],str2[100];int i,j,n,k=0,tag=0;scanf(“%s”,str1);str2[0]=str1[0];printf(“%c”,str2[0]);n=strlen(str1);for(i=0;i

付子文

C语言习题集

{ if(str1[i]==str2[j]){ tag=0;break;} tag=1;} if(tag==1){ str2[k+1]=str1[i];printf(“%c”,str2[k+1]);k++;} } printf(“n”);return 0;} 【设计型】8.4 删除字符串中指定字符

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

付子文

C语言习题集

输出: 删除后的字符串 s1 #include #include int main(){ char str1[100],str2[100];int i,j,n1,n2,tag=0;scanf(“%s%s”,str1,str2);n1=strlen(str1);n2=strlen(str2);for(i=0;i

付子文

C语言习题集

} printf(“n”);return 0;} 【设计型】8.5 单词有多少

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

#include #include int main(){ char str[10][20],str2[]={'s','t','o','p',''};int i,num=0;for(i=0;;i++){ scanf(“%s”,str[i]);if(strcmp(str[i],str2)==0)break;num++;} printf(“%dn”,num);39

付子文

C语言习题集

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

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

输入: 两个字符串 s1、s2 和 s1 中任意字符 k 输出: 插入后的字符串 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;i

付子文

C语言习题集

for(i=0;i

付子文

C语言习题集

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!(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”,comet,group);n1=strlen(comet);n2=strlen(group);

付子文

C语言习题集

for(i=0;i

问题描述:

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

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

输出为一行,即两个无符号整数m和n之和 输入样例: 9999888888 355729288 输出样例: 10355618176 #include #include #define N 200 int main()

付子文

C语言习题集

{ char s1[N],s2[N];int a[N]= {0},b[N]= {0},L1,L2,c,k,i;scanf(“%s%s”,s1,s2);L1=strlen(s1);L2=strlen(s2);if(L1=0;i--){ a[i]+=b[i];if(a[i]>=10){ a[i]-=10;a[i-1]++;} } if(a[0]!=0){

付子文

C语言习题集

for(i=0;i<=c;i++)printf(“%d”,a[i]);} else { for(i=1;i<=c;i++)printf(“%d”,a[i]);} 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;

付子文

C语言习题集

bai=b%10;fun=qian*1000+bai*100+shi*10+ge;return(fun);} int main(){ int a,b,c;scanf(“%d%d”,&a,&b);c=fun(a,b);printf(“c=%dn”,c);} 【设计型】9.2 素数的判断

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

付子文

C语言习题集

break;} } if(flag==0)fun=0;else fun=1;return fun;} int main(){ int a;scanf(“%d”,&a);if(fun(a))printf(“Primen”);else printf(“Non Primen”);return 0;} 【设计型】9.3 求级数

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

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

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

付子文

C语言习题集

#include double fun(double x,int n){ 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”,&x,&n);printf(“%lfn”,fun(x,n));return 0;} 【设计型】9.4 求大于m且紧靠m的k个素数

付子文

C语言习题集

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

例如,若输入17 5,则应输出19 23 29 31 37 请勿改动主函数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];

付子文

C语言习题集

scanf(“%d%d”,&m,&n);fun(m,n,zz);for(m=0;m

请编写函数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--;50

第四篇:中国石油大学C语言上机题答案(2013版)答案 最全最详细

中国石油大学c语言上机题答案大全(2013版)

最全最详细

1.1 Hello world.让我们用C语言向世界问好。最早的程序基本是这个样子的: 程序一:

#include void main(){

printf(“Hello world.n”);} 程序二:

#include int main(){

printf(“Hello world.n”);

return 0;} 上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。输入:无

输出:Hello world.#include int main(){

printf(“Hello world.n”);} 1.2 Welcome to Beijing.让我们来练习如何显示多行文字。输入:无

输出:就是下面的那段文字。#include void main(){printf(“Welcomen”);printf(“ton”);printf(“Beijing.n”);} 1.3 练习最简单的printf和scanf printf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。输入:整型变量x的值。

输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真观察-1的八进制和十六进制输出,请想想是为什么。#include int main(){int x;scanf(“%d”,&x);printf(“x=%d,”,x);printf(“x=%o,”,x);printf(“x=%xn”,x);return 0;} 1.4 练习两个整数之间的运算 背景:基本练习。

输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出进行+、-、*、/、*之后的运行结果。#include int main(){int x,y;

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

printf(“%d+%d=%dn”,x,y,x+y);

printf(“%d-%d=%dn”,x,y,x-y);

printf(“%d*%d=%dn”,x,y,x*y);

printf(“%d/%d=%dn”,x,y,x/y);

printf(“%d%%%d=%dn”,x,y,x%y);

return 0;} 1.5 学习打印你的第一个图形

背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。程序如下:

#include int main(){

printf(“****n”);

printf(“****n”);

printf(“****n”);

printf(“****n”);

return 0;} 要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。输入:无。

输出:指定图形。#include int main(){

printf(“

*n”);

printf(“ ***n”);

printf(“ *****n”);

printf(“*******n”);

return 0;} 2.1 整型数的表示范围

编写一个循环程序,输入 N 值,输出 N 的阶乘。关于循环程序怎么编写,可以参考教材第3章P66页的例题4.2和第5章P82的例题5.1的内容。注意整型数的表示范围,如果当输入的 N 比较大时,例如 N 等于 20 时,输出怎么是负数了?自己想明白吧!#include void main(){int N,i;int sum=1;N>=2;scanf(“%d”,&N);if(N<=16){for(i=1;i<=N;i++)sum=sum*i;printf(“%dn”,sum);} if(N>=17)printf(“N is too big!n”);} 2.2 求正弦函数值

已知求正弦 sin(x)的近似值的多项式公式为:

sin(x)= xx7/7!+ …… +(-1)n x2n+1/(2n+1)!+ …

编写程序,要求输入 x(单位是弧度)和ε,按上述公式计算 sin(x)的近似值,要求计算的误差小于给定的ε。

此题当然要用到循环语句,到第5章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的ε。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。

友情提示:给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用+键退出程序。#include #include int main(){ float x,eps,s,y=0,y0,t;

int n,j;

scanf(“%f%f”,&x,&eps);

n=t=j=1;

s=x;

do { y0=y;

if(n%2==0)y=y-s/t;

else

y=y+s/t;

s*=x*x;

t*=(j+1)*(j+2);

j+=2;

n++;} while(fabs(y0-y)>eps);printf(“%fn”,sin(x));system(“PAUSE”);

return 0;} 2.3 判断输入的字符的类型

我们将字符分为五类:大写字母、小写字母、数字、控制字符、其他字符。编写程序,从键盘输入一个字符,输出字符所属的类型:大写字母时输出capital letters,小写字母时输出small letters,数字是输出figures,其他字符时输出 others。#include void main(){ char c;

c = getchar();

if(c < 0x20)

printf(“The character is a control charactern”);

else if(c >= '0' && c <= '9')

printf(“figuresn”);

else if(c >= 'A' && c <= 'Z')

printf(“capital lettersn”);

else if(c >= 'a' && c <= 'z')

printf(“small lettersn”);

else

printf(“othersn”);} 3.1 找零钱

假定有 5 角、1 角、5 分、2 分和 1 分共 5 种硬币,在给顾客找硬币时,一般都会尽可能地选用硬币个数最小的方法。例如,当要给某顾客找 7 角 2 分钱时,会给他一个 5 角,2 个 1 角和 1 个 2 分的硬币。试编写一个程序,输入的是要找给顾客的零钱(以分为单位),输出的是应该找回的各种硬币数目,并保证找回的硬币数最少。#include int main()

{

int x1,x2,x3,x4,x5;

int x;

scanf(“%d”,&x);

x1=x/50;

x2=x%50/10;

x3=x%50%10/5;

x4=x%50%10%5/2;

x5=x%50%10%5%2/1;

printf(“%dn”,x1);

printf(“%dn”,x2);

printf(“%dn”,x3);

printf(“%dn”,x4);

printf(“%dn”,x5);

return 0;

} 3.2 计算时钟的夹角

背景:钟面上的时针和分针之间的夹角总是在 0 度~ 359 度之间。举例来说,在十二点的时候两针之间的夹角为 0 度,而在六点的时候夹角为 180 度,在三点的时候为 90 度。本题要解决的是计算 0:00 到 12:00之间任意一个时间的夹角。

输入:每组测试数据包含两个数字:第一个数字代表小时(大于等于 0 小于 12),第二个数字代表分(在区间 [0, 59] 上)。输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。

友情提示:以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。

提示:时钟夹角计算公式|5.5m-30h|,h为时针,m为分针。求浮点型绝对值的函数为fabs,需要包含math.h头文件 #include “stdio.h” #include “math.h” int main(){ int h,m;double angle;scanf(“%d%d”,&h,&m);angle=fabs(5.5*m-30*h);if(angle>180)

angle=360-angle;printf(“At %d:%02d the angle is %.1f degrees.n”,h,m,angle);} 3.3 照猫画猫:计算圆柱的侧面积及体积

如果已知圆柱的底面半径 r,以及高 h,则可计算出圆柱的侧面积 s=2πrh,体积 v=π r 2 h。其中π=3.1415926 输入第一行输入圆柱的底面半径 r 第二行输入圆柱的高 h

输出 s=<圆柱的侧面积>,v=<圆柱的体积> 要求 1.所有变量都定义为双精度类型 2.结果精确到小数点后两位 #include “stdio.h”

#define n 3.1415926

int main()

{

float r,h,s,v;

printf;

scanf(“%f%f”,&r,&h);

s=2*n*r*h;

v=n*r*r*h;

printf(“s=%6.2f,v=%6.2fn”,s,v);

} 3.4 分离整数

任意从键盘上输入一个三位正整数,要求正确地分离出它的个位、十位和百位,并分别在屏幕上输出。

比如输入的三位正整数 #include “stdio.h” int main(){ int x,hundreds,tens,units;printf;scanf(“%d”,&x);hundreds=x/100;tens=x%100/10;units=x%100%10;printf(“units=%d,tens=%d,hundreds=%dn”,units,tens,hundreds);} 3.5 鸡兔同笼

已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只? 输入:头和脚的数目 输出:兔子和鸡的数目(输出语句为:printf(“rabbit=%d,chicken=%d”,rabbit,chicken);)Sample 输入:10 20 输出:rabbit=0,chicken=10 #include “stdio.h” int main(){ int chicken,rabbit,f,h;scanf(“%d%d”,&h,&f);rabbit=(f-2*h)/2;chicken=(4*h-f)/2;printf(“rabbit=%d,chicken=%dn”,rabbit,chicken);} 4.1 温度转换

背景:经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。

温度转换的公式为:F=(C×9/5)+32 ;C=(F-32)×5/9 ;式中F--华氏温度,C--摄氏温度。

输入:第一个数据(1 或 2)确定转换的类型:华氏转摄氏(1);摄氏转华氏(2); 第二个数据是相应需要转换的温度值。

输出:相应的转换后的温度值(保留小数点后 2 位)。#include void main(){

int lx;double f,c;

scanf(“%d”,&lx);if(lx==1){

scanf(“%lf”,&f);

c=(f-32)*5/9;

printf(“The Centigrade is %.2fn”,c);} else{

scanf(“%lf”,&c);

f=(c*9/5)+32;

printf(“The Fahrenheit is %.2fn”,f);} } 4.2 分段函数 有一分段函数,y=f(x)。当x小于6时,y=x-12;当x大于等于6且小于15时,y=3x-1;当x大于等于15时,y=5x+9.从键盘上输入一个整数x,输出对应的y值。#include void main(){ int x,y;scanf(“%d”,&x);if(x<6)

y=x-12;else if(x<15)

y=3*x-1;else

y=5*x+9;printf(“%dn”,y);return 0;} 4.3 整数位数判断

输入一个不多于5位的正整数,要求:(1)求它是几位数;(2)逆序打印出各位数字。#include #include #define SIZE 5 int main(void){

int bit_count;//位数

long int input_num;//输入数

int

result[SIZE];//存放各个位的数

inti;

scanf(“%ld”, &input_num);

if(input_num < 0 || input_num > 99999){

printf(“Invalid inputn”);

exit(1);

}

for(bit_count = 0;input_num;++bit_count){

result[bit_count] = input_num % 10;

input_num /= 10;

}

printf(“%dn”,bit_count);

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

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

printf(“n”);

exit(0);} 4.4 四位数拆分

输入一个四位数,判断千位、百位、十位和个位数字之和是否为偶数,如果是,输出Yes,如果不是,输出No;如果不是四位数,输出Invalid data。#include void main(){ int x,a,b,c,d,e;scanf(“%d”,&x);if(x/1000<1||x/10000>=1)

printf(“Invalid datan”);else {

a=x/1000;

b=x%1000/100;

c=x%1000%100/10;

d=x%1000%100%10;

e=(a+b+c+d)%2;

if(e==0)

printf(“Yesn”);

else

printf(“Non”);} } 4.5 磨磨你的砍柴刀:判断三角形的形状

要求:输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateral triangle.等腰三角形:isoceles triangle.不构成三角形:non-triangle.一般三角形:triangle.#include void main(){ float a,b,c;scanf(“%f%f%f”,&a,&b,&c);if(a+b

printf(“non-triangle.n”);else if(a==b&&b==c)

printf(“equilateral triangle.n”);else if(a==b||b==c||a==c)

printf(“isoceles triangle.n”);else

printf(“triangle.n”);} 4.6 字符加密输出

从键盘上输入一个字符,进行加密以后再输出在屏幕上。加密规律是:输入小写英文字母时,输入a 输出Z、输入b输出Y、输入c输出X、...、输入z输出A。输入大写英文字母时,将该字母ASCII码值再加上该值的1/2后输出所对应的字符,例如数字A的ASCII码值是65,加上其值的1/2后是98(小数四舍五入),则输出字符‘b’。输入数字时,将该数字原ASCII码值再加上该值十进制的十位上的数后输出,例如数字9的ASCII码值是57,加上十位上的数5后是62,则输出字符‘>’。输入其他字符时原样输出。友情提示:整数之间运算的结果要取整,例如5/2的结果是2,而5.0/2.0对小数四舍五入的结果就是3.0了。所以输入大写英文字母时的输出要仔细考虑。#include int main()

{ char ch;

int a;

ch=getchar();

if(ch>=97&&ch<=122)

{ch=187-ch;putchar(ch);}

else if(ch>=65&&ch<=90)

{a=ch%2;

if(a==1)(char)a=(ch+1)/2+ch;

else

(char)a=ch/2+ch;

putchar(a);}

else if(ch>=48&&ch<=57)

{ch=ch/10+ch;

putchar(ch);}

else putchar(ch);

printf(“n”);

} 4.7 判断某年某月的天数

一年有365天,有的月份有31天,有的有30天,2月份闰年的时候是29天,非闰年的时候是28天。现在要求从键盘上输入一个年份和月份,输出其对应的天数。#include main(){ int year,month,days;

scanf(“%d %d”, &year,&month);

switch(month)

{ case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: days=31;break;

case 4:

case 6:

case 9:

case 11:days=30;break;

case 2:if((year % 4 ==0)&&(year % 100!=0)||(year % 400==0))

days=29;

else days=28;

}

printf(“%dn”,days);} 4.8 花多少钱买衣服

周末商场促销呢,某品牌服装既可以买套装,也可以买单件。若买的不少于50套,每套80元;不足50套的每套90元,只买上衣每件60元,只买裤子每条45元。编写程序,输入计划购买的上衣数量 a 和裤子的数量 b,计算并输出应该付的款 m。#include void main(){ int a,b,y;scanf(“%d%d”,&a,&b);if(b<=a&&b<50)

y=90*b+(a-b)*60;if(b<=a&&b>=50)

y=80*b+(a-b)*60;if(a

y=90*a+(b-a)*45;if(a=50)

y=80*a+(b-a)*45;printf(“%dn”,y);} 4.9 到邮局去寄包裹

你去邮局给朋友寄礼物。发现邮局对邮寄包裹的费用是这样规定的:如果包裹长宽高任意一个尺寸超过1米,或重量超过30千克,不予邮寄;对可以邮寄的包裹每件收手续费 0.2 元,不同重量的邮资按下表计算:重量(千克)收费标准(元)小于10 0.80

大于等于10但不超过20 0.75

大于等于20但不超过30 0.70

编写程序,输入包裹的长、宽、高尺寸和重量,输出所需的邮资(输出结果中包含两位小数即可),超出尺寸或重量的输出 “Error”.#include void main(){ float a,b,c,m,y;scanf(”%f,%f,%f,%f“,&a,&b,&c,&m);if(a>1||b>1||c>1||m>30)

printf(”Errorn“);else {

if(m<10)

y=0.80*m+0.2;else if(m<20)

y=0.75*m+0.2;else

y=0.70*m+0.2;

printf(”%.2fn“,y);} } 4.10 输出星期几的英文表示

输入用数字(1--7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词”Error(回车)“。#include void main(){ int a;scanf(”%d“,&a);switch((int)(a)){ case 1:printf(”Mondayn“);break;case 2:printf(”Tuesdayn“);break;case 3:printf(”Wednesdayn“);break;case 4:printf(”Thursdayn“);break;case 5:printf(”Fridayn“);break;case 6:printf(”Saturdayn“);break;case 7:printf(”Sundayn“);break;default:printf(”Errorn“);

} }

5.1输出一行星号 问题描述

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

星号个数值N 输出

一行中N个星号 #include int main(){ int N,i;scanf(”%d“,&N);for(i=1;i<=N;i++){

printf(”*“);} printf(”n“);} 5.2 打印平行四边形 问题描述

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

整数n例如 5 输出

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

.)所示的图形 scanf(”%d“,&N);for(i=1;i<=N;i++){

for(j=1;j

printf(” “);

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

printf(”*“);

printf(”n“);}

} 5.3 编程计算 问题描述

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

上述算式的求和结果(结果保留四位小数)输入样例 1 输出样例 sum=1.0000

#include int main(){ int n,i,j,sign=-1;double f, sum=0;scanf(”%d“,&n);for(i=1;i<=n;i++){

f=1.0/i;

sign=-sign;

sum=sum+sign*f;}

printf(”sum=%.4lfn“,sum);} 5.4 分数序列 问题描述

有一个分数序列:的和。输入 整数n,输入整数n,求出其前n项输出

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

提示:输出语句格式为 printf(”sum=%16.10fn“,s);输入样例 1 输出样例

sum= 2.0000000000

#include int main(){ int i,n,k;double f,sum=0,a=1.0,b=1.0;

scanf(”%d“,&n);

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

k=a;

a=b;

b=a+k;

f=b/a;

sum=sum+f;}

printf(”sum=%16.10lfn“,sum);} 5.5 求e的值 问题描述

编写程序,从键盘输入整数 n , 求 e 的值。e=1+1/1!+1/2!+1/3!+..+1/n!double 型数据计算。输入 整数n 输出 e的值

提示:输出语句printf(”e=%16.10fn“,e);输入样例 2 输出样例

e= 2.5000000000

#include void main(){ int n,i,j;double k,f,sum=1;

scanf(”%d“,&n);

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

注意:用

for(j=1,k=1;j<=i;j++)

k=k*j;

f=1.0/k;

sum=sum+f;}

printf(”e=%16.10lfn“,sum);} 5.6 最大公约数 问题描述

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

两个正整数m和n 输出

m和n的最大公约数和最小公倍数 输入样例 2 8 输出样例

the greatest common divisor is 2 the least common multiple is 8

#include int main()

{

int m,n,r,t,M,N,a,b,c;

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

if(m

{t=m;

m=n;

n=t;

}

a=m;

b=n;

while((r=m%n)!=0)

{

m=n;

n=r;}

printf(”the greatest common divisor is %dn“,n);

M=a/n;

N=b/n;

c=M*N*n;

printf(”the least common multiple is %dn“,c);

return 0;

} 5.7 水仙花数 问题描述 输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33 输入 无 输出

所有的水仙花数 提示:输出语句printf(”%dn“,n);

#include void main(){ int i,a,b,c,d;

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

a=i/100;

b=(i%100)/10;

c=i%10;

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

if(i==d)

printf(”%dn“,i);} } 5.8 完数 问题描述

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

一个正整数n 输出

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

Yes,its factors are 1 2 3

#include int main(){ int a,i,sum=0;scanf(”%d“,&a);

for(i=1;i

sum=sum+i;if(sum==a){

printf(”Yes,its factors are “);

for(i=1;i

if(a%i==0)printf(” %d“,i);

printf(”n“);} else printf(”Non“);}

5.9 素数 问题描述

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

两个整数m和n 输出

[m,n]区间的所有素数 输入样例 2 10 输出样例 2 3 5 7

#include int main(){ int m,n,i,j;scanf(”%d%d“,&m,&n);for(i=m;i<=n;i++){

for(j=2;j

if(i%j==0)break;

if(j==i)printf(” %d“,i);} printf(”n“);

return 0;}

5.10 回文数 问题描述

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

一个正整数n 输出

如果是,输出Yes,否则输出No 输入样例 12321 输出样例 Yes #include int main(){ int a,b,c;scanf(”%d“,&a);c=a;b=0;while(c>0){

b=b*10+(int)c%10;

c=c/10;} if(a==b)printf(”Yesn“);else printf(”Non“);}

5.11 贪吃的猴子 问题描述

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

第一天的桃子个数。提示:输出语句为printf(”The monkey got %d peachs in first day.n“,sum);输入样例 5 输出样例

The monkey got 114 peachs in first day.提示:

问题分析: 总共 t0 日吃掉剩余 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 n 1 0 tn-1=1

#include int main(){ int n,i;double sum;scanf(”%d“,&n);i=n,sum=1;for(;i>1;i--)

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

printf(”The monkey got %.0lf peachs in first day.n“,sum);

return 0;}

5.12 马戏团观众人数

问题描述

一个马戏团表演,n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。根据总人数,计算出男人、女人和小孩各多少人。输入

总人数 n 输出

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

#include int main(){ int n,x,y,z,tag=0;scanf(”%d“,&n);for(x=0;x<=n;x++)

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

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

if(x+y+z==n&&50*x+20*y+1*z==1200)

{

tag=1;

printf(”%d %d %dn“,x,y,z);

} if(tag==0)printf(”No outputn“);

return 0;} 5.13 迭代法 问题描述 用迭代法求。求平方根的迭代公式为:

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

输入样例 4 输出样例

The square root of 4.00 is 2.00000

#include #include int main(){ double i,a,sq,d;scanf(”%lf“,&a);d=a;for(sq=1;;){

i=sq;

sq=(sq+a/sq)/2;

if(fabs(sq-i)<=0.00001)

{

printf(”The square root of %.2lf is %.5lfn“,d,sq);

break;

} } }

5.14 cos(x)-x=0 利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。xn+1=cos(xn)迭代步骤如下:(1)输入数据给x1;

(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“,x)。提示:本题x0和x1定义为double类型 #include #include int main(){ double a,b,i;scanf(”%lf“,&b);for(i=1;;){

a=b;

b=cos(a);

if(fabs(a-b)<=0.000001)

{

printf(”x=%lfn“,b);

break;

} } } 5.15 求一个三位数,其值等于其各位阶乘之和 问题描述

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

满足上述条件的三位数。提示:输出格式为printf(”%dn“,num);

#include void main(){ int a,b,c,d,i,j,k,l,x,y,z;for(i=100;i<1000;i++){

a=i/100;b=(i%100)/10;c=i%10;

for(j=1,x=1;j<=a;j++)x=x*j;

for(k=1,y=1;k<=b;k++)y=y*k;

for(l=1,z=1;l<=c;l++)z=z*l;

if(x+y+z==i)printf(”%dn“,i);} }

6.1 谁能出线 背景:

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

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

能够出线的学生序号(0~9)。#include #define N 10 int main(){ int i,max=0,j;int a[N];for(i=0;i

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

if(a[i]>=max)

max=a[i];}

for(j=0;j

if(a[j]==max)

printf(”%dn“,j);

return 0;} 6.2 统计素数的个数

求出 2 到 m 之间(含 m,m<=1000)所有素数并放在数组 a 中。输入:正整数m 输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)如:

输入:10 输出:2 3 5 7 4 #include #define N 10 int main(){ int i,j,m,count=0;int a[N];scanf(”%d“,&m);for(i=2;i<=m;i++){

for(j=2;j

if(i%j==0)break;

if(i==j)

{

count++;

printf(”%4d“,i);

} } printf(”n%dn“,count);

return 0;} 6.3 冒泡法排序

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

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。编写程序,对输入的十个数按照从小到大排序 #include #define N 10 int main(){ int i,j,t;int a[N];for(j=0;j

for(j=1;j

if(a[j]

{

t=a[j-1];

a[j-1]=a[j];

a[j]=t;

} for(j=0;j

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

return 0;} 6.4 插入法排序

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

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#include int main(){ int i,j,n,m;int a[11];for(i=0;i<10;i++)

scanf(”%d“,&a[i]);scanf(”%d“,&n);a[10]=n;for(i=10;i>0;i--)

if(a[i]

{

m=a[i];

a[i]=a[i-1];

a[i-1]=m;

}

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

{

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

} printf(”n“);return 0;} 6.5 求各位数字组成的最大数

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

#include int main(){ int i,j,n,count=0,t,m;int a[100];scanf(”%d“,&n);for(i=0;n>0;i++){

m=n%10;

a[i]=m;

count++;

n=n/10;} for(i=0;i

for(j=1;j

if(a[j]>a[j-1])

{

t=a[j-1];

a[j-1]=a[j];

a[j]=t;

}

for(i=0;i

{

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

} printf(”n“);return 0;} 6.6 数组逆序输出 问题描述

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

用第一个与最后一个交换。#include #define N 10 int main(){ int j;int a[N];for(j=0;j

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

printf(”%d “,a[9-j]);printf(”n“);

return 0;} 6.7 求最大值 问题描述

要求从键盘输入10个整型数据,找出其中的最大值并显示出来。输入范例 0 54-710 27 32767 10 1 500 2 输出范例 32767 提示

先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。#include #define N 10 int main(){ int j,t;int a[N];for(j=0;j

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

if(a[j+1]

{

t=a[j];

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

a[j+1]=t;

}

printf(”%dn“,a[j]);return 0;}

6.8二维数组

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

数组中的值为

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

#include #define N 4 int main(){ int i,j,n;int a[N][N];for(i=0;i

for(j=0;j

scanf(”%d“,&a[i][j]);scanf(”%d“,&n);for(i=0;i

for(j=0;j

a[i][j]=a[i][j]*n;for(i=0;i

for(j=0;j

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

printf(”n“);}

return 0;} 6.9 在屏幕上显示杨辉三角形

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

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

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

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[100][100];scanf(”%d“,&n);for(i=0;i

a[i][0]=1;

a[i][i]=1;} for(i=2;i

for(j=1;j

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

for(j=0;j

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

printf(”n“);}

return 0;}

6.10求二维数组周边元素之和 编写一个程序,求出4×5的二维数组周边元素之和。输入:二维数组元素 输出:周边元素之和 如: 输入: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 输出:61 #include int main(){ int i,j,sum=0;int a[4][5];for(i=0;i<4;i++)

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

scanf(”%d“,&a[i][j]);for(i=0;i<4;i++)

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

sum=sum+a[0][1]+a[0][2]+a[0][3]+a[3][3]+a[3][1]+a[3][2];

printf(”%dn“,sum);

return 0;} 6.11存储并输出一个矩阵

编程,输入 n,存储并输出如下例(n=5)所示的图形。1 2 3 4 5 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1 #include int main(){ int i,j,k,n;int a[100][100];scanf(”%d“,&n);for(i=0;i

for(j=0;j

a[i][j]=1;for(i=0;i

for(j=i;j

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

for(i=0;i

{

for(j=0;j

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

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 i,j,t;int a[10],b[10];for(i=0;i<10;i++){

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

b[i]=a[i];} for(i=0;i<10;i++)

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

if(b[j]

{

t=b[j-1];

b[j-1]=b[j];

b[j]=t;

}

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

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

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

{

printf(”%3d“,j+1);

break;

} printf(”n“);return 0;} 6.13 矩阵加法

方阵阶数为n(n<100),例如当n=3时,矩阵int a[3][3],矩阵int b[3][3]。矩阵的数据由用户输入。输出新的矩阵c=a+b。输出格式: c00 c01 c02 c10 c11 c12 c20 c21 c22 每两个数字之间有1个空格 关于输入 方阵阶数n 矩阵a: a00 a01 a02 a10 a11 a12 a20 a21 a22 矩阵b: b00 b01 b02 b10 b11 b12 b20 b21 b22

关于输出 矩阵c: c00 c01 c02 c10 c11 c12 c20 c21 c22 注意:输出时每行最后不能有空格

#include int main(){ int i,j,n;int a[100][100],b[100][100],c[100][100];scanf(”%d“,&n);for(i=0;i

for(j=0;j

scanf(”%d“,&a[i][j]);for(i=n;i

for(j=0;j

scanf(”%d“,&b[i-n][j]);for(i=0;i

for(j=0;j

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

for(i=0;i

{

for(j=0;j

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

printf(”%dn“,c[i][n-1]);

} return 0;}

6.14 矩阵转置

在数学上,矩阵是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。矩阵概念在生产实践中也有许多应用,比如矩阵图法以及保护个人帐号的矩阵卡系统(由深圳网域提出)等等。“矩阵”的本意也常被应用,比如监控系统中负责对前端视频源与控制线切换控制的模拟设备也叫矩阵。

设A为n×n阶矩阵(即n行n列),第i 行j 列的元素是a(i,j),即:A=a(i,j)定义A的转置为这样一个n×n阶矩阵B,满足B=a(j,i),即 b(i,j)=a(j,i)(B的第i行第j列元素是A的第j行第i列元素),记A'=B。(有些书记为AT=B,这里T为A的上标)

直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。输入:

有n+1行(2 ≤n≤10),第一行是一个整数n,代表矩阵为n行n列。后面n行表示矩阵的取值 输出:

转置后的矩阵

#include int main(){ int i,j,n;int a[100][100],b[100][100];scanf(”%d“,&n);for(i=0;i

for(j=0;j

scanf(”%d“,&a[i][j]);for(i=0;i

for(j=0;j

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

for(i=0;i

for(j=0;j

printf(”%d “,b[i][j]);

printf(”%dn“,b[i][n-1]);} return 0;} 6.15求一系列整数中出现最多的数字

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

有两行,第一行是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值 输出:

出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数 输入样例: 1 1233 输出样例:

出现次数最多2次的数字是 3 #include int main(){ int i,n,max;int a[100],b[10]={0};scanf(”%d“,&n);for(i=0;i

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

while(a[i]>0)

{

b[a[i]%10]++;

a[i]=a[i]/10;

} } max=b[0];for(i=1;i<10;i++)

if(max

max=b[i];

printf(”出现次数最多%d次的数字是“,max);

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

if(max==b[i])

printf(” %d“,i);

printf(”n“);return 0;} 6.16 装箱问题

假设有n项物品,大小分别为s1,s2,...,sn,其中si是整数且满足:1<=si<=100。要把这些物品装入到容量为100的一批箱子(序号1~n)中。装箱方法是:对每项物品si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(first-fit策略)。写一个程序来模拟这个装箱的过程。输入: 有两行。第一行是整数n(n<=1000),表示物品的个数;第二行是n个整数si(si<=100),分别表示n个物品的大小 输出:

每个物品所在的箱子序号,并输出所需的箱子数目 输入样例: 8 60 70 80 90 30 40 10 20 输出样例: 60 1 70 2 80 3 90 4 30 1 40 5 10 1 20 2 所需的箱子数目为5

#include int main(){int u,s[1000]={0},b[1000]={0},i=0,j;scanf(”%d“,&u);for(;i<=u-1;i++)scanf(”%d“,&s[i]);for(i=0;i<=u-1;i++)

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

if(s[i]+b[j]<=100)

{

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

printf(”%d %dn“,s[i],j+1);

break;

}

else continue;}

}

printf(”所需的箱子数目为“);

for(i=0;i<=1000;i++)if(b[i]==0){

printf(”%dn“,i);

break;}

return 0;}

7.1 数的合并

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。

例如:当a=45,b=12,调用该函数后,c=5241。#include void fun(int x,int y,int *p){ *p=(x%10)*1000+(y%10)*100+(x/10)*10+y/10;} int main(){ int a,b,c;scanf(”%d%d“,&a,&b);fun(a,b,&c);printf(”%dn“,c);} 7.2 数组中奇偶数 请编一个函数 fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针 odd 返回奇数之和,利用指针 even 返回偶数之和。

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

void fun(int a[],int n,int *odd,int *even){ int i;*odd=0;*even=0;for(i=0;i

if(a[i]%2==0)

*even=*even+a[i];

else

*odd=*odd+a[i];} } int main()

{

int a[N],i,n,odd,even;

scanf(”%d“,&n);

for(i=0;i

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

fun(a,n,&odd,&even);

printf(”The sum of odd numbers:%dn“,odd);

printf(”The sum of even numbers:%dn“,even);

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 *h){ double i;i=(int)(a*100+0.5);*h=(i/100);} int main()

{

double a,h;

scanf(”%lf“,&a);

fun(a,&h);

printf(”The result:%lfn“,h);

return 0;

} 7.4 字符移动

请编一个函数void fun(char *s),函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。例如:原有的字符串为: Mn.123xyZ,则调用该函数后,串中的内容为: n.123xyZM。#include #define N 81

#include void fun(char *p){ int i,count=0;char j;j=p[0];for(i=0;*(p+i)!='';i++){

*(p+i)=*(p+i+1);

count++;} *(p+count-1)=j;} int main()

{

char a[N];

gets(a);

fun(a);

printf(”%sn“,a);

} 7.5 生成新数

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。#include #include #include void fun(int *p){ int i,j,a,b,c[20],count=0,flag=-1;for(i=0;*p!=0;i++){

c[i]=*p%10;

*p=*p/10;

count++;} *p=0;for(j=0;j

if(c[j]%2!=0)

{

flag++;

*p=*p+c[j]*pow(10,flag);

} } } int main()

{ int n=-1;

while(n>99999999||n<0)

{

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

fun(&n);

printf(”%dn“,n);

return 0;

} 7.6 字符串转换成整数

请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数。例如,若输入字符串”-1234“,则函数把它转换为整数值-1234。函数fun中给出的语句仅供参考。#include #include #include int fun(char *p){ int y;y=atof(p);return y;}

int main()

{ char s[10];

int n;

gets(s);

n = fun(s);

printf(”%dn“,n);

return 0;

} 7.7 二维数组按列优先存放

请编写函数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 p[][N],char q[]){ int i,j,count=0;

for(j=0;j

for(i=0;i

{

q[count++]=p[i][j];

}

q[count]='';} int main()

{

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,count=0;for(i=0;s+i<=p;i++)

if(*(s+i)!='*')

{

*(s+count)=*(s+i);

count++;

}

for(s+i==p;*(s+i)!='';i++)

*(s+count++)=*(s+i);*(s+count)='';} int main(){ char s[81],*t;

gets(s);

t=s;

while(*t)t++;

t--;

while(*t=='*')t--;

fun(s , t);

puts(s);

return 0;} 7.9 统计数字字符

请编写函数 fun,它的功能是:统计形参 s 所指字符串中数字字符出现的次数,并存放在形参 t 所指的变量中,最后在主函数中输出。例如,字符串s为: abcdef35adgh3kjsdf7。输出结果为: 4。#include void fun(char *p,int *q){ int i,count=0;for(i=0;*(p+i)!='';i++)

if(*(p+i)>='0'&&*(p+i)<='9')

count++;*q=count;}

int main(){ char s[80]=”abcdef35adgh3kjsdf7“;

int t;

gets(s);

fun(s,&t);

printf(”%dn“,t);

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

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

#include

void fun(char *p,char *q,char *c){ int i,count=0;char max;for(i=0;*(p+i)!='';i++){

max=*(p+i);

if(*(p+i)<*(q+i))

max=*(q+i);

*(c+count)=max;

count++;} if(strlen(q)>strlen(p))

for(i=count;*(q+i)!='';i++)

{

*(c+count)=*(q+count);

count++;

} *(c+count)='';} 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*str,char*substr,int*count){

int i=0;

*count=0;

for(;*str!=0;str++)

{

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

if(*(substr+i)!=*(str+i))

break;

if(*(substr+i)==0)

(*count)++;

} } int main(){

char str[80],substr[80];

int count;

gets(str);

gets(substr);

fun(str,substr,&count);

printf(”%dn“,count);

return 0;} 7.12 按要求处理字符串

函数 fun 的功能是:将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除 , 串中剩余字符所形成的一个新串放在 t 所指的数组中。例如,若 s 所指字符串中的内容为: ”ABCDEFG12345“, 其中字符 A 的 ASCII 码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符 1 的 ASCII 码值为奇数,所在数组中的下标也为奇数 , 因此不应当删除,其它依此类推。最后 t 所指的数组中的内容应是: ”135“。#include #include void fun(char *s,char *t){

int i,count=0;

for(i=0;*(s+i)!='';i++)

if(i%2!=0&&*(s+i)%2!=0)

{ *(t+count)=*(s+i);count++;

}

*(t+count)='';} int main()

{

char s[100], t[100];

scanf(”%s“, s);

fun(s, t);

printf(”%sn“, t);

return 0;

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

int i;

*y=0;

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

if(x%i==0&&i%2!=0)

{

*aa=i;

aa++;

(*y)++;

} } void main(){ int x, aa[1000], n, i;

scanf(”%d“, &x);

fun(x, aa, &n);

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

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

printf(”n“);} 7.14 求最大值及其下标 请编写函数 fun,其功能是求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中。

例如 , 输入如下整数 : 876 675 896 101 301 401 980 431 451 777 则输出结果为 : 6, 980 #include void fun(int *a,int m,int *k){

int i;

*k=0;

for(i=1;i

{

if(*(a+i)>*(a+*k))

*k=i;

} } void main(){

int a[10], k ,i;

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

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

fun(a, 10, &k);

printf(”%d,%dn“, k, a[k]);} 8.1 字符转换 描述

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

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

把字符串中的所有数字字符(„0‟...„9‟)转换为一个整数并输出。# include int main(){ char a[100];int i,m=0,b[100],n=0;gets(a);for(i=0;a[i]!='';i++)if(a[i]>='0'&&a[i]<='9'){ b[n]=a[i]-'0';n++;} for(i=0;i

printf(”%d“,b[i]);}} if(m==0)printf(”0“);printf(”n“);return 0;}

8.2合并字符串

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

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

一个合并在一起的有序(升序)的字符串 #include #include int main(){ char a[100],b[100];int i,j,k,t;gets(a);gets(b);strcat(a,b);k=strlen(a);for(j=1;j

for(i=0;i

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

{

t=a[i];

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

a[i+1]=t;

} puts(a);} 8.3 删除重复字符 背景:

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

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

删除重复字符后的字符串。例如:abced #include void main()

{

char a[100];

int i,j,flag;

gets(a);

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

{

flag=1;

for(j=0;j

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

flag=0;

if(flag==0)

a[i]='0';

}

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

if(a[i]!='0')

printf(”%c“,a[i]);

printf(”n“);

} 8.4 删除字符串中指定字符 输入两个字符串 s1 和 s2,在 s1 中删除任何 s2 中有的字符。例如,s1 :“ abc123ad ”,s2 :“ a1 ”,则输出“bc23d ”。输入:两个字符串 s1 和 s2 输出:删除后的字符串 s1 #include #include int main(){ char s1[100],s2[100];int i,j,k,t;gets(s1);gets(s2);for(j=0;s1[j]!='';j++)

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

if(s1[j]==s2[i])

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

if(s1[i]!='0')

printf(”%c“,s1[i]);printf(”n“);} 8.5 单词有多少

用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 ”stop“ 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。输入:多个字符串 输出:单词的数量 #include #include int main(){ char str[100];int i,count=0;

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

scanf(”%s“,str);

count++;

if(strcmp(str,”stop“)==0)

break;} printf(”%dn“,count-1);} 8.6 在指定位置插入字符串

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

输入:两个字符串 s1、s2 和 s1 中任意字符 k 输出:插入后的字符串 s1 #include #include int main(){ char k,s1[100],s2[100],s3[100],s4[100];int i,m,n,c=-1;

gets(s1);gets(s2);scanf(”%c“,&k);for(i=0;s1[i]!='';i++){

c++;

if(s1[i]==k)

break;} m=strlen(s2);n=strlen(s1);

for(i=0;i

s3[i]=s1[i];

for(i=c;i

s3[i]=s2[i-c];

for(i=c+m;i<=m+n;i++)

s3[i]=s1[i-m];

puts(s3);} 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!(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.INPUT FORMAT Line 1: An upper case character string of length 1..6 that is the name of the comet.Line 2: An upper case character string of length 1..6 that is the name of the group.OUTPUT FORMAT A single line containing either the word ”GO“ or the word ”STAY“.#include #include int main(){ char s1[7],s2[7];int i,j=1,k=1;

gets(s1);gets(s2);

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

{

s1[i]=s1[i]-'A'+1;

j=s1[i]*j;}

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

s2[i]=s2[i]-'A'+1;

k=k*s2[i];} if(j%47==k%47)

printf(”GOn“);else printf(”STAYn“);} 8.8大数相加 问题描述:

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

输入格式:

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

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

#include #include #include int main()

{

int i,j,k,t,a[27]={0},b[27]={0},c[27]={0};

char m[26],n[26];

gets(m);

gets(n);

i=strlen(m);

j=strlen(n);

for(k=i-1,t=0;k>=0;k--,t++)

a[t]=m[k]-'0';

for(k=j-1,t=0;k>=0;k--,t++)

b[t]=n[k]-'0';

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

{

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

if(c[k]>=10)

{

c[k]=c[k]-10;

c[k+1]=1;

}

}

for(k=26;k>=0;k--)

if(c[k]>0)break;

for(k=k;k>=0;k--)

printf(”%d“,c[k]);

printf(”n“);

return 0;

} 8.9 字符串重排列

判断一个字符串是否可以由另一个字符串通过重排字符而得到。注意,此处区分字符大小写!输入

输入只有一行,为两个字符串,字符串之间以一个空格分隔。输出

如果两个字符串由同一组字符组成(且每一个字符出现次数相同),则输出“YES”; 否则输出“NO”。注意YES和NO都是大写字母!#include int main(){ int i,j,flag=0,count=0;char a[10],b[10];

} scanf(”%s%s“,a,b);for(i=0;a[i]!='';i++)count++;for(i=0;a[i]!='';i++)for(j=0;b[j]!='';j++)

if(a[i]==b[j]||a[i]==b[j]+'a'-'A'||a[i]+'a'-'A'==b[j])

{

flag++;

b[j]='0';

break;

} if(flag==count)printf(”YESn“);else printf(”NOn“);8.10上课啦!要点名啊!

小凡的老师每次上课前都要点名,但是这样就浪费了老师的上课时间。所以老师让小凡来完成点名,让小凡在早自习的时候就点好名。老师给了小凡名单,小凡只要照着名单点名就好了是不是很简单啊。输入

输入有多组数据,直到文件结束。每组测试数据有三行,第一行为两个整数m, n(50 >= m >= n)。第二行有m个名字,名字之间用空格隔开,是小凡班上同学的名单。后面有n个名字是来上课的同学。名字间用空格隔开。名字的长度不超过20个字符。输出

按照第一行的名单,每个人对应输出是否到了。到的人输出Yes,没到的人输出No。#include int main()

{

int m,n,i,j;

char a[51][21],b[51][21];

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

for(i=0;i

scanf(”%s“,a[i]);

for(j=0;j

scanf(”%s“,b[j]);

for(i=0;i

{

for(j=0;j

{

if(strcmp(a[i],b[j])==0)

{

printf(”YESn“);

break;

}

}

if(j==n)printf(”NOn“);

}

} 8.11找第一个只出现一次的字符 问题描述:

给定t个字符串,这个字符串只可能由26个小写字母组成,请你找到第一个仅出现一次的字符,如果没有符合要求的字符,就输出no。输入:

第一行是t,接下来是t个字符串,每个字符串长度小于100 输出:

你的输出需要由t行组成。

对于每个字符串,输出第一个仅出现一次的字符,没有输出NO。输入样例: 2 aabb abcdab 输出样例: NO c

#include #include int main()

{

int i,j,t,k,l;

char a[1000][100],c;

scanf(”%d“,&t);

for(i=0;i

scanf(”%s“,a[i]);

for(i=0;i

{

k=strlen(a[i]);

a[i][k]='0';

a[i][k+1]='';

for(j=0;j

{

for(l=0;l

{

if(l==j)

l++;

if(a[i][j]==a[i][l])break;

}

if(l==k+1)

{

c=a[i][j];

putchar(c);

putchar('n');

break;

}

}

if(j==k+1)printf(”NOn“);

}

} 8.12 提取数据

输入一个字符串,长度不超过30,内有数字字符和非数字字符,统计其中包含了多少个非负整数,并输出这样的非负整数。关于输入

一个字符串,最大长度为30 关于输出

输出字符串中包含的数据,一个数据一行.(不用输出总数)#include #include int main(){ int i,j,k,b[30]={0},c[30]={0};char d[31];gets(d);j=strlen(d);for(i=0;d[i]!='';i++){ if(d[i]<='9'&&d[i]>='0'){ b[i]=1;k=d[i]-'0';c[i]=k;} if(d[i]=='-')b[i]=2;} i=0;if(b[0]==1){ for(;b[i]!=0&&b[i]!=2;i++)printf(”%d“,c[i]);printf(”n");} for(;i

第五篇:c语言答案

6-13

#include int main(){ char s1[80],s2[40];

int i=0,j=0;

printf(“input string1:”);

scanf(“%s”,s1);

printf(“input string2:”);

scanf(“%s”,s2);

while(s1[i]!='')

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i]='';

printf(“nThe new string is:%sn”,s1);

return 0;}

6-14 #include int main(){ int i,resu;

char s1[100],s2[100];

printf(“input string1:”);

gets(s1);

printf(“ninput string2:”);

gets(s2);

i=0;

while((s1[i]==s2[i])&&(s1[i]!=''))i++;

if(s1[i]=='' && s2[i]=='')

resu=0;

else

resu=s1[i]-s2[i];

printf(“nresult:%d.n”,resu);

return 0;}

6-15 #include #include int main(){ char s1[80],s2[80];

int i;

printf(“input s2:”);

scanf(“%s”,s2);

for(i=0;i<=strlen(s2);i++)

s1[i]=s2[i];

printf(“s1:%sn”,s1);

return 0;}

第7章用函数实现模块化程序设计170 7.1为什么要用函数170 7.2怎样定义函数172 7.2.1为什么要定义函数172 7.2.2定义函数的方法173 7.3调用函数174 7.3.1函数调用的形式174 7.3.2函数调用时的数据传递175 7.3.3函数调用的过程177 7.3.4函数的返回值178 7.4对被调用函数的声明和函数原型179 7.5函数的嵌套调用182 7.6函数的递归调用184 7.7数组作为函数参数192 7.7.1数组元素作函数实参193 7.7.2数组名作函数参数194 7.7.3多维数组名作函数参数197 7.8局部变量和全局变量199 7.8.1局部变量199 7.8.2全局变量200 7.9变量的存储方式和生存期204 7.9.1动态存储方式与静态存储方式204 7.9.2局部变量的存储类别205 7.9.3全局变量的存储类别208 7.9.4存储类别小结212 7.10关于变量的声明和定义214 7.11内部函数和外部函数215 7.11.1内部函数215 7.11.2外部函数215习题218 7-1-1 #include int main(){int hcf(int,int);

int lcd(int,int,int);

int u,v,h,l;

scanf(“%d,%d”,&u,&v);

h=hcf(u,v);

printf(“H.C.F=%dn”,h);

l=lcd(u,v,h);

printf(“L.C.D=%dn”,l);

return 0;}

int hcf(int u,int v){int t,r;if(v>u)

{t=u;u=v;v=t;} while((r=u%v)!=0)

{u=v;

v=r;} return(v);}

int lcd(int u,int v,int h)

{

return(u*v/h);

}

7-1-2 #include int Hcf,Lcd;int main(){void hcf(int,int);

void lcd(int,int);

int u,v;

scanf(“%d,%d”,&u,&v);

hcf(u,v);

lcd(u,v);

printf(“H.C.F=%dn”,Hcf);

printf(“L.C.D=%dn”,Lcd);

return 0;}

void hcf(int u,int v){int t,r;if(v>u)

{t=u;u=v;v=t;} while((r=u%v)!=0)

{u=v;

v=r;

} Hcf=v;}

void lcd(int u,int v)

{

Lcd=u*v/Hcf;

}

7-2 #include #include float x1,x2,disc,p,q;int main(){void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf(“input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);printf(“equation: %5.2f*x*x+%5.2f*x+%5.2f=0n”,a,b,c);disc=b*b-4*a*c;printf(“root:n”);if(disc>0)

{

greater_than_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);

} else if(disc==0)

{equal_to_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);

} else

{smaller_than_zero(a,b);

printf(“x1=%f+%fitx2=%f-%fin”,p,q,p,q);

} return 0;}

void greater_than_zero(float a,float b){x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);}

void equal_to_zero(float a,float b){

x1=x2=(-b)/(2*a);}

void smaller_than_zero(float a,float b){

p=-b/(2*a);

q=sqrt(-disc)/(2*a);}

7-3 #include int main(){int prime(int);

int n;

printf(“input an integer:”);

scanf(“%d”,&n);

if(prime(n))

printf(“%d is a prime.n”,n);

else

printf(“%d is not a prime.n”,n);

return 0;}

int prime(int n)

{int flag=1,i;

for(i=2;i

if(n%i==0)

flag=0;

return(flag);

}

7-4 #include #define N 3 int array[N][N];int main(){ void convert(int array[][3]);int i,j;printf(“input array:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&array[i][j]);printf(“noriginal array :n”);for(i=0;i

{for(j=0;j

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

printf(“n”);

} convert(array);printf(“convert array:n”);for(i=0;i

{for(j=0;j

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

printf(“n”);

} return 0;}

void convert(int array[][3]){int i,j,t;for(i=0;i

for(j=i+1;j

{t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

} }

#include #include int main(){void inverse(char str[]);char str[100];printf(“input string:”);scanf(“%s”,str);inverse(str);printf(“inverse string:%sn”,str);return 0;}

void inverse(char str[]){char t;

int i,j;

for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)

{t=str[i];

str[i]=str[j-1];

str[j-1]=t;

} }

7-6

#include int main(){void concatenate(char string1[],char string2[],char string[]);char s1[100],s2[100],s[100];printf(“input string1:”);scanf(“%s”,s1);printf(“input string2:”);scanf(“%s”,s2);concatenate(s1,s2,s);printf(“nThe new string is %sn”,s);return 0;}

void concatenate(char string1[],char string2[],char string[]){int i,j;for(i=0;string1[i]!='';i++)

string[i]=string1[i];for(j=0;string2[j]!='';j++)

string[i+j]=string2[j];string[i+j]='';}

7-7 #include int main(){void cpy(char [],char []);char str[80],c[80];printf(“input string:”);gets(str);cpy(str,c);printf(“The vowel letters are:%sn”,c);return 0;}

void cpy(char s[],char c[]){ int i,j;

for(i=0,j=0;s[i]!='';i++)

if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||

s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')

{c[j]=s[i];

j++;

}

c[j]='';}

7-8 #include #include int main(){char str[80];void insert(char []);printf(“input four digits:”);scanf(“%s”,str);insert(str);return 0;}

void insert(char str[]){int i;for(i=strlen(str);i>0;i--)

{str[2*i]=str[i];

str[2*i-1]=' ';

} printf(“output:n%sn”,str);} 7-9 #include int letter,digit,space,others;int main(){void count(char []);char text[80];printf(“input string:n”);gets(text);printf(“string:”);puts(text);letter=0;digit=0;space=0;others=0;count(text);

printf(“nletter:%dndigit:%dnspace:%dnothers:%dn”,letter,digit,space,others);return 0;}

void count(char str[]){int i;for(i=0;str[i]!='';i++)if((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z'))

letter++;else if(str[i]>='0' && str [i]<='9')

digit++;else if(str[i]==32)

space++;else

others++;} 7-10 #include #include int main(){int alphabetic(char);int longest(char []);int i;char line[100];printf(“input one line:n”);gets(line);printf(“The longest word is :”);for(i=longest(line);alphabetic(line[i]);i++)

printf(“%c”,line[i]);printf(“n”);return 0;}

int alphabetic(char c){if((c>='a' && c<='z')||(c>='A'&&c<='z'))

return(1);else

return(0);}

int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++)

if(alphabetic(string[i]))

if(flag)

{point=i;

flag=0;

}

else

len++;

else

{flag=1;

if(len>=length)

{length=len;place=point;len=0;}

} return(place);}

7-11 #include #include #define N 10 char str[N];int main(){void sort(char []);int i,flag;for(flag=1;flag==1;)

{printf(“input string:n”);

scanf(“%s”,&str);

if(strlen(str)>N)

printf(“string too long,input again!”);

else

flag=0;

} sort(str);printf(“string sorted:n”);for(i=0;i

printf(“%c”,str[i]);printf(“n”);return 0;}

void sort(char str[]){int i,j;char t;for(j=1;j

for(i=0;(i

if(str[i]>str[i+1])

{t=str[i];

str[i]=str[i+1];

str[i+1]=t;

} }

7-12 #include #include int main(){float solut(float a,float b,float c,float d);float a,b,c,d;printf(“input a,b,c,d:”);scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);printf(“x=%10.7fn”,solut(a,b,c,d));return 0;}

float solut(float a,float b,float c,float d){float x=1,x0,f,f1;do

{x0=x;

f=((a*x0+b)*x0+c)*x0+d;

f1=(3*a*x0+2*b)*x0+c;

x=x0-f/f1;

} while(fabs(x-x0)>=1e-3);return(x);}

7-13 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;

int main(){ int i,j;

float h;

float s_var(void);

float highest();

void input_stu(void);

void aver_stu(void);

void aver_cour(void);

input_stu();

aver_stu();

aver_cour();

printf(“n NO.cour1

cour2

cour3

cour4 avern”);

for(i=0;i

{printf(“n NO %2d ”,i+1);

for(j=0;j

printf(“%8.2f”,score[i][j]);

printf(“%8.2fn”,a_stu[i]);

}

printf(“naverage:”);

for(j=0;j

printf(“%8.2f”,a_cour[j]);

printf(“n”);

h=highest();

printf(“highest:%7.2f

NO.%2d

course %2dn”,h,r,c);

printf(“variance %8.2fn”,s_var());

return 0;

cour5

}

void input_stu(void){int i,j;

for(i=0;i

{printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

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

} }

void aver_stu(void){int i,j;

float s;

for(i=0;i

{for(j=0,s=0;j

s+=score[i][j];

a_stu[i]=s/5.0;

} } void aver_cour(void){int i,j;

float s;

for(j=0;j

{s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;

} }

float highest(){float high;

int i,j;

high=score[0][0];

for(i=0;i

for(j=0;j

if(score[i][j]>high)

{high=score[i][j];r=i+1;c=j+1;}

return(high);}

float s_var(void){int i;

float sumx,sumxn;

sumx=0.0;

sumxn=0.0;

for(i=0;i

{sumx+=a_stu[i]*a_stu[i];

sumxn+=a_stu[i];

}

return(sumx/N-(sumxn/N)*(sumxn/N));}

7-*14 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;

int main(){ int i,j;

float h;

float s_var(void);

float highest();

void input_stu(void);

void aver_stu(void);

void aver_cour(void);

input_stu();

aver_stu();

aver_cour();

printf(“n NO.cour1 avern”);

for(i=0;i

{printf(“n NO %2d ”,i+1);

for(j=0;j

printf(“%8.2f”,score[i][j]);

printf(“%8.2fn”,a_stu[i]);

}

cour2

cour3 cour4

cour5

printf(“naverage:”);

for(j=0;j

printf(“%8.2f”,a_cour[j]);

printf(“n”);

h=highest();

printf(“highest:%7.2f

NO.%2d

course %2dn”,h,r,c);

printf(“variance %8.2fn”,s_var());

return 0;}

void input_stu(void){int i,j;

for(i=0;i

{printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

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

} }

void aver_stu(void){int i,j;

float s;

for(i=0;i

{for(j=0,s=0;j

s+=score[i][j];

a_stu[i]=s/5.0;

} }

void aver_cour(void){int i,j;

float s;

for(j=0;j

{s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;

} }

float highest(){float high;

int i,j;

high=score[0][0];

for(i=0;i

for(j=0;j

if(score[i][j]>high)

{high=score[i][j];r=i+1;c=j+1;}

return(high);}

float s_var(void){int i;

float sumx,sumxn;

sumx=0.0;

sumxn=0.0;

for(i=0;i

{sumx+=a_stu[i]*a_stu[i];

sumxn+=a_stu[i];

}

return(sumx/N-(sumxn/N)*(sumxn/N));} 7-15 #include #include #define N 10 int main()

{void input(int [],char name[][8]);

void sort(int [],char name[][8]);void search(int ,int [],char name[][8]);int num[N],number,flag=1,c;

char name[N][8];

input(num,name);

sort(num,name);

while(flag==1)

{printf(“ninput number to look for:”);

scanf(“%d”,&number);

search(number,num,name);

printf(“continue ot not(Y/N)?”);

getchar();

c=getchar();

if(c=='N'||c=='n')

flag=0;

} return 0;

}

void input(int num[],char name[N][8]){int i;

for(i=0;i

{printf(“input NO.: ”);

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

printf(“input name: ”);

getchar();

gets(name[i]);

} }

void sort(int num[],char name[N][8]){ int i,j,min,templ;

char temp2[8];

for(i=0;i

{min=i;

for(j=i;j

if(num[min]>num[j])min=j;

templ=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=templ;

strcpy(name[min],temp2);

}

printf(“n result:n”);

for(i=0;i

printf(“n %5d%10s”,num[i],name[i]);}

void search(int n,int num[],char name[N][8])

{int top,bott,mid,loca,sign;

top=0;

bott=N-1;

loca=0;

sign=1;

if((nnum[N-1]))loca=-1;

while((sign==1)&&(top<=bott)){mid=(bott+top)/2;

if(n==num[mid])

{loca=mid;

printf(“NO.%d , his name is %s.n”,n,name[loca]);

sign=-1;

} else if(n

bott=mid-1;else

top=mid+1;}

if(sign==1 || loca==-1)

printf(“%d not been found.n”,n);

}

7-16 #include #define MAX 1000 int main(){ int htoi(char s[]);

int c,i,flag,flag1;

char t[MAX];

i=0;

flag=0;

flag1=1;

printf(“input a HEX number:”);

while((c=getchar())!='' && i

{if(c>='0' && c<='9'||c>='a' && c<='f'||c>='A' && c<='F')

{flag=1;

t[i++]=c;

}

else if(flag)

{t[i]='';

printf(“decimal number %dn”,htoi(t));

printf(“continue or not?”);

c=getchar();

if(c=='N'||c=='n')

flag1=0;

else

{flag=0;

i=0;

printf(“ninput a HEX number:”);

}

}

}

return 0;

}

int htoi(char s[])

{ int i,n;

n=0;

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

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

n=n*16+s[i]-'0';

if(s[i]>='a' && s[i]<='f')

n=n*16+s[i]-'a'+10;

if(s[i]>='A' && s[i]<='F')

n=n*16+s[i]-'A'+10;

}

return(n);

}

7-17 #include int main(){ void convert(int n);

int number;

printf(“input an integer: ”);

scanf(“%d”,&number);

printf(“output: ”);

if(number<0){putchar('-');putchar(' ');/* */

number=-number;

}

convert(number);

printf(“n”);

return 0;}

void convert(int n){ int i;

if((i=n/10)!=0)

convert(i);

putchar(n%10+'0');

putchar(32);

先输出一个‘-’号和空格 }

7-18 #include int main(){int sum_day(int month,int day);int leap(int year);int year,month,day,days;printf(“input date(year,month,day):”);scanf(“%d,%d,%d”,&year,&month,&day);printf(“%d/%d/%d ”,year,month,day);days=sum_day(month,day);

sum_day */

if(leap(year)&&month>=3)/* */

days=days+1;printf(“is the %dth day in this year.n”,days);return 0;}

/* 调用函数调用函数leap

int sum_day(int month,int day)/* 函数sum_day:计算日期 */

{int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int i;

for(i=1;i

return(day);} /* 函数leap:判断是否为闰年 */

int leap(int year){int leap;

leap=year%4==0&&year%100!=0||year%400==0;

return(leap);}

第8章善于利用指针220 8.1指针是什么220 8.2指针变量222 8.2.1使用指针变量的例子222 8.2.2怎样定义指针变量223 8.2.3怎样引用指针变量224 8.2.4指针变量作为函数参数226 8.3通过指针引用数组230 8.3.1数组元素的指针230 8.3.2在引用数组元素时指针的运算231 8.3.3通过指针引用数组元素233 8.3.4用数组名作函数参数237 8.3.5通过指针引用多维数组245 8.4通过指针引用字符串255 8.4.1字符串的引用方式 255 8.4.2字符指针作函数参数259 8.4.3使用字符指针变量和字符数组的比较263 8.5指向函数的指针266 8.5.1什么是函数指针266 8.5.2用函数指针变量调用函数266 8.5.3怎样定义和使用指向函数的指针变量268 8.5.4用指向函数的指针作函数参数270 8.6返回指针值的函数274 8.7指针数组和多重指针277 8.7.1什么是指针数组 277 8.7.2指向指针数据的指针280 8.7.3指针数组作main函数的形参282 8.8动态内存分配与指向它的指针变量285 8.8.1什么是内存的动态分配285 8.8.2怎样建立内存的动态分配285 8.8.3void指针类型 287 8.9有关指针的小结288习题291 8-1 #include int main(){ void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;printf(“input three integer n1,n2,n3:”);scanf(“%d,%d,%d”,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2)swap(p1,p2);if(n1>n3)swap(p1,p3);if(n2>n3)swap(p2,p3);printf(“Now,the order is:%d,%d,%dn”,n1,n2,n3);return 0;} void swap(int *p1,int *p2)

{int p;

p=*p1;*p1=*p2;*p2=p;

}

#include #include int main(){void swap(char *,char *);char str1[20],str2[20],str3[20];printf(“input three line:n”);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0)swap(str1,str2);if(strcmp(str1,str3)>0)swap(str1,str3);if(strcmp(str2,str3)>0)swap(str2,str3);printf(“Now,the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);return 0;}

void swap(char *p1,char *p2){char p[20];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}

8-3 #include int main(){ void input(int *);

void max_min_value(int *);

void output(int *);

int number[10];

input(number);

max_min_value(number);

output(number);

return 0;}

void input(int *number)

{int i;

printf(“input 10 numbers:”);

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

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

}

void max_min_value(int *number)

{ int *max,*min,*p,temp;

max=min=number;

for(p=number+1;p

if(*p>*max)max=p;

else if(*p<*min)min=p;

temp=number[0];number[0]=*min;*min=temp;

if(max==number)max=min;

temp=number[9];number[9]=*max;*max=temp;

}

void output(int *number)

{int *p;

printf(“Now,they are:

”);

for(p=number;p

printf(“%d ”,*p);

printf(“n”);

}

8-4 #include int main()

{void move(int [20],int,int);

int number[20],n,m,i;printf(“how many numbers?”);scanf(“%d”,&n);printf(“input %d numbers:n”,n);for(i=0;i

scanf(“%d”,&number[i]);printf(“how many place you want move?”);scanf(“%d”,&m);move(number,n,m);printf(“Now,they are:n”);for(i=0;i

printf(“%d ”,number[i]);printf(“n”);return 0;}

void move(int array[20],int n,int m)

{int *p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p--)

*p=*(p-1);

*array=array_end;

m--;

if(m>0)move(array,n,m);

} 8-5 #include int main(){int i,k,m,n,num[50],*p;printf(“ninput number of person: n=”);scanf(“%d”,&n);p=num;for(i=0;i

*(p+i)=i+1;

i=0;

k=0;

m=0;

while(m

{if(*(p+i)!=0)k++;

if(k==3)

{*(p+i)=0;

k=0;

m++;

}

i++;

if(i==n)i=0;

} while(*p==0)p++;printf(“The last one is NO.%dn”,*p);return 0;}

8-6 #include int main(){int length(char *p);int len;char str[20];printf(“input string: ”);scanf(“%s”,str);len=length(str);printf(“The length of string is %d.n”,len);return 0;}

int length(char *p)

{int n;n=0;while(*p!='')

{n++;

p++;

} return(n);}

8-7 #include #include int main(){void copystr(char *,char *,int);

int m;char str1[20],str2[20];printf(“input string:”);gets(str1);printf(“which character that begin to copy?”);scanf(“%d”,&m);if(strlen(str1)

printf(“input error!”);else

{copystr(str1,str2,m);

printf(“result:%sn”,str2);

} return 0;}

void copystr(char *p1,char *p2,int m)

{int n;

下载中国石油大学C语言答案5篇word格式文档
下载中国石油大学C语言答案5篇.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    中国石油大学继续教育答案汇总范文合集

    创造型人才开发 一阶段 1.第1题 单选题人类对资源的开发经历了( ) A、自然资源—人力资源—心理资源阶段; B、自然资源—物质资源—人力资源阶段。 标准答案:A 您的答案: 题目分......

    中国石油大学《管理信息系统》答案

    《管理信息系统》在线考试(开卷)试题 一、名词解释(每题6分,共30分) 1.业务流程图 业务流程图(TFD)是一种描述管理系统内各单位、人员之间的业务关系,作业顺序和管理信息流向的图......

    C语言作业答案

    厦门大学公共课 《C语言程序设计》 教材习题答案第三章 结构化程序设计 一、思考题 1、顺序结构的语句有哪些? 表达式语句,空语句,复合语句 2、从程序控制的角度看,复合语句是......

    模拟题c语言答案

    此答案为自己所出,若有不对之处请谅解,并希望能留言 单选题(共60题,每题1分,共60分) 1. 下列符号串中,属于C语言合法标识符的个数为(B)。 _1_2_3,a-b-c,float,9cd,a3b4 A:1 B:2 C:3......

    c语言课后答案 (范文大全)

    第7章数组习题解答 一、在以下每一题的四个选项中,请选择一个正确的答案。 【题7.1】 C 【题7.2】 D 【题7.3】 D 【题7.4】 D 【题7.5】 C 【题7.6】 C 【题7.7】 C 【题7.8......

    c语言试题及答案

    一、 单选题 1.在C语言中,下列类型属于构造类型的是( D ) A.整型 B.字符型 C.实型 D.数组类型 2.下列字符串不是标识符的是( D ) A. sum B. Average C. Day_night D. M.D.JOHN 3.......

    C语言考试题及答案

    C语言考试题一、单项选择题 (每题2分,共40分)1、一个算法应该具有“确定性”等五个特性,下面对另外4个特性的描述中错误的是(B)A、有零个或多个输入B、有零个或多个输出C、有穷性D......

    c语言课后答案

    c语言课后答案 第一章习题答案一、选择题 1~5:BDCDA 6~10:DABBB 11~12:CC 二、填空题1、main() 2、函数首部 ,函数体3、函数4、编辑、编译、连接、运行5、.cpp、.obj、 .exe......