codeup刷题2.1~2.4小节 ——《算法笔记》(胡凡)

it2024-10-28  6

例题1-1-1 按要求输出信息(1)

题目描述:

编写一个C程序,要求在屏幕上输出一下一行信息。 This is my first c program!

输入:

输出:

This is my first c program!

样例输入:

样例输出:

This is my first c program!

程序:

#include<stdio.h> int main() { printf("This is my first c program!\n"); return 0; }

例题1-1-2 按要求输出信息(2)

题目描述:

编写一个C语言程序,输出以下信息: ******************** Very Good! ********************

输入:

输出:

见上

样例输入:

样例输出:

********************(换行)Very Good!(换行) ********************

程序:

#include<stdio.h> int main(){ printf("********************\n\nVery Good!\n\n********************"); return 0; }

例题1-2-1 求两个整数之和(1)

题目描述:

设置3个变量a, b, sum, 其中a, b用来存放两个整数,sum用来存放a、b两个数的和, 通过赋值(即采用赋值运算符"=")的方式将a初始化为123, b初始化为456,并把两个变量相加的结果赋值给sum。

输入:

无,变量在程序中以赋值的方式给定初值。

输出:

sum=结果

样例输入:

样例输出:

sum=579

程序:

#include<stdio.h> int main(){ int a = 123, b = 456, sum; sum = a + b; printf("sum = %d", sum); return 0; }

例题1-2-2 求两整数数之和(2)

题目描述

从键盘上输入两个整数,并输出这两个数的和,即你的任务是计算a+b。

输入

输入空格分隔的两个整数

输出

对于用空格分隔的两个整数,求其和。

样例输入

5 6

样例输出

11 程序:

#include<stdio.h> int main(){ int a, b, sum; scanf("%d%d", &a, &b); printf("%d", a+b); return 0; }

例题3-5 求一元二次方程的根

题目描述

求一元二次方程ax2+bx+c=0的根,三个系数a, b, c由键盘输入, 且a不能为0,且保证b2-4ac>0。 程序中所涉及的变量均为double类型。

输入

以空格分隔的一元二次方程的三个系数,双精度double类型

输出

分行输出两个根如下(注意末尾的换行): r1=第一个根 r2=第二个根 结果输出时,宽度占7位,其中小数部分2位。

样例输入

1 3 2

样例输出

r1= -1.00 r2= -2.00

分析 在a不等于0 且 b2-4ac>0的条件下, r1=(- b - sqrt(b2-4ac))/(2a) r2=(- b + sqrt(b2-4ac))/(2a)

程序

#include <stdio.h> #include <math.h> void get_x(double a, double b, double c){ if(a=!0 && b*b-4*a*c > 0){ int s = sqrt(b*b-4*a*c); double r1, r2; r1 = (-b + s)/(2*a); r2 = (-b - s)/(2*a); printf("r1=%7.2f\n", r1); printf("r2=%7.2f", r2); } } int main(){ double a, b, c; scanf("%lf%lf%lf", &a, &b, &c); get_x (a, b, c); return 0; }

例题3-9 字符输入输出

题目描述

从键盘输入三个字符BOY,然后把他们输出到屏幕上

输入

BOY三个字符,中间无分隔符

输出

BOY,注意末尾的换行

样例输入

BOY

样例输出

BOY

分析: 三个字符→用char类型存放。 程序

#include <stdio.h> int main(){ //使用getchar()和putchar()函数进行单个输入输出 char a, b, c; a = getchar(); b = getchar(); c = getchar(); putchar(a); putchar(b); putchar(c); putchar('\n'); return 0; }

例题4-1 一元二次方程求根

题目描述 求一元二次方程ax2+bx+c=0的根, 三个系数a, b, c由键盘输入, 且a不能为0,但不保证b2-4ac>0。 程序中所涉及的变量均为double类型。

输入 以空格分隔的一元二次方程的三个系数,双精度double类型

输出 分行输出两个根如下(注意末尾的换行): r1=第一个根 r2=第二个根 结果输出时,宽度占7位,其中小数部分2位。 如果方程无实根,输出一行如下信息(注意末尾的换行): No real roots!

样例输入 1 2 3

样例输出 No real roots!

程序

#include <stdio.h> #include <math.h> int main(){ double a, b, c; scanf("%lf%lf%lf", &a, &b, &c); if(a=!0 && b*b-4*a*c <= 0){ printf("No real roots!"); } if(a=!0 && b*b-4*a*c > 0){ int s = sqrt(b*b-4*a*c); double r1, r2; r1 = (-b + s)/(2*a); r2 = (-b - s)/(2*a); printf("r1=%7.2f\n", r1); printf("r2=%7.2f", r2); } return 0; }

例题4-2 比较交换实数值

题目描述 从键盘输入2个实数,按照代数值由小到大的顺序输出这两个数。

输入 用空格分隔的两个实数。

输出 从小到大输出这两个实数,中间以空格来分隔, 小数在前,大数在后。 小数点后保留2位小数。 末尾输出换行符。

样例输入 3.6 -2.3

样例输出 -2.30 3.60

程序

#include <stdio.h> #include<math.h> int main(){ double a,b,temp; scanf("%lf%lf", &a, &b); if(a >= b){ temp = a; a = b; b = temp; } printf("%.2f %.2f\n", a, b); return 0; }

例题4-3 比较交换3个实数值,并按序输出

题目描述 从键盘输入3个实数a, b, c,通过比较交换, 将最小值存储在变量a中,最大值存储在变量c中, 中间值存储在变量b中, 并按照从小到大的顺序输出这三个数a, b, c。末尾输出换行。

输入 输入以空格分隔的三个实数

输出 按照从小到大的顺序输出这三个实数, 中间以空格分隔,最小值在前,最大值在后。 小数点后保留2位小数。注意末尾的换行。

样例输入 3 7 1

样例输出 1.00 3.00 7.0

程序

#include <stdio.h> #include<math.h> int main(){ double a, b, c, max, mid, min; //注意不同顺序时条件语句嵌套的情况 scanf("%lf %lf %lf", &a, &b, &c); if(a >= b){ if(a >= c){ max = a; if(b >= c){ mid = b; min = c; } else{ mid = c; min = b; } } else{ max = c; mid = a; min = b; } } else{ if(b >= c){ max = b; if(a >= c){ mid = a; min = c; } else{ mid = c; min = a; } } else{ max = c; mid = b; min = a; } } printf("%.2f %.2f %.2f\n", min, mid, max); return 0; }

习题4-4 三个整数求最大值

题目描述 有3个整数a, b, c,由键盘输入,输出其中最大的数。

输入 以空格分割的三个整数。

输出 三个数中的最大值,末尾换行。

样例输入 1 3 2

样例输出 3

程序

#include <stdio.h> #include <math.h> //通过例题4-3变形而来 int main(){ int a, b, c, max; scanf("%d %d %d", &a, &b, &c); if(a >= b){ if(a >= c) max = a; else max = c; } else{ if(b >= c) max = b; else max = c; } printf("%d\n", max); return 0; }

习题4-10-1 奖金计算

题目描述

某企业发放的奖金根据利润提成。

利润I低于或等于100000时,奖金可提10%;利润高于100000元,低于200000元(100000<I<=200000)时,低于100000元的部分仍按10%提成,高于100000元的部分提成比例为7.5%;200000<I<=400000时,低于200000元的部分仍按上述方法提成(下同),高于200000元的部分按5%提成;400000<I<=600000元时,高于400000元的部分按3%提成;600000<I<=1000000元时,高于600000元的部分按1.5%提成;I>1000000元时,超过1000000元的部分按1%提成。

从键盘输出当月利润I,求应发奖金数,奖金精确到分。

要求用if语句实现。

输入 企业利润,小数,双精度double类型

输出 应发奖金数,保留2位小数,末尾换行。

样例输入 1050

样例输出 105.00

程序

#include <stdio.h> #include <math.h> int main(){ double l, bonus; scanf("%lf", &l); if(l <= 100000) bonus = l * 0.10; else if(l <= 200000) bonus = 10000 + (l -100000) * 0.075; else if(l <= 400000) bonus = 17500 + (l -200000) * 0.05; else if(l <= 600000) bonus = 27500 + (l -400000) * 0.03; else if(l <= 1000000) bonus = 33500 + (l -600000) * 0.015; else bonus = 39500 + (l -1000000) * 0.01; printf("%.2f\n", bonus); return 0; }

例题5-1-1 连续自然数求和

题目描述 求1+2+3+…+100,即求

要求用while语句实现要求用do…while语句实现要求用for语句实现

输入 无 输出 要求的和,末尾输出换行。

样例输入 无

样例输出 5050

程序

1. 要求用while语句实现

#include <stdio.h> #include <math.h> int main(){ int n=1, sum=0; while(n <= 100){ sum = sum + n; n++; } printf("%d\n", sum); return 0; }

2. 要求用do…while语句实现

#include <stdio.h> #include <math.h> int main(){ int n=1, sum=0; do{ sum = sum + n; n++; }while(n <= 100); printf("%d\n", sum); return 0; }

3. 要求用for语句实现

#include <stdio.h> #include <math.h> int main(){ int n=1, sum=0; for(; n <= 100; n++){ sum = sum + n; } printf("%d\n", sum); return 0; }

例题5-1-4 连续自然数求和

题目描述 输入一个正整数N,求1+2+…+N,即求 要求在程序中使用break语句。

输入 要求输入的数据一定是一个正整数。

输出 计算的结果,连续N个自然数的和,末尾输出换行。

样例输入 100

样例输出 5050

程序

#include <stdio.h> #include <math.h> int main(){ int N, n, sum=0; scanf("%d", &N); for(n=1; n <= N; n++){ sum = sum + n; if(n == N) break; } printf("%d\n", sum); return 0; }

例题5-1-5 连续自然数求和

题目描述 编程实现求1+2+3+…和的程序,要求得到使使和数大于1000的最小正整数。 //分析:用break实现跳出循环

输入 无

输出 输出使1+2+3+…+N>1000的最小正整数N,末尾输出换行。

样例输入 无

样例输出 45

程序

#include <stdio.h> #include <math.h> int main(){ int n, sum=0; for(n=1; ; n++){ sum = sum + n; if(sum > 1000) break; } printf("%d\n", n); return 0; }

例题5-6 矩阵输出

题目描述 输出以下4*5的矩阵 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 要求使用循环实现,注意每行输出5个数字,每个数字占3个字符的宽度,右对齐。

输入 无

输出 每行输出5个数字,每个数字占3个字符的宽度,右对齐。

样例输入 无

样例输出 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20

程序

#include <stdio.h> #include <iostream> #include <math.h> #include <iomanip> using namespace std; int main() { int a[4][5]={{1,2,3,4,5},{2,4,6,8,10},{3,6,9,12,15},{4,8,12,16,20}},i=0,j=0; for(i=0; i<4; i++) { for(j=0; j<5; j++) { //右对齐输出:setiosflags(ios::right) //setw(int n),控制输出间隔的,预设输出宽度的。setw默认右对齐,其余部分自动补空格。 cout<<setiosflags(ios::right)<<setw(3)<<a[i][j]; } cout<<endl; } return 0; }

例题5-7 求圆周率pi的近似值

题目描述 用如下公式 π/4 ≈ 1 - 1/3 + 1/5 -1/7 + ··· 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不累加)。 要求输出的结果总宽度占10位,其中小数部分为8位。 程序中使用浮点型数据时,请定义为双精度double类型。 如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).

输入 无

输出 PI=圆周率的近似值 输出的结果总宽度占10位,其中小数部分为8位。 末尾输出换行。

样例输入 无

样例输出 PI=3.14159065

程序

#include <stdio.h> #include <math.h> int main(){ double PI_4 = 0, n = 1, temp = 1.0/n, flag; for(flag = 1; fabs(1/n)>=1e-6; temp = 1.0/n){ PI_4 = PI_4 + temp * flag; flag = -flag; n = n+2; } printf("PI=%10.8f\n", PI_4*4.0); return 0; }

例题5-8 Fibonacci数列

题目描述 输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即: 要求输入的正整数n不超过50.

输入 一个不超过50的正整数

输出 Fibonacci数列的第n个数,末尾输出换行。

样例输入 20

样例输出 6765

程序

#include <stdio.h> #include <math.h> int main(){ int n, a=1, b=1, sum=0; scanf("%d", &n); for(int i=1; i<n-1; i++){ sum = a + b; a = b; b = sum; } printf("%d\n", sum); return 0; }

习题5-10 分数序列求和

题目描述 有如下分数序列 求出次数列的前20项之和。 请将结果的数据类型定义为double类型。

输入 无

输出 小数点后保留6位小数,末尾输出换行。

样例输入 无

样例输出 32.660261

程序

#include <stdio.h> #include <math.h> int main(){ double a=1.0, b=2.0, sum=0, temp; for(int i=1; i<=20; i++){ sum = sum + b/a; temp = a; //注意借一个数保存a的原值 a = b; b = b + temp; } printf("%.6f\n", sum); return 0; }
最新回复(0)