第二章

作业比赛编号 : 100000567 - 《算法笔记》2.3小节——C/C++快速入门->选择结构

C例题4-3 比较交换3个实数值,并按序输出
#include<stdio.h>

//最基础的指针运用于比较大小 
void swap(double *a,double *b){
    double temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
int main(){
    double a,b,c;
    scanf("%lf%lf%lf",&a,&b,&c);
    double *p1=&a;
    double *p2=&b;
    double *p3=&c;
    if(a>b) swap(p1,p2);
    if(b>c) swap(p2,p3);
    if(a>b) swap(p1,p2);
    printf("%.2f %.2f %.2f\n",a,b,c);
    return 0;
    }
D习题4-4 三个整数求最大值
#include<stdio.h>
int max(int a,int b){
    int result;
    if(a>b) {
        return a;
    }else{
        return b;
    }
    //如果想return一个值,则返回类型不能用void 
}

int main(){
    int a,b,c,m1,m2;
    scanf("%d%d%d",&a,&b,&c);
    m1=max(a,b);
    m2=max(m1,c);
    printf("%d\n",m2);
    return 0;
    
}
E习题4-10-1 奖金计算
#include<stdio.h>
int main(){
    double I,bonus;
    scanf("%lf",&I);
    if(I<=100000){
        bonus=I*0.1;
    }else if(100000<I&&I<=200000){
        bonus=100000*0.1+(I-100000)*0.075;
    }else if(200000<I&&I<=400000){
        bonus=100000*0.1+100000*0.075+(I-200000)*0.05;
    }else if(400000<I&&I<=600000){
        bonus=100000*0.1+100000*0.075+200000*0.05+(I-400000)*0.03;
    }else if(600000<I&&I<=1000000){
        bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(I-600000)*0.015;
    }else{
        bonus=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(I-1000000)*0.01;
    }
    printf("%.2f\n",bonus);
    return 0;
} 

作业比赛编号 : 100000568 - 《算法笔记》2.4小节——C/C++快速入门->循环结构

A例题5-1-1 连续自然数求和
#include<stdio.h>
int main(){
    int i=1,sum=0;
    while(i<=100){
        sum=sum+i;
        i++;
    }
    printf("%d",sum);
    return 0;
}
B例题5-1-2 连续自然数求和
#include<stdio.h>
int main(){
    int i=1,sum=0;
    do{
        sum=sum+i;
        i++;
    }while(i<=100);
    printf("%d",sum);
    return 0;
}
C例题5-1-3 连续自然数求和
#include<stdio.h>
int main(){
    int i,sum=0;
    for(i=1;i<=100;i++){
        sum=sum+i;
    }
    printf("%d",sum);
    return 0;
}
D例题5-1-4 连续自然数求和
#include<stdio.h>
int main(){ 
    //题目要求用break,感觉是多此一举 
    int i,n,sum=0;
    scanf("%d",&n);
    for(i=1;i<2*n;i++){
        sum=sum+i;
        if(i>=n) break;
    }
    printf("%d\n",sum);
    return 0;   
}
E例题5-1-5 连续自然数求和
#include<stdio.h>
int main() {
    // 求1+2+3+...和的程序,要求得到使和数大于1000的最小正整数N。
    int i, sum = 0;
    for (i = 1; sum <= 1000; i++, sum += i);
    printf("%d\n", i);-
    return 0; 
}
F例题5-6 矩阵输出
#include<stdio.h>
int main(){
    for(int i=1;i<=4;i++){
        for(int j=1;j<=5;j++){
            printf("%3d",i*j);
            if (j==5){
                printf("\n");
            }
        }
    }
    return 0;
}
G例题5-7 求圆周率pi的近似值(repeat)

需要注意的问题:
1.10的次方的表示方法:


image.png
#include<stdio.h>
#include<math.h>

/* 用如下公式 pi/4 = 1-1/3+1/5-1/7....求圆周率PI的近似值,直到发现某一项的绝对值
 小于10-6为止(该项不累加)。
 如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x).
 输出 PI=圆周率的近似值 输出的结果总宽度占10位,其中小数部分为8位。末尾输出换行。 */
 
int main(){
    double pi=0.0;
    //term表示每一项,如1、-1/3、1/5等
    for(double term = 1, i = 1, j = 3;fabs(term)>=1e-6;j+=2){
        pi+=term;
        i=-i;
        term=i/j;
    }   
    printf("PI=%10.8f\n",pi*4);
    return 0;
}
H例题5-8 Fibonacci数列

参考:用数组和队列的方法实现斐波那契数列

#include<stdio.h>
//方法一:递归 

/*
输入 一个不超过50的正整数
输出 Fibonacci数列的第n个数,末尾输出换行 
*/
int fibo(int n) {
    if (n == 1 || n == 2) return 1;
    else return fibo(n-2) + fibo(n-1);
}

int main(){
    int N;
    scanf("%d",&N);
    printf("%d\n",fibo(N));
    return 0;
} 
/*
int整形的取值范围是-2147483648~21474836479(-2^31~(2^31-1)) 
第46项之后,即从第47项开始,大小超出int的范围
因此47项及以后按照此方法输出的数都为负数 
*/ 
I习题5-10 分数序列求和

注意一点:类型一致的问题

#include<stdio.h>
/*
有分数序列:2/1,3/2,5/3,8/5,13/8,21/13,...
求前20项的和
输出 小数点后保留6 位小数,末尾输出换行 
*/
double top(int n) {
    if(n==1) return 2;
    else if(n==2) return 3;
    else return top(n-2)+top(n-1);
}
double bottom(int n) {
    if(n==1) return 1;
    else if(n==2) return 2;
    else return bottom(n-2)+bottom(n-1); 
}
int main(){
    double sum=0.0;
    for(int i=1;i<=20;i++){
        sum+=top(i)/bottom(i); 
        /*如果在定义函数top和bottom时
        用整型的话最后计算结果即使进行强制类型转化算出来的也是整数并且结果偏差较大 
        因此在定义函数时就应该用double,那么在main函数中也不必再进行强制类型转换了 
        */ 
    }
    printf("%.6f\n",sum);
    return 0;
    
} 

作业比赛编号 : 100000569 - 《算法笔记》2.5小节——C/C++快速入门->数组

A | 习题6-4 有序插入(repeat)

注意:做这个题之前先搞懂插入排序

#include<stdio.h>
/*
输入 第一行输入以空格分隔的9个整数,要求按照从小到大的顺序输入 
     第二行输入一个整数,将此整数插入到前有序的9个数中,
     使得最终的10个数依然是从小到大有序的 
输出 从小到大输出这10个数,每个数一行
提示 定义数组时,把数组长度定义为10 
*/ 
int main(){
    int a[10],temp;
    int j=10;
    //一次性向数组中输入几个数字中间用空格需要利用循环
    for(int i=1;i<=9;i++){
        scanf("%d",&a[i]);
    } 
    scanf("%d",&temp);
    /*
    类似插入排序
    但由于前面9个数是已经按照大小顺序排好了
    所以只需要比较一趟 
    具体比较办法是从后往前枚举已有序部分来确定插入的位置 
    */ 
    while(j>1 && temp<a[j-1]){
        a[j]=a[j-1];
        j--;
    } 
    a[j]=temp;
    for(int i=1;i<=10;i++){
        printf("%d\n",a[i]);
    }
    
    return 0;
} 
B | 习题6-5 数组元素逆置
#include<stdio.h>
/*
将一个长度为10的整数数组中的值按逆序重新存放
输入 以空格分隔的10个整数
输出 按相反的顺序输出这10个数,每个数占一行 
*/
int main(){
    int str[10],temp;
    for(int i=0;i<=9;i++){
        scanf("%d",&str[i]); 
    }
    for(int i=0;i<=4;i++){
        temp=str[i];    //temp暂存str[i]的值 
        str[i]=str[9-i];
        str[9-i]=temp;
    }
    for(int i=0;i<=9;i++){
        printf("%d\n",str[i]);
    }
    return 0;
}
C | 习题6-6 杨辉三角(repeat)
#include<stdio.h>
/*
输入 正整数n,表示将要输出的杨辉三角的层数
输出 输出n层杨辉三角,每一层的整数之间用一个空格隔开,最多输出10层 
*/

/*
思路:开两个数组,a[10] 和temp[10]
temp用于临时存放由a推导出的下一层
然后某一层推导并打印过后再将temp中的数据存入a中 
*/
int main(){
    int n, a[10] = {1, 1};
    scanf("%d",&n);
    for (int i=1; i<=n; i++){
        if (i == 1) printf("%d\n", a[0]);
        else if (i == 2) printf("%d %d\n", a[0], a[1]);
        else {  /*打印第一、二层以外的其他层*/
            int temp[10];
            temp[0] = 1;
            temp[i-1] = 1;
            int j;
            for (int j=1; j<=i-2; j++){
                temp[j] = a[j-1] + a[j];
            }
            /*打印这一层*/
            for (int k=0; k<=i-1; k++){
                printf("%d ",temp[k]);
            } 
            printf("\n");
            /*更新a[10]即是将temp存入数组a中,以供下一次循环使用*/
            for (int m=0; m<=i-1; m++){
                a[m] = temp[m];
            } 
        }
    }
    return 0;
} 
D | 习题6-12 解密
#include<stdio.h>
#include<string.h>
/*
输入 一行密文
输出 解密后的原文,单独占一行
加密原则:第一个字母变成第26个字母,
          第i个字母变成第(26-i+1)个字母 
          非字符字符不变 
*/

int main() {
    char a[100];
    gets(a);
    for (int i=0; i<=strlen(a); i++) {
        /*利用ASCII*/
        if (a[i] >= 65 && a[i] <= 90) {
            a[i] = 155 - a[i];  //A~Z:65~90
        } else if (a[i] >=97 && a[i] <= 122) {
            a[i] = 219 - a[i]; //a~z:97~122
        }
    }
    puts(a);
    return 0;
} 
E | 习题6-13 字符串比较
#include<stdio.h>
#include<string.h>
/* 比较两个字符串s1和s2的大小,如果s1>s2,则输出一个正数; 
若s1=s2,则输出0;若s1<s2,则输出一个负数。
要求:不用strcpy函数;两个字符串用gets函数读入。
输入 输入2行字符串
输出 一个整数,表示这两个字符串 比较的差值,单独占一行。*/
int main() {
    char str1[100],str2[100]; 
    gets(str1);
    gets(str2);
    int result;
    int L = strlen(str1) < strlen(str2) ? strlen(str1) : strlen(str2);
    for (int i = 0; i < L; i++) {
        result = str1[i] - str2[i];
        if (result != 0) break;
    }
    printf("%d\n", result);
    return 0;
    
}
F | 例题6-1 逆序输出数组元素
#include<stdio.h>
/*
输入 10个整数(存储在一个长度为10的整形数组中),以空格分隔
输出 将输入的10个整数逆序输出,每个数占一行 
*/
int main() {
    int a[10],temp;
    for (int i = 0; i <= 9; i++) {
        scanf("%d", &a[i]);
    }
    for (int i=0; i <=4; i++) {
        temp = a[i];
        a[i] = a[9-i];
        a[9-i] = temp; 
    }
    for (int i = 0; i <= 9; i++) {
        printf("%d\n", a[i]);
    }
    return 0;
}
G | 例题6-2 数组求解Fibonacci数列问题
#include<stdio.h>
/*
要求用数组求解 Fibonacci数列
输出 Fibonacci数列的前20个数,每个数占一行 
*/
int main() {
    int a[100];
    a[0] = 1;
    a[1] = 1;
    for (int i = 2; i <=19; i++) {
        a[i] = a[i-2] + a[i-1];
    }
    for(int i = 0; i <=19; i++) {
        printf("%d\n", a[i]);
    }
} 
H | 例题6-3 冒泡排序
#include<stdio.h>
/*
冒泡排序 
输入 以空格分隔的10个整数
输出 依次输出排好序的10个整数,每个数占一行  
*/  
int main() {
    int a[10];
    for (int i=0; i<=9; i++) {
        scanf("%d",&a[i]);
    }
    for (int i=1; i<=9; i++) { //10个数比较9躺
        //每一趟从a[0]到a[10-j-1]都要与后面一个数比较
        //例如:第一趟时,从a[0]到a[8]都需要和后面一个数进行比较,8=10-1-1 
        for (int j=0; j<=10-i-1; j++) {
            if (a[j] > a[j+1]) {
                int temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
             }
         } 
        
    }
    for (int i=0; i<=9; i++) {
        printf("%d\n",a[i]);
    }
    return 0;
}

I | 例题6-4 矩阵转置

J | 例题6-9 字符串求最大值(repeat)
#include<stdio.h>
#include<string.h> 
/*
输入 3行字符串,每行均为一个字符串 
输出 一行,输出三个字符串中的最大者 
*/ 

int main() {
    //使用strcmp()和strcpy() 
    char str1[50], str2[50], str3[50],max[50];
    gets(str1);
    gets(str2);
    gets(str3);
    if (strcmp(str1, str2) > 0) {
        strcpy(max, str1);
    }else {
        strcpy(max, str2);
    }
    if (strcmp(max, str3) < 0) {
        strcpy(max, str3);
    }
    puts(max);
    return 0;
}

作业比赛编号 : 100000570 - 《算法笔记》2.6小节——C/C++快速入门->函数

A | 习题7-5 字符串逆序存放
B | 习题7-7 复制字符串中的元音字母

作业比赛编号 : 100000571 - 《算法笔记》2.7小节——C/C++快速入门->指针

A | C语言10.1
B | C语言10.2
C | C语言10.10
D | C语言10.15
E | C语言10.16

作业比赛编号 : 100000572 - 《算法笔记》2.8小节——C/C++快速入门->结构体(struct)的使用

A | C语言11.1
B | C语言11.2
C | C语言11.4
D | C语言11.7
E | C语言11.8

作业比赛编号 : 100000574 - 《算法笔记》2.10小节——C/C++快速入门->黑盒测试

A | A+B 输入输出练习I
B | A+B 输入输出练习II
C | A+B 输入输出练习III
D | A+B 输入输出练习IV
E | A+B 输入输出练习V
F | A+B 输入输出练习VI
G | A+B 输入输出练习VII
H | A+B 输入输出练习VIII

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容