北工大C语言题库(完美版)

更新时间:2023-09-11 16:25:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 求两个数的和与差

输入整数a和 b,计算并输出a、b的和与差. #include int main() {

int a,b,sum,diff;

scanf(\sum=a+b; diff=a-b;

printf(\

printf(\}

2 求平方根

输入 1 个实数 X,计算井输出其平方根(保留1 位小数).(例:输入 17; 输出 The square root of 17.0 is 4.1)

#include #include int main () {

double x,root; scanf(\root=sqrt(x);

printf(\}

3 华氏温度转换为摄氏温度

输入华氏温度 f,计算并输出相应的摄氏温度 c(保留 2 位小数). c = 5/9(f-32).( 例z 括号内是说明输入 17.2 (华氏温度)输出Thc temprature is -8.22) #include int main() { double f,c; scanf(\c=5.0/9.0*(f-32.0);

printf(\}

4 计算旅途时间

输入 2 个整数 time1 和 time2. 表示火 车的出发时间和到达时间,计算并输出旅途 时间.有效的时间范围是 0000 到 2359, 不需要考虑出发时间晚于到达时间的情况. #include int main() {

int time1,time2,hours,mins; scanf(\time1=time1/100*60+time1 % 100; time2= time2/100*60+time20; hours=(time2-time1)/60; mins=(time2-time1)`;

printf(\}

5 大写字母转换成小写字母

输入一个大写英文字母,输出相应的小写 字母.例:输入 G 输出 g #include int main () {

char ch;

scanf(\ch=ch-'A'+'a';

printf(\}

6 显示两级成绩

输入一个正整数 repeat (0 int main() {

int mark;

scanf(\if(mark>59) printf(\else

printf(\}

7 找最小值

#include int main() {

int a,b,c,d,min;

scanf(\min=a;

if(min>b) min=b; if(min>c) min=c; if(min>d) min=d;

printf(\}

8求三角形面积和周长

输入三角形的三条边 a,b,c. 如果能构成 一个三角形,输出面积 area 和周长 perimete 保留 2 位小数);否则,输出(These sides do not correspond to a valid triangle\在一个 三角形中,任意两边之和大于第三边. #include #include int main() {

float a,b,c,area,perimeter,s; scanf (\if(a+b>c&&a-b

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c)); perimeter=a+b+c;

printf (\

printf (\} else

printf (\}

9 判断数的符号

输入整数 x,若x 大于 0,y=l;若x 等于0,y=0;否则,y=-I ,最后输出y #include int main() {

int x,y;

scanf(\if(x<0) y=-1; else if(x>0) y=1; else y=0;

printf(\}

10 显示水果价格

以下 4 种水果的单价分别是 3.00元/公斤,2.50 元/公斤, 4.10 元/公斤,10.20 元/公斤.[1]apples [2] pears [3] oranges[4] grapes 输入水果的编号,输出该水果的单价(保留 2 位小数). 如果输入不正确 的编号,显示单价为 0. #include int main( ) {

int choice; float price;

printf(\printf(\ printf(\ printf(\scanf(\

price=(choice== 1)*3+(choice==2)*2.50+( choice==3)*4.1+(choice==4)*10.2; printf(\}

11 读入1 个正整数 n(n<=100) ,计算并输出 1+1/2+1/3+......+ 1/n (保留3 位小数). #include int main() {

int i,n; float sum;

scanf(\sum=0;

for(i=1;i<=n;i++) sum=sum+1.0/i;

printf(\}

12 求 n 的阶乘 #include int main() {

int i,n;

double fact; scanf(\fact=1;

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

fact=fact*i; }

printf(\}

13 求 X 的 n 次幂 #include int main () {

int i,n;

double x,mypow ; scanf(\mypow=1;

for (i=1;i<=n;i++) mypow*=x;

printf(\}

14 摄氏华氏转换表 #include int main( ) { int begin,c,end,f;

scanf(\ printf(\ for(c=begin ;c<=end ;c++) { f=32+c*9/5; printf(\ } }

15 求整数的位数以及各位数之和 #include int main( ) { int number,sum; long in; scanf(\ number=0; sum=0; if(in<0) in=-in; do { number++; sum+=(in); } while((in/=10)!=0); printf(\}

16 求最大值

#include int main( ) {

int i,max,n,x; scanf(\for(i=1;i<=n;i++) {

scanf(\if(i==1) max=x;

else if(x>max) max=x; }

printf(\}

17 求 a+aa+aaa+aa....a #include void main() {

int i,n;

long int a,sn,tn;

scanf(\tn=a; sn=0;

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

sn+=tn;

tn=10*tn+a ; }

printf(\}

18 输入 1 个正整数 n,计算s 的前 n项的和(保留 4 位小数)。 #include int main( )

{

int i,n; float s,t;

scanf(\s=0; t=1;

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

t=t*1.0/i; s=s+t; }

printf(\}

19 求奇数和

#include int main( ) {

int i,n,x,sum;

printf(\输入数字个数:\scanf(\sum=0; i=1;

printf(\输入数字:\ while(i<=n) { i++;

scanf(\ if(x%2!=0) sum=sum+x; }

printf(\}

20统计素数并求和输入 2 个正整数m 和 n(1<=m,n<=5ω) ,统计并输出m 和 n 之间的素数的个数以及这些素数 的和。 #include #include int main( ) {

int count,digit,i,j,k,m,n,sum; scanf(\sum=0; count=0; if(m<2) m=2;

for(digit=m;digit<=n;digit++) {

j=sqrt(double(digit)); bool isPrime = true; for(k = 2; k <= j ;++k) {

if(digit % k == 0 ) {

isPrime = false; break ; } }

if(isPrime) {

count++; sum += digit;

} }

printf(\}

22 输入 1 个正整数 n,计算s 的前 n项的和(保留 4 位小数)。 s = 1 + J/2! +....+ l/n! 要求定义并调用函数 fact(n)计算 n 的阶乘. #include int main( ) {

int i,n; double s;

double fact(int n); scanf(\s=0;

for(i=1;i<=n;i++) s+=fact(i);

printf(\}

double fact(int n) {

int j,t=1; double x;

for(j=1;j<=n;j++) { t*=j; x=1.0/t; }

return (x); }

23统计一个整数中数字的个数

读入 1 个整数,统计并输出该数中2的个数。要求定义并调用函数countdigit(number,digit),它的功能是统计整数 number 中数字digit 的个数. 例如,countdigit(l0090,0)的返回值是 3. #include int main( ) {

int count; long in;

int countdigit(long number,int digit); scanf(\

count=countdigit(in ,2);

printf(\}

int countdigit (long number,int digit) {

int i,sum; if(number<0)

number=-number; sum=0;

while(number!=0) {

i=number;

if(i==2) sum++; number=number/10; }

return (sum); }

24 输入 2 个正整数 m 和 n(I<=01,n<=10000) ,输出m 和 n 之 间所有的 Fibonacci 数..

Fibonacci 序列(第 1 项起): 112358 1321 ..?? 要求定义并调用fib(n)时,它的功能是返回第 n项目Fibonacci数.

#include void main() { int fib(int n); int i,n,m,t;

printf(\请输入m n:\ scanf(\ for(i=1;;i++) {

t=fib(i);

if(t>=m&&t<=n) printf(\ else if(t>n)break; }

printf(\}

int fib(int n) {

if (n==1||n==2) return 1; else return fib(n-1)+fib(n-2); }

25 将一个整数逆序输出输入一个整 数,将它逆序输出.要求定义并调用

函数 reverse(number) ,它的功能是返 回number 的逆序数. #include int main( ) { int in,res;

int reverse(int number);

scanf(\res=reverse(in); printf(\}

int reverse(int number) { int x=0; while(number!=0) { x=x*10+number; number=number/10; } return (x); }

26 十进制转换二进制输入 1 个正

整数 n,将其转换为二进制后输出. 要求定义并调用函数 dectobin(n) ,二进制

#include int main() {

int i,n;

void dectobin(int n); scanf(\

它的功能是输出 n 的

dectobin(n); printf(\}

void dectobin( int n ) { if(n>1) dectobin(n/2); printf(\}

27 统计素数并求和输入2个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这 些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数).要求定义并调用函数 primc(m)判断 m 是否为素数。 #include int main() {

int count,i,m,n,sum; int prime(int m);

scanf(\count=0; sum=0;

for(i=m;i<=n;i++) if(prime(i)) { count++; sum+=i; }

printf(\}

int prime(int i) { int flag,j; if(i==1) flag=0; else if(i==2) flag=1; else { for(j=2;j

else flag=1; }

return(flag); }

28 求完数输入 2 个正整数 m 和n(I<=m,n<=1000) ,输出m 到 n 之间的所有完数〈完数就是因子和与它本身相等的数〉要求定义并调用函数factorsum(number) #include int main( ) {

long i,m,n;

long factorsum(long number); scanf(\for(i=m;i<=n;i++)

if(factorsum(i)==i) printf(\}

long factorsum(long number) { int j,sum=0; for(j=1;j

if(number%j==0&&number!=j) sum+=j;

return (sum); }

30 交换最小值和最大值输入一个正 整数 n (1 int main() { int n,i,j,k,temp1=0,temp2=0,min=0,max=0,a,b; int q[10]; scanf(\for(i=0;i

for(j=0;j

max=q[0];

for(k=0;kmax) { temp2=k; max=q[k]; } }

a=q[0]; b=q[n-1]; q[n-1]=max; q[0]=min; q[temp1]=a; q[temp2]=b;

for(int z=0;z

printf(\ }

return 0; }

31 输入2 个正整数m 和n(1<=m,n<=1000) ,输出m 到 n 之间的所有满足各位数字的立方和等于它 本身的数 #include int main( )

{

int i,m,n;

int is(int number);

scanf(\for(i=m;i<=n;i++) { if(is(i));

else printf(\}

printf(\}

int is(int number) { int temp,digit,sum,flag; temp=number; sum=0;

while(number!=0) { digit=number; sum=sum+digit*digit*digit; number=number/10; }

if(sum==temp) flag=0; else flag=1;

return (flag); }

32 输入一个正整 数 repeat (0 int main(void) { int i,j,n,x; int repeat,ri; int a[20];

printf(\输入执行次数:\scanf(\for(ri=1; ri<=repeat;ri++) {

printf(\输入整数个数:\ scanf(\ for(i=0;i=0&&x<=a[i]) { a[i+1]=a[i]; a[i]=x; i--; }

for(i=0;i

printf(\putchar('\\n'); } } }

33.输入1个正整数 n (1

#include int main(void) { int i,n,sum; int a[20]; double aver; printf(\输入整数个数:\ scanf(\ for(i=0;i

34 输入一个正整数 n (1 int main(void) { int a,b,c,d,e,n,temp1=0,temp2=0,min,max,i,j; int q[10]; printf(\输入整数个数:\ scanf(\ for(i=0;imax) { temp2=j;

max=q[j]; } } a=q[0]; b=q[n-1]; c=q[temp1]; d=q[temp2]; q[0]=c; q[n-1]=d; q[temp1]=a; q[temp2]=b; for(e=0;e

35.输入一个正整数n (1 int main(void) { int i,index,k,n,j,temp; int a[10]; printf(\输入整数个数:\ scanf(\ for(i=0;ia[index]) index=k; temp=a[index]; a[index]=a[j]; a[j]=temp; i++; k=i; j++; } } printf(\经排序后: \ printf(\ for(i=0;i

36 输入一个以回车结束的字符串(少于 80 个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串 #include #include #define MAXLEN 80 int main(void)

{ char ch; char str[MAXLEN]; int i; printf(\输入字符:\ ch=getchar(); i=0; while((ch = getchar())!= '\\n') { str[i]= ch; i++; } str[i]=0; for(i=0;str[i]!='\\n';i++) { if(str[i]>='A'&&str[i]<='Z') str[i]='A '+'Z'-str[i]; } printf(\经过改变后: \ printf(\ for(i = 0; str[i] != 0; i++) { putchar(str[i]); putchar('\\n'); } }

37 输入一个以回车结束的字符串(少于 80 个字符),统计并输出其中大写辅音字母的个数。大写辅音字母除:“A”“E”“I”“O”“U”以外的大写字母 #include #include #define MAXLEN 80 int main(void) { char ch; char str[MAXLEN]; int count,i; printf(\输入字符\ ch=getchar(); i=0; while((ch=getchar()) != '\\n') { str[i]=ch; i++; } count=0; for(i=0;str[i]!='\\n';i++) { if(str[i]!='A'&&str[i]!='E'&&str[i]!='I'&&str[i]!='O'&&str[i]!='U'&&str[i]>='A'&&str[i]<='Z') count++; }

printf(\}

38 输入一个以回车结束的字符串(少于 80 个字符),将它的内容逆序输出.如\的逆序为\

#include #include #define MAXLEN 80 int main(void)

{ int i,k,n,m,j; printf(\输入字符数:\ scanf(\ char ch,temp1,temp2; char str[80]; printf(\输入字符串:\ ch=getchar(); i=0; while((ch = getchar())!= '\\n') { str[i]=ch; i++; } k=n-1; for(j=0;j<=k;j++,k--) { temp1=str[j]; temp2=str[k]; str[j]=temp2; str[k]=temp1; } printf(\倒序后字符串为:\ for(i=0;i

输入一个以回车结束的字符串(少于 80 个字符),滤去所有的非十六进 制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出.(这个题太吊了,不会做) #include #include #define MAXLEN 80 int main(void)

( char ch; str[MAXLEN], num[MAXLEN]; Int i,k;

Int repeat ,ri; Long number;

scanf(\,&rcpeat); Getchar();

for(ri = 1; ri <= rcpeat; ri++){ i=0;

whilc((ch = getchar()) != '\\n'){ str[i]=ch; i++;} str[i] = 0; /*----------*/ number=0;

for(k=0;k

if(str[k]>='0'&&str[k]<='9'){ num[k]=str[k]-'0';

number=number*16+num[k]; } else

if(str[k]>='a'&&str[k]<='f'){

num[k]=str(k]-'A '+10;

Number=number*16+num[k]; } Else

If(str*k+>=’A’&&str*k+<=’F’), Num[k]=str[k]-’A’+10;

Number=number*16+num[k]; }} Printf(“Dec=%ld\\n”,number);--

一、阅读程序,写出程序运行时产生的输出结果。

1. 若从键盘输入58,则以下程序段的输出结果是(585858): int main(void) { int a; scanf(“%d”,&a); if (a>50) printf(“%d”,a); if(a>40) printf(“%d”,a); if(a>30) printf(“%d”,a); return 0; }

程序:

#include int main(void) { int a; scanf(\ if(a>50) printf(\ if(a>40) printf(\ if(a>30) printf(\ return 0; }

结果截图:

2. 下列程序运行的输出结果是(9): int main(void) {

char c=’b’; int k=4;

switch(c) { case ‘a’: k=k+1; break; case ‘b’: k=k+2; case ‘c’: k=k+3; }

printf(“%d\\n”,k); return 0; }

程序:

#include int main(void) {

char c='b'; int k=4;

switch(c) { case 'a': k=k+1; break; case 'b': k=k+2; case 'c': k=k+3; }

printf(\ return 0; }

二、按照题目要求编写程序 1. 计算摄氏温度 1.1. 题目要求

输入华氏温度f,计算并输出相应的摄氏温度c(保留2位小数)。c = 5/9(f-32). 1.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:17.2<回车> 输出:The temprature is -8.22

(2)输入:40.5<回车> 输出:The temprature is 4.72 程序:

#include int main() {

float c,f;

printf(\scanf(\c=5.0/9*(f-32); printf(\}

2. 加密数字 2.1. 题目要求

输入1个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。

2.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:1257<回车> 输出:

The encrypted number is 4601

(2)输入:8961<回车> 输出:

The encrypted number is 5078

程序:

#include int main() {

int b[4],t,i; char a[4];

printf( \

gets(a);

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

b[i]=(a[i]-'0'+9); for(i=0;i<2;i++) {t=b[i]; b[i]=b[i+2]; b[i+2]=t; }

t=b[0]*1000+b[1]*100+b[2]*10+b[3];

printf( \ }

3. 输出四个整数中的最小值 3.1. 题目要求

输入四个整数,输出其中的最小值。

3.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:12 6 1 90<回车> 输出:min is 1

(2)输入:-1 -3 -4 -5<回车> 输出:min is -5

程序:

#include int min(int i,int j) {

return (i

main() {

int a,b,c,d,m; printf(\ scanf(\ m=min(min(min(a,b),c),d); printf(\}

4. 计算个人所得税 4.1. 题目要求

输入一个职工的月薪salary,输出应交的个人所得税tax(保留2位小数)。 tax = rate * (salary-850)/100 当 salary <= 850 时,rate = 0;

当 850 < salary <= 1350 时,rate =0.0 5; 当 1350 < salary <= 2850 时,rate = 0.10; 当 2850 < salary <= 5850 时,rate = 0.15;

当 5850 < salary 时,rate = 0.20;

4.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:800<回车> 输出:tax=0.00

(2)输入:4010<回车> 输出:tax=474.00

(3)输入:2850<回车> 输出:tax=200.00

程序:

#include int main() {

double tax,salary; scanf(\ if(salary<=850) tax=0; else if(850

if(1350

if(2850

if(5850

5. 输出水果单价 5.1. 题目要求

以下4种水果的单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤,10.20元/公斤。 [1] apples [2] pears [3] oranges [4] grapes

输入水果的编号,输出该水果的单价(保留2位小数)。如果输入不正确的编号,显示单价为0。

5.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:3<回车> 输出: [1] apples [2] pears [3] oranges [4] grapes price=4.10;

(2)输入:5<回车> 输出: [1] apples [2] pears [3] oranges [4] grapes price=0.00 程序:

#include int main(void) {

int choice, i; double price; for(i = 1; i <= 5; i++) {

printf(\ printf(\ printf(\ printf(\ scanf(\ switch(choice)

{ case 1:price=3.0;break; case 2:price=2.5;break; case 3:price=4.1;break; case 4:price=10.2;break; default:price=0; }

printf(\} }

6. 输出大小写字母 6.1. 题目要求

输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。

6.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:F<回车> 输出:f

(2)输入:y<回车> 输出:Y

(3)输入:=<回车> 输出:= 程序:

#include int main() {

char c1,c2; printf(\输入一个字母\\n\ c1=getchar(); if (c1>='a'&&c1<='z') { c2=c1-32; }

else {

c2=c1+32; }

printf(\输出:%c\\n\}

一、读程序写结果

1、 假设输入6<回车>,运行结果是: sum=36 。 2、 (1)运行的结果是: 7 。

(2)fun函数的功能是:把m、n进行两两比较,求最大值。 二、填空题

1. 下面程序的功能是求a的n次方。其中自定义mypow函数计算x的y次方。 程序如下:

#include void main() { double a,pow; int n;

double mypow(double x,int y); printf(“请输入一个数:\\n”); scanf(“%lf”,&a); printf(“请输入次方:\\n”); scanf(“%d”,&n); pow = mypow (a,n); printf(“%.2lf的%d次方为:%.2lf”,a, n, pow); }

double mypow(double x,int y) {

double s=1; for( ;y>0; y--) s=s*x ;; return s; } 三、 编程题

题目1: 1 + 1/2! +....+ 1/n!

要求:输入1 个正整数n,计算 s 的前n项的和(保留 4 位小数)。 s = 1 + 1/2! +....+ 1/n!

要求定义并调用函数fact(n)计算n的阶乘。 程序:

#include void main() { int x,i; double s=0; double fact(int n); printf(\请输入一个项数: \ scanf(\ for(i=1;i<=x;i++){ s = s + 1/fact(i); } printf(\阶乘倒数的累加和为:%.4lf\\n\}

double fact(int n) {

int main(void) {

int i, n, temp; int a[10]; scanf(\ for(i = 0; i < n; i++) scanf(\ for(i=0;i<=(n-1)/2;i++) { temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; }

for(i = 0; i < n; i++) printf(\ printf(\}

4.2. 测试结果(输入结束回车符用<回车>表示,括号内为说明) (1)输入:4 <回车>(n=4) 10 8 1 2<回车> 输出:2 1 8 10

(2)输入:5 <回车> (n=5) 1 2 5 4 0<回车> 输出:0 4 5 2 1

5. 在数组中查找指定的元素 5.1. 题目要求

输入一个正整数 n (1

#include int main(void) {

int flag, i, n, x; int a[10]; scanf(\ for(i = 0; i < n; i++) scanf(\ scanf(\ flag=0; for(i=0;i

printf( \}

5.2. 测试结果(输入结束回车符用<回车>表示,括号内为说明) (1)输入:6<回车> (n=6) 1 3 5 7 9 5<回车> 5<回车> (x=5) 输出:5: a[2]

(2)输入:4<回车> (n=4) 1 3 5 7<回车> 2<回车> (x=2) 输出:2: not found

6. 字符串逆序输出 6.1. 题目要求

输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。如\的逆序为\。 程序:

#include int main(void) {

int i, j, k,temp; char str[80]; i = 0;

while((str[i] = getchar( )) != '\\n') i++; str[i] = 0; k=i-1; for(i=0;i

6.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:Welcome to you! <回车> 输出: !uoy ot emocleW

(2)输入:Happy New Year!<回车> 输出:!raeY weN yppaH

7. 输出大写辅音字母的个数 7.1. 题目要求

输入一个以回车结束的字符串(少于80个字符),统计并输出其中大写辅音字母的个数。大写辅音字母:除'A', 'E', 'I', 'O', 'U'以外的大写字母。 程序:

#include #define MAXLEN 80 int main(void) {

char ch;

char str[MAXLEN]; int count, i; getchar(); i = 0;

while((ch = getchar()) != '\\n') { str[i++]=ch; }

str[i] = 0;

count=0; for(i=0;str[i]!='\\0';i++) { if(str[i]!='A' && str[i]!='E'&&str[i]!='I' && str[i]!='O' && str[i]!='U'&& str[i]>='A' &&str[i]<='Z') { count++; } }

printf(\}

7.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:HELLO<回车> 输出: count = 2 (\中有2个大写辅音字母)

(2)输入:group<回车> (字符'a') 输出:count = 0 (\中没有大写辅音字母)

8.输入10个整数到数组中,将数组中下标值为偶数的元素从小到大排列,其他元素不变。 程序:#include #include void main() {

char str[101],t;

printf(\ scanf(\ int n=strlen(str); for(int i=0; istr[j]) {

t=str[i]; str[i]=str[j]; str[j]=t; }

}puts(str); printf(\

9.从键盘循环输入字符,遇回车结束。统计每个英文字母出现的频率。

(可用一维数组构造26个用于记录每个字母出现次数的累加器。对循环读入的字符,依次判别其是否为英文字母(不区分大小写),是则进行统计,该字母对应的计数器(数组中的对应元素)加1。) #include int main(void) {

int i; char j;

char a; int b[26]={0}; while ((a = getchar()) != '\\n') {

for (j='A';j<='Z';++j) {

if (a == j || a == j+('a'-'A')) {

b[j-'A']++; } } }

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

if (b[i] == 0) {

continue; } else {

printf(\ } }

printf(\}

double result; if (n==1 || n==0) result = 1; else

result = n * fact(n-1); return result; }

测试结果:

1. 输入:2<回车> 输出:1.5000;

2. 输入:6<回车> 输出:1.7181;

3. 输入:10<回车> 输出:1.7183;

题目2:求a+aa+aaa+aa?a

要求:输入2个正整数a和n, 求a+aa+aaa+aa?a(n个a)之和。

要求定义并调用函数fn(a,n),它的功能是返回aa?a(n个a)。例如,fn(3,2)的返回值是33。 程序:

#include void main() { int a,n,i,s=0; int fn(int x,int y); printf(\重复数字a: \ scanf(\ printf(\重复数字个数n: \ scanf(\ for(i=1;i<=n;i++){ s=s+fn(a,i); } printf(\累加和为:%d\\n\}

int fn(int x,int y) { int result=0; int k; for(k=1;k<=y;k++){ result = result+x; x=10*x; }

return result; }

测试结果:

1. 输入:2 3<回车> 输出:246(2+22+222);

2. 输入:8 5<回车> 输出:98760(8+88+888+8888+88888);

题目3: 统计一个整数中数字的个数

要求:读入1 个整数,统计并输出该数中2的个数。

要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(10090,0)的返回值是3。 程序:

#include int main() {

int num,dig,k; int countdigit(int number,int digit); printf(\:\ scanf(\ printf(\:\ scanf(\ k = countdigit(num,dig); printf(\中%d重复出现的个数为:%d\\n\ return 0; }

int countdigit(int number,int digit) { int a,i=0; if (number<0) number=-number; else number=number; do{ a = number % 10; number = number-a; number=number/10; if(a==digit){ i++; }

}while(number>0); return i; }

测试结果:(digit输入2)

1. 输入:-21902<回车> 输出:2(-21902中有2个2);

2. 输入:2<回车> 输出:2(2中有1个2);

3. 输入:345543<回车> 输出:0(345543中没有2);

题目4:判断素数

要求:输入一个正整数n,如果它是素数,输出\,否则,输出\(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。

要求定义并调用函数prime(m)判断m是否为素数。 程序:

#include int main() { int n,flag; int prime(int m); printf(\输入正整数n:\ scanf(\ if(n==1) printf(\ else{ flag = prime(n); if(flag==1) printf(\ else printf(\ } return 0; }

int prime(int m) {

int i,result=1; for(i=2;i

测试结果:

(1)输入:1 <回车>输出: NO (1不是素数)

(2)输入:2<回车>输出:YES (2是素数)

(3)输入:9<回车>输出:NO(9不是素数)

题目5:统计素数并求和

要求:输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。 要求定义并调用函数prime(m)判断m是否为素数。 程序:

#include int main() { int m,n,k=0,flag=0,count=0,sum=0; int prime(int m); printf(\输入正整数m (n>m>=1):\ scanf(\ printf(\输入正整数n (n<=500):\ scanf(\ if(m==1) m=m+1; for(k=m;k<=n;k++){ flag=prime(k); if(flag==1){ sum=sum+k; count=count+1; } } printf(\ return 0; }

int prime(int x) { int i,result=1; for(i=2;i

测试结果:

(1)输入:1 10<回车>(m=1, n=10)

输出:count=4, sum=17 (1到10之间有4个素数:2,3,5,7)

(2)输入:20 35<回车> (m=20, n=35)

输出:count=3, sum=83 (20到35之间有3个素数:23, 29, 31)

(3)输入:14 16<回车>(m=14, n=16)

输出:count=0, sum=0 (14到16之间没有素数)

题目6:求m到n之间所有完数

要求:输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有完数(完数就是因子和与它本身相等的数)。

要求定义并调用函数factorsum(number),它的功能是返回number的因子和。例如,factorsum (12)的返回值是16(1+2+3+4+6)。

程序:

#include int main() { int m,n,i; int factorsum(int number); printf(\输入正整数m (n>m>=1):\ scanf(\ printf(\输入正整数n (n<=1000):\ scanf(\ for(i=m;i<=n;i++){ if(factorsum(i)==i){ printf(\ } } printf(\ return 0; }

int factorsum(int number) { int x,y=1; for(x=2;x

测试结果:

(1)输入:20 500<回车>输出:28 496

(2)输入:1 100<回车>输出:1 6 28

题目7:求各位数字的立方和等于它本身的数

要求:输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有满足各位数字的立方和等于它本身的数。

要求定义并调用函数is(number)判断number的各位数字之立方和是否等于它本身。 程序:

#include int main() { int m,n,i; int is(int number); printf(\输入正整数m (n>m>=1):\ scanf(\ printf(\输入正整数n (n<=1000):\ scanf(\ for (i=m;i<=n;i++){ if(is(i)==1){ printf(\ } } printf(\ return 0; }

int is(int number) { int a,b,c,t,k; a=number; b=(number/10); c=number/100; k=a*a*a+b*b*b+c*c*c; if(number==k) t=1; return t; }

测试结果:

(1)输入:100 400<回车>(说明:即m=100, n=400) 输出:153 370 371 (说明:1*1*1+5*5*5+3*3*3=153; 3*3*3+7*7*7=370; 3*3*3+7*7*7+1*1*1=371)

(2)输入:1 100<回车> (说明:即m=1, n=100) 输出:1

题目8:将一个整数逆序输出

要求:输入一个整数,将它逆序输出。

要求定义并调用函数reverse(number),它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321。 程序:

#include int main() { int m,n; int reverse(int number); printf(\输入一个整数m:\ scanf(\ n=reverse(m); printf(\逆序数字为:%d\\n\ return 0; }

int reverse(int number){ int result=0; do{ result=result*10+number;

number=number/10; }while(number<0||number>0); return result; }

测试结果:

(1)输入:123456<回车>输出:654321

(2)输入:-100<回车>输出:-1

(3)输入:99<回车>输出:99

题目9:求的前30项之和,

要求定义并调用函数fact(n)计算n! 程序:

#include int main() { int x,i; double item=0,sum=1; double fact(int n); int fm(int m); printf(\输入一个整数x:\ scanf(\ for(i=1;i<=x;i++){ item=1.0*fact(i)/(2*i+1); sum=sum+item; } printf(\ return 0; }

double fact(int n) { double result; if (n==1 || n==0) result = 1; else

result = n * fact(n-1); return result; }

前30项之和 = 4,503,822,735,103,803,000,000,000,000,000

一、阅读程序

1. #include main( )

{ #define NUM 6; int fib[6]; int i; fib[0]=0; fib[1]=1;

for (i=2; i

for (i=0; i

}

(1) 程序的运行结果是: 0 1 1 2 3 5

(2) 简述程序的主要功能:输入一个六个数的数组,每一项为前两项的和,计算并输出所有数,每输出三个数换行输出 2.#include int main( void)

{ int a[8]={11,12,13,14,15,16,17,18}; int i=0,sum=0; while(i<=7){ if(a[i]%2==1) sum=sum+a[i]; i++; }

printf(\return 0; }

(1) 程序的功能是: 计算并输出八个数的数组中所有奇数的和 (2) 输出结果是:56 3.#include int main(void)

{ float s[6]={1,3,5,7,9}; float x; int i;

scanf(“%f”,&x); for(i=4;i>=0;i--)

if(s[i]>x) s[i+1]=s[i]; else break;

printf(“%d\\n”,i+1); return 0; }

(1) 如果输入4,则输出:2 (2)如果输入5,则输出:3 4.#include void main(void)

{ int a[10],max,min,i,sum; for(i=0;i<10;i++) scanf(“%d”,&a*i+); max=min=sum=a[0]; for(i=1;i<10;i++) { sum=sum+a[i]; if(a[i]>max) max=a[i]; if(a[i]

printf(\}

(1) 若在程序运行时输入: 3 1 4 7 10 8 9 2 6 5 <回车>

程序的输出结果是:max=10,min=1,sum=55 (2) 简述程序的主要功能:输入一个十个数的数组,计算并输出这个数组中的最大值、最小值、所有数加起来的和 5.#include #include int prime(int m) {

int i,result=1; for (i=2; i<=m/2; i++) if (m % i==0) result =0; if (m==1) result =0;

returnresult; }

void main()

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

scanf(\count=count+prime(a[i]); }

printf(\}

(1) 若在程序运行时输入: 1 2 3 4 5 6 7 8 9 10<回车> 程序的运行结果为:4 (2) 简述prime函数的主要功能:判断一个数是不是质数,是质数输出1,不是质数输出0

二、程序填空题

下列程序的功能是:求出数组x中各相邻两个元素的和一次存放到数组a中,然后输出. #include int main(void) {

int x[10],a[9],i; for (i=0;i<10;i++) scanf(“%d”,&x*i+); for(i=1;i<10;i++) a[i-1]=x[i]+x[i-1]; for (i=0;i<9;i++) printf(“%d”,a*i+); }

三、程序设计

1. 交换最小值和最大值 1.1. 题目要求:

输入一个正整数n (1

#include void main() { int i,n; int a[10]; int s,p; printf(\ scanf(\ for(i=0;i

p=0; for(i=1;ia[i]) { s=a[i]; p=i; } } a[p]=a[0]; a[0]=s; for(i=0;i

1.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:5 4 3 5 1 2<回车> 输出:1 3 2 4 5

(2)输入:4 1 5 6 7<回车> 输出:1 5 6 7

(3)输入:5 5 4 3 2 1<回车> 输出:1 4 3 2 5

2. 选择法排序 2.1. 题目要求:

输入一个正整数n (1

#include main() {

int n=0;

int a[10]={0}; int i,j;

scanf(\ for(i=0;i

for(i=0;i printf(\ for(i=0;i

2.2. 测试结果(输入结束回车符用<回车>表示) (1)输入:4 <回车> (n=4)

5 1 7 6<回车> 输出:After sorted: 7 6 5 1

(2)输入:5 <回车> (n=5) 5 4 3 2 1 <回车> 输出:After sorted: 5 4 3 2 1

3. 简化的插入排序 3.1. 题目要求:

输入一个正整数 n(0

#include int main(void) {

int i, j, n, x; int a[10]; scanf(\ for(i=0;ia[i]) continue; j=n-1; while(j>=i) { a[j+1]=a[j]; j--; } a[i]=x; break; } if(i==n) a[n]=x; for(i=0; i

3.2. 测试结果(输入结束回车符用<回车>表示,括号内为说明) (1)输入:5<回车>(数据的个数n=5) 1 2 4 5 7<回车> (5个有序整数) 3<回车> (待插入整数x=3) 输出:1 2 3 4 5 7

(2)输入:4<回车> (数据的个数n=4) 1 2 5 7<回车> (4个有序整数) -10<回车> (待插入整数x=-10) 输出:-10 1 2 5 7

4. 将数组中的数逆序存放 4.1. 题目要求:

输入一个正整数 n (1

#include

本文来源:https://www.bwwdw.com/article/7k1h.html

Top