第一篇:中国石油大学C语言答案
中国石油大学c语言答案
1.1 Hello world.让我们用C语言向世界问好。最早的程序基本是这个样子的: 程序一:
#include
printf(“Hello world.n”);} 程序二:
#include
printf(“Hello world.n”);
return 0;} 输出:Hello world.#include
printf(“Hello world.n”);} 1.2 Welcome to Beijing.输入:无
输出:就是下面的那段文字。#include
输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真观察-1的八进制和十六进制输出,请想想是为什么。#include
scanf(“%d”,&x);printf(“x=%d,”,x);printf(“x=%o,”,x);printf(“x=%xn”,x);return 0;} 1.4 练习两个整数之间的运算 背景:基本练习。
输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出进行+、-、*、/、*之后的运行结果。#include
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
printf(“****n”);
printf(“****n”);
printf(“****n”);
printf(“****n”);
return 0;} 要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。输入:无。
输出:指定图形。#include
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
已知求正弦 sin(x)的近似值的多项式公式为:
sin(x)= xx7/7!+ …… +(-1)n x2n+1/(2n+1)!+ …
编写程序,要求输入 x(单位是弧度)和ε,按上述公式计算 sin(x)的近似值,要求计算的误差小于给定的ε。此题当然要用到循环语句,到第5章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的ε。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。
友情提示:给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用
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
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 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
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
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
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
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 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 { 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 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 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 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 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 printf(”*“);} printf(”n“);} 5.2 打印平行四边形 问题描述 输入图形的高 n,输出如下例(n=5)所示的图形.***** ***** ***** ***** ***** 输入 整数n例如 5 输出 由*组成的高为5的平行四边形 #include 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 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 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 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 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 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 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 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 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 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 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 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 a=b; b=cos(a); if(fabs(a-b)<=0.000001) { printf(”x=%lfn“,b); break; } } } 5.15 求一个三位数,其值等于其各位阶乘之和 问题描述 编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。输入 无 输出 满足上述条件的三位数。提示:输出格式为printf(”%dn“,num); #include 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 { 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 请编一个函数 fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针 odd 返回奇数之和,利用指针 even 返回偶数之和。 例如:数组中的值依次为: 1,8,2,3,11,6 ;则利用指针 odd 返回奇数之和 15 ;利用指针 even 返回偶数之和 16。#include 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 { 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 #include *(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 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 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 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 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 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 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 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 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 printf(”%d“,b[i]);}} if(m==0)printf(”0“);printf(”n“);return 0;} 8.2合并字符串 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。输入: 两个已经排好顺序(升序)的两个字符串 输出: 一个合并在一起的有序(升序)的字符串 #include 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 { 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 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 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 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 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 { 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 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 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 { 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 C语言学习心得 开课之前信息的收集:在高中的时候就听过程序员这个职业,当时也只知道这些人是写程序的,然而程序是什么具体我也不知道。终于上大学了,我看到自己的课表上有C程序设计,感到很兴奋,自己终于要开始学程序。于是我问大二的学长学姐C语言学习经验,他们只对我说,有点难学(可能是他们没认真学的原因)要好好学,在老乡会上刚刚找到工作的大四学长对我讲述他求职百度的时候的经历,百度面试官问他说你会什么编程语言,他说会C,C#,java。面试官接着问你最擅长哪个,他说C语言,紧着接面试官问了一系列关于C语言的问题,一个比一个深入,他答不出来,最后的结果就是直接被拒绝。临走的时候百度面试官对他说,只要你能掌握一门编程语言就能要你。学长告诫我,信管会学很多课但都是只知道一点,因此要学既然要学一门编程就要把它学精,哪怕其它的编程语言不擅长也没关系,我现在就后悔当时没好好学。知道这些情况后我决心学好C语言。 开课后学习的经历:第一节课上,老师说由于课程的安排,前四章的知识会讲的很快,对编程有用的就说,还有些理论课下自己看看,介绍了C语言的发展和编程格式输入和输出。紧接着的上机课我写了人生的第一个程序,觉得很有意思,从此就喜欢上了编程,喜欢这种逻辑的推理与设计,课前我会将书上的知识点掌握,然后上课认真听老师讲课,看看自己有没有漏掉什么知识点,书上没说的和老师给的程序要记下来,回来后自己来体验下这个程序。就这样到了期中考试,结果并不好,让我认识到自己不能只停留在programe上,要多做acm上的题目,并且课下要多读别人的代码来学习方法,就这样白天在图书馆里看书,晚上回来编程,两个月后发现有了很大进步,也发现C语言更有趣了。我也很积极报了来年三月份的计算机二级等级考试,虽然只学了一半,但是我想通过自己的学习和请教老师,拿到那个证书应该不是问题,就这样我开始了自学后半部分,发现真的很晕,果然后面不简单。但是我想到每件事开始的时候都是困难的,就这样我坚持了下来,在老师的帮助下我也成功的过了,并且还是优秀,而且由于自己事先学过了,所以下学期的学习并没有特别困难。 通过学习Funcode让我真正的看到了C语言的应用,课上学的只是C语言的理论,而最重要的是应用。经过实验每个函数的功能,掌握每种函数的接口,再根据自己的设计将这些函数通过一定的组合和排列,制作出一个属于自己的动画,这种感觉真的很棒。我都迫不及待地想给我爱看动画的小表弟展示我制作的动画和体验我设计的游戏,虽然这些动画和游戏还比较低级,但我想他看到后一定会很开心。 一年的学习经历不仅让我C语言入门,更教会了我许多许多。教会了我如何自主学习;教会了我只要你肯努力,就能学有所成;教会了我坚持自己所喜欢的,并为之汗水,结果也一定让人满意。感谢老师一年来一直以来对我的指导和教诲,课下牺牲自己休息的时间来为我解答问题,为我提前开放作业题。 结课之后的打算:希望能通过自己的努力进入学校的ACM团队,继续深入的学习C语言,毕竟自己也才入门而已,离精通还很远。同时大二的时候去蹭课学习算法和数据结构来进一步提升自己的编程能力。 付子文 C语言习题集 C语言复习题 【设计型】5.1 输出一行星号 编写程序在一行中输出 N 个星号。输入: N值 输出: 一行中N个星号 #include 输入图形的高 n,输出如下例(n=5)所示的图形.***** ***** ***** ***** ***** 输入: 付子文 C语言习题集 整数n例如 5 输出: 由*组成的高为5的平行四边形 #include 编写程序,输入n的值,求 :1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n(保留四位小数)#include 付子文 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 付子文 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 付子文 C语言习题集 输入两个正整数m和n,求它们的最大公约数和最小公倍数 比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。#include 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 一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No #include 付子文 C语言习题集 { int yinzi,num,i,sum=0;scanf(“%d”,&num);for(yinzi=1;yinzi 输入两个正整数m和n,求出[m,n]区间的所有素数 付子文 C语言习题集 #include 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 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 付子文 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 付子文 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 付子文 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 付子文 C语言习题集 编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。 输出格式:printf(“%dn”,num);#include 付子文 C语言习题集 printf(“%dn”,i);break;} } } 【研究创新型】6.1 谁能出线 背景: 电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。 输入: 按顺序给出一个小组10个人的最后得分(int)。 输出: 能够出线的学生序号(0~9)。#include 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 付子文 C语言习题集 for(j=2;j 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直 付子文 C语言习题集 至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。编写程序,对输入的十个数按照从小到大排序 #include 付子文 C语言习题集 } } for(j=0;j<10;j++){ printf(“ %d”,a[j]);} printf(“n”);return 0;} 【设计型】6.4 插入法排序 如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。 定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#include 付子文 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 付子文 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 付子文 C语言习题集 printf(“%d ”,a[i]);printf(“n”);return 0;} 【设计型】6.7 求最大值 问题描述 要求从键盘输入10个整型数据,找出其中的最大值并显示出来。输入范例 0 54-710 27 32767 10 1 500 2 输出范例 32767 提示 先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。 #include 付子文 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 付子文 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 付子文 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 付子文 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 付子文 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 付子文 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 付子文 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 付子文 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 付子文 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 付子文 C语言习题集 } printf(“n”);return 0;} 【设计型】8.5 单词有多少 用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 “stop” 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。输入: 多个字符串 输出: 单词的数量 #include 付子文 C语言习题集 return 0;} 【设计型】8.6 在指定位置插入字符串 输入两个字符串 s1、s2 和 s1 中任意字符 k,在 s1 中的指定字符 k 第一次出现的位置处插入字符串 s2 并输出。 输入: 两个字符串 s1、s2 和 s1 中任意字符 k 输出: 插入后的字符串 s1 #include 付子文 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 付子文 C语言习题集 for(i=0;i 问题描述: 编写C程序,它能以字符串形式读入两个无符号正整数m和n,计算并输出这两个整数之和 输入格式: 输入由两行组成,第一行为无符号整数m,第二行为无符号整数n,且m和n的值最长25位 输出格式: 输出为一行,即两个无符号整数m和n之和 输入样例: 9999888888 355729288 输出样例: 10355618176 #include 付子文 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 付子文 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 付子文 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 付子文 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 付子文 C语言习题集 请编写一个函数,其功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。 例如,若输入17 5,则应输出19 23 29 31 37 请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。#include 付子文 C语言习题集 scanf(“%d%d”,&m,&n);fun(m,n,zz);for(m=0;m 请编写函数fun,其功能是:从字符串中删除指定的字符。同一字母的大、小写按照不同的字符处理。#include str[j]=str[j+1]; i--;50 中国石油大学c语言上机题答案大全(2013版) 最全最详细 1.1 Hello world.让我们用C语言向世界问好。最早的程序基本是这个样子的: 程序一: #include printf(“Hello world.n”);} 程序二: #include printf(“Hello world.n”); return 0;} 上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。输入:无 输出:Hello world.#include printf(“Hello world.n”);} 1.2 Welcome to Beijing.让我们来练习如何显示多行文字。输入:无 输出:就是下面的那段文字。#include 输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真观察-1的八进制和十六进制输出,请想想是为什么。#include 输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出进行+、-、*、/、*之后的运行结果。#include 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 printf(“****n”); printf(“****n”); printf(“****n”); printf(“****n”); return 0;} 要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。输入:无。 输出:指定图形。#include 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 已知求正弦 sin(x)的近似值的多项式公式为: sin(x)= xx7/7!+ …… +(-1)n x2n+1/(2n+1)!+ … 编写程序,要求输入 x(单位是弧度)和ε,按上述公式计算 sin(x)的近似值,要求计算的误差小于给定的ε。 此题当然要用到循环语句,到第5章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的ε。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。 友情提示:给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用 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 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 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 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 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 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 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 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 { 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 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 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 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 } } 5.1输出一行星号 问题描述 编写程序在一行中输出 N 个星号。输入 星号个数值N 输出 一行中N个星号 #include printf(”*“);} printf(”n“);} 5.2 打印平行四边形 问题描述 输入图形的高 n,输出如下例(n=5 ***** ***** ***** ***** ***** 输入 整数n例如 5 输出 由*组成的高为5的平行四边形 #include .)所示的图形 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 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 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 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 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 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 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 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 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 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 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 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 a=b; b=cos(a); if(fabs(a-b)<=0.000001) { printf(”x=%lfn“,b); break; } } } 5.15 求一个三位数,其值等于其各位阶乘之和 问题描述 编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。输入 无 输出 满足上述条件的三位数。提示:输出格式为printf(”%dn“,num); #include 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 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 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 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 scanf(”%d“,&a[i]);scanf(”%d“,&n);a[10]=n;for(i=10;i>0;i--)第二篇:中国石油大学(华东)-C语言学习心得
第三篇:中国石油大学(华东)C语言习题答案
第四篇:中国石油大学C语言上机题答案(2013版)答案 最全最详细