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

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

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

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

最全最详细

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

#include void main(){

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

#include int main(){

printf(“Hello world.n”);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include int main(){

printf(“****n”);

printf(“****n”);

printf(“****n”);

printf(“****n”);

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

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

printf(“

*n”);

printf(“ ***n”);

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

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

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

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

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

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

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

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

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

int n,j;

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

n=t=j=1;

s=x;

do { y0=y;

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

else

y=y+s/t;

s*=x*x;

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

j+=2;

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

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

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

c = getchar();

if(c < 0x20)

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

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

printf(“figuresn”);

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

printf(“capital lettersn”);

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

printf(“small lettersn”);

else

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

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

{

int x1,x2,x3,x4,x5;

int x;

scanf(“%d”,&x);

x1=x/50;

x2=x%50/10;

x3=x%50%10/5;

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

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

printf(“%dn”,x1);

printf(“%dn”,x2);

printf(“%dn”,x3);

printf(“%dn”,x4);

printf(“%dn”,x5);

return 0;

} 3.2 计算时钟的夹角

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

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

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

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

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

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

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

#define n 3.1415926

int main()

{

float r,h,s,v;

printf;

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

s=2*n*r*h;

v=n*r*r*h;

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

} 3.4 分离整数

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

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

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

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

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

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

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

int lx;double f,c;

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

scanf(“%lf”,&f);

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

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

scanf(“%lf”,&c);

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

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

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

y=3*x-1;else

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

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

int bit_count;//位数

long int input_num;//输入数

int

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

inti;

scanf(“%ld”, &input_num);

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

printf(“Invalid inputn”);

exit(1);

}

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

result[bit_count] = input_num % 10;

input_num /= 10;

}

printf(“%dn”,bit_count);

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

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

printf(“n”);

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

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

printf(“Invalid datan”);else {

a=x/1000;

b=x%1000/100;

c=x%1000%100/10;

d=x%1000%100%10;

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

if(e==0)

printf(“Yesn”);

else

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

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

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

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

printf(“isoceles triangle.n”);else

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

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

{ char ch;

int a;

ch=getchar();

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

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

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

{a=ch%2;

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

else

(char)a=ch/2+ch;

putchar(a);}

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

{ch=ch/10+ch;

putchar(ch);}

else putchar(ch);

printf(“n”);

} 4.7 判断某年某月的天数

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

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

switch(month)

{ case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: days=31;break;

case 4:

case 6:

case 9:

case 11:days=30;break;

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

days=29;

else days=28;

}

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

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

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

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

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

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

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

大于等于10但不超过20 0.75

大于等于20但不超过30 0.70

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

printf(”Errorn“);else {

if(m<10)

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

y=0.75*m+0.2;else

y=0.70*m+0.2;

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

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

} }

5.1输出一行星号 问题描述

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

星号个数值N 输出

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

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

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

整数n例如 5 输出

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

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

for(j=1;j

printf(” “);

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

printf(”*“);

printf(”n“);}

} 5.3 编程计算 问题描述

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

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

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

f=1.0/i;

sign=-sign;

sum=sum+sign*f;}

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

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

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

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

sum= 2.0000000000

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

scanf(”%d“,&n);

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

k=a;

a=b;

b=a+k;

f=b/a;

sum=sum+f;}

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

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

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

e= 2.5000000000

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

scanf(”%d“,&n);

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

注意:用

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

k=k*j;

f=1.0/k;

sum=sum+f;}

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

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

两个正整数m和n 输出

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

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

#include int main()

{

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

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

if(m

{t=m;

m=n;

n=t;

}

a=m;

b=n;

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

{

m=n;

n=r;}

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

M=a/n;

N=b/n;

c=M*N*n;

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

return 0;

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

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

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

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

a=i/100;

b=(i%100)/10;

c=i%10;

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

if(i==d)

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

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

一个正整数n 输出

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

Yes,its factors are 1 2 3

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

for(i=1;i

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

printf(”Yes,its factors are “);

for(i=1;i

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

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

5.9 素数 问题描述

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

两个整数m和n 输出

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

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

for(j=2;j

if(i%j==0)break;

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

return 0;}

5.10 回文数 问题描述

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

一个正整数n 输出

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

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

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

5.11 贪吃的猴子 问题描述

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

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

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

问题分析: 总共 t0 日吃掉剩余 t0/2+1 t0-(t0/2+1)=t0/2-1 t1=t0/2-1 =>t0=(t1+1)*2 2 t1/2+2 t1-(t1/2+2)=t1/2-2 t2=t1/2-2 =>t1=(t2+2)*2....n-1 tn-2/2+(n-1)tn-2-(tn-2/2+(n-1))=tn-2/2-(n-1)tn-1=tn-2/2-(n-1)=>tn-2=(tn-1+n-1)*2 n 1 0 tn-1=1

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

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

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

return 0;}

5.12 马戏团观众人数

问题描述

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

总人数 n 输出

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

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

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

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

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

{

tag=1;

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

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

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

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

输入样例 4 输出样例

The square root of 4.00 is 2.00000

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

i=sq;

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

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

{

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

break;

} } }

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

(2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一个新的x1;

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

(5)所求x1就是方程cos(x)-x=0的一个实根,输出x1,输出语句为printf(”x=%lf“,x)。提示:本题x0和x1定义为double类型 #include #include int main(){ double a,b,i;scanf(”%lf“,&b);for(i=1;;){

a=b;

b=cos(a);

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

{

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

break;

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

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

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

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

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

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

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

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

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

6.1 谁能出线 背景:

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

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

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

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

if(a[i]>=max)

max=a[i];}

for(j=0;j

if(a[j]==max)

printf(”%dn“,j);

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

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

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

for(j=2;j

if(i%j==0)break;

if(i==j)

{

count++;

printf(”%4d“,i);

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

return 0;} 6.3 冒泡法排序

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

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

for(j=1;j

if(a[j]

{

t=a[j-1];

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

a[j]=t;

} for(j=0;j

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

return 0;} 6.4 插入法排序

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

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

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

if(a[i]

{

m=a[i];

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

a[i-1]=m;

}

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

{

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

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

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

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

m=n%10;

a[i]=m;

count++;

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

for(j=1;j

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

{

t=a[j-1];

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

a[j]=t;

}

for(i=0;i

{

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

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

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

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

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

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

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

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

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

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

if(a[j+1]

{

t=a[j];

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

a[j+1]=t;

}

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

6.8二维数组

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

数组中的值为

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

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

for(j=0;j

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

for(j=0;j

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

for(j=0;j

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

printf(”n“);}

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

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

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

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

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

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

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

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

a[i][0]=1;

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

for(j=1;j

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

for(j=0;j

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

printf(”n“);}

return 0;}

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

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

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

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

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

printf(”%dn“,sum);

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

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

for(j=0;j

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

for(j=i;j

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

for(i=0;i

{

for(j=0;j

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

printf(”n“);

} return 0;} 6.12给数组中的元素按顺序编号 对数组 a[10] 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10)则输出为:(4,1,3,7,1,4,6,8,9,10)#include int main(){ int i,j,t;int a[10],b[10];for(i=0;i<10;i++){

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

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

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

if(b[j]

{

t=b[j-1];

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

b[j]=t;

}

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

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

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

{

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

break;

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

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

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

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

for(j=0;j

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

for(j=0;j

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

for(j=0;j

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

for(i=0;i

{

for(j=0;j

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

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

} return 0;}

6.14 矩阵转置

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

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

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

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

转置后的矩阵

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

for(j=0;j

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

for(j=0;j

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

for(i=0;i

for(j=0;j

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

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

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

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

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

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

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

while(a[i]>0)

{

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

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

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

if(max

max=b[i];

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

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

if(max==b[i])

printf(” %d“,i);

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

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

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

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

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

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

{

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

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

break;

}

else continue;}

}

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

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

printf(”%dn“,i);

break;}

return 0;}

7.1 数的合并

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

例如:当a=45,b=12,调用该函数后,c=5241。#include void fun(int x,int y,int *p){ *p=(x%10)*1000+(y%10)*100+(x/10)*10+y/10;} int main(){ int a,b,c;scanf(”%d%d“,&a,&b);fun(a,b,&c);printf(”%dn“,c);} 7.2 数组中奇偶数 请编一个函数 fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参 n 给了数组中数据的个数:利用指针 odd 返回奇数之和,利用指针 even 返回偶数之和。

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

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

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

*even=*even+a[i];

else

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

{

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

scanf(”%d“,&n);

for(i=0;i

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

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

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

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

return 0;

} 7.3 浮点数四舍五入

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

{

double a,h;

scanf(”%lf“,&a);

fun(a,&h);

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

return 0;

} 7.4 字符移动

请编一个函数void fun(char *s),函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。例如:原有的字符串为: Mn.123xyZ,则调用该函数后,串中的内容为: n.123xyZM。#include #define N 81

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

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

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

{

char a[N];

gets(a);

fun(a);

printf(”%sn“,a);

} 7.5 生成新数

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

c[i]=*p%10;

*p=*p/10;

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

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

{

flag++;

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

} } } int main()

{ int n=-1;

while(n>99999999||n<0)

{

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

fun(&n);

printf(”%dn“,n);

return 0;

} 7.6 字符串转换成整数

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

int main()

{ char s[10];

int n;

gets(s);

n = fun(s);

printf(”%dn“,n);

return 0;

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

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

例如, 二维数组中的数据为: W W W W S S S S H H H H

则字符串中的内容应是: WSHWSHWSHWSH。#include #define M 3

#define N 4

void fun(char p[][N],char q[]){ int i,j,count=0;

for(j=0;j

for(i=0;i

{

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

}

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

{

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

fun(w,a);

puts(a);

return 0;

} 7.8 删除字符串中指定的星号

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

例如,字符串中的内容为: ****A*BC*DEF*G*******,删除后 , 字符串中的内容应当是: ABCDEFG*******。#include void fun(char *s,char *p){ int i,count=0;for(i=0;s+i<=p;i++)

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

{

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

count++;

}

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

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

gets(s);

t=s;

while(*t)t++;

t--;

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

fun(s , t);

puts(s);

return 0;} 7.9 统计数字字符

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

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

count++;*q=count;}

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

int t;

gets(s);

fun(s,&t);

printf(”%dn“,t);

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

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

#include

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

max=*(p+i);

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

max=*(q+i);

*(c+count)=max;

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

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

{

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

count++;

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

{ char a[10], b[10], c[80];gets(a);

gets(b);fun(a,b,c);puts(c);

return 0;} 7.11 统计子串的个数

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

int i=0;

*count=0;

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

{

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

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

break;

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

(*count)++;

} } int main(){

char str[80],substr[80];

int count;

gets(str);

gets(substr);

fun(str,substr,&count);

printf(”%dn“,count);

return 0;} 7.12 按要求处理字符串

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

int i,count=0;

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

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

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

}

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

{

char s[100], t[100];

scanf(”%s“, s);

fun(s, t);

printf(”%sn“, t);

return 0;

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

int i;

*y=0;

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

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

{

*aa=i;

aa++;

(*y)++;

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

scanf(”%d“, &x);

fun(x, aa, &n);

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

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

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

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

int i;

*k=0;

for(i=1;i

{

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

*k=i;

} } void main(){

int a[10], k ,i;

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

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

fun(a, 10, &k);

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

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

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

把字符串中的所有数字字符(„0‟...„9‟)转换为一个整数并输出。# include int main(){ char a[100];int i,m=0,b[100],n=0;gets(a);for(i=0;a[i]!='';i++)if(a[i]>='0'&&a[i]<='9'){ b[n]=a[i]-'0';n++;} for(i=0;i

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

8.2合并字符串

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

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

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

for(i=0;i

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

{

t=a[i];

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

a[i+1]=t;

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

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

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

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

{

char a[100];

int i,j,flag;

gets(a);

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

{

flag=1;

for(j=0;j

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

flag=0;

if(flag==0)

a[i]='0';

}

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

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

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

printf(”n“);

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

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

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

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

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

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

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

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

scanf(”%s“,str);

count++;

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

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

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

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

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

c++;

if(s1[i]==k)

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

for(i=0;i

s3[i]=s1[i];

for(i=c;i

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

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

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

puts(s3);} 8.7 Your Ride Is Here It is a well-known fact that behind every good comet is a UFO.These UFOs often come to collect loyal supporters from here on Earth.Unfortunately, they only have room to pick up one group of followers on each trip.They do, however, let the groups know ahead of time which will be picked up for each comet by a clever scheme: they pick a name for the comet which, along with the name of the group, can be used to determine if it is a particular group's turn to go(who do you think names the comets?).The details of the matching scheme are given below;your job is to write a program which takes the names of a group and a comet and then determines whether the group should go with the UFO behind that comet.Both the name of the group and the name of the comet are converted into a number in the following manner: the final number is just the product of all the letters in the name, where ”A“ is 1 and ”Z“ is 26.For instance, the group ”USACO“ would be 21 * 19 * 1 * 3 * 15 = 17955.If the group's number mod 47 is the same as the comet's number mod 47, then you need to tell the group to get ready!(Remember that ”a mod b“ is the remainder left over after dividing a by b;34 mod 10 is 4.)Write a program which reads in the name of the comet and the name of the group and figures out whether according to the above scheme the names are a match, printing ”GO“ if they match and ”STAY“ if not.The names of the groups and the comets will be a string of capital letters with no spaces or punctuation, up to 6 characters long.INPUT FORMAT Line 1: An upper case character string of length 1..6 that is the name of the comet.Line 2: An upper case character string of length 1..6 that is the name of the group.OUTPUT FORMAT A single line containing either the word ”GO“ or the word ”STAY“.#include #include int main(){ char s1[7],s2[7];int i,j=1,k=1;

gets(s1);gets(s2);

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

{

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

j=s1[i]*j;}

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

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

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

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

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

输入格式:

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

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

#include #include #include int main()

{

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

char m[26],n[26];

gets(m);

gets(n);

i=strlen(m);

j=strlen(n);

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

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

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

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

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

{

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

if(c[k]>=10)

{

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

c[k+1]=1;

}

}

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

if(c[k]>0)break;

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

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

printf(”n“);

return 0;

} 8.9 字符串重排列

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

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

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

} scanf(”%s%s“,a,b);for(i=0;a[i]!='';i++)count++;for(i=0;a[i]!='';i++)for(j=0;b[j]!='';j++)

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

{

flag++;

b[j]='0';

break;

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

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

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

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

{

int m,n,i,j;

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

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

for(i=0;i

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

for(j=0;j

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

for(i=0;i

{

for(j=0;j

{

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

{

printf(”YESn“);

break;

}

}

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

}

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

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

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

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

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

#include #include int main()

{

int i,j,t,k,l;

char a[1000][100],c;

scanf(”%d“,&t);

for(i=0;i

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

for(i=0;i

{

k=strlen(a[i]);

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

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

for(j=0;j

{

for(l=0;l

{

if(l==j)

l++;

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

}

if(l==k+1)

{

c=a[i][j];

putchar(c);

putchar('n');

break;

}

}

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

}

} 8.12 提取数据

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

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

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

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

中国石油大学c语言答案

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

#include void main(){

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

#include int main(){

printf(“Hello world.n”);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include int main(){

printf(“****n”);

printf(“****n”);

printf(“****n”);

printf(“****n”);

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

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

printf(“

*n”);

printf(“ ***n”);

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

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

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

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

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

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

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

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

int n,j;

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

n=t=j=1;

s=x;

do { y0=y;

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

else

y=y+s/t;

s*=x*x;

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

j+=2;

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

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

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

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

c = getchar();

if(c < 0x20)

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

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

printf(“figuresn”);

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

printf(“capital lettersn”);

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

printf(“small lettersn”);

else

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

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

{

int x1,x2,x3,x4,x5;

int x;

scanf(“%d”,&x);

x1=x/50;

x2=x%50/10;

x3=x%50%10/5;

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

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

printf(“%dn”,x1);

printf(“%dn”,x2);

printf(“%dn”,x3);

printf(“%dn”,x4);

printf(“%dn”,x5);

return 0;

} 3.2 计算时钟的夹角

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

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

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

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

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

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

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

#define n 3.1415926

int main()

{

float r,h,s,v;

printf;

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

s=2*n*r*h;

v=n*r*r*h;

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

} 3.4 分离整数

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

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

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

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

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

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

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

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

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

int lx;double f,c;

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

scanf(“%lf”,&f);

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

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

scanf(“%lf”,&c);

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

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

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

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

y=3*x-1;else

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

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

int bit_count;//位数

long int input_num;//输入数

int

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

inti;

scanf(“%ld”, &input_num);

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

printf(“Invalid inputn”);

exit(1);

}

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

result[bit_count] = input_num % 10;

input_num /= 10;

}

printf(“%dn”,bit_count);

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

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

printf(“n”);

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

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

printf(“Invalid datan”);else {

a=x/1000;

b=x%1000/100;

c=x%1000%100/10;

d=x%1000%100%10;

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

if(e==0)

printf(“Yesn”);

else

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

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

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

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

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

printf(“isoceles triangle.n”);else

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

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

{ char ch;

int a;

ch=getchar();

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

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

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

{a=ch%2;

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

else

(char)a=ch/2+ch;

putchar(a);}

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

{ch=ch/10+ch;

putchar(ch);}

else putchar(ch);

printf(“n”);

} 4.7 判断某年某月的天数

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

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

switch(month)

{ case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: days=31;break;

case 4:

case 6:

case 9:

case 11:days=30;break;

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

days=29;

else days=28;

}

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

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

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

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

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

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

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

大于等于10但不超过20 0.75

大于等于20但不超过30 0.70

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

printf(”Errorn“);else {

if(m<10)

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

y=0.75*m+0.2;else

y=0.70*m+0.2;

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

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

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

} }

5.1输出一行星号 问题描述

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

星号个数值N 输出

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

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

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

整数n例如 5 输出

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

for(j=1;j

printf(” “);

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

printf(”*“);

printf(”n“);}

} 5.3 编程计算 问题描述

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

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

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

f=1.0/i;

sign=-sign;

sum=sum+sign*f;}

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

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

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

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

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

scanf(”%d“,&n);

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

k=a;

a=b;

b=a+k;

f=b/a;

sum=sum+f;}

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

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

e= 2.5000000000

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

scanf(”%d“,&n);

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

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

k=k*j;

f=1.0/k;

sum=sum+f;}

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

注意:用 double

} 5.6 最大公约数 问题描述

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

两个正整数m和n 输出

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

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

#include int main()

{

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

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

if(m

{t=m;

m=n;

n=t;

}

a=m;

b=n;

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

{

m=n;

n=r;}

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

M=a/n;

N=b/n;

c=M*N*n;

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

return 0;

} 5.7 水仙花数 问题描述

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

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

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

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

a=i/100;

b=(i%100)/10;

c=i%10;

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

if(i==d)

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

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

一个正整数n 输出

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

Yes,its factors are 1 2 3

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

for(i=1;i

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

printf(”Yes,its factors are “);

for(i=1;i

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

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

}

5.9 素数 问题描述

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

两个整数m和n 输出

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

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

for(j=2;j

if(i%j==0)break;

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

return 0;}

5.10 回文数 问题描述

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

一个正整数n 输出

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

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

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

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

5.11 贪吃的猴子 问题描述

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

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

The monkey got 114 peachs in first day.提示: 问题分析: 总共 t0 日吃掉剩余 t0/2+1 t0-(t0/2+1)=t0/2-1 t1=t0/2-1 =>t0=(t1+1)*2 2 t1/2+2 t1-(t1/2+2)=t1/2-2 t2=t1/2-2 =>t1=(t2+2)*2....n-1 tn-2/2+(n-1)tn-2-(tn-2/2+(n-1))=tn-2/2-(n-1)tn-1=tn-2/2-(n-1)=>tn-2=(tn-1+n-1)*2 n 1 0 tn-1=1

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

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

return 0;}

5.12 马戏团观众人数

问题描述

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

总人数 n 输出

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

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

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

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

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

{

tag=1;

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

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

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

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

The square root of 4.00 is 2.00000

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

i=sq;

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

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

{

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

break;

} } }

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

(2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一个新的x1;

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

(5)所求x1就是方程cos(x)-x=0的一个实根,输出x1,输出语句为printf(”x=%lf“,x)。提示:本题x0和x1定义为double类型 #include #include int main(){ double a,b,i;scanf(”%lf“,&b);for(i=1;;){

a=b;

b=cos(a);

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

{

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

break;

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

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

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

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

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

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

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

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

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

6.1 谁能出线 背景:

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

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

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

for(i=0;i

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

if(a[i]>=max)

max=a[i];}

for(j=0;j

if(a[j]==max)

printf(”%dn“,j);

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

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

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

for(j=2;j

if(i%j==0)break;

if(i==j)

{

count++;

printf(”%4d“,i);

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

return 0;} 6.3 冒泡法排序

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

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

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

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

for(j=1;j

if(a[j]

{

t=a[j-1];

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

a[j]=t;

} for(j=0;j

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

return 0;} 6.4 插入法排序

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

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

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

if(a[i]

{

m=a[i];

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

a[i-1]=m;

}

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

{

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

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

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

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

m=n%10;

a[i]=m;

count++;

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

for(j=1;j

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

{

t=a[j-1];

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

a[j]=t;

}

for(i=0;i

{

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

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

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

提示:

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

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

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

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

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

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

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

if(a[j+1]

{

t=a[j];

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

a[j+1]=t;

}

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

return 0;}

6.8二维数组

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

例如:

数组中的值为

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

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

for(j=0;j

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

for(j=0;j

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

for(j=0;j

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

printf(”n“);}

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

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

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

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

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

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

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

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

a[i][0]=1;

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

for(j=1;j

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

for(j=0;j

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

printf(”n“);}

return 0;}

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

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

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

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

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

printf(”%dn“,sum);

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

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

for(j=0;j

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

for(j=i;j

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

for(i=0;i

{

for(j=0;j

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

printf(”n“);

} return 0;} 6.12给数组中的元素按顺序编号

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

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

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

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

if(b[j]

{

t=b[j-1];

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

b[j]=t;

}

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

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

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

{

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

break;

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

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

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

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

for(j=0;j

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

for(j=0;j

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

for(j=0;j

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

for(i=0;i

{

for(j=0;j

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

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

} return 0;}

6.14 矩阵转置

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

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

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

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

转置后的矩阵

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

for(i=0;i

for(j=0;j

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

for(j=0;j

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

for(i=0;i

for(j=0;j

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

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

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

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

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

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

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

while(a[i]>0)

{

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

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

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

if(max

max=b[i];

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

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

if(max==b[i])

printf(” %d“,i);

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

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

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

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

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

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

{

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

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

break;

}

else continue;}

}

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

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

printf(”%dn“,i);

break;}

return 0;}

7.1 数的合并

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

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

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

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

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

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

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

*even=*even+a[i];

else

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

{

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

scanf(”%d“,&n);

for(i=0;i

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

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

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

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

return 0;

} 7.3 浮点数四舍五入

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

{

double a,h;

scanf(”%lf“,&a);

fun(a,&h);

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

return 0;

} 7.4 字符移动

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

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

#include #define N 81

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

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

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

{

char a[N];

gets(a);

fun(a);

printf(”%sn“,a);

} 7.5 生成新数

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

c[i]=*p%10;

*p=*p/10;

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

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

{

flag++;

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

} } } int main()

{ int n=-1;

while(n>99999999||n<0)

{

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

fun(&n);

printf(”%dn“,n);

return 0;

} 7.6 字符串转换成整数

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

int main()

{ char s[10];

int n;

gets(s);

n = fun(s);

printf(”%dn“,n);

return 0;

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

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

例如, 二维数组中的数据为: W W W W S S S S H H H H

则字符串中的内容应是: WSHWSHWSHWSH。#include

#define M 3

#define N 4

void fun(char p[][N],char q[]){ int i,j,count=0;

for(j=0;j

for(i=0;i

{

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

}

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

{

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

fun(w,a);

puts(a);

return 0;

} 7.8 删除字符串中指定的星号

假定输入的字符串中只包含字母和 * 号。请编写函数 fun,它的功能是:除了尾部的 * 号之外 , 将字符串中其它 * 号全部删除。在编写函数时,不得使用 C 语言提供的字符串函数。例如,字符串中的内容为: ****A*BC*DEF*G*******,删除后 , 字符串中的内容应当是: ABCDEFG*******。#include void fun(char *s,char *p){ int i,count=0;for(i=0;s+i<=p;i++)

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

{

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

count++;

}

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

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

gets(s);

t=s;

while(*t)t++;

t--;

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

fun(s , t);

puts(s);

return 0;} 7.9 统计数字字符

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

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

count++;*q=count;}

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

int t;

gets(s);

fun(s,&t);

printf(”%dn“,t);

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

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

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

#include

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

max=*(p+i);

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

max=*(q+i);

*(c+count)=max;

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

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

{

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

count++;

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

{ char a[10], b[10], c[80];gets(a);

gets(b);fun(a,b,c);puts(c);

return 0;} 7.11 统计子串的个数

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

int i=0;

*count=0;

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

{

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

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

break;

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

(*count)++;

} } int main(){

char str[80],substr[80];

int count;

gets(str);

gets(substr);

fun(str,substr,&count);

printf(”%dn“,count);

return 0;

} 7.12 按要求处理字符串

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

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

int i,count=0;

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

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

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

}

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

{

char s[100], t[100];

scanf(”%s“, s);

fun(s, t);

printf(”%sn“, t);

return 0;

} 7.13 求非偶数的除数

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

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

int i;

*y=0;

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

if(x%i==0&&i%2!=0)

{

*aa=i;

aa++;

(*y)++;

} } void main(){ int x, aa[1000], n, i;

scanf(”%d“, &x);

fun(x, aa, &n);

for(i = 0;i < n;i++)

printf(” %d“, aa[i]);

printf(”n“);} 7.14 求最大值及其下标 请编写函数 fun,其功能是求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中。

例如 , 输入如下整数 : 876 675 896 101 301 401 980 431 451 777 则输出结果为 : 6, 980 #include void fun(int *a,int m,int *k){

int i;

*k=0;

for(i=1;i

{

if(*(a+i)>*(a+*k))

*k=i;

} } void main(){

int a[10], k ,i;

for(i=0;i<10;i++)

scanf(”%d“,&a[i]);

fun(a, 10, &k);

printf(”%d,%dn“, k, a[k]);} 8.1 字符转换 描述

提取一个字符串中的所有数字字符(„0‟...„9‟)将其转换为一个整数输出。输入

一个以回车符为结束标志的字符串(少于80个字符)。输出

把字符串中的所有数字字符(„0‟...„9‟)转换为一个整数并输出。

# include int main(){ char a[100];int i,m=0,b[100],n=0;gets(a);for(i=0;a[i]!='';i++)if(a[i]>='0'&&a[i]<='9'){ b[n]=a[i]-'0';n++;} for(i=0;i

printf(”%d“,b[i]);}} if(m==0)printf(”0“);printf(”n“);return 0;}

8.2合并字符串

输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。输入:

两个已经排好顺序(升序)的两个字符串 输出:

一个合并在一起的有序(升序)的字符串 #include #include int main(){ char a[100],b[100];int i,j,k,t;gets(a);gets(b);strcat(a,b);k=strlen(a);for(j=1;j

for(i=0;i

if(a[i]>=a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

} puts(a);} 8.3 删除重复字符 背景:

输入一个长度不超过 100 的字符串,删除串中的重复字符。输入:

输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。输出:

删除重复字符后的字符串。例如:abced #include void main()

{

char a[100];

int i,j,flag;

gets(a);

for(i=1;a[i]!='';i++)

{

flag=1;

for(j=0;j

if(a[j]==a[i])

flag=0;

if(flag==0)

a[i]='0';

}

for(i=0;a[i]!='';i++)

if(a[i]!='0')

printf(”%c“,a[i]);

printf(”n“);

} 8.4 删除字符串中指定字符 输入两个字符串 s1 和 s2,在 s1 中删除任何 s2 中有的字符。例如,s1 :“ abc123ad ”,s2 :“ a1 ”,则输出“bc23d ”。输入:两个字符串 s1 和 s2 输出:删除后的字符串 s1 #include #include int main(){ char s1[100],s2[100];int i,j,k,t;gets(s1);gets(s2);for(j=0;s1[j]!='';j++)

for(i=0;s2[i]!='';i++)

if(s1[j]==s2[i])

s1[j]='0';for(i=0;s1[i]!='';i++)

if(s1[i]!='0')

printf(”%c“,s1[i]);printf(”n“);} 8.5 单词有多少

用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 ”stop“ 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。输入:多个字符串 输出:单词的数量 #include #include int main(){ char str[100];int i,count=0;

for(i=0;;i++){

scanf(”%s“,str);

count++;

if(strcmp(str,”stop“)==0)

break;} printf(”%dn“,count-1);} 8.6 在指定位置插入字符串

输入两个字符串 s1、s2 和 s1 中任意字符 k,在 s1 中的指定字符 k 第一次出现的位置处插入字符串 s2 并输出。

输入:两个字符串 s1、s2 和 s1 中任意字符 k 输出:插入后的字符串 s1 #include #include int main(){ char k,s1[100],s2[100],s3[100],s4[100];int i,m,n,c=-1;

gets(s1);gets(s2);scanf(”%c“,&k);for(i=0;s1[i]!='';i++){

c++;

if(s1[i]==k)

break;

} m=strlen(s2);n=strlen(s1);

for(i=0;i

s3[i]=s1[i];

for(i=c;i

s3[i]=s2[i-c];

for(i=c+m;i<=m+n;i++)

s3[i]=s1[i-m];

puts(s3);} 8.7 Your Ride Is Here It is a well-known fact that behind every good comet is a UFO.These UFOs often come to collect loyal supporters from here on Earth.Unfortunately, they only have room to pick up one group of followers on each trip.They do, however, let the groups know ahead of time which will be picked up for each comet by a clever scheme: they pick a name for the comet which, along with the name of the group, can be used to determine if it is a particular group's turn to go(who do you think names the comets?).The details of the matching scheme are given below;your job is to write a program which takes the names of a group and a comet and then determines whether the group should go with the UFO behind that comet.Both the name of the group and the name of the comet are converted into a number in the following manner: the final number is just the product of all the letters in the name, where ”A“ is 1 and ”Z“ is 26.For instance, the group ”USACO“ would be 21 * 19 * 1 * 3 * 15 = 17955.If the group's number mod 47 is the same as the comet's number mod 47, then you need to tell the group to get ready!(Remember that ”a mod b“ is the remainder left over after dividing a by b;34 mod 10 is 4.)Write a program which reads in the name of the comet and the name of the group and figures out whether according to the above scheme the names are a match, printing ”GO“ if they match and ”STAY“ if not.The names of the groups and the comets will be a string of capital letters with no spaces or punctuation, up to 6 characters long.INPUT FORMAT Line 1: An upper case character string of length 1..6 that is the name of the comet.Line 2: An upper case character string of length 1..6 that is the name of the group.OUTPUT FORMAT A single line containing either the word ”GO“ or the word ”STAY“.#include #include int main(){ char s1[7],s2[7];int i,j=1,k=1;

gets(s1);gets(s2);

for(i=0;s1[i]!='';i++)

{

s1[i]=s1[i]-'A'+1;

j=s1[i]*j;}

for(i=0;s2[i]!='';i++){

s2[i]=s2[i]-'A'+1;

k=k*s2[i];} if(j%47==k%47)

printf(”GOn“);else printf(”STAYn“);} 8.8大数相加 问题描述:

编写C程序,它能以字符串形式读入两个无符号正整数m和n,计算并输出这两个整数之和

输入格式:

输入由两行组成,第一行为无符号整数m,第二行为无符号整数n,且m和n的值最长25位

输出格式:

输出为一行,即两个无符号整数m和n之和 输入样例: 9999888888 355729288 输出样例: 10355618176

#include #include #include int main()

{

int i,j,k,t,a[27]={0},b[27]={0},c[27]={0};

char m[26],n[26];

gets(m);

gets(n);

i=strlen(m);

j=strlen(n);

for(k=i-1,t=0;k>=0;k--,t++)

a[t]=m[k]-'0';

for(k=j-1,t=0;k>=0;k--,t++)

b[t]=n[k]-'0';

for(k=0;k<=26;k++)

{

c[k]=c[k]+a[k]+b[k];

if(c[k]>=10)

{

c[k]=c[k]-10;

c[k+1]=1;

}

}

for(k=26;k>=0;k--)

if(c[k]>0)break;

for(k=k;k>=0;k--)

printf(”%d“,c[k]);

printf(”n“);

return 0;

} 8.9 字符串重排列

判断一个字符串是否可以由另一个字符串通过重排字符而得到。注意,此处区分字符大小写!输入

输入只有一行,为两个字符串,字符串之间以一个空格分隔。输出

如果两个字符串由同一组字符组成(且每一个字符出现次数相同),则输出“YES”; 否则输出“NO”。注意YES和NO都是大写字母!#include int main(){ int i,j,flag=0,count=0;char a[10],b[10];scanf(”%s%s“,a,b);for(i=0;a[i]!='';i++)

count++;for(i=0;a[i]!='';i++)

for(j=0;b[j]!='';j++)

if(a[i]==b[j]||a[i]==b[j]+'a'-'A'||a[i]+'a'-'A'==b[j])

{

flag++;

b[j]='0';

break;

} if(flag==count)

printf(”YESn“);else printf(”NOn“);} 8.10上课啦!要点名啊!

小凡的老师每次上课前都要点名,但是这样就浪费了老师的上课时间。所以老师让小凡来完成点名,让小凡在早自习的时候就点好名。老师给了小凡名单,小凡只要照着名单点名就好了是不是很简单啊。输入

输入有多组数据,直到文件结束。每组测试数据有三行,第一行为两个整数m, n(50 >= m >= n)。第二行有m个名字,名字之间用空格隔开,是小凡班上同学的名单。后面有n个名字是来上课的同学。名字间用空格隔开。名字的长度不超过20个字符。输出

按照第一行的名单,每个人对应输出是否到了。到的人输出Yes,没到的人输出No。#include int main()

{

int m,n,i,j;

char a[51][21],b[51][21];

scanf(”%d%d“,&m,&n);

for(i=0;i

scanf(”%s“,a[i]);

for(j=0;j

scanf(”%s“,b[j]);

for(i=0;i

{

for(j=0;j

{

if(strcmp(a[i],b[j])==0)

{

printf(”YESn“);

break;

}

}

if(j==n)printf(”NOn“);

}

} 8.11找第一个只出现一次的字符 问题描述:

给定t个字符串,这个字符串只可能由26个小写字母组成,请你找到第一个仅出现一次的字符,如果没有符合要求的字符,就输出no。输入:

第一行是t,接下来是t个字符串,每个字符串长度小于100 输出:

你的输出需要由t行组成。

对于每个字符串,输出第一个仅出现一次的字符,没有输出NO。输入样例: aabb abcdab 输出样例: NO c

#include #include int main()

{

int i,j,t,k,l;

char a[1000][100],c;

scanf(”%d“,&t);

for(i=0;i

scanf(”%s“,a[i]);

for(i=0;i

{

k=strlen(a[i]);

a[i][k]='0';

a[i][k+1]='';

for(j=0;j

{

for(l=0;l

{

if(l==j)

l++;

if(a[i][j]==a[i][l])break;

}

if(l==k+1)

{

c=a[i][j];

putchar(c);

putchar('n');

break;

}

}

if(j==k+1)printf(”NOn“);

}

} 8.12 提取数据

输入一个字符串,长度不超过30,内有数字字符和非数字字符,统计其中包含了多少个非负整数,并输出这样的非负整数。关于输入

一个字符串,最大长度为30 关于输出

输出字符串中包含的数据,一个数据一行.(不用输出总数)#include #include int main(){ int i,j,k,b[30]={0},c[30]={0};char d[31];gets(d);j=strlen(d);for(i=0;d[i]!='';i++){ if(d[i]<='9'&&d[i]>='0'){ b[i]=1;k=d[i]-'0';c[i]=k;} if(d[i]=='-')b[i]=2;} i=0;if(b[0]==1){ for(;b[i]!=0&&b[i]!=2;i++)printf(”%d“,c[i]);printf(”n“);} for(;i

第三篇:中国石油大学(华东)C语言习题答案

付子文

C语言习题集

C语言复习题

【设计型】5.1 输出一行星号

编写程序在一行中输出 N 个星号。输入: N值

输出: 一行中N个星号 #include int main(){ int a,i;scanf(“%d”,&a);for(i=1;i<=a;i++)printf(“*”);printf(“n”);return 0;} 【设计型】5.2 打印平行四边形

输入图形的高 n,输出如下例(n=5)所示的图形.***** ***** ***** ***** ***** 输入:

付子文

C语言习题集

整数n例如 5 输出:

由*组成的高为5的平行四边形 #include int main(){ int i,j,num;scanf(“%d”,&num);for(i=0;i

编写程序,输入n的值,求 :1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n(保留四位小数)#include int main(){ double n,i,sum,k=1.0;scanf(“%lf”,&n);

付子文

C语言习题集

i=1,sum=0;while(i<=n){ sum=sum+k/i;i++;k=-k;(用这个式子实现正负交替)} printf(“sum=%.4lfn”,sum);return 0;} 【设计型】5.4 分数序列

有一个分数序列:求出其前n项的和。

...............,输入整数n,输出语句格式为:printf(“sum=%16.10fn”,s);#include int main(){ int n,a,b,i,temp;double sum;scanf(“%d”,&n);i=1,sum=0,a=2,b=1;while(i<=n)3

付子文

C语言习题集

{ sum=sum+a*1.0/b;temp=a;a=a+b;b=temp;(几个式子实现数值的变换)

i++;} printf(“sum=%16.10fn”,sum);return 0;} 【设计型】5.5 求e的值

编写程序,从键盘输入整数 n , 求 e 的值.e=1+1/1!+1/2!+1/3!+..+1/n!注意:用 double 型数据计算输出语句:printf(“sum=%16.10fn”,sum);#include int main(){ int n,i;double sum,jc;scanf(“%d”,&n);i=1,sum=1.0 jc=1.0;while(i<=n){ jc=jc*i;sum=sum+1.0/jc;i++;} printf(“sum=%16.10fn”,sum);return 0;} 【设计型】5.6 最大公约数

付子文

C语言习题集

输入两个正整数m和n,求它们的最大公约数和最小公倍数

比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。#include int main(){ int yu,m,n,temp,bei,ji;scanf(“%d%d”,&m,&n);if(m

bei=ji/n;(最小公倍数求法)

printf(“the greatest common divisor is %dn”,n);printf(“the least common multiple is %dn”,bei);return 0;} 【设计型】5.7 水仙花数

付子文

C语言习题集

输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33 输出语句:printf(“%dn”,n);

#include int main(){ int a,b,i,j,k;for(i=1;i<=9;i++){ for(j=0;j<=9;j++){ for(k=0;k<=9;k++)(三重循环从1到999){a=i*i*i+j*j*j+k*k*k;b=100*i+10*j+k;if(a==b)printf(“%dn”,b);} } } return 0;} 【设计型】5.8 完数

一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No #include int main()6

付子文

C语言习题集

{ int yinzi,num,i,sum=0;scanf(“%d”,&num);for(yinzi=1;yinzi

输入两个正整数m和n,求出[m,n]区间的所有素数

付子文

C语言习题集

#include int main(){ int m,n,i,j,tag=1;scanf(“%d%d”,&m,&n);for(i=m;i<=n;i++){ for(j=2;j

if(i%j==0){ tag=0;break;} else tag=1;}

if(tag)printf(“ %d”,i);} printf(“n”);return 0;

付子文

C语言习题集

} 【设计型】5.10 回文数

输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No #include int main(){ double num;scanf(“%lf”,&num);int min=0, max=num;while(max>0){ min=min*10+(int)max%10;(将数字反过来)max=max/10;}

if(num==min)printf(“Yesn”);else printf(“Non”);return 0;} 【设计型】5.11 贪吃的猴子

有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃

付子文

C语言习题集

了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入: 天数n 输出:

第一天的桃子个数,输出语句为printf(“The monkey got %d peachs in first day.n”,sum);Smaple: Input: 5 Output The monkey got 114 peachs in first day.提示:

问题分析: 总共 t0 日 吃掉 剩余 t0/2+1 t0-(t0/2+1)=t0/2-1 t1=t0/2-1 =>t0=(t1+1)*2 2 t1/2+2 t1-(t1/2+2)=t1/2-2 t2=t1/2-2 =>t1=(t2+2)*2....n-1 tn-2/2+(n-1)tn-2-(tn-2/2+(n-1))=tn-2/2-(n-1)tn-1=tn-2/2-(n-1)=> tn-2=(tn-1+n-1)*2 n 1 0 tn-1=1 #include int main(){

付子文

C语言习题集

int i,t,sum;scanf(“%d”,&t);sum=1;for(i=t;i>1;i--){ sum=(sum+i-1)*2;?

} printf(“The monkey got %d peachs in first day.n”,sum);return 0;} 【创新型】5.12 马戏团观众人数

一个马戏团表演,n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。编程,输入总人数 n,输出满足要求的男人、女人和小孩人数的全部方案。若 n 人无法满足条件,则输出“No outputn”。输入: 人数 n 输出: 男人、女人和小孩人数 #include int main(){ int man,woman,child,total,sum,tag=0;scanf(“%d”,&total);for(man=0;man<=total;man++){ 11

付子文

C语言习题集

for(woman=0;woman<=(total-man);woman++){ child=total-man-woman;sum=50*man+20*woman+1*child;if(sum==1200){ tag=1;printf(“%d %d %dn”,man,woman,child);} } } if(tag==0)printf(“No outputn”);return 0;} 【设计型】5.13 迭代法

用迭代法求

.求平方根的迭代公式为:

要求前后两次求出的x的差的绝对值小于10-5。

#include #include 12

付子文

C语言习题集

int main(){ double x,a,b;double i;scanf(“%lf”,&x);b=x;for(i=1;;){ a=i;i=(i+x/i)/2;if(fabs(i-a)<=0.00001){ printf(“The square root of %.2lf is %.5lfn”,b,i);break;} } return 0;} 【设计型】5.14 cos(x)-x=0 利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。Xn+1=cos(Xn)迭代步骤如下:

(1)取X1初值为0.0;

(2)X0=X1,把X1的值赋给X0;

(3)X1=cos(X0),求出一个新的X1;

(4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);

付子文

C语言习题集

(5)所求X1就是方程cos(X)-X=0的一个实根,输出X1,输出语句为printf(“x=%lf”,x)。

提示:本题x0和x1定义为double类型

#include #include #include int main(){ double x0,x1;for(x1=0;;){ x0=x1;x1=cos(x0);if(fabs(x0-x1)<=0.000001){ printf(“x=%lfn”,x1);break;} } return 0;} 【设计型】5.15 求一个三位数,其值等于其各位阶乘之和

付子文

C语言习题集

编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。

输出格式:printf(“%dn”,num);#include int main(){ int i,j,k,l,ge,shi,bai,s1,s2,s3;for(i=100;i<=999;i++){ ge=i%10;shi=i%100/10;bai=i/100;s1=1;s2=1;s3=1;for(j=1;j<=ge;j++)s1=s1*j;for(k=1;k<=shi;k++)s2=s2*k;for(l=1;l<=bai;l++)s3=s3*l;if(i==s1+s2+s3){

付子文

C语言习题集

printf(“%dn”,i);break;} } } 【研究创新型】6.1 谁能出线

背景:

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

输入:

按顺序给出一个小组10个人的最后得分(int)。

输出:

能够出线的学生序号(0~9)。#include int main(){

int i,a[10],max;for(i=0;i<10;i++)scanf(“%d”,&a[i]);max=a[0];for(i=0;i<10;i++){

付子文

C语言习题集

}

} if(max<=a[i])max=a[i];for(i=0;i<10;i++)if(a[i]==max)printf(“%dn”,i);return 0;【设计型】6.2 统计素数的个数

求出 2 到 m 之间(含 m,m<=1000)所有素数并放在数组 a 中。输入:正整数m 输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)如:输入:10 输出:2 3 5 7 4 #include int main(){ int i,j,k=0,a[1001],m,yu,tag,num=0;scanf(“%d”,&m);for(i=2;i<=m;i++){ tag=1;a[k]=i;

付子文

C语言习题集

for(j=2;j

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直

付子文

C语言习题集

至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。编写程序,对输入的十个数按照从小到大排序

#include int main(){ int i,j,a[10],z;for(i=0;i<10;i++){ scanf(“%d”,&a[i]);} for(j=0;j<9;j++){ for(i=0;i<9-j;i++){ if(a[i]>a[i+1]){ z=a[i+1];a[i+1]=a[i];a[i]=z;} 19

付子文

C语言习题集

} } for(j=0;j<10;j++){ printf(“ %d”,a[j]);} printf(“n”);return 0;} 【设计型】6.4 插入法排序

如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。#include int main(){ int a[11],i,j,t;for(i=0;i<10;i++)scanf(“%d”,&a[i]);scanf(“%d”,&a[10]);for(i=0;i<10;i++){ if(a[i]>a[10])

付子文

C语言习题集

{ t=a[10];for(j=10;j>i;j--){ a[j]=a[j-1];} a[i]=t;break;} } for(i=0;i<11;i++)printf(“ %d”,a[i]);printf(“n”);return 0;} 【设计型】6.5 求各位数字组成的最大数

任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593,则输出为 9531。输入: 自然数 n 输出: 各位数字组成的最大数

#include int main()21

付子文

C语言习题集

{ int a[12],num,i,j,k,m,t;scanf(“%d”,&num);for(i=0;;i++){ k=num%10;num=num/10;(分离各个位数)a[i]=k;if(num==0)break;} for(m=0;ma[j+1]){ t=a[j+1];a[j+1]=a[j];a[j]=t;} } } for(j=i;j>=0;j--)

付子文

C语言习题集

printf(“%d”,a[j]);printf(“n”);return 0;} 【设计型】6.6 数组逆序输出

问题描述

从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。要求输出每个元素时以一个空格隔开。提示:

用第一个与最后一个交换。

#include int main(){ int a[10],i,t;for(i=0;i<=9;i++)scanf(“%d”,&a[i]);for(i=0;i<5;i++)(第一个与最后一个调换){ t=a[i];a[i]=a[9-i];a[9-i]=t;} for(i=0;i<=9;i++)23

付子文

C语言习题集

printf(“%d ”,a[i]);printf(“n”);return 0;} 【设计型】6.7 求最大值

问题描述

要求从键盘输入10个整型数据,找出其中的最大值并显示出来。输入范例 0 54-710 27 32767 10 1 500 2 输出范例 32767 提示

先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。

#include #define n 10 int main(){ int a[n],i,max;for(i=0;i<10;i++)scanf(“%d”,&a[i]);max=a[0];for(i=1;i<10;i++)24

付子文

C语言习题集

{ if(a[i]>max)max=a[i];} printf(“%d”,max);printf(“n”);return 0;} 【设计型】6.8 二维数组

程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。例如: 数组中的值为

假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d)

#include int main(){ 25

付子文

C语言习题集

int a[4][4],i,j,n,count=0;for(i=0;i<=3;i++){ for(j=0;j<=3;j++)scanf(“%d”,&a[i][j]);} scanf(“%d”,&n);for(j=0;j<=3;j++){ for(i=j;i<=3;i++){ a[i][j]=n*a[i][j];} }

for(i=0;i<=3;i++){ for(j=0;j<=3;j++){ count++;printf(“%4d”,a[i][j]);if(count%4==0)printf(“n”);}

付子文

C语言习题集

} return 0;} 【设计型】6.9 在屏幕上显示杨辉三角形

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。

杨辉三角有如下性质:

1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。

2、第n行的数字个数为n个。

3、每个数字等于上一行的左右两个数字之和。

编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 #include int main(){

付子文

C语言习题集

int i,j,n;int a[10][10];scanf(“%d”,&n);n=n+1;for(i=0;i

付子文

C语言习题集

return 0;} 【设计型】6.10 求二维数组周边元素之和

编写一个程序,求出4×5的二维数组周边元素之和。输入:二维数组元素 输出:周边元素之和 如: 输入: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 输出:61 #include int main(){ int a[4][5],i,j,sum1=0,sum2=0,sum;for(i=0;i<4;i++){ for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);} for(j=0;j<5;j++)

付子文

C语言习题集

sum1=sum1+a[0][j]+a[3][j];for(i=0;i<4;i++)sum2=sum2+a[i][0]+a[i][4];sum=sum1+sum2-a[0][0]-a[0][4]-a[3][4]-a[3][0];printf(“%dn”,sum);return 0;} 【设计型】6.11 存储并输出一个矩阵

编程,输入 n,存储并输出如下例(n=5)所示的 图形。1 2 3 4 5 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1 #include int main(){ int a[5][5],i,j,n,count=0;scanf(“%d”,&n);for(i=0;i

付子文

C语言习题集

a[i][j]=1;

} } for(i=0;i

付子文

C语言习题集

【设计型】6.12 给数组中的元素按顺序编号

对数组 a[10] 中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,且相同的整数要具有相同的编号。例如数组是: A=(5,3,4,7,3,5,6,8,9,10)则输出为:(4,1,3,7,1,4,6,8,9,10)#include int main(){ int a[11],c[11];int i,j,t,m;for(i=1;i<11;i++){ scanf(“%d”,&a[i]);c[i]=a[i];} for(j=1;j<=10;j++)for(i=1;i<11-j;i++)if(a[i]>=a[i+1]){ t=a[i];a[i]=a[i+1];a[i+1]=t;} for(m=1;m<11;m++)

付子文

C语言习题集

for(i=1;i<11;i++)if(c[m]==a[i]){ printf(“%3d”,i);break;} printf(“n”);return 0;} 【设计型】8.1 字符转换

描述

提取一个字符串中的所有数字字符(‘0’...‘9’)将其转换为一个整数输出。输入

一个以回车符为结束标志的字符串(少于80个字符)。输出

把字符串中的所有数字字符(‘0’...‘9’)转换为一个整数并输出。

#include #include int main(){ char word[20];int i,n;scanf(“%s”,word);

付子文

C语言习题集

n=strlen(word);for(i=0;i<=n;i++){ if(word[i]>='0'&&word[i]<='9'){ printf(“%c”,word[i]);} } printf(“n”);return 0;} 【设计型】8.2 合并字符串

输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。

输入:

两个已经排好顺序(升序)的字符串

输出:

一个合并在一起的有序(升序)的字符串

要求:

设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。如果采用先进行串连接,然后再进行排序的算法,则效率太低了。

#include #include

付子文

C语言习题集

int main(){ char a[100],b[100];char n[200],t;int i,j,k,m;gets(a);gets(b);for(i=0;a[i]!=0;i++)n[i]=a[i];for(j=0;b[j]!=0;j++,i++)n[i]=b[j];n[i]='';for(k=0;kn[m]){ t=n[k];n[k]=n[m];n[m]=t;} } printf(“%sn”,n);return 0;

付子文

C语言习题集

} 【设计型】8.3 删除重复字符

背景:

输入一个长度不超过 100 的字符串,删除串中的重复字符。

输入:

输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。

输出:

删除重复字符后的字符串。例如:abced。

#include #include int main(){ char str1[100],str2[100];int i,j,n,k=0,tag=0;scanf(“%s”,str1);str2[0]=str1[0];printf(“%c”,str2[0]);n=strlen(str1);for(i=0;i

付子文

C语言习题集

{ if(str1[i]==str2[j]){ tag=0;break;} tag=1;} if(tag==1){ str2[k+1]=str1[i];printf(“%c”,str2[k+1]);k++;} } printf(“n”);return 0;} 【设计型】8.4 删除字符串中指定字符

输入两个字符串 s1 和 s2,在 s1 中删除任何 s2 中有的字符。例如,s1 :“ abc123ad ”,s2 :“ a1 ”,则输出“bc23d ”。输入: 两个字符串 s1 和 s2 37

付子文

C语言习题集

输出: 删除后的字符串 s1 #include #include int main(){ char str1[100],str2[100];int i,j,n1,n2,tag=0;scanf(“%s%s”,str1,str2);n1=strlen(str1);n2=strlen(str2);for(i=0;i

付子文

C语言习题集

} printf(“n”);return 0;} 【设计型】8.5 单词有多少

用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 “stop” 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。输入: 多个字符串 输出: 单词的数量

#include #include int main(){ char str[10][20],str2[]={'s','t','o','p',''};int i,num=0;for(i=0;;i++){ scanf(“%s”,str[i]);if(strcmp(str[i],str2)==0)break;num++;} printf(“%dn”,num);39

付子文

C语言习题集

return 0;} 【设计型】8.6 在指定位置插入字符串

输入两个字符串 s1、s2 和 s1 中任意字符 k,在 s1 中的指定字符 k 第一次出现的位置处插入字符串 s2 并输出。

输入: 两个字符串 s1、s2 和 s1 中任意字符 k 输出: 插入后的字符串 s1 #include #include int main(){ char str1[15],str2[15],t;int i,n,num=0;gets(str1);gets(str2);t=getchar();n=strlen(str1);for(i=0;i

付子文

C语言习题集

for(i=0;i

付子文

C语言习题集

the product of all the letters in the name, where “A” is 1 and “Z” is 26.For instance, the group “USACO” would be 21 * 19 * 1 * 3 * 15 = 17955.If the group's number mod 47 is the same as the comet's number mod 47, then you need to tell the group to get ready!(Remember that “a mod b” is the remainder left over after dividing a by b;34 mod 10 is 4.)Write a program which reads in the name of the comet and the name of the group and figures out whether according to the above scheme the names are a match, printing “GO” if they match and “STAY” if not.The names of the groups and the comets will be a string of capital letters with no spaces or punctuation, up to 6 characters long.#include #include int main(){ char comet[10],group[10];int i,n1,n2,sum1=1,sum2=1;int yu1,yu2;scanf(“%s%s”,comet,group);n1=strlen(comet);n2=strlen(group);

付子文

C语言习题集

for(i=0;i

问题描述:

编写C程序,它能以字符串形式读入两个无符号正整数m和n,计算并输出这两个整数之和 输入格式:

输入由两行组成,第一行为无符号整数m,第二行为无符号整数n,且m和n的值最长25位 输出格式:

输出为一行,即两个无符号整数m和n之和 输入样例: 9999888888 355729288 输出样例: 10355618176 #include #include #define N 200 int main()

付子文

C语言习题集

{ char s1[N],s2[N];int a[N]= {0},b[N]= {0},L1,L2,c,k,i;scanf(“%s%s”,s1,s2);L1=strlen(s1);L2=strlen(s2);if(L1=0;i--){ a[i]+=b[i];if(a[i]>=10){ a[i]-=10;a[i-1]++;} } if(a[0]!=0){

付子文

C语言习题集

for(i=0;i<=c;i++)printf(“%d”,a[i]);} else { for(i=1;i<=c;i++)printf(“%d”,a[i]);} printf(“n”);return 0;} 【设计型】9.1 数的合并

请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。例如:当a=45,b=12,调用该函数后,c=5241。#include #include int fun(int a,int b){ int shi,qian,ge,bai,fun;shi=a/10;qian=a%10;ge=b/10;

付子文

C语言习题集

bai=b%10;fun=qian*1000+bai*100+shi*10+ge;return(fun);} int main(){ int a,b,c;scanf(“%d%d”,&a,&b);c=fun(a,b);printf(“c=%dn”,c);} 【设计型】9.2 素数的判断

请编写函数fun,其功能是判断一个整数n是否为素数,如果是素数,则返回1,否则返回0。#include int fun(int n){ int i,flag=1,fun=1;for(i=2;i

付子文

C语言习题集

break;} } if(flag==0)fun=0;else fun=1;return fun;} int main(){ int a;scanf(“%d”,&a);if(fun(a))printf(“Primen”);else printf(“Non Primen”);return 0;} 【设计型】9.3 求级数

请编写函数fun,它的功能是计算下列级数和,值由函数值返回。

例如,当n=10,x=0.3时,函数值为1.349859。

请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。

付子文

C语言习题集

#include double fun(double x,int n){ int i,jc=1;double sum=1.0,m=1.0;for(i=1;i<=n;i++){ m=m*x;jc=jc*i;sum=sum+m*1.0/jc;} return sum;} int main(){ double x;int n;scanf(“%lf%d”,&x,&n);printf(“%lfn”,fun(x,n));return 0;} 【设计型】9.4 求大于m且紧靠m的k个素数

付子文

C语言习题集

请编写一个函数,其功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

例如,若输入17 5,则应输出19 23 29 31 37 请勿改动主函数main,仅在函数fun的花括号中填入所编写的若干语句。#include void fun(int m,int k,int xx[]){ int num,i,j;num=0;for(i=m+1;;i++){ for(j=2;j=i){ xx[num]=i;num++;} if(num>=k)break;} } int main(){ int m,n,zz[1000];

付子文

C语言习题集

scanf(“%d%d”,&m,&n);fun(m,n,zz);for(m=0;m

请编写函数fun,其功能是:从字符串中删除指定的字符。同一字母的大、小写按照不同的字符处理。#include void fun(char str[] ,char ch){ int i,j;for(i=0;str[i]!=0;i++){ if(str[i]==ch){ for(j=i;str[j]!=0;j++)

str[j]=str[j+1];

i--;50

第四篇:c语言编程题答案

六、编程题参考答案

1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。#include “stdio.h” #define N 50 void main(){ float x;unsigned int s1,s2,s3,i;s1=s2=s3=0;for(i=1;i<=N;i++){ scanf(“%f”,&x);if(x<0)s1++;else if(x==0)s2++;else s3++;} printf(“负数%u个,零%u个,正数%u个n”,s1,s2,s3);}

2.编程,计算并输出方程 X2+Y2=1989 的所有整数解。#include “stdio.h” void main(){ int x,y;for(x=-45;x<=45;x++){ y=-45;while(y<=45){ if(x*x+y*y==1989)printf(“%d*%d+%d*%d=%dn”,x,x,y,y,1989);y++;} } }

3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。#include “stdio.h” void main(){ unsigned int x;printf(“请输入一个十进制正整数:”);scanf(“%u”,&x);printf(“%d=八进制数 %o=十六进制数%xn”,x,x,x);}

4.编程,找出1000以内的所有完数,并输出其因子。#include “stdio.h” void main(){ int i,j,s=1;for(i=1;i<=1000;i++,s=1){ for(j=2;j<=i/2;j++)if(i%j==0)s+=j;// 求 i的因子和

if(s==i){ printf(“%d=1”,i);// 如果i 是完数则输出其各因子

for(j=2;j<=i/2;j++)if(i%j==0)printf(“+%d”,j);printf(“n”);} } }

5.输入一个正整数,输出它的所有质数因子。#include “stdio.h” void main(){ int m,i=2;printf(“请输入一个整数:”);scanf(“%d”,&m);while(m!=1)if(m%i==0){ printf(“%d ”,i);m/=i;} else i++;printf(“n”);}

6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。#include “stdio.h” #define N 20 void main(){ int a[N],i,j;for(i=0;i

7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i

8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i

9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。#include “stdio.h” void main(){ char s1[20],s2[]=“Good morning!”;int i=0;while((s1[i++]=s2[i])!='');printf(“%sn”,s1);}

10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。#include #define f(year)year%4==0&&year%100!=0||year%400==0 void main(){ int y;printf(“请输入年份:”);scanf(“%d”,&y);if(f(y))printf(“%d 年为闰年n”,y);else printf(“%d 年不是闰年n”,y);}

11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、„、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。#include #define MAX 80 #define SWITCH 1 void main(){ char str[MAX];int i=0;printf(“请输入文本行:n”);scanf(“%s”,str);#if(SWITCH)while(str[i]!='')if(str[i]>='a'&&str[i]<='z')if(str[i]=='z')str[i]='a';else str[i]++;i++;#endif printf(“%sn”,str);}

12.编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。

#include “stdio.h” #include “math.h” void div(float** a,int n){ int i,j;float x;for(i=0;ifabs(x))x=*(*(a+i)+j);for(j=0;j

{ float b[3][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;float* c[3];for(i=0;i<3;i++)c[i]=b[i];div(c,3);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%f ”,b[i][j]);printf(“n”);} }

13.编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。#include “stdio.h” float f1(float* a,float x,int n){ int i;float t=1,y=0;for(i=0;i

14.设计一个函数,使给出一个数的原码,能得到该数的补码。

#include // 假定sizeof(int)为2;

unsigned int getbit(unsigned int value)//第1位为0表示数的原码,{ if(value>>15)return(value^0x7fff)+1;//其补码即其原码;若value else return value;//右移15位后为1,表示value是负数的原码,负数

} //的补码为原码按位取反(第1位不变)后加1。

void main(){ unsigned int y=0x800c,k;k=getbit(y);printf(“%xn”,k);}

15.编写函数,求m行、n列的二维数组全体元素中负数的个数。#include int sum(float **a,int m,int n){ int i,j;int y=0;for(i=0;i

{ float b[2][3]={{-1,2,-3},{4,-5,-6}};int i;float* c[2];for(i=0;i<2;i++)c[i]=b[i];printf(“%dn”,sum(c,2,3));} 16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。#include void fun(float *a,int n,int *k,float *x){ int i,j,y;*k=0;for(i=0;i*k){ *k=y;*x=*(a+i);} } return;} void main()// 函数引用示例

{ float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;int m;fun(c,10,&m,&t);// 若说明float *t;int *m;printf(“元素%f出现次数为%dn”,t,m);// 引用为 fun(c,10,m,t)将

} // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。

17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。#include void main(){ char *month_name[12]={“January”,“February”,“March”,“April”, “May”, “June”,“July”,“August”,“September”,“October”, “Novenber”,“December”};int n;printf(“请输入月份号:”);scanf(“%d”,&n);if(n<1||n>12)printf(“月份号输入错误!n”);else printf(“%d月的英文表示是%sn”,n,month_name[n-1]);}

18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。#include void pline(){ char ch;if((ch=getchar())!='?'){ pline();putchar(ch);} return;} void main()// 函数引用示例 { pline();printf(“n”);}

19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。#include int num(float *x,int n){ int i,k=0;for(i=1;i*(x+i-1)&&*(x+i)>*(x+i+1))k++;return k;} void main()// 函数引用示例

{ float a[10]={1,3,4,2,6,7,12,5,9,8};printf(“%dn”,num(a,10));}

20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。

#include void num(float *b,int n,float *max,float *min){ *max=*b;*min=*b;for(int i=1;i*max)*max=*(b+i);if(*(b+i)<*min)*min=*(b+i);} return;} void main()// 函数引用示例

{ float a[10]={1,3,4,2,6,7,12,5,9,8},x,y;num(a,10,&x,&y);printf(“最大值为%f,最小值为%f。n”,x,y);}

21.编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并

返回统计结果。

#include void sub(float** a,int m,int n,int *fs,int *lin,int *zs){ int i,j;*fs=*lin=*zs=0;for(i=0;i

{ float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5}, {4,7,-8},{3,4,5}},*c[5];int i,k1,k2,k3;for(i=0;i<5;i++)c[i]=b[i];sub(c,5,3,&k1,&k2,&k3);printf(“负数%d个,零%d个,正数%d个。n”,k1,k2,k3);}

22.编写函数,在给定的一行以'.'结束的字符中,找出最长的单词并输出。#include void find(char *str){ char *p1,*p2,*p3;int k1=0,k2=0;// k1为最长串的长度,初值为0。

p1=p2=p3=str;// p3指向最长串首字符,p1指向当前处理串首字符,while(*p2!='.')// p2为移动指针,*p2为空格表示查找到单词尾部。

if(*p2!=' '){ k2++;p2++;} else if(k2>k1){ p3=p1;p1=++p2;k1=k2;k2=0;} else { k2=0;p1=++p2;} for(k2=0;k2<=k1;k2++)printf(“%c”,*(p3+k2));printf(“n”);return;} void main()// 函数引用示例 { char a[40];int i=0;while((a[i++]=getchar())!='.');find(a);}

23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。#include struct student { char num[7],name[9];int score[3];};// 尾部分号不得遗漏

void print(struct student* s,int n){ int i;// 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i

printf(“%s %s %4d%4d%4dn”,(*(s+i)).num,(*(s+i)).name,(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);return;} void main(){ struct student t[4];int i;for(i=0;i<4;i++)

scanf(“%s%s%d%d%d”,&t[i].num,&t[i].name,&t[i].score[0], &t[i].score[1],&t[i].score[2]);print(t,4);} 24.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。

#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)if(ch!=' ')fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。

#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF){ if(ch>='A'&&ch<='Z')ch=ch+32;fprintf(fpd2,“%c”,ch);} fclose(fpd1);fclose(fpd2);}

27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)

if(!(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9'))fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

28.求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。

#include #include void main(){ FILE *fp;int i,j,k=2;fp=fopen(“su.dat”,“w”);fprintf(fp,“%4d%4d”,2,3);for(i=5;i<100;i=i+2){ for(j=3;j<=sqrt(i);j=j+2)if(i%j==0)break;if(j>sqrt(i)){ fprintf(fp,“%4d”,i);k++;if(k%10==0)fprintf(fp,“n”);} } fclose(fp);}

29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3 文件中,合并后仍保持字母顺序。#include #include void main(){ FILE *fp1,*fp2,*fp3;int i,j,k;char c1,c2;fp1=fopen(“a1”,“r”);fp2=fopen(“a2”,“r”);// 首先从文件a1、a2中各读入一个字符分别送入变量c1、c2,下面将作

// 循环比较,直到读到文件尾标志为止。

fp3=fopen(“a3”,“w”);c1=fgetc(fp1);c2=fgetc(fp2);do { if(c1

30.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。#include #include void main(){ FILE *fp1,*fp2;char s[9];int x,zrs=0,pjcj=0,jgrs=0;fp1=fopen(“c.dat”,“r”);fp2=fopen(“a:score60.dat”,“w”);fscanf(fp1,“%s%d”,s,&x);do { zrs++;pjcj+=x;if(x>=60){ jgrs++;fprintf(fp2,“%s %dn”,s,x);} fscanf(fp1,“%s%d”,s,&x);} while(!feof(fp1));printf(“总人数:%d平均成绩:%d 及格人数:%dn”,zrs,pjcj/zrs,jgrs);fclose(fp1);fclose(fp2);} 31.程序清单:

typedef int datatype;typedef struct node {datatype data;struct node *next;}linklist;„„

INVERT(linklist *head){linklisk *p,*q;p=head->next;if(p!=NULL){head->next=NULL;do {q=p->next;p->next=head->next;head->next=p;p=q;} while(p!=NULL);} } 32.程序清单:

PURGE(linklist *head){linklist *p,*q;q=head->next;if(q==NULL)return;p=q->next;while(p!=NULL)if(p->data==q->data){q=p->next;free(p);p=q->next;} else {q=p;p=p->next;} }

33、程序清单: #include main(){static char x[]=”computer”;char *p;for(p=x;p

34、#include #include main(){int m;char str[80],str2[80];printf(“input a string:n”);gets(str2);printf(“intput m:n);scanf(“%d”,&m);if(strlen(str2)

35、程序清单:

float search(float(pointer)[4],int n){float *pt;pt=*(pointer+n);return(pt);}

36、Main(){int score[][4]={{60,76,80,90},{45,86,57,90},{58,95,80,71},{78,50,60,85}};int(*p)[4],j,k,flag;p=score;for(j=0,j<4;j++)if(*(*(p+j)+k)<60)flag=1;if(flag==1){printf(“NO.%dis fail,svoreare:n”,j);for(k=0,;k<4;k++)printf(“%5d”, *(*(p+j)+k);

printf(“n”);} }

37、程序清单: main(){int b[16],x,k,r,I;printf(“enter a integer :n”): scanf(“%d”,&x);

printf(%6d’s binary number is:n”,x);k=-1;do {r=x%2;k++;*(b+k;x/=2;}while(x!=0 for(I=k;I>=0;I--)printf(“%d”,*(b+i)printf(“n”);} 38、float p(int n,int x){flaot t,t1,t2;if(n==0)return(1);else if(n==1)return(x);else {t1=(2*n-1)*x*(p((n-1),x));t2=(n-1)*p((n-2),x);t=(t1-t2)/n);return(t);}}

39、main(){int a[5][5],I,j,k=0,m,n;m=n/2+1;for(I=0,I=I;j--){k++;a[n-I-1][j]=k;} for(j=n-2-I;j>=I+1;j--){k++;a[I][j];}} for(I=0;I main(){int m[16],n,I,t,count=0;long a,k;printf(“result is:n”);for(n=10;n<200;n++){k=0;t=1;a=n*n;for(I=1;a!=0;I++){m[I]=a%10;a/=10;} for(;I>1;I--){k+=m[I-1]*t;t=t*10;} if(k==n*n)printf(“%2d:%10d%10dn”,++count,n,N*n);}}

41、void convert(char *a,int n){int I;if((I=n/10)!=0)convert(a+1,i);*a=n%10+’0’;}

42、#include main(){FILE *fp;char str[100],fikename[10];int I=0;if((fp=fopen(“upper.txt”,”w”))==NULL){printf(“can not open filen”);exit(0);} printf(“enter a string:n”);gets(str);while(str[I]!=’!’)

{if(str[I]>=’a’&&str[I]<=’z’)str[I]=str[I]-32;fputc(str[I],fp);I++;} fclose(fp);}

43、#include “stdio.h” FILE *fp;main(){int p=0,n=0,z=0,temp;fp=fopen(“number.dat”,”r”);if(fp==NULL)printf(“file not foundn”);else {while(!feof(fp)){fscanf(fp,”%d”,&temp);if(temp>0)p++;else if(temp<0)n++;else z++;} fclose(fp);printf(“posive:%3d,negtive:%3d,zero:%3dn:,p,n,z);} }

44、main(){unsigned rightrot(unsigned a,int n)

unsigned int m,b;

int n;

printf(“enter mand n:”);

scanf(%x,%d”,&m,&n);

printf(“m=%x,n=%dn”,m,n);

b=rightrot(m,n);

printf(“b=%xn”,b);} unsigned rightrot(unsigned a,int n){int rb;while(n0){rb=(a&1)<<(16-1);a=a>>1;a=a|rb;} return a;}

45、解:PX(X,N)=X-X2+X3-X4+„„+(-1)N-1XN =X*(1-X-X2+X3-X4+„„+(-1)N-1XN-1 =X*(1-PX(X,N-1)程序清单:

double px(double x,int n){if(n==1)return x;else return(x*(1-px(x,n-1));}

46、程序清单:

double opwer1(double x,int n){if(n==0)return 1;else return(x*power1(x,n-1);}

47、Printfn(int n){if(n=0&&n<=9)printf(“%d”,n);else {printf(“%d”,x%10);printn(x/10);} }

48、程序清单: t(int n){int m;printf(“%d”,x%10);m=x/10;if(m>0)r(m);}

49、程序清单:

int ack(int m,int n){if(m==0)return(n+1);else if(n==0)return(ack(m-1,1);else return(ack(m-1,ack(m,n-1)));} 50、Void intobin(int x){if(x/2>0)intobin(x/2);printf(“%d”,x%2);}

51、Void intobin(int x){if(x/8>0)intobin(x/8);printf(“%d”,x%8);}

52、Void intobin(int x){ if(x/16>0)intobin(x/16);printf(“%c”,(x%16>=9)?x%16+55:x%16+48);}

53、Main(){int x;printf(“enter a number:n”);

scanf(“%d”,&x);if(x!=0){if(x>0){ x=x%2;if(x)printf(“this number is a plus odd numbern”);else printf(“this number is a plus even numbern”);} else { x=x%2;if(x)printf(“this number is a plus odd numbern”);else printf(“this number is a plus even numbern”);} else printf(“this number is zeron”);}

54、Main(){int x,y,max;printf(“please input two number:n”);

scanf(“%d,%d”,&x,&y);if(a>b)max=a;else max=b;printf(“max=%d”,max);}

55、Main(){int j;for(j=999;j>=100;j--)if(555555%j==0)break;printf(“%d”,j);}

56、Main(){int I,count,j,sum;sum=count=0;for(I=0;I<10;I++){printf(“input ingter:n);scanf(“%d”,&j);if(j<0)continue;count++;sum=sum+j;} if(count)printf(“plus number:%d,average value :%.2f”,count,1.0*sum/count);else printf(“plus number:0,average value :0”);}

57、Main(){int year;printf(“%d”,&year);if(year<0)printf(“year is not a yaern”): else if((year%4==0&&year%100!=0)||year%400==0)printf(“year is leap year!n”);else printf(“year is not leap year!n”);}

58、main(){int n,j,k;printf(“input n:n”);

scanf(“%d”,&n);for(j=0;j

printf(“n”);} }

59、main(){int n,I,j,k;printf(“input n:n”);

scanf(“%d”,&n);for(I=0;I

printf(“n”);} } 60、Main(){ int I;float sum=1;for(I=2;I<=1000;I++)sum=sum+1.0/I;printf(“%f”,sum);} 61、Mypower(float x,int n){int I;float po=1;for(I=1,I<=n;I++)po=po*x;printf(“%f”,po);} 62、Main(){int I,j,max;int a[3][4]={};max=a[0][0];for(I=0;I<3;I++)for(j=0;j<4;j++)if(max char *strcat(char *str1,char *str2){}连接后字符串的头指针为str1。#include char *strcat(char *str1,char *str2){char *str1;while(*p!=’’)p++;while(*p++=*str2++);return(str1);} 64、#include char *revstr(char *s){} #include char *revstr(char *s){char *p=s,c;while(*p)p++;p--;while(s

8、略 69、略

70、#include #include main(){char str[80];printf(“input a string :n”);gets(str);insert(str);printf(“result is :%s”,str);} insert(char *s){int I;for(I=strlen(s);I>0;I--){*(s+2*I)=*(s+I);*(s+2*I-1)=’’;} } 71、Main(){int x;scanf(“%d”,&x);if(x%5==0&&x%7==0)printf(“yes”);else printf(“no”);} 72、#include main(){int day=0,buy=2;float sum=0,ave;do { sum=sum+buy*0.8;day++;buy=buy*2;}while(buy<=100);ave=sum/day;printf(“%f”,ave);} 73、#include main(){int I;for(I=1;I<100;I++)if(I*I==I||I*I%100==I)printf(%3d”,I);} 74、#include main(){char s[80]=””;int I,j;for(I=j=0;s[I]!=’’;I++)

if(c[I]!=’c’)s[j++]=s[I];

s[j]=’’;puts(s);} 79、main(){ int a[10];int i,j,m,f,h;int n,s;for(i=0;i<10;i++)a[i]=0;a[9]=1;printf(“please input n:n”);scanf(“%d”,&n);for(i=2;i<=n;i++){m=0;for(j=9;j>=0;j--){if(!(a[j]==0)){ f=a[j];h=(f*i%10+m)/10;a[j]=(f*i%10+m)%10;

m=f*i/10+h;} else { a[j]=a[j]+m;m=0;} } } i=0;while(a[i]==0)i++;printf(“%d!= ”,n);for(j=i;j<10;j++)printf(“%d”,a[j]);printf(“n”);} 80、#include #define N 100 main(){int a,j,jinwei,temp;int num1[N],num2[N];int i;printf(“PLEASE INPUT ONE NUMBER:n”);i=2;while(1){scanf(“%d”,&a);if(a==-1)break;num1[i++]=a;} num1[0]=i-1;i=2;printf(“PLEASE INPUT OTHER NUMBER:n”);while(1){scanf(“%d”,&a);if(a==-1)break;num2[i++]=a;} num2[0]=i-1;for(i=2;i<=num1[0];i++)printf(“%d”,num1[i]);printf(“+”);for(i=2;i<=num2[0];i++)printf(“%d”,num2[i]);printf(“=”);jinwei=0;if(num1[0]>num2[0]){j=num2[0];for(i=num1[0];i>=2;i--){ if(j>=2){ temp=jinwei;jinwei=(num1[i]+num2[j]+jinwei)/10;num1[i]=(num1[i]+num2[j]+temp)%10;

j--;} else { temp=jinwei;jinwei=(num1[i]+jinwei)/10;num1[i]=(num1[i]+temp)%10;

} } num1[1]=jinwei;for(i=1;i<=num1[0];i++)printf(“%d”,num1[i]);} else { j=num1[0];for(i=num2[0];i>=2;i--){ if(j>=2){temp=jinwei;jinwei=(num1[j]+num2[i]+jinwei)/10;num2[i]=(num1[j]+num2[i]+temp)%10;j--;} else {temp=jinwei;jinwei=(num2[i]+jinwei)/10;num2[i]=(num2[i]+temp)%10;} }

num2[1]=jinwei;for(i=1;i<=num2[0];i++)printf(“%d”,num2[i]);} } 81、include #define N 10 main(){int a,j,jinwei,temp;int num1[N],num2[N];int ji[2*N];int i;int k,k1,k2;int jinwei1,jiashu;for(i=0;i<2*N;i++)ji[i]=0;printf(“PLEASE INPUT ONE NUMBER:n”);i=1;while(1){scanf(“%d”,&a);if(a==-1)break;num1[i++]=a;} num1[0]=i-1;

printf(“PLEASE INPUT OTHER NUMBER:n”);i=1;while(1){scanf(“%d”,&a);if(a==-1)break;num2[i++]=a;} num2[0]=i-1;jinwei=0;k=2*N;for(i=num1[0];i>=1;i--){k1=k;k--;k2=k;jinwei=0;for(j=num2[0];j>=1;j--){ k1--;jiashu=(num1[i]*num2[j]+jinwei)%10;jinwei=(num1[i]*num2[j]+jinwei)/10;jinwei1=0;k2=k1;while(1){temp=jinwei1;jinwei1=(ji[k2]+jiashu+temp)/10;ji[k2]=(ji[k2]+temp+jiashu)%10;if(jinwei1==0)break;else {k2--;jiashu=0;} }

} k1--;temp=jinwei;jinwei=(temp+ji[k1])/10;ji[k1]=(temp+ji[k1])%10;if(jinwei!=0)ji[--k1]= jinwei;} printf(“nn”);for(i=1;i<=num1[0];i++)printf(“%d”,num1[i]);printf(“*”);

for(i=1;i<=num2[0];i++)printf(“%d”,num2[i]);printf(“=”);for(i=k1;i<2*N;i++)printf(“%d”,ji[i]);} 82、int count;int perm(char as[],char tem1[],int k,int num,int curr,int m){ int i,t;if(curr==0){if(num==0){printf(“{}”);count++;} else { count++;printf(“{”);for(i=0;i

第五篇:C语言基础题及答案

第一单元

程序设计和C语言

一、选择题

1. C语言的基本构成单位是:。A.函数 B.函数和过程

C.超文本过程

D.子程序

2. 一个C语言程序总是从 开始执行。A.主过程 B.主函数 C.子程序 D.主程序 3. C语言的程序一行写不下时,可以。

A.用逗号换行 B.用分号换行 C.在任意一空格处换行 D.用回车符换行 4. 以下叙述不正确的是:。

A.在C程序中,语句之间必须要用分号“;”分隔

B.若a是实型变量,C程序中a=10是正确的,因为实型变量中允许存放整型数 C.在C程序中,无论是整数还是实数都能正确无误地表示 D.在C程序中,%是只能用于整数运算的运算符 5. 以下不正确的C语言标识符是。

A.ABC B.abc C.a_bc D.ab.c 6. 下列字符串是标识符的是:。A._HJ

B.9_student

C.long

D.LINE 1 7. 以下说法中正确的是:。

A.C语言程序总是从第一个定义的函数开始执行

B.在C语言程序中,要调用的函数必须放在main()函数中定义 C.C语言程序总是从main()函数开始执行

D.C语言程序中的main()函数必须放在程序的开始部分 8. 不合法的常量是:。A.„2‟ B.“

C.„3‟

D.„483‟

9. 已知各变量的类型说明如下,则以下不符合C语言语法的表达式是:。

int k,a,b;unsigned long w=5;double x=1.422;A.x%(-3)B.w+=-2 10.

11. 若有定义:int a=7;float x=2.5;y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是:。

C.k=(a=2,b=3,a+b)

D.a+=a=+(b=4)*(a=3)在C语言中,字符型数据在内存中以 形式存放。

A.原码 B.BCD码 C.反码 D.ASCII码 A.2.500000 12. B.2.750000 C.3.500000 D.0.000000 设有说明:char w;int x;float y;double z;

B.char

C.int

D.double 则表达式w*x+z-y值的数据类型为:。A.float 13. 14. 以下 是不正确的转义字符。

若x为int型变量,则执行以下语句后,x的值为。x=6;x+=x-=x*x;B.-60

C.60 D.-24 字符串“"ABC”“的长度是。A.'' B.'' C.'081' D.'' A.36 15.

二、填空题 A.11 B.7 C.5 D.3 1. 一个函数由两部分组成,它们是 和。2. 一个C源程序至少包含一个,即。3. 设int a=12;则表达式a/=a+a的值是。

4. 表达式x=(a=3,6*a)和表达式x=a=3,6*a分别是 表达式和 表达式,两个表达式执行完的结果分别是 和,x值分别是 和。

5. 在C语言中,实数有两种表示形式,即 和。6. 在C语言中,运算符的优先级最小的是 运算符。

第二单元

顺序程序设计

一、选择题

1. 若m为float型变量,则执行以下语句后的输出为。

m=1234.123;printf(”%-8.3fn“,m);printf(”%10.3fn“,m);A.1234.123 B.1234.123 C.1234.123 D.-1234.123 1234.123 1234.123 1234.123 001234.123 2. 若x,y,z均为int型变量,则执行以下语句后的输出为。

x=(y=(z=10)+5)-5;printf(”x=%d,y=%d,z=%dn“,x,y,z);y=(z=x=0,x+10);printf(”x=%d,y=%d,z=%dn“,x,y,z);

B.X=10,Y=10,Z=10 X=0,Y=10,Z=10 D.X=10,Y=10,Z=10

X=0,Y=10,Z=0

A.X=10,Y=15,Z=10 X=0,Y=10,Z=0 X=10,Y=10,Z=0 C.X=10,Y=15,Z=10

3. 若x是int型变量,y是float型变量,所用的scanf调用语句格式为: scanf(”x=%d,y=%f“,&x,&y);则为了将数据10和66.6分别赋给x和y,正确的输入应是:。A.x=10,y=66.6<回车> B.10 66.6<回车> C.10<回车>66.6<回车> D.x=10<回车>y=66.6<回车> 4. 已知有变量定义:int a;char c;用scanf(“%d%c”,&a,&c);语句给a和c输入数据,使30存入a,字符‘b’存入c,则正确的输入是:。A.30’b’<回车> B.30 b<回车> C.30<回车>b<回车> D.30b<回车> 5. 已知有变量定义:double x;long a;要给a和x输入数据,正确的输入语句是。若要输出a和x的值,正确的输出语句。

A.scanf(“%d%f”,&a,&x);B.scanf(“%ld%f”,&a,&x);printf(“%d,%f”,a,x);printf(“%ld,%f”,a,x);C.scanf(“%ld%lf”,&a,&x);D.scanf(“%ld%lf”,&a,&x);printf(“%ld,%lf”,a,x);printf(“%ld,%f”,a,x);6. 若有定义double x=1,y;则以下的语句执行的结果是。

y=x+3/2;printf(“%f”,y);A.2.500000 B.2.5 C.2.000000 D.2 7. 若a为整型变量,则以下语句。a=-2L;printf(”%dn“,a);A.赋值不合法 B.输出为不确定的值

二、读程序写结果

1. main()

{ int x,y;scanf(”%2d%*2d%ld“,&x,&y);printf(”%dn“,x+y);

C.输出值为-2 D.输出值为2 } 执行时输入:1234567 2. main(){ int x=4,y=0,z;x*=3+2;printf(”%d“,x);x*=y=z=4;printf(”%d“,x);} 3. main(){ float x;int i;x=3.6;i=(int)x;printf(”x=%f,i=%d“,x,i);} 4. main(){ int a=2;a%=4-1;printf(”%d, “,a);a+=a*=a-=a*=3;printf(”%d“,a);} 5. main(){ int x=02,y=3;printf(”x=%d,y=%%d“,x,y);} 6. main(){ char c1=‟6‟,c2=‟0‟;printf(”%c,%c,%d,%dn“,c1,c2,c1-c2,c1+c2);} 7. main(){ int x,y,z;x=y=1;z=++x-1;printf(”%d,%dn“,x,z);z+=y++;printf(”%d,%dn“,y,z);}

三、填空题

1. 在C语言中,字符型数据和整型数据之间可以通用,一个字符数据既能以 输出,也能以 输出。

2. ”%-ms“表示如果串长小于m,则在m列范围内,字符串向 靠,补空格。3. printf函数的“格式控制”包括两部分,它们是 和。4. 编写程序求矩形的面积和周长,矩形的长和宽由键盘输入,请填空。

#include void main(){ float l,w;

printf(“please input length and width of the rectanglen”);scanf(“%f%f”,&l,&w);area=;girth=;

} 整数存入n,如:字符‘0’所对应的整数就是0。请填空。void main(){ char c;

};printf(“please input a char:n”);c=;n=;printf(,c,n);5. 编写程序,输入一个数字字符(‘0’~‘9’)存入变量c,把c转换成它所对应的第三单元

选择程序设计

一、选择题

1. 若x=0,y=3,z=3,以下表达式值为0的是 A.!x B.x

w=3;z=7;x=10;printf(”%dn“,x>10?x+100:x-10);printf(”%dn“,w++||z++);printf(”%dn“,!w>z);printf(”%dn“,w&&z);A.0 B.1 C.0 D.0 1 1 1 1 1 1 0 0 1 1 1 0 5. 分析以下程序, 下列说法正确的是。

main(){ int x=5,a=0,b=0;if(x=a+b)printf(”* * * *n“);else printf(”# # # #n“);} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 6. 分析以下程序, 下列说法正确的是。

main(){ int x=5,a=0,b=3;if(x=a+b)printf(”* * * *n“);else printf(”# # # #n“);

} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 7. 分析以下程序, 下列说法正确的是。

main(){ int x=0,a=0,b=0;if(x=a+b)printf(”* * * *n“);else printf(”# # # #n“);

} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 8. 分析以下程序, 下列说法正确的是。

main(){ int x=0,a=0,b=0;if(x==a+b)printf(”* * * *n“);else printf(”# # # #n“);

} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 1. include main(){ int a=-1,b=4,k;k=(a++<=0)&&(!(b--<=0));printf(”%d,%d,%dn“,k,a,b);} 2. main(){ int x=4,y=0,z;x*=3+2;printf(”%d“,x);x*=(y==(z=4));printf(”%d“,x);} 3. main(){ int x,y,z;x=3;y=z=4;printf(”%d“,(x>=z>=x)?1:0);printf(”%d“,z>=y && y>=x);} 4. main(){ int x=1,y=1,z=10;if(z<0)if(y>0)x=3;

二、读程序写结果 else x=5;printf(”%dt“,x);if(z=y<0)x=3;else if(y==0)x=5;else x=7;printf(”%dt“,x);printf(”%dt“,z);} 5. main(){ char x=‘B’;switch(x){ case ‘A’: printf(“It is A.”);case ‘B’: printf(“It is B.”);case ‘C’: printf(“It is C.”);default: printf(“other.”);} } 6. main(){ int x=1,y=0,a=0,b=0;switch(x){ case 1: switch(y){ case 0: a++;break;case 1: b++;break;} case 2: a++;b++;break;case 3: a++;b++;} printf(”a=%d,b=%dn“,a,b);}

三、填空题

1. 若a=5,b=6,c=7,d=8,则表达式d=a/2&&b==c||!a的值为 2. 定义 int x=10,y,z;执行y=z=x;x=y==z后,变量x的值为。3. 分段函数:输入x,计算y值,输出y,其中: x<0 y=2x+3 x=0,y=0 x>0,y=(x+7)/3 #include main(){ int x,y;scanf(”%d“,&x);if(x<0)(1);(2)y=0;(3)y=(x+7)/3;printf(“%d”,y);} 4. 由键盘输入三个数,计算以这三个数为边长的三角形面积。(1)main(){(2);printf(”Please enter 3 reals:n“);scanf(”%f%f%f“,&a,&b,&c);if((3)){ s=(a+b+c)*0.5;s1=s*(s-a)*(s-b)*(s-c);s=(4);printf(”nArea of the triangle is %fn“,s);}(5)printf(”It is not triangle!n“);} 5. 有一方程ax+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。

(1)a=0,b≠0(2)a=0,b=0,c=0(3)a=0,b=0,c≠0(4)a≠0,b-4ac≥0(5)a≠0,b-4ac≤0

222#include ”math.h“ main(){ float a,b,c,d,pr,pi,x1,x2;scanf(”%f%f%f“,&a,&b,&c);printf(”a=%f,b=%f,c=%fn“,a,b,c);if(a==0){ if((1))printf(”only one solution x=%fn“,-c/b);else if((2))printf(”no solutionn“);else printf(”x is any valuen“);} else { d=b*b-4*a*c;if((3)){ x1=(-b+sqrt(d))/(4);x2=(-b-sqrt(d))/(5);printf(”x1=%6.2f, x2=%6.2fn“,x1,x2);} else { pr=-b/(2*a);(6);printf(”x1=%6.2f +%6.2fin“,pr,pi);printf(”x2=%6.2f-%6.2fin“,pr,pi);} } } 6. 投票表决器:

– 输入Y、y,打印agree – 输入N、n,打印disagree – 输入其他,打印lose main(){ char c;scanf(”%c“,&c);(1){

} case ‘Y’: case ‘y’: printf(“agree”);(2);case ‘N’: case ‘n’: printf(“disagree”);(3);(4):printf(“lose”);

第四单元

循环程序设计

一、选择题

1. 程序段如下:则以下说法中正确的是:。

int k=5;do{ k--;}while(k<=0);A.循环执行5次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 2. 设i和x都是int类型,则for循环语句。

for(i=0,x=0;i<=9&&x!=876;i++)scanf(”%d“,&x);A.最多执行10次 B.最多执行9次 C.是无限循环 D.循环体一次也不执行 3. 下述for循环语句。

int i,k;for(i=0,k=-1;k=1;i++,k++)printf(”* * * *“);A.判断循环结束的条件非法 B.是无限循环 C.只循环一次 D.一次也不循环 4. 程序段如下:则以下说法中正确的是:。

int k=-20;while(k=0)k=k+1;A.while循环执行20次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 5. 下列程序段执行后k值为。

int k=0,i,j;for(i=0;i<5;i++)for(j=0;j<3;j++)k=k+1;A.15 B.3 C.5 D.8 6. 程序段如下:则以下说法中不正确的是:。

#include main(){ int k=2,;while(k<7){ if(k%2){k=k+3;printf(“k=%dn”,k);continue;} k=k+1;printf(“k=%dn”,k);} } A.k=k+3;执行一次 B.k=k+1;执行2次 C.执行后k值为7 D.循环体只执行一次 1. main(){ int num=0;while(num<=2){ num++;printf(”%dn“,num);} } 2. main(){ int i=0,s=0;do { s+=i*2+1;printf(”i=%d,s=%dn“,i,s);i++;} while(s<10);} 3. #include main(){ int i,m=1;for(i=5;i>=1;i--){ m=(m+1)*2;printf(”m=%dn“,m);} } 4. 指出下面三个程序的功能,当输入为:”quert?“时,它们的执行结果是什么? ⑴ #include main(){ char c;c=getchar();while(c!='?'){ putchar(c);c=getchar();} } ⑵ #include main()

二、读程序写结果 { char c;while((c=getchar())!='?')putchar(++c);} ⑶ #include main(){ while(putchar(getchar())!='?');} 5. #include main(){ int i;for(i=1;i<=5;i++){ if(i%2)putchar(‘<’);else continue;putchar(‘>’);} putchar(‘#’);} 6. main(){ int a,b;for(a=1,b=1;a<=100;a++){ if(b>10)break;if(b%3==1){ b+=3;continue;} } printf(”a=%dn“,a);} 7. main()

{ int i=1;while(i<=15)if(++i%3!=2)continue;else printf(”%d “,i);printf(”n“);

} 8. #include void main(){ int i,j;for(i=0;i<=3;i++){ for(j=0;j<=i;j++)printf(”(%d,%d),“,i,j);printf(”n“);} } 9. main()

{ int i,j,k;

char space=' ';for(i=0;i<=5;i++){ for(j=1;j<=i;j++)printf(”%c“,space);for(k=0;k<=5;k++)printf(”%c“,'*');printf(”n“);

10.} #include { int i,j,k=0;for(j=11;j<=30;j++){ if(k%10==0)printf(”n“);for(i=2;i

if(i>=j-1)

{ printf(”%dt“,j);k++;}

三、填空题

1. break语句只能用于 语句和 语句中。2. 计算2+4+6+8+...+98+100 main(){ int i,(1);for(i=2;i<=100;(2))s+=i;} 3. 求满足下式的 x,y,z } } } main()

X Y Z + Y Z Z ────── 5 3 2

main(){ int x,y,z,i,result=532;for(x=1;(1);x++)for(y=1;(2);y++)for((3);(4);z++){ i=(5)+(100*y+10*z+z);if(i==result)printf(”x=%d, y=%d, z=%dn“,x,y,z);} } 4. 求 Sn=a+aa+aaa+...+aa...a之值,其中 a是一个数字。例如 2+ 22 +222+2222(此时n=4),n由键盘输入。

main(){ int a,n,count=1,Sn=0,Tn=0;printf(”请输入 a 和 n 的值:n“);scanf(”%d,%d“,&a,&n);while(count<=(1)){ Tn=(2);Sn=(3);a=a*10;(4);} printf(”a+aa+aaa+...=%dn“,Sn);} 5. 一球从 100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?

main(){ float Sn=100.0,hn=Sn/2;int n;for(n=2;n<=(1);n++){ Sn=(2);hn=(3);} printf(”第10次落地时共经过%f米n“,Sn);printf(”第10次反弹%f米n“,hn);} 6. 打印出以下图形 * * * * * * * * * * * * * * * * * * * * * * * * * main(){ int i,j,k;for(i=0;i<=(1);i++){ for(j=0;j<=2-i;j++)printf(” “);for(k=0;k<=(2);k++)printf(”*“);(3)} for(i=0;i<=2;i++){ for(j=0;j<=(4);j++)printf(” “);for(k=0;k<=(5);k++)printf(”*“);printf(”n“);} } 7. 准备客票。某铁路线上共10个车站,问需要准备几种车票? main(){ int i,j,station,total=0;printf(”输入车站数:“);scanf(”%d“,&station);for(i=1;i<(1);i++)for(j=(2);j<=station;j++)total=(3);printf(”车票种类=%d n“,total);}

第五单元

一、选择题

1. 以下关于数组的描述正确的是。

A.数组的大小是固定的,但可以有不同的类型的数组元素。B.数组的大小是可变的,但所有数组元素的类型必须相同。C.数组的大小是固定的,但所有数组元素的类型必须相同。D.数组的大小是可变的,但可以有不同的类型的数组元素。2. 在定义int a[10];之后,对a的引用正确的是。

A.a[10] B.a[6.3] C.a(6)D.a[10-10] 3. 以下能正确定义数组并正确赋初值的语句是。

A.int n=5,b[n][n];B.int a[1][2]={{1},{3}};C.int c[2][]={{1,2},{3,4}} D.int a[3][2]={{1,2},{3,4}} 4. 以下不能正确赋值的是。

A.char s1[10];s1=”test“;B.char s2[]={‟t‟,‟e‟,‟s‟,‟t‟} C.char s3[20]= ”test“;D.char s4[4]={ ‟t‟,‟e‟,‟s‟,‟t‟} 5. 下面程序段运行时输出结果是。

char s[18]= ”a book!“;printf(”%.4s“,s);A.a book!B.a book!C.a bo D.格式描述不正确,没有确定输出 6. 下面程序段运行时输出结果是。

char s[12]= ”A book“;printf(”%dn“,strlen(s));A.12 B.8 C.7 D.6 7. 在执行int a[][3]={1,2,3,4,5,6};语句后,a[1][0]的值是。A.4 B.1 C.2 D.5

二、读程序写结果

1. #include void main(){

} int a[8]={1,0,1,0,1,0,1,0},i;for(i=2;i<8;i++)a[i]+= a[i-1] + a[i-2];printf(“%5d”,a[i]);for(i=0;i<8;i++)2. #include void main(){ float b[6]={1.1,2.2,3.3,4.4,5.5,6.6},t;int i;t=b[0];for(i=0;i<5;i++)b[i]=b[i+1];b[5]=t;for(i=0;i<6;i++)

printf(“%6.2f”,b[i]);} void main(){ int p[7]={11,13,14,15,16,17,18},i=0,k=0;while(i<7 && p[i]%2){ k=k+p[i];i++;} printf(”k=%dn“,k);} 4. void main(){ int a[3][3]={1,3,5,7,9,11,13,15,17};int sum=0,i,j;for(i=0;i<3;i++)for(j=0;j<3;j++){ a[i][j]=i+j;if(i==j)

sum=sum+a[i][j];} printf(”sum=%d“,sum);}

5. void main(){ int a[4][4],i,j,k;for(i=0;i<4;i++)for(j=0;j<4;j++)a[i][j]=i-j;for(i=0;i<4;i++){ for(j=0;j<=i;j++)3. #include printf(”%4d“,a[i][j]);printf(”n“);} }

6. #include main(){ int i,s;char s1[100],s2[100];printf(”input string1:n“);gets(s1);printf(”input string2:n“);gets(s2);i=0;while((s1[i]==s2[i])&&(s1[i]!=''))i++;if((s1[i]=='')&&(s2[i]==''))s=0;else s=s1[i]-s2[i];printf(”%dn“,s);} 输入数据 aid and

7. void main(){ } 8. #inlcude #include void main(){

char str[10][80],c[80];int i;for(i=0;i<10;i++)gets(str[i]);strcpy(c,str[0]);for(i=1;i<10;i++)if(strlen(c)

三、填空题

1. 构成数组的各个元素必须具有相同的。

2. 下面的程序是输出数组中最大元素的下标(p表示最大元素的下标)。

void main(){

} 3. 输入20个数,输出他们的平均值,输出与平均值之差的绝对值最小的数组元素。

#include void main(){

float a[20],pjz=0,s,t;int i,k;for(i=0;i<20;i++){ scanf(“%f”,&a[i]);pjz+= ;

} s=fabs(a[0]-pjz);t=a[0];for(i=1;i<20;i++)if(fabs(a[i]-pjz)

}

int s[]={1,-3,0,-9,8,5,-20,3};for(i=0,p=0;i<8;i++)if(s[i]>s[p]);

4. 输出行、列号之和为3的数组元素。

main(){ char ss[4][3]={'A','a','f','c','B','d','e','b', 'C','g','f','D'};int x,y,z;for(x=0;(1);x++)for(y=0;(2);y++){ z=x+y;if((3))printf(”%cn“,ss[x][y]);} } 5. 将一个数组中的元素按逆序重新存放。例如原来的顺序为:8,5,7,4,1, 要求改为:1,4,7,5,8。#define N 7 void main(){ int a[N]={12,9,16,5,7,2,1},k,s;printf(”n初始数组:n“);for(k=0;k

#include void main(){ /*str1表示原来的一行文字,str2表示删除指定字符后的文字*/ char str1[100],str2[100];char ch;int i=0,k=0;printf(“please input an sentence:n”);gets(str1);scanf(”%c“,&ch);for(i=0;(2);i++)if(str1[i]!=ch){ str2[(3)]=str1[i];k++;} str2[(4)]='';printf(”n%sn“,str2);} 7. 找出10个字符串中的最大者。

#include #include #define N 10 void main(){ char str[20],s[N][20];int i;for(i=0;i0)strcpy(str,s[i]);printf(”The longest string is : n%sn“,str);}

8. 某人有四张 3分的邮票和三张 5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?

main(){ static int a[27];int i,j,k,s,n=0;for(i=0;i<=4;i++)for(j=0;j<=3;j++){ s=(1);for(k=0;a[k];k++)if(s==a[k])(2);if((3)){ a[k]=s;n++;} } printf(”%d kind:“,n);for(k=0;(4);k++)printf(”%3d“,a[k]);} 9. 求矩阵的马鞍点。马鞍点即它的值在行中最大,在它所在的列中最小。#define N 10 #define M 10 main(){ int i,j,k,m,n,flag1,flag2;int a[N][M],max;printf(”n输入行数 n:“);scanf(”%d“,&n);printf(”n输入列数 m:“);scanf(”%d“,&m);for(i=0;imax)max=a[i][j];for(j=0;j

if((4))flag1=0;

if(flag1)

{ printf(”第%d行, 第%d列的 %d是鞍点n“,(5));

flag2=1;

} } } } if(!flag2)printf(”n矩阵中无鞍点!n“);}

第六单元

一、选择题

1. 在C语言中,当函数调用时。

A.实参和形参各占一个独立的存储单元 B.实参和形参共用存储单元

C.可以由用户指定实参和形参是否共用存储单元 D.由系统自动确定实参和形参是否共用存储单元 2. 以下函数调用语句中实参的个数为。

exce((v1,v2),(v3,v4,v5),v6);A.3 B.4

C.5

D.6 3. 如果在一个函数的复合语句中定义了一个变量,则该变量。

A.只在该符合语句中有效,在该符合语句外无效

B.在该函数中任何位置都有效 C.在本程序的原文件范围内均有效 D.此定义方法错误,其变量为非法变量

A.float型 B.int型 C.long型 D.double型 5. C语言规定,函数返回值的类型是由。

A.return语句中的表达式类型所决定 B.调用该函数时的主调函数类型所决定 C.调用该函数时系统临时决定

D.在定义该函数时所指定的函数类型决定 6. 在C语言程序中,以下描述正确的是。

A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和函数的调用均可以嵌套 8.以下程序的运行结果是:

#include void sub(int s[],int y){ static int t=3; y=s[t];t--; } main(){ int a[]={1,2,3,4},i,x=0; for(i=0;i<4;i++){ sub(a,x);printf("%d",x);} printf("\n"); } A)1234

9.以下程序的运行结果是: main(){ int w=5;fun(w);printf("\n");} fun(int k){ if(k>O)fun(k-1); printf(" %d",k); B)432l

C)0000

D)4444 4. C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。} A)5 4 3 2 l B)0 1 2 3 4 5

C)1 2 3 4 5

D)5 4 3 2 1 0 10.以下所列的各函数首部中,正确的是_______。A)void play(vat a:Integer,var b:Integer)C)void play(int a,int b)A)数组的长度

B)void play(int a,b)

D)Sub play(a as integer,b as integer)11.当调用函数时,实参是一个数组名,则向函数传送的是_______。

B)数组的首地址 D)数组每个元素中的值 C)数组每一个元素的地址

12.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_______。A)地址传递

B)单向值传递

C)由实参传给形,再由形参传回实参 D)传递方式由用户指定

13.以下函数值的类型是_______。

fun(float x){ float y; y=3*x-4; return y; } A)int B)不确定

C)void

D)float

二、读程序写结果 1. fun1(int a,int b){ int c;a+=a;b+=b;c=fun2(a,b);return c*c;} fun2(int a,int b){ int c;c=a*b%3;return c;} main(){ int x=11,y=19;printf(”The final result is:%dn“,fun1(x,y));} 2. int x;main(){ x=5;cude();printf(”%dn“,x);} cude(){ x=x*x*x;} 3. #include long fun(int n){ long s;if(n==1||n==2)s=2;else s=n+fun(n-1);return s;} main()} 4. main(){ int i;for(i=0;i<2;i++)add();} add(){ int x=0;static int y=0;printf(”%d,%dn“,x,y);x++;y=y+2;}

5. main(){ int k=4,m=1,p;p=func(k,m);printf(”%d, “,p);p=func(k,m);printf(”%dn“,p);} func(int a,int b){ static int m=0,i=2;i+=m+1;m=i+a+b;return m;}

6.int t(int x,int y,int cp,int dp){ cp=x*x+y*y; dp=x*x-y*y; { printf(”%ldn“,fun(4));} main(){ int a=4,b=3,c=5,d=6; t(a,b,c,d);

printf("%d%dn",c,d); }

7.fun(int x,int y,int z){z=x*x+y*y;} main(){ int a=31;

fun(5,2,a); printf("%d",a); } 8.int a,b;

void fun(){ a=100;b=200; } main(){ int a=5,b=7; fun();

printf("%d%d\n",a,b); }

9.int x=3;

main(){int i;

for(i=1;i

printf("%d",x); }

10.int func(int a,intb){ return(a+b); } main(){int x=2,y=5,z=8,r; r=func(func(x,y),z); printf("%d\n",r); }

11.long fib(int n){ if(n>2)return(fib(n-1)+fib(n-2)); else return(2); } main(){ printf("%ldn",fib(3)};}

三、填空题

1. 编写一个验证正整数M是否为素数的函数,若M是素数则把1送到T中,否则零送到T中。在主函数中读入N个正整数,每读入一个则调用函数判断它是否为素数,在主函数中将T的值累加到另一个变量中。用此方法可求出N个数中素数的个数。请填空完成上述功能的程序。#include #include int prime(int m){ int i,pp=1;for(i=2;(1);i++)if(m % i==0)pp=0;if(m==1)(2)return(pp);} main(){ int a[20],i,sum=0;for(i=0;i<10;i++){ scanf(”%d“,&a[i]);sum=(3)} printf(”the number of prime data is:%d“,sum);}

2. 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。请填空完成上述功能的程序。#include #include void fltj(char str[],int a[]){ int ll,i;ll=(1)for(i=0;i

1 Pnx((2n1)xp(x)(n1)p(x))/nn1n2

#include main(){ float pn();float x,lyd;int n;scanf(”%d%f“,&n,&x);lyd=(1)printf(”pn=%f",lyd);} float pn(float x,int n){ float temp;if(n==0)temp=(2)else if(n==1)temp=(3)else temp=(4)return(temp);} 4.以下函数的功能是:求x的y次方,请填空。

double fun(double x,int y){int i; double z:

for(i=1,z=x;i

(n0)(n1)

(n1)

第一单元

程序设计和C语言

一、选择题

1.A

2.B

3.C

4.C

5.D

6.A 12.D

13.BC

14..B

15.B

二、填空

1. 函数首部、函数体 2. 主函数、main函数 3. 0 4. 赋值、逗号、18、18、18、3 5. 浮点型、指数型 6. 逗号

第二单元

顺序程序设计

一、选择题 1.C 2.A 3.A

4.D

5.C

6.C 7.C

二、读程序写结果

1. 17 2. 2080 3. X=3.600000,i=3 4. 2,0 5. X=2,y=%d

6. 6,0,6,102 7. 2,1 2,2

三、填空

1. 字符

整数 2. 左

3. 格式说明

普通字符

4.(1)float area,girth;(2)l*w

7.C

8.D 9.A

10.D

11.A(3)2*(l+w)(4)printf(“area=%f,girth=%fn”,area,girth);5.(1)#include “stdio.h”

(2)int n(3)getchar()(4)c-„0‟

或者c-48(5)“%c,%dn”

第三单元

分支程序设计

一、选择题 1.C 2.EB

3.D

4.C

5.D

6.C 7.D 8.C

二、读程序写结果

1. 1,0,3 2. 200 3. 01 4. 1 7 0 5. It is B.It is C.other.6. a=2,b=1

三、填空

1. 0 2. 1 3.(1)y=2*x+3(2)else if(x==0)(3)else 4.(1)#include “math.h”

(2)float a,b,c,s,s1(3)(a+b>c)&&(b+c>a)&&(c+a>b)(4)sqrt(s1)(5)else 5.(1)b!=0(2)c!=0(3)d>=0(4)(2*a)(5)(2*a)(6)pi=sqrt(-d)/(2*a)6.(1)switch(c)(2)break(3)break(4)default

第四单元

循环程序设计

一、选择题

1. D 2. A

.3. B

.4. C 5. A 6. D

二、读程序写结果

1. 1 2

2. i=0,s=1 i=1,s=4 i=2,s=9 i=3,s=16 3. m=4 m=10 m=22 m=46 m=94 4.(1)quert(2)rvfsu(3)quert? 5. <><><># 6. a=5 7. 2 5 8 11 14 8.(0,0),(1,0),(1,1),(2,0),(2,1),(2,2),(3,0),(3,1),(3,2),(3,3), 9.

****** ******

****** ****** ******

****** 10. 11 13 17 19

三、填空

1. switch、循环 2.(1)s=0 29(2)i=i+2 3.(1)x<=9(2)y<=9(3)z=0(4)z<=9(5)x*100+y*10+z 4.(1)n(2)Tn+a(3)Sn+Tn(4)count++ 5.(1)10(2)Sn+hn*2(3)hn/2 6.(1)3(2)2*i(3)printf(“n”);(4)i(5)4-2*i 7.(1)station(2)i+1(3)total+2

第五单元

数组

一、选择题

1.C

2.D

3.D

4.A

5.C

二、读程序写结果

1.0

2.2.20 3.30 4.40 5.50 3. k=24 4. sum=6 5.

0

0

0

0 6.-5 7. “BBB”

8. 没有输入数据

三、填空

1. 类型

2.(1)int i,p(2)p=i(3)printf(“%dn”,p);3.(1)#include “math.h”

6.D

7.A 5 6.60 1.10 20

(2)a[i]/20(3)s=fabs(a[i]-pjz);(4)printf(“%f,%fn”,pjz,t);4.

(1)x<4(2)y<3(3)z==3 5.(1)N/2(2)a[N-1-k](3)a[N-1-k](4)k

第六单元

函数

一、选择题

1.A

2.A

3.A

4.B

二、读程序写结果

1. The final result is:4 2. 125 3. 9 4. 0,0 0,2 5. 8, 17 6. 5 6 7. 31 8. 57 9. 2 6 10. 15 11.4

三、填空

5.D

6.B 8.C 9.B 11.B 13.A

10.C 12.B 1.(1)i

(1)strlen(str);(2)str[i]>=‟A‟ && str[i]<=‟Z‟ || str[i]>=‟a‟ && str[i]<=‟z‟(3)str[i]>=‟0‟ && str[i]<=‟9‟(4)str[i]= =‟ ‟ 3.(1)pn(x,n);(2)1;(3)x;(4)((2*n-1)*x*pn(x,n-1)-(n-1)*pn(x,n-2))/n;4.x

下载中国石油大学C语言上机题答案(2013版)答案 最全最详细word格式文档
下载中国石油大学C语言上机题答案(2013版)答案 最全最详细.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言实验报告题及答案

    《C程序设计实验》 实验一 C程序开发环境(2学时) 1.实验目的 熟悉C语言的集成开发环境,了解菜单的使用方法;掌握C语言程序上机的编辑、编译、连接、运行的基本步骤;了解C语言程序......

    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]!=......

    2018年3月二级C语言上机题库及答案

    程序填空题: 给定程序中,函数fun的作用是: 注意:部分源程序在文件BLANK.C中。 不得增行或删行,也不得更改程序的结构! 源程序如下 答案: x[i]......

    c语言上机实习编程题

    班级:姓名:学号: 第一题 一、题目要求(11题) #include #include #defineN16 typedefstruct {charnum[10];ints; } STREC; STRECfun( STREC*a, char *b ) { int i; STREC str={"......

    中国石油大学继续教育答案汇总范文合集

    创造型人才开发 一阶段 1.第1题 单选题人类对资源的开发经历了( ) A、自然资源—人力资源—心理资源阶段; B、自然资源—物质资源—人力资源阶段。 标准答案:A 您的答案: 题目分......

    中国石油大学《管理信息系统》答案

    《管理信息系统》在线考试(开卷)试题 一、名词解释(每题6分,共30分) 1.业务流程图 业务流程图(TFD)是一种描述管理系统内各单位、人员之间的业务关系,作业顺序和管理信息流向的图......

    中国石油大学(华东)-C语言学习心得

    C语言学习心得 开课之前信息的收集:在高中的时候就听过程序员这个职业,当时也只知道这些人是写程序的,然而程序是什么具体我也不知道。终于上大学了,我看到自己的课表上有C程序......

    C语言作业答案

    厦门大学公共课 《C语言程序设计》 教材习题答案第三章 结构化程序设计 一、思考题 1、顺序结构的语句有哪些? 表达式语句,空语句,复合语句 2、从程序控制的角度看,复合语句是......