宁波大学OJ系统C语言题目及答案精讲

时间:2019-05-12 01:40:01下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《宁波大学OJ系统C语言题目及答案精讲》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《宁波大学OJ系统C语言题目及答案精讲》。

第一篇:宁波大学OJ系统C语言题目及答案精讲

C++资料复习

1000 整数输入输出练习

Description 从键盘输入任意两个整数,再向屏幕输出这两个数据。

Input 输入两个整数。

Output 输出这两个整数。以空格间隔。

Sample Input 7-9 Sample Output 7-9 HINT 本题的样例代码如下: #include int main(){ int a,b;scanf(“%d%d”,&a,&b);printf(“%d %dn”,a,b);return 0;}

C++资料复习

1001 字符输入输出练习1

Description 从键盘任意输入一个字符,再输出这个字符。

Input 任意输入一个字符。

Output 输出该字符。

Sample Input # Sample Output #

#include int main(){ char a;scanf(“%c”,&a);printf(“%cn”,a);return 0;}

C++资料复习

1002 单组A+B

Description 从键盘输入任意两个整数a和b,计算并输出a+b的值。

Input 从键盘输入两个整数a和b。

Output 输出这两个数的和

Sample Input 1 2 Sample Output 3

#include int main(){ int a,b,c;scanf(“%d%d”,&a,&b);c=a+b;printf(“%dn”,c);return 0;}

C++资料复习

1003 多组A+B(1)

Description 分别计算多组a+b的值。

Input 输入包含多组测试数据。每行包含一组整数a,b。当输入为0 0 时,测试结束,此时的结果不输出。

Output 对于每一对整数a,b,输出它们的和,并且每行输出一个结果。

Sample Input 1 5 10 20 0 0

#include int main(){ int a,b,y;scanf(“%d%d”,&a,&b);while(a!=0||b!=0){

y=a+b;

printf(“%dn”,y);

scanf(“%d%d”,&a,&b);} return 0;}

C++资料复习

1004 多组A+B(2)

Description 分别计算多组a+b的值。

Input 第一行包含一个整数N,表示有N组数据。接下来的N行,每行输入一组a,b数据。

Output 对于每一对整数a,b,输出它们的和,并且每行输出一个结果。

Sample Input 2 1 5 10 20 Sample Output 6 30

#include int main(){ int a,b,y,i=1,N;scanf(“%d”,&N);while(i<=N){

scanf(“%d%d”,&a,&b);

y=a+b;

printf(“%dn”,y);i++;} return 0;}

C++资料复习

1005 计算平均分(1)

Description 输入一个学生的3门课成绩a,b,c,求出该学生的平均分。

Input 输入三个成绩a,b,c。

Output 输出平均值,要求保留1位小数。

Sample Input 60 70 80 Sample Output 70.0

#include int main(){ double a,b,c,d;scanf(“%lf%lf%lf”,&a,&b,&c);d=(a+b+c)/3.0;printf(“%.1fn”,d);return 0;}

06 计算月收入

Description 某小型外贸公司员工月收入的计算方法为:月基本工资加当月提成。从键盘输入某员工某月的基本工资和该月的提成,计算并输出该员工的月收入。

Input 输入两个数分别代表月基本工资和月提成。

C++资料复习

Output 计算并输出月收入(保留2位小数)。

Sample Input 3100 1200 Sample Output 4300.00

#include int main(){ double a,b,c;scanf(“%lf%lf”,&a,&b);c=a+b;printf(“%.2fn”,c);return 0;}

1007 温度转换

Description 2011夏季,热浪席卷了全球的大部分地方。网上报道美国局部地区的温度达到了100华氏度,而我们国内的温度多在38摄氏度左右。那么38摄氏度和100华氏度到底哪个更热一些呢?请你帮忙编一个程序来解决这一问题。从键盘输入一个华氏温度,求出其对应的摄氏温度。计算公式如下: c=5*(f-32)/9 c表示摄氏温度,f表示华氏温度。

Input 输入一个华氏温度值。

Output 输出对应的摄氏温度值,结果要求保留2位小数。

Sample Input

C++资料复习

Sample Output 37.78

#include int main(){ double c,f;scanf(“%lf”,&f);c=5*(f-32)/9;printf(“%.2fn”,c);return 0;}

1008 求圆周长和圆面积

Description 从键盘输入一个圆的半径r,计算并输出圆周长和圆面积。

Input 输入一个圆半径r。

Output 按序输出圆周长和圆面积,结果保留两位小数。

Sample Input 41 Sample Output 257.48 5278.34

C++资料复习

HINT 圆周率使用3.14

#include #define PI 3.14 int main(){ double r,c,s;scanf(“%lf”,&r);c=2*PI*r;s=PI*r*r;printf(“%.2f %.2fn”,c,s);return 0;}

1009 求圆柱体表面积

Description 输入圆柱体的底面半径r和高h,计算圆柱体的表面积并输出到屏幕上,保留2位小数。

Input 输入圆柱体的底面半径r和高h。

Output 计算圆柱体的表面积并输出到屏幕上,保留2位小数。

Sample Input 42.1 71.6 Sample Output

C++资料复习

30060.92 HINT 圆周率使用3.14

#include #define PI 3.14 int main(){ double r,h,s;scanf(“%lf%lf”,&r,&h);s=2*PI*r*r+2*PI*r*h;printf(“%.2fn”,s);return 0;}

1010 计算球体的体积

Description 编写程序计算球体的体积。参考公式v=(4/3)*PI*r*r*r,其中PI表示圆周率。球体的半径r的值由键盘输入,保留2位小数。

Input 输入球体半径r。

Output 计算球体体积并输出到屏幕上,保留2位小数。

Sample Input 96.2 Sample Output

C++资料复习

3727293.58 HINT 圆周率使用3.14

#include #define PI 3.14 int main(){ double r,v;scanf(“%lf”,&r);v=(4/3.0)*PI*r*r*r;printf(“%.2fn”,v);return 0;}

1011 三角形面积

Description 从键盘上输入三角形的3条边的边长a,b,c(假定3条边长可以构成三角形),求三角形面积并输出到屏幕上。

可利用海伦公式求解:s=sqrt(p*(p-a)*(p-b)*(p-c));其中p=(a+b+c)/2;Input 输入三条边的边长(假设3条边长可以构成三角形)。

Output 输出三角形面积。保留2位小数。

Sample Input 3 4 5

C++资料复习

Sample Output 6.00

#include #include int main(){ double a,b,c,p,s;scanf(“%lf%lf%lf”,&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“%.2fn”,s);return 0;}

1012 判断三角形

Description 输入三角形的3条边a,b,c,如果能构成一个三角形,则输出面积,否则输出Error。

Input 输入三个数a,b,c(浮点类型)。

Output 如果这三条边能构成一个三角形就计算并输出这个三角形的面积,保留2位小数。如果不能构成三角形就输出Error。

Sample Input 3 1 4

C++资料复习

Sample Output Error

#include #include int main(){ double a,b,c,p,s;scanf(“%lf%lf%lf”,&a,&b,&c);if(a+b>c&&fabs(a-b)

p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“%.2fn”,s);} else

printf(“Errorn”);

return 0;}

1013 两点的距离

Description 从键盘输入数据表示平面上任意两点。计算并输出这两点之间的距离。保留2位小数。

Input 依次输入x1,y1和x2,y2分别表示平面上的两点。

Output 输出这两点间的距离。保留2位小数。

Sample Input

C++资料复习

3.1 4.2 5.0 6.0 Sample Output 2.62

#include #include int main(){ double x1,x2,y1,y2,l;scanf(“%lf%lf%lf%lf”,&x1,&y1,&x2,&y2);l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf(“%.2fn”,l);return 0;}

1014 数值类型转换

Description 输入一个双精度数,输出它的整型值。

Input 输入一个双精度数

Output 输出该数的浮点数形式(保留2位小数)和它对应的整型形式。两数之间以空格间隔。

Sample Input

C++资料复习

1.22 Sample Output 1.22 1

#include #include int main(){ double a;int b;scanf(“%lf”,&a);b=a;printf(“%.2f %dn”,a,b);return 0;}

1015 两数交换

Description 从键盘输入两个整数x,y,然后交换它们的顺序并输出。

Input 输入两个整数x,y(以空格间隔)。

Output 首先输出x,y的初始值,然后换行输出交换后的两数。同一行内的数据以空格间隔。

Sample Input 12 23

C++资料复习

Sample Output 12 23 23 12

#include #include int main(){ int a,b,t;scanf(“%d%d”,&a,&b);printf(“%d %dn”,a,b);t=a;a=b;b=t;printf(“%d %dn”,a,b);return 0;}

1016 两数相除

Description 输入两个浮点数x,y,计算x除以y的值。

Input 输入两个浮点数x,y。

Output 输出运算结果的值,要求保留两位小数。

Sample Input 2 3

C++资料复习

Sample Output 0.67

#include #include int main(){ double x,y,t;scanf(“%lf%lf”,&x,&y);t=x/y;printf(“%.2fn”,t);return 0;}

1017 商和余数

Description 输入两个整数x,y,计算x除以y的商和余数。

Input 输入两个整数x,y。

Output 输出商和余数。以空格间隔。

Sample Input 65 14

C++资料复习

Sample Output 4 9

#include #include int main(){ int x,y,a,b;scanf(“%d%d”,&x,&y);a=x/y;b=x%y;printf(“%d %dn”,a,b);return 0;}

1018 植树问题

Description 某学校植树节开展植树活动,已知树苗有m株,参加植树的同学有n人(且m>n),请问每位同学平均可以植树几株?还有几株剩余?

Input 输入两个整数m和n,分别表示树苗的数量和学生的人数(m>n)。

Output 输出每位同学平均植树的数量及剩余的树苗数量。

Sample Input

C++资料复习

163 32 Sample Output 5 3

#include #include int main(){ int m,n,a,b;scanf(“%d%d”,&m,&n);a=m/n;b=m%n;printf(“%d %dn”,a,b);return 0;}

1019 美元和人民币

Description 美元越来越贬值了,手上留有太多的美元似乎不是件好事。赶紧算算你的那些美元还值多少人民币吧。假设美元与人民币的汇率是1美元兑换6.5573元人民币,编写程序输入美元的金额,输出能兑换的人民币金额。

Input 输入美元的金额。

Output 输出能兑换的人民币的数值。输出保留2位小数。

C++资料复习

Sample Input 100 Sample Output 655.73

#include #include int main(){ double x,y;scanf(“%lf”,&x);y=x*6.5573;printf(“%.2fn”,y);return 0;}

1020 计算字符的ASCII码

Description 编写程序,从键盘输入一个字符,输出它的ASCII码值。

Input 输入一个字符。

Output 输出字符对应的十进制ASCII码值。

Sample Input

C++资料复习

A Sample Output 65

#include #include int main(){ char x;scanf(“%c”,&x);printf(“%dn”,x);return 0;}

1021 单个字母的小写变大写

Description 从键盘输入一个小写字母,将其转换成大写字母并输出。

Input 输入一个小写字母。(假设输入的一定是小写字母)

Output 输出其大写形式。

Sample Input

C++资料复习

a Sample Output A

#include #include int main(){ char x,y;scanf(“%c”,&x);y=x-32;printf(“%cn”,y);return 0;}

1022 简单译码

Description 从键盘输入两个字母,对它们进行译码。如需要将”Hi”译成密码,规则是:用原字母后的第3个字母来代替,如H后面第3个字母是K,i后面第3个字母是l,因此“Hi”应译为“Kl”。

Input 从键盘输入两个字母,分别存放到变量ch1,ch2中。

Output 按上述规则进行译码后输出,输出字母间不加间隔。

C++资料复习

Sample Input Hi Sample Output Kl

#include int main(){ char a,b;scanf(“%c%c”,&a,&b);a=a+3;b=b+3;printf(“%c%cn”,a,b);return 0;}

1023 字符加减运算

Description 编写一个程序,求两个字符之间的加减运算。

Input 连续输入三个字符,其中第一个输入运算符号(+或者-),后两个输入字符。如+ab表示计算字符a与字符b相加的结果。

Output 输出两字符ASCII码值相加减的结果。

C++资料复习

Sample Input-ab Sample Output-1

#include int main(){ int a,b,c;c=getchar();a=getchar();b=getchar();if(c=='-'){ printf(“%dn”,a-b);} else if(c=='+'){ printf(“%dn”,a+b);} return 0;}

1024 求多项式值(1)

Description 求y=2*x^2+x+8的值。其中,x为浮点数,从键盘输入,经过计算后,将y的值输出到屏幕上,保留1位小数。

Input 输入浮点数x的值。

Output

C++资料复习

计算并输出y的值,保留1位小数。

Sample Input 1 Sample Output 11.0

#include #include int main(){ double x,y;scanf(“%lf”,&x);y=2*pow(x,2)+x+8;printf(“%.1fn”,y);return 0;}

1025 求多项式值(2)

Description 编程根据输入的x的值,结合数学函数计算多项式y=3*x^4-2*x^3-x^2+10的结果,结果保留1位小数。

Input 输入浮点数x的值。

Output

C++资料复习

计算并输出多项式的结果,保留1位小数。

Sample Input 1 Sample Output 10.0 HINT 建议用double

#include #include int main(){ double x,y;scanf(“%lf”,&x);y=3*pow(x,4)-2*pow(x,3)-pow(x,2)+10;printf(“%.1fn”,y);return 0;}

1026 居民电费

Description 某地居民用电是这样计算的,正常使用部分每度0.538元,阶梯部分每度0.03元。某用户家9月份正常部分用电量为x度,阶梯部分y度,请编程计算该用户9月份应该缴纳的电费。从键盘输入x和y,输出应缴纳电费,保留2位小数。

Input 输入x和y的值。

C++资料复习

Output 输出应缴纳的电费,保留2位小数。

Sample Input 10 10 Sample Output 5.68

#include #include int main(){ double x,y,m;scanf(“%lf%lf”,&x,&y);m=x*0.538+y*0.03;printf(“%.2fn”,m);return 0;}

1027 存款利息(1)

Description 输入存款金额money、存期year和年利率rate,根据公式计算存款到期时的利息interest(税前)。公式如下: interest=money(1+rate)^year-money Input 输入存款金额money、存期year和年利率rate。

C++资料复习

Output 输出到期时的利息,保留2位小数。

Sample Input 1000 3 0.0415 Sample Output 129.74 HINT 建议用double

#include #include int main(){ double money,year,rate,interest;scanf(“%lf%lf%lf”,&money,&year,&rate);interest=money*pow(1+rate,year)-money;printf(“%.2fn”,interest);return 0;}

1028存款利息(2)

Description 输入人民币存款年利率I和存款总额S,计算满一年后本息合计并输出。

Input 输入年利率和存款总数。

C++资料复习

Output 计算满一年后本息合计,保留两位小数。

Sample Input 0.03 100000 Sample Output 103000.00

#include #include int main(){ double I,S;scanf(“%lf%lf”,&I,&S);S=S*(1+I);printf(“%.2fn”,S);return 0;}

1029 三位数的数位分离

Description 从键盘输入一个任意的3位整数,分别求出其个位、十位和百位上的数字。

Input 输入任意的一个三位整数

C++资料复习

Output 依次输出个位、十位、百位上的数字。以空格间隔。

Sample Input 367 Sample Output 7 6 3

#include #include int main(){ int a,b,c,d;scanf(“%d”,&a);b=a%10;c=(a/10)%10;d=a/100;printf(“%d %d %dn”,b,c,d);return 0;}

1030 棋盘上的麦粒

Description 舍罕是古印度的国王,据说他十分好玩。宰相依达尔为了讨好国王,发明了现今的国际象棋献给国王。国王非常喜欢,决定嘉奖宰相,许诺满足宰相提出的任何要求。宰相指着棋盘要求:“陛下,请您按棋盘的格子赏赐我一点小麦吧,第一个小格赏我1粒麦子,第二个小格赏我2粒,第三个小格赏4粒,以后每一小格都比前一个小

C++资料复习

格赏的麦子增加一倍,只要把棋盘上全部64个小格按这样的方法得到的麦子都赏赐给我,我就心满意足了”。国王听了宰相这个“小小”的要求,马上同意了。

结果在给宰相麦子时,国王发现他要付出的比自己想象的要多得多,于是进行了计算,结果令他大惊失色。问题是:舍罕王的计算结果是多少粒麦子。

Input 输入一个整数n代表棋盘的格子,该数字大于1且小于等于64。如输入2,则表示有2个格子,第一个格子放1粒,第二个格子放2粒,则2个格子一共需要3粒麦子。

Output 输出n个格子需要的麦粒数。

Sample Input 64 Sample Output ***709551615 HINT 如果麦粒数sum如下定义: unsigned __int64 sum;

则计算完成后其输出形式为:

printf(“%I64un”, sum);

#include #include int main(){ int i,m,a;unsigned __int64 s=0;scanf(“%d”,&m);for(i=0;i

C++资料复习

}

{ a=pow(2,i);s+=a;} printf(“%I64un”,s);return 0;

1031 数据逆序显示

Description 输入一个任意长度的正整数,将该数逆序输出。如,输入正数237,则逆序显示的结果为732。如输入230,则逆序显示的结果为32。

Input

C++资料复习

输入一个正整数

Output 该数的逆序显示结果(数字最前面的0不显示,如340反转后。要求输出为43,而不是043)

Sample Input 123 Sample Output 321

#include #include int main(){ int a,b;scanf(“%d”,&a);if(a%10==0)a=a/10;while(a>0){

b=a%10;

printf(“%d”,b);

a=a/10;} printf(“n”);return 0;}

1032 各位数字求和

Description 编写一个程序,输入一个正整数,然后计算组成该数的各位数字的和。如,输入正数237,其各位的数字分别为2,3,7,加起来的和应该为2+3+7=12。

Input

C++资料复习

输入一个正整数。

Output 输出各位数字的和

Sample Input 1234 Sample Output 10

#include #include int main(){ int a,b,c=0;scanf(“%d”,&a);if(a%10==0)a=a/10;while(a>0){

b=a%10;

c+=b;

a=a/10;} printf(“%dn”,c);return 0;}

1033 计算最高位数字

Description 输入一个任意长度的正整数,求出其最高位数字。如,输入237,则最高位数字为2。

Input

C++资料复习

输入一个正整数。

Output 输出最高位数字

Sample Input 4756 Sample Output 4

#include #include int main(){ int a;scanf(“%d”,&a);if(a%10==0)a=a/10;while(!(a>=0&&a<=9)){

a=a/10;} printf(“%dn”,a);return 0;}

1034 任意长度整数的位数

Description 输入一个任意长度的正整数,求出它是几位数。

Input 输入一个任意长度的正整数。

C++资料复习

Output 输出位数

Sample Input 0 Sample Output 1

#include #include int main(){ int a,i=1;scanf(“%d”,&a);while(!(a>=0&&a<=9)){

a=a/10;

i+=1;} printf(“%dn”,i);return 0;}

1035 求整数的绝对值

Description 输入一个整数,输出它的绝对值

Input 输入一个整数n

C++资料复习

Output 输出该数的绝对值

Sample Input-2 Sample Output 2

#include #include int main(){ int n,a;scanf(“%d”,&n);a=fabs(n);printf(“%dn”,a);return 0;}

1036 符号属性判断

Description 从键盘输入任意数x,根据其符号属性,输出对应的y值。

y=-1(x<0)y=0(x=0)y=1(x>0)

C++资料复习

Input 输入x。

Output 输出y的值

Sample Input 10 Sample Output 1 HINT x取浮点类型

#include #include int main(){ double x;int y;scanf(“%lf”,&x);if(x<0)y=-1;else if(x==0)y=0;else y=1;printf(“%dn”,y);return 0;}

1037 正数负数

Description 输入一个整数,判断该数是正数还是负数。

Input 输入整数n。

C++资料复习

Output 如果该数是正数就输出“positive”,负数就输出“negative”(输出不含双引号)。

Sample Input 8 Sample Output positive

#include #include int main(){ int n;scanf(“%d”,&n);if(n>0)printf(“positiven”);else if(n<0)printf(“negativen”);return 0;}

1038 奇数偶数

Description 输入一个整数,判断该数是奇数还是偶数。

Input 输入整数n。

C++资料复习

Output 如果该数是奇数就输出“odd”,偶数就输出“even”(输出不含双引号)。

Sample Input 8 Sample Output even

#include #include int main(){ int n;scanf(“%d”,&n);if(n%2==0)printf(“evenn”);else if(n%2==1)printf(“oddn”);return 0;}

1039 奇数和与偶数和(1)

Description 输入正整数n,计算1~n中的奇数和以及偶数和并输出。

Input 输入一个正整数n。

C++资料复习

Output 依次输出奇数和以及偶数和,各占一行。

Sample Input 100 Sample Output 2500 2550

#include #include int main(){ int n,a=0,b=0,i=1;scanf(“%d”,&n);while(i<=n){

if(i%2==1)

a+=i;

else

b+=i;

i++;} printf(“%dn%dn”,a,b);return 0;}

1040 奇数和与偶数和(2)

Description 输入正整数n,然后依次输入n个正整数,计算其中的奇数和与偶数和并输出。

Input

C++资料复习

先输入一个正整数n,然后依次输入n个正整数。

Output 依次输出其中的奇数和以及偶数和,各占一行。

Sample Input 5 1 8 9 6 4 Sample Output 10 18

#include #include int main(){ int n,m,a=0,b=0,i=1;scanf(“%d”,&n);while(i<=n){

scanf(“%d”,&m);

if(m%2==1)

a+=m;

else

b+=m;

i++;} printf(“%dn%dn”,a,b);return 0;}

1041 分段函数(1)

Description 有一函数:

y=x(x<1)

C++资料复习

y=3x-1(1<=x<10)y=4x-2(x>=10)

编写程序,输入x,输出y的值。

Input 输入一个任意整数x。

Output 输出函数y的值。

Sample Input 3 Sample Output 8

#include #include int main(){ int x,y;scanf(“%d”,&x);if(x<1)y=x;else if(x>=1&&x<10)y=3*x-1;else y=4*x-2;printf(“%dn”,y);return 0;}

1042 分段函数(2)

Description 输入整数x,计算并输出下面分段函数的值(保留两位小数)。

C++资料复习

y=x^2-2(x>=0)y=sqrt(5-x)(x<0)Input 输入一个整数x。

Output 输出函数的值。保留2位小数。

Sample Input 3 Sample Output 7.00

#include #include int main(){ int x;double y;scanf(“%d”,&x);if(x>=0)y=pow(x,2)-2;else if(x<0)y=sqrt(5-x);printf(“%.2fn”,y);return 0;}

1043 分段函数(3)

Description 输入浮点数x,计算并输出下面分段函数y的值(保留两位小数)。

C++资料复习

y=(x+1)^2+2x+1/x(x<0)y=sqrt(x)(x>=0)Input 输入一个浮点数。

Output 输出函数的值。保留2位小数。

Sample Input 10 Sample Output 3.16

#include #include int main(){ double x,y;scanf(“%lf”,&x);if(x<0)y=(x+1)*(x+1)+2*x+(1/x);else if(x>=0)y=sqrt(x);printf(“%.2fn”,y);return 0;}

Description

第几象限1044

C++资料复习

从键盘输入2个整数x、y值表示一个坐标点,判断该坐标点处于第几象限,并输出相应的结果。假设坐标点不会处于x轴和y轴上。

Input 输入x,y值表示一个坐标点。坐标点不会处于x轴和y轴上。

Output 输出对应的象限,用数字1,2,3,4分别对应四个象限。

Sample Input 1 1 Sample Output 1

#include #include int main(){ double x;double y;scanf(“%lf%lf”,&x,&y);if(x>0&&y>0)

printf(“1n”);else if(x<0&&y>0)

printf(“2n”);else if(x<0&&y<0)

printf(“3n”);else

printf(“4n”);return 0;}

1045 圆内圆外

Description

C++资料复习

有一个半径为10的圆,圆心坐标为(0,0),从键盘输入任意点的坐标(a,b),判断该点在圆内,在圆外,还是恰巧在圆周上。

Input 输入a,b(a,b均为整数)值表示一个坐标点。

Output 输出对应的信息。in表示在圆内,out表示在圆外,on表示在圆周上。

Sample Input 1 1 Sample Output in

#include #include int main(){ int a,b;double c;scanf(“%d%d”,&a,&b);c=sqrt(a*a+b*b);if(c>10)printf(“outn”);else if(c==10)printf(“onn”);else printf(“inn”);return 0;}

1046 判断英文字母

Description

C++资料复习

编写一个程序,判断输入的一个字符是否是英文字母。

Input 任意输入一个字符。

Output 输出该字符是否属于英文字母的信息(大小写都可以),属于则输出YES,不属于则输出NO。

Sample Input 2 Sample Output NO

#include #include int main(){ char a;scanf(“%c”,&a);if(a>='a'&&a<='z'||a>='A'&&a<='Z')printf(“YESn”);else printf(“NOn”);return 0;}

1047 单个字母大小写互换

Description

C++资料复习

从键盘输入一个英文字母,要求编写一个程序,实现字母的大小写转换。如果输入的是小写字母,则输出其大写形式。如果输入的是大写字母,则输出其小写形式。若是其他字符则原样输出。如输入A,则输出a;若输入#,则依然输出#。

Input 任意输入一个英文字母。

Output 输出对应字符的大(小)写字符,(如A对应于a)。

Sample Input b Sample Output B

#include int main(){ char x,y;scanf(“%c”,&x);if(x>='A'&&x<='Z'){

y=x+32;printf(“%cn”,y);} else if(x>='a'&&x<='z'){

y=x-32;

printf(“%cn”,y);} else {

y=x;

printf(“%cn”,y);} return 0;} 1048 ASCII码对应的英文字母

Description

C++资料复习

从键盘输入一个代表ASCII码值的数字(<127),若该数字对应的字符是英文字母,则输出其字母的形式,否则输出数字本身。

Input 输入一个数字(小于127)。

Output 输出该ASCII值对应的英文字母。

Sample Input 98 Sample Output b

#include #include int main(){ int a;scanf(“%d”,&a);if(a>='a'&&a<='z'||a>='A'&&a<='Z')printf(“%cn”,a);else printf(“%dn”,a);return 0;}

1049 单个字符判断

Description

第二篇:C语言大赛题目精选(带答案)

第1题 歌手大赛问题 题目:青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分。3种方法:分别要求使用到排序,数组,函数,指针。分析:这道题的核心程序是排序,将评委打的10个分数利用数组按增序(或降序)排列,计算数组中除了第一个和最后一个分数以外的数以外的数的平均分 答案: #include double Aver(int p[],int count)//求出结果,p为整型数组,count为数组大小 { double result=0;for(inti=0;i1. 11.打鱼还是晒网 中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。*问题分析与算法设计 根据题意可以将解题过程分为三步: 1)计算从1990年1月1日开始至指定日期共有多少天; 2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除; 3)根据余数判断他是在“打鱼”还是在“晒网”; 若余数为1,2,3,则他是在“打鱼” 否则是在“晒网” 在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下: 如果((年能被4除尽且不能被100除尽)或能被400除尽)则该年是闰年; 否则不是闰年。C语言中判断能否整除可以使用求余运算(即求模)*程序与程序注释 #include int days(struct date day);struct date{ int year;int month;int day;};void main(){ struct date today,term;intyearday,year,day;printf(“Enter year/month/day:”);scanf(“%d%d%d”,&today.year,&today.month,&today.day);/*输入日期*/ term.month=12;/*设置变量的初始值:月*/ term.day=31;/*设置变量的初始值:日*/ for(yearday=0,year=1990;year0&&day<4)printf(“he was fishing at that day.”);/*打印结果*/ elseprintf(“He was sleeping at that day.”);} int days(struct date day){ staticintday_tab[2][13]= {{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/ {0,31,29,31,30,31,30,31,31,30,31,30,31,}, };inti,lp;lp=day.year%4==0&&day.year%100!=0||day.year%400==0;/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/ for(i=1;i

2. 12.抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。*问题分析与算法设计 按照题目的要求造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。*程序与程序注释 #include #include void main(){ inti,j,k,c;for(i=1;i<=9;i++)/*i:车号前二位的取值*/ for(j=0;j<=9;j++)/*j:车号后二位的取值*/ if(i!=j)/*判断二位数字是否相异*/ { k=i*1000+i*100+j*10+j;/*计算出可能的整数*/ for(c=31;c*c

3. 14.怎样存钱利最大 假设银行整存整取存款不同期限的月息利率分别为: 0.63% 期限=1年 0.66% 期限=2年 0.69% 期限=3年 0.75% 期限=5年 0.84% 期限=8年 利息=本金*月息利率*12*存款年限。现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。*问题分析与算法 为了得到最多的利息,存入银行的钱应在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样不断地滚动直到满20年为止,由于存款的利率不同,所以不同的存款方法(年限)存20年得到的利息是不一样的。分析题意,设2000元存20年,其中1年存i1次,2年存i2次,3年存i3次,5年存i5次,8年存i8次,则到期时存款人应得到的本利合计为: 2000*(1+rate1)i1*(1+rate2)i2*(1+rate3)i3*(1+rate5)i5*(1+rate8)i8 其中rateN为对应存款年限的利率。根据题意还可得到以下限制条件: 0<=i8<=2 0<=i5<=(20-8*i8)/5 0<=i3<=(20-8*i8-5*i5)/3 0<=i2<=(20-8*i8-5*i5-3*i3)/2 0<=i1=20-8*i8-5*i5-3*i3-2*i2 可以用穷举法穷举所有的i8、i5、i3、i2和i1的组合,代入求本利的公式计算出最大值,就是最佳存款方案。*程序与程序注释 #include #include void main(){ int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;float max=0,term;for(i8=0;i8<3;i8++)/*穷举所有可能的存款方式*/ for(i5=0;i5<=(20-8*i8)/5;i5++)for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++){ i1=20-8*i8-5*i5-3*i3-2*i2;term=2000.0*pow((double)(1+0.0063*12),(double)i1)*pow((double)(1+2*0.0063*12),(double)i2)*pow((double)(1+3*0.0069*12),(double)i3)*pow((double)(1+5*0.0075*12),(double)i5)*pow((double)(1+8*0.0084*12),(double)i8);/*计算到期时的本利合计*/ if(term>max){ max=term;n1=i1;n2=i2;n3=i3;n5=i5;n8=i8;} } printf(“For maxinumprofit,he should so save his money in a bank:”);printf(“ made fixed deposit for 8 year: %d times”,n8);printf(“ made fixed deposit for 5 year: %d times”,n5);printf(“ made fixed deposit for 3 year: %d times”,n3);printf(“ made fixed deposit for 2 year: %d times”,n2);printf(“ made fixed deposit for 1 year: %d times”,n1);printf(“ Toal: %.2f”,max);/*输出存款方式*/ } *运行结果 For maxinumprofit,he should so save his money in a bank: made fixed deposit for 8 year: 0times made fixed deposit for 5 year: 4times made fixed deposit for 3 year: 0times made fixed deposit for 2 year: 0times made fixed deposit for 1 year: 0times Total:8841.01 可见最佳的存款方案为连续四次存5年期。

4. 51.谁是窃贼 公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中: 甲说:“乙没有偷,是丁偷的。” 乙说:“我没有偷,是丙便的。” 丙说:“甲没有偷,是乙偷的。” 丁说:“我没有偷。” 请根据这四人的答话判断谁是盗窃者。*问题分析与算法设计 假设A、B、C、D分别代表四个人,变量的值为1代表该人是窃贱。由题目已知:四人中仅有一名是窃贱,且这四个人中的每个人要么说真话,要么说假话,而由于甲、乙、丙三人都说了两句话:“X没偷,X偷了”,故不论该人是否说谎,他提到的两人中必有一人是小偷。故在列条件表达式时,可以不关心谁说谎,谁说实话。这样,可以列出下列条件表达式: 甲说:”乙没有偷,是丁偷的。” B+D=1 乙说:“我没有偷,是丙偷有。” B+C=1 丙说:“甲没有偷,是乙偷的。” A+B=1 丁说:“我没有偷。” A+B+C+D=1 其中丁只说了一句话,无法判定其真假,表达式反映了四人中仅有一名是窃贱的条件。*程序与程序注释 #include void main(){ inti,j,a[4];for(i=0;i<4;i++)/*假定只有第i个人为窃贱*/ { for(j=0;j<4;j++)/*将第i个人设置为1表示窃贱,其余为0*/ if(j==i)a[j]=1;else a[j]=0;if(a[3]+a[1]==1&&a[1]+a[2]==1&&a[0]+a[1]==1)/*判断条件是否成立*/ { printf(“The thief is ”);/*成立*/ for(j=0;j<=3;j++)/*输出计算结果*/ if(a[j])printf(“%c.”,j+'A');printf(“");} } } *运行结果 The thief is B.(乙为窃贱。)

69.魔术师的猜牌术(1)魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下。对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看。魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在桌子上,然后按顺序从上到下数手上的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3。这样依次进行将13张牌全翻出来,准确无误。问魔术师手中的牌原始顺序是怎样安排的? *问题分析与算法设计 题目已经将魔术师出牌的过程描述清楚,我们可以利用倒推的方法,很容易地推出原来牌的顺序。人工倒推的方法是:在桌子上放13空盒子排成一圈,从1开始顺序编号,将黑桃A放入1号盒子中,从下一个空盒子开始对空的盒子计数,当数到第二个空盒子时,将黑桃2放入空盒子中,然后再从下一个空盒子开始对空盒子计数,顺序放入3、4、5...,直到放入全部3张牌。注意在计数时要跳过非空的盒子,只对空盒子计数。最后牌在盒子中的顺序,就是魔术师手中原来牌的顺序。这种人工的方法是行之有效的,计算机可以模拟求解。*程序与程序注释 #include int a[14];void main(){ inti,n,j=1;/*j:数组(盒子)下标,初始时为1号元素*/ printf(”The original order of cards is:“);for(i=1;i<=13;i++)/*i:要放入盒子中的牌的序号*/ { n=1;do{ if(j>13)j=1;/*由于盒子构成一个圈,j超过最后一个元素则指向1号元素*/ if(a[j])j++;/*跳过非空的盒子,不进行计数*/ else{ if(n==i)a[j]=i;/*若数到第i个空盒子,则将牌放入空盒中*/ j++;n++;/*对空盒计数,数组下标指向下一个盒子*/ } }while(n<=i);/*控制空盒计数为i*/ } for(i=1;i<=13;i++)/*输出牌的排列顺序*/ printf(”%d “,a);printf(”“);} *运行结果 The original order of cards is:1 8 2 5 10 3 12 11 9 4 7 6 13 70.魔术师的猜牌术(2)魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:最上面一张是黑桃A,翻开后放在桌上。以后,从上至下每数两张全依次放在最底下,第三张给观众看,便是黑桃2,放在桌上后再数两张依次放在最底下,第三张给观众看,是黑桃3。如此下去,观众看到放在桌子上牌的顺序是: 黑桃 A 2 3 4 5 6 7 8 9 10 J Q K 红桃 A 2 3 4 5 6 7 8 9 10 J Q K 问魔术师手中牌的原始顺序是什么? *问题分析与算法设计 本题可在上题的基础上进行编程,不同的在于计数的方法和牌的张数,这些并不影响我们求解题目的思路,仍可按照倒推的方法,得到原来魔术师手中的牌的顺序。*程序与程序注释 #include int a[27];void main(){ inti,n,j=1;a[1]=1;/*初始化第一张牌*/ printf(”The original order of cards is:(r:rad b:block):“);for(i=2;i<=26;i++){ n=1;do{ if(j>26)j=1;/*超过最后一个元素则指向1号元素*/ if(a[j])j++;/*跳过非空的盒子,不进行计数*/ else{ if(n==3)a[j]=i;/*若数到第3个空盒子,则将牌放入空盒中*/ j++;n++;/*对空盒计数,数组下标指向下一个盒子*/ } }while(n<=3);/*控制空盒计数为3*/ } for(i=1;i<=26;i++)/*输出牌的排列顺序*/ { printf(”%c“,a>13? 'r':'b');printf(”%d “,a>13? a-13:a);if(i==13)printf(”“);} printf(”“);} *运行结果 The original order of cards is:(r:rad b:black): b1 r6 b10 b2 r12 r3 b3 b11 r9 b4 r7 b12 b5 r4 r13 b6 b13 r11 b7 r5 r1 b8 r8 r10 b9 r2

75.10个小孩分糖果 十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖? *问题分析与算法设计 题目描述的分糖过程是一个机械的重复过程,编程算法完全可以按照描述的过程进行模拟。*程序与程序注释 #include void print(int s[]);int judge(int c[]);int j=0;void main(){ static int sweet[10]={10,2,8,22,16,4,10,6,14,20};/*初始化数组数据*/ inti,t[10],l;printf(” child“);printf(” round 1 2 3 4 5 6 7 8 9 10“);printf(”.............................“);print(sweet);/*输出每个人手中糖的块数*/ while(judge(sweet))/*若不满足要求则继续进行循环*/ { for(i=0;i<10;i++)/*将每个人手中的糖分成一半*/ if(sweet%2==0)/*若为偶数则直接分出一半*/ t=sweet=sweet/2;else /*若为奇数则加1后再分出一半*/ t=sweet=(sweet+1)/2;for(l=0;l<9;l++)/*将分出的一半糖给右(后)边的孩子*/ sweet[l+1]=sweet[l+1]+t[l];sweet[0]+=t[9];print(sweet);/*输出当前每个孩子中手中的糖数*/ } } int judge(int c[]){ inti;for(i=0;i<10;i++)/*判断每个孩子手中的糖是否相同*/ if(c[0]!=c)return 1;/*不相同返回 1*/ return 0;} void print(int s[])/*输出数组中每个元素的值*/ { int k;printf(” %2d “,j++);for(k=0;k<10;k++)printf(”%4d“,s[k]);printf(”“);}--------------------作者:huang01--发布时间:2004-10-21 17:16:52--5. 76.小明买书 小明假期同爸爸一起去书店,他选中了六本书,每本书的单价分别为:3.1,1.7,2,5.3,0.9和7.2。不巧的是,小明的爸爸只带了十几块钱,为了让小明过一个愉快的假期,爸爸扔然同意买书,但提邮购一个要求,要小明从六本书中选出若干本,使得单价相加所得的和同10最接近。你能够帮助小明解决这个问题吗? *问题分析与算法设计 分析题意,可将题目简化为:从六个数中选出若干个求和,使得和与10的差值最小。题目中隐含两个问题,其一是怎样从六个数中选出若干个数;其二是求与10的差。从六个数中选出若干个数实质是从六个数中选出若干个进行组合。每个数在组合过程中只有两种情况:要么是选中参加求和,要么是没选中不参加求和。这样就可以使用六重循环对每个数是否参加求和进行全部可能情况的组合。关于求与10的差值应当注意的是:差值的含义是指差的绝对值。例如:“9-10=-1”和“11-10=1”,但9和11这两者与10的差值都是1。若认为”9“与”10的差值为-1就错了。*程序与程序注释 #include #include void main(){ int d[6],m,i,j;long b[63],flag;float c[6],min,x;printf(“Please enter the prices of 6 books:”);for(i=0;i<6;i++)scanf(“%f”,&c);/*输入六个浮点数*/ for(i=0,min=-1,d[0]=0;d[0]<2;d[0]++)/*建立六个数的全部组合并处理*/ for(d[1]=0;d[1]<2;d[1]++)/*i:差值具有min组合的数量*/ for(d[2]=0;d[2]<2;d[2]++)/*min:与10的最小差值*/ for(d[3]=0;d[3]<2;d[3]++)/*d[]:组合时是否取该数的标志*/ for(d[4]=0;d[4]<2;d[4]++)for(d[5]=0;d[5]<2;d[5]++){ for(flag=0,x=0,j=5;j>=0;j--)/*flag:将六个数的组合用对应的一个十进制位表示 x:对应六个数组合的和*/ { x+=c[j]*d[j];flag=flag*10+d[j];} x=((x-10>0)? x-10:10-x);/*x: 组合的和与10的差*/ if(min<0){ min=x;/*对第一次计算出的差min进行处理*/ b[i++]=flag;/*b[]:有相同的min的flag的数组 i:b[]数组的下标*/ } else if(min-x>1.e-6)/*对新的min的处理*/ { min=x;b[0]=flag;i=1;} else if(fabs((double)x-min)<1.e-6)b[i++]=flag;/*对相等min的处理*/ } for(m=0;m0;j++,flag/=10)if(flag%10)/*将b[]中存的标记flag还原为各个数的组合*/ if(flag>1)printf(“%.2f+”,c[j]);elseprintf(“%.2f”,c[j]);} } *运行结果 Please enter the prices of 6 books:3.1 1.7 2.0 5.3 0.9 7.2 10(+-)0.10=2.00+0.90+7.20 10(+-)0.10=1.70+2.00+5.30+0.90 10(+-)0.10=3.10+1.70+5.30 *思考题 可以看出,程序中求六个数所能产生全部组合的算法并不好,使用六重循环进行处理使程序显得不够简洁。可以设计出更通用、优化的算法产生全部组合。6. 77.波松瓦酒的分酒趣题 法国著名数学家波瓦松在表年时代研究过一个有趣的数学问题:某人有12品脱的啤酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,仅有一个8品脱和5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢? *问题分析与算法设计 将12品脱酒 8品脱和5品脱的空瓶平分,可以抽象为解不定方程: 8x-5y=6 其意义是:从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的酒向12品脱的瓶中倒y次,最后在12品脱的瓶中剩余6品脱的酒。用a,b,c代表12品脱、8品脱和5品脱的瓶子,求出不定方程的整数解,按照不定方程的意义则倒法为: a-> b-> c->a x y 倒酒的规则如下: 1)按a-> b-> c->a的顺序; 2)b倒空后才能从a中取 3)c装满后才能向a中倒 按以上规则可以编写出程序如下: *程序与程序注释 #include voidgetti(inta,inty,int z);inti;/*最后需要分出的重量*/ void main(){ inta,y,z;printf(“input Full a,Emptyb,c,Get i:”);/*a 满瓶的容量 y:第一个空瓶的容量 z:第二个空瓶的容量*/ scanf(“%d%d%d%d”,&a,&y,&z,&i);getti(a,y,z);/*按a-> y-> z-> a的操作步骤*/ getti(a,z,y);/*按a-> z-> y-> a的步骤*/ } void getti(inta,inty,int z)/*a:满瓶的容量 y:第一个空瓶的容量 z:第二个空瓶的容量*/ { int b=0,c=0;/* b:第一瓶实际的重量 c:第二瓶实际的重量*/ printf(“ a%db%dc%d %4d%4d%4d”,a,y,z,a,b,c);while(a!=i||b!=i&&c!=i)/*当满瓶!=i或另两瓶都!=i*/ { if(!b){ a-=y;b=y;} /*如果第一瓶为空,则将满瓶倒入第一瓶中*/ else if(c==z){ a+=z;c=0;} /*如果第二瓶满,则将第二瓶倒入满瓶中*/ else if(b>z-c)/*如果第一瓶的重量>第二瓶的剩余空间*/ { b-=(z-c);c=z;} /*则将装满第二瓶,第一瓶中保留剩余部分*/ else{ c+=b;b=0;} /*否则,将第一瓶全部倒入第二瓶中*/ printf(“ %4d %4d %4d”,a,b,c);} }

第三篇:C语言实验题目

求两个数之和。在两种情况下完成:

①数据在程序内部定义变量时赋初值,或者通过赋值语句赋值。②数据通过scanf()函数输入。静态输入:

#include void main(){ int a=1,b=2,s;s=a+b;printf(“这两个数的和是%dn”,s);} 动态输入:

#include void main(){ int a,b,s;printf(“请您输入两个数:”);scanf(“%d,%d”,&a,&b);s=a+b;printf(“这两个数的和是%dn”,s);}

设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。要求用scanf 输入数据,输出计算结果。#include void main(){ float r,h,l,s,sq,vz;float pi=3.1415926;printf(“请输入圆的半径r,圆柱高h:”);scanf(“%f,%f”,&r,&h);l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vz=pi*r*r*h;printf(“圆的周长为

l=%6.2fn”,l);printf(“圆的面积为

s=%6.2fn”,s);printf(“圆柱的表面积为

sq=%6.2fn”,sq);printf(“圆柱的体积为

vz=%6.2fn”,vz);}

输入a、b、c三个整数,求出其中最大者,并连同三个源数据一起输出。#include int max(int x,int y,int z){ int max;if(x>y){

if(x>z)

max=x;

else

max=z;} else {

if(y>z)

max=y;

else

max=z;} return(max);} void main(){ int max(int x,int y,int z);

int a,b,c,w;

printf(“请您输入三个整数:”);

scanf(“%d,%d,%d”,&a,&b,&c);

printf(“您输入的三个数是:%d,%d,%dn”,a,b,c);

w=max(a,b,c);

printf(“这三个数中最大的是:%dn”,w);}

给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。要求输入一个成绩并打印出对应的等级制成绩。要求用switch语句完成。#include void main(){ int grade,c;printf(“请您输入一个成绩:”);scanf(“%d”,&grade);while(grade>100||grade<0){

printf(“您输入了一个错误的成绩!请重新输入n”);

scanf(“%d”,&grade);} c=grade/10;switch(c){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default: grade='E';} printf(“您输入的成绩的等级为:%Cn”,grade);}

计算当n为何值时,不等式sum=1 + 1/2 + 1/3 +… + 1/n >limit成立,输出n对应的sum(limit从键盘输入,要求用while、或do...while 语句,limit=10)。#include void main(){ float n=0,sum=0,limit=0;printf(“请输入一个limit的值:”);scanf(“%f”,&limit);while(sum<=limit){

n++;

sum=sum+1/n;} printf(“此时sum的值是:%fn”,sum);printf(“此时n的值为%fn”,n);}

计算M=11+ 22+ 33+…+ NN,直到N等于15为止,输出N和对应的M。(要求用for语句做)

#include void main(){ int n;float M;M=0.0;for(n=1;n<10;n++){

M=M+(n+10*n);} for(n=10;n<=15;n++){

M=M+(n+100*n);} n--;printf(“当n是%d时,M的值为%fn”,n,M);}

100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马一匹驮0.5担,计算大、中、小马数目并输出。#include void main(){ int big,mid,small,sum=0;for(big=0;big<33;big++)

for(small=0;small<100;small+=2)

for(mid=0;mid<50;mid++)

{

if(3*big+2*mid+small/2==100&&big+mid+small==100)

{

printf(“big:%dt,mid:%dt,small:%dn”,big,mid,small);

sum++;

}

}

printf(“一共有%d种组合方式n”,sum);}

求 sum=1!+2!+3!+...+10!,并输出结果。#include void main(){ float s=0,t=1;int n;for(n=1;n<=10;n++){

t=t*n;

s=s+t;} printf(“1!+2!+3!+...+10!的和是:%en”,s);} 注意该程序的结果为:1!+2!+3!+...+10!的和是:4.037913e+006 是以科学计数法表示的结果,因为int的定义范围只能以此表示,如果用long int来输出,则可以得到正常表示的结果 #include void main(){ long s=0,t=1;int n;for(n=1;n<=10;n++){

t=t*n;

s=s+t;} printf(“1!+2!+3!+...+10!的和是:%ldn”,s);}

1!+2!+3!+...+10!的和是:4037913

设数列为1,3,5,7,9,11,13,15,17,19,动态输入在数组array中,然后顺序打印输出该数列,再逆序打印输出该数列。#include #define N 10 void main(){ int array[10];printf(“请您输入10个整数:n”);int i=0;for(i=0;i

scanf(“%d”,&array[i]);printf(“您输入的10个整数的顺序排列是:n”);for(i=0;i

printf(“%-4d”,array[i]);printf(“n”);printf(“您输入的10个整数的逆序排列是:n”);for(i=N-1;i>=0;i--)

printf(“%-4d”,array[i]);printf(“n”);}

将3x3阶二维数组的关于主对角线对称的元素互换。二维数组的第1至3行元素分别为1、2、3、4、5、6、7、8、9。用矩阵形式分别输出互换前、后的数组元素值。#include void main(){ int i,j,t,array[3][3]={1,2,3,4,5,6,7,8,9};printf(“Before Exchanged:n”);for(i=0;i<3;i++){

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

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

printf(“n”);} for(i=1;i<3;i++)

for(j=0;j

{

t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

}

printf(“After Exchanged:n”);

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

{

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

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

printf(“n”);

} }

定义两个字符数组s1、s2,并用赋初值的方法把两个字符串“Computer”和“Language” 分别存放到s1、s2中,要求不用库函数strcat(),把s2连接到s1的尾部,然后以%s格式输出连接后的字符串s1。#include void 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++;

s1[i]=' ';

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i] = '';

printf(”The new string is:%sn“,s1);}

用赋初值的方法把字符串”C is a general purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system.“存放到字符数组s中,编程统计其中的大写字母、小写字母、数字、空格、逗号的个数。#include void main(){

char s[512] = ”C is a general purpose, procedural, imperative “

”computer programming language developed in 1972 by Dennis“

”Ritchie at the Bell Telephone Laboratories for use with “

”the Unix operating system.“;int upper=0,lower=0,digit=0,space=0,comma=0;int i=0;while(s[i])

{

if(s[i]>='A'&&s[i]<='Z')upper++;

if(s[i]>='a'&&s[i]<='z')lower++;

if(s[i]>='0'&&s[i]<='9')digit++;

if(s[i]==' ')space++;

if(s[i]==',')comma++;

i++;

}

printf(”这串字符串有大写字母%d个,小写字母%d个,数字%d个,空格%d个,逗号%d个n“,upper,lower,digit,space,comma);}

试从主函数输入10个数据到数组中,编写对偶数项求和的子函数,它将计算结果返回给主函数,由主函数输出。#include int oqh(int a[], int x){

int i,s;s=0;

for(i=1;i

s=s+a[i];

return(s);}

void main(){ int a[10];int i,s;printf(”请您在数组内输入10个数:“);for(i=0;i<10;i++)

scanf(”%d“,&a[i]);s=oqh(a,10);printf(”这个数组的偶数项的和是:%dn“,s);} 注意:oqh并无其他含义,是本人定义的一个函数名,偶数项求和的缩写。编写一个判断素数的程序,其中主函数用于完成输入一个整数并给出判断结果,单独编写一个函数用于判断其参数是否为素数,其返回值为1表示为素数,为0表示为非素数。#include #include int prime(int n){ int m,i=2,t;t=(int)sqrt(n);for(;i<=t;i++){

if(n%i==0)

{

m=0;

break;

}

if(i>t)

m=1;

else

continue;} return(m);} void main(){ int n;int i;printf(”请输入你要判断的数:n“);scanf(”%d“,&n);while(n<=1){

printf(”您输入了一个错误的数据,请重新输入:n“);

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

printf(”您输入的是一个素数n“);else

printf(”您输入的不是一个素数n“);

}

输入三个整数,按由小到大的顺序输出。(要求使用指针来排序输出)#include void sort(int *a,int *b,int *c){ int t=0;if(*a>*b){

t=*a;

*a=*b;

*b=t;} if(*a>*c){

t=*a;

*a=*c;

*c=t;} if(*b>*c){

t=*b;

*b=*c;

*c=t;} } void main(){ int a,b,c;printf(”请您输入三个整数:“);scanf(”%d %d %d“,&a,&b,&c);sort(&a,&b,&c);printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);}

或者是

#include void main(){

void swap(int *p1,int *p2);

int a,b,c;

int *p1,*p2,*p3;

printf(”请您输入三个整数:“);

scanf(”%d %d %d“,&a,&b,&c);

p1=&a;

p2=&b;

p3=&c;

if(a>b)swap(p1,p2);

if(a>c)swap(p1,p3);

if(b>c)swap(p2,p3);

printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);} void swap(int *p1,int *p2){

int p;

p=*p1;

*p1=*p2;

*p2=p;}

输入十个整数,放在数组list中,然后用指针法从后向前输出该数组中的整数。#include void main(){

int list[10],i,*p=list;

printf(”请您输入10个整数:n“);

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

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

printf(”这10个整数的逆序序列是:n“);

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

printf(”%-4d“,*(p+i));}

如果输入的数字个数不定的情况,下面的代码可行 #include void main(){ void sort(char *p,int m);int i,n;char *p,list[30];printf(”请您输入n的值:“);scanf(”%d“,&n);printf(”请您输入%d个整数:n“,n);for(i=0;i

scanf(”%d“,&list[i]);p=&list[0];sort(p,n);printf(”这%d个整数的逆序序列是:n“,n);for(i=0;i

printf(”%-4d“,list[i]);printf(”n“);} void sort(char *p,int m){ int i;char t,*p1,*p2;for(i=0;i

p1=p+i;

p2=p+(m-1-i);

t=*p1;

*p1=*p2;

*p2=t;} }

编写一个函数,它能对一个字符串(“I am a student”)测出长度,要求函数的形参是一个指针变量,函数返回值是字符串的长度。#include void main(){ int length(char *p);int len;char str[20];printf(”input string:“);gets(str);len=length(str);printf(”The length of string is %d.n“,len);} int length(char *p){ int n;n=0;while(*p!=''){

n++;

p++;} //*p='';//n++;return(n);} 若要统计结果包含结束符,则启用*p='';n++;两条语句

编一个函数cstrcmp实现两个字符串的比较,具体为:

int cstrcmp(char *p1, char *p2)p1,p2分别指向字符串s1,s2;若s1=s2则函数返回0;若s1>s2,则函数返回1;若s1 #include char s1[20];char s2[20];void input(){ printf(”输入第1个字符串:n“);scanf(”%s“,s1);printf(”输入第2个字符串:n“);scanf(”%s“,s2);} int cstrcmp(char *p1,char *p2){ p1=s1;p2=s2;if(strcmp(p1,p2)==0){

return 0;} if(strcmp(p1,p2)>0){

return 1;} if(strcmp(p1,p2)<0){

return-1;} } void main(){ char *a;char *b;input();printf(”这两个字符串比较的结果是:%dn“,cstrcmp(a,b));}

如果要求返回的是不相同字母的ASCII码值: #include void main(){ int cstrcmp(char *p1,char *p2);int m;char str1[20],char str2[20],*p1,*p2;printf(”请在下面输入两个字符串:n“);gets(str1);gets(str2);p1=&str1[0];p2=&str2[0];m=cstrcmp(p1,p2);printf(”这两个字符串比较的结果是:%dn“,m);} int cstrcmp(char *p1,char *p2){ int i;i=0;while(*(p1+i)==*(p2+i))

if(*(p1+i++)=='')return(0);

return(*(p1+i)-*(p2+i));}

有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,用赋初值的方法输入5个学生的数据到结构体数组中,输出每个学生3门课的平均成绩。#include struct student

{ char num[6];

char name[8];int score[3];float avr;}stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}};void main(){ int i,j,sum;for(i=0;i<5;i++)

{

sum=0;

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

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;} printf(”number

name score1 score2 score3 averagen“);for(i=0;i<5;i++){

printf(”%3s%10s“,stu[i].num,stu[i].name);

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

printf(”%7d“,stu[i].score[j]);

printf(”%10.2fn“,stu[i].avr);} }

如果按平均成绩由高到低排序后,输出每个学生的成绩 #include struct student

{ char num[6];

char name[8];

int score[3];float avr;

}stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}},temp;void main(){ int i,j,sum;

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

sum=0;

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

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;} for(i=0;i<4;i++)

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

if(stu[j].avr

{

temp=stu[j];

stu[j]=stu[j+1];

stu[j+1]=temp;

}

printf(”number

name score1 score2 score3 averagen“);

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

{

printf(”%3s%10s“,stu[i].num,stu[i].name);

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

printf(”%7d“,stu[i].score[j]);

printf(”%10.2fn",stu[i].avr);

} }

第四篇:C语言课程设计参考题目

C语言课程设计参考题目

一、矩阵运算

矩阵的加法、减法、转置、数乘矩阵、交换矩阵行或列、两个矩阵作乘法、求矩阵的秩、求可逆矩阵的逆矩阵、特殊矩阵(如对称矩阵、反对称矩阵、三角形矩阵)的运算。

二、级数和数列运算

求无穷级数的和(①从第一项累加到给定的项数时为止,②当一般项的值变化到满足某一条件时为止,③当累加的级数的和满足某一条件时为止。对于正项级数和交错级数,都能计算。);求无穷级数的某一项的值(①按给定项数求值;②按给定满足的条件求值)。

求数列的前n项之和(①等差数列前n项之和;②等比数列前n项之和);计算并显示数列各项的值(①截止到第n项为止;②截止到满足给定的条件为止);求等差中项和等比中项。

三、统计与计算

求N个整数的和、平均值、最大公约数、最小公倍数、方差、标准差等。求N个数中的最大值、最小值、出现次数最多的值、出现次数最少的值。

对一组整数进行分类统计(自行设定分类统计标准。例如,对于一组在0到100之间的数,可以这样分类统计:小于或等于100且大于等于90的有多少,小于90且大于等于80的有多少,小于80且大于等于70的有多少,小于70且大于等于60的有多少,小于60的有多少)。给定N个数,计算并显示这N个数的各种排列和组合。

判断某整数是否是素数,求某范围内的所有素数。将某整数分解成若干素数乘积的形式。

四、排序和查找运算

将给定的N个数排序(①升序;②降序,分别用选择法和冒泡法)。

将给定的N个单词排序(①升序;②降序,分别用选择法和冒泡法)。将给定的N个英文句子排序(①升序;②降序,分别用选择法和冒泡法)。

运用顺序查找法,在一组数中查找给定的数。运用两分查找法,在一组数中查找给定的数。在一组数中查找到给定的数之后,用另一个数将其替换或删除。在一组有序数中,插入某个数,使插入后仍是一组有序数。

将一组数以中间对称的形式交换位置,然后输出。

五、求方程近似根和积分运算

求一元二次方程的根。用牛顿法求某个一元高次方程的近似根。用二分法求某个一元高次方程的近似根。用弦截法求某个一元高次方程的近似根。

求线性方程组的解。

用矩形法求某个函数定级分。用梯形法求某个函数定级分。

六、对英文单词和句子运算

分别统计一个英文句子中大写字母、小写字母、数字、空格的个数。求某个字母在一个英文句子中出现的位置。统计一个英文句子中所包含单词的个数。统计一个英文句子中最长的单词所含字母个数。统计某个单词在一个英文句子中出现的次数。将一个单词从英文句子中删除,显示删除单词后的英文句子。将一个单词插入到英文句子的指定位置,显示插入单词后的英文句子。用一个单词替换英文句子中的另一个单词。比较两个英文句子的不同点,输出不同点的位置。

七、画图案

画各种三角形图案。画各种菱形图案。画各种平行四边形图案。画各种梯形图案。画各种正多边形图案。(以上图案包括空心的或实心的两种。要采用两种方法画一种图案:①用二维数组;②只用循环不用二维数组。不能全用二维数组画!)

用以上几种基本图案组合成一个新图案。

八、商品信息管理系统

每件商品信息包括编号、商品名、类型、生产厂家、生产日期、单价、库存量等项内容,本系统可以实现如下功能:往系统里添加新商品的各项信息;修改现有商品的各项信息;查找并显示满足某条件的商品的信息;按某个给定的条件将商品排序并显示排序结果;统计满足某条件的商品的库存量;计算某种商品的总价值(单价乘库存量),以及某几种商品的总价值。

九、优秀歌手比赛评分系统

比赛共有M个歌手参赛,共有N个评委为歌手打分。每次评分,由N个评委每人给歌手一个分数,然后去掉一个最高分,去掉一个最低分,求出其余N-2个分数的平均分,作为歌手的得分。本系统可以实现如下功能:按评委给分顺序显示某个参赛歌手的得分;显示某个参赛歌手所得的最高分和最低分;求出每个参赛歌手的得分;按参赛歌手的得分从高到低排序并显示排序结果;显示某个评委打出的M个分数;计算某个评委打分的平均值;查找满足给定得分范围的歌手。

十、工资管理系统

某单位有N个,职工工资信息包括基本工资、岗位津贴、地方津贴、奖金、扣公积金、扣税、实发工资等项内容,将N个职工的这些内容存入本系统。可以利用本系统实现如下功能:往系统里添加新的职工工资信息内容;根据给定的条件修改现有的职工工资内容;删除某个职工工资内容;根据给定的条件查找并显示某个职工工资内容;显示符合某个条件的所有职工工资内容;统计某项工资内容的总和;计算某个职工的实发工资(基本工资+岗位津贴+地方津贴+奖金-扣公积金-扣税);计算符合某个条件的所有职工的实发工资总和。

十一、学生成绩管理系统

该班共有N个学生,共开M门课,将已经结束的每门课的成绩存入本系统,将学生的学号和姓名存入本系统。可以利用本系统实现如下功能:往系统里添加新的课程成绩;根据给定的条件修改现有的课程成绩;删除某个学生的学号、姓名和各门课的成绩;根据给定的学生的学号和姓名,查找并显示该学生各门课的成绩;计算所有学生某门课的平均分;计算某个学生各门课的平均分;按每个学生得总分从高到低排序并显示排序结果。

十二、职工档案管理系统

某单位有N个职工,每个职工有编号、姓名、性别、出生日期、毕业学校、电话号码、职务等项内容,将N个职工的这些内容存入本系统。可以利用本系统实现如下功能:往系统里添加新的职工档案内容;根据给定的条件修改现有的职工档案内容;删除某个职工档案内容;根据给定的条件查找并显示某个职工档案内容;显示符合某个条件的所有职工档案内容;统计满足某个条件的职工人数;按某个给定的条件将职工排序并显示排序结果。

十三、图书信息管理系统

每本图书信息包括编号、书名、作者、出版社、出版日期、单价、册数等项内容,本系统可以实现如下功能:往系统里添加新图书的各项信息;修改现有图书的各项信息;查找并显示满足某条件的图书的信息;按某个给定的条件将图书排序;统计满足某条件的图书的册数;计算某种图书的总价值(单价乘册数),以及某几种图书的总价值。

十四、运动会分数统计系统

共有M个运动代表队,每个代表队参加N项比赛。每项比赛的第1名得10分、第2名得8分、第3名得5分,其它名次不得分。输入每项比赛的代表队排名。本系统可以实现如下功能:统计各代表队所得的总分;将各代表队按总分值从高到低排序,然后显示输出;查找某个代表队参加某项比赛的成绩并显示;查找某个代表队的总分和各项比赛的得分并显示;查找某项比赛取得某个名次得代表队名称。

第五篇: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;

下载宁波大学OJ系统C语言题目及答案精讲word格式文档
下载宁波大学OJ系统C语言题目及答案精讲.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言编程实践题目

    题目1 超市按实价收取客户购买的全部商品总额,而社区小店不收取总额中的小数部分,即不收取角和分。例如,在超市购买的全部商品总额为234.90元,那么超市将收取234.90元,但是,如果在......

    C语言课程设计要求及参考题目

    《程序设计课程设计》要求及参考题目一、目的: 本次课程设计是《程序设计基础》课程的综合实验,作为课堂教学和课内正常上机实验的补充。 通过对《程序设计基础》课程的学习,学......

    C语言课程设计题目及报告-2012

    《C程序设计》大作业及备选题目 1. 目的 本次大作业是《C程序设计》课程的综合实验,作为课堂教学和课内正常上机实验的补充。通过对《C程序设计》课程的学习,学生已初步掌握C......

    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......