第二章

作業(yè)比賽編號(hào) : 100000567 - 《算法筆記》2.3小節(jié)——C/C++快速入門->選擇結(jié)構(gòu)

C例題4-3 比較交換3個(gè)實(shí)數(shù)值,并按序輸出
#include<stdio.h>

//最基礎(chǔ)的指針運(yùn)用于比較大小 
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習(xí)題4-4 三個(gè)整數(shù)求最大值
#include<stdio.h>
int max(int a,int b){
    int result;
    if(a>b) {
        return a;
    }else{
        return b;
    }
    //如果想return一個(gè)值,則返回類型不能用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習(xí)題4-10-1 獎(jiǎng)金計(jì)算
#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;
} 

作業(yè)比賽編號(hào) : 100000568 - 《算法筆記》2.4小節(jié)——C/C++快速入門->循環(huán)結(jié)構(gòu)

A例題5-1-1 連續(xù)自然數(shù)求和
#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 連續(xù)自然數(shù)求和
#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 連續(xù)自然數(shù)求和
#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 連續(xù)自然數(shù)求和
#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 連續(xù)自然數(shù)求和
#include<stdio.h>
int main() {
    // 求1+2+3+...和的程序,要求得到使和數(shù)大于1000的最小正整數(shù)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的近似值,直到發(fā)現(xiàn)某一項(xiàng)的絕對(duì)值
 小于10-6為止(該項(xiàng)不累加)。
 如果需要計(jì)算絕對(duì)值,可以使用C語言數(shù)學(xué)庫(kù)提供的函數(shù)fabs,如求x的絕對(duì)值,則為fabs(x).
 輸出 PI=圓周率的近似值 輸出的結(jié)果總寬度占10位,其中小數(shù)部分為8位。末尾輸出換行。 */
 
int main(){
    double pi=0.0;
    //term表示每一項(xiàng),如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數(shù)列

參考:用數(shù)組和隊(duì)列的方法實(shí)現(xiàn)斐波那契數(shù)列

#include<stdio.h>
//方法一:遞歸 

/*
輸入 一個(gè)不超過50的正整數(shù)
輸出 Fibonacci數(shù)列的第n個(gè)數(shù),末尾輸出換行 
*/
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項(xiàng)之后,即從第47項(xiàng)開始,大小超出int的范圍
因此47項(xiàng)及以后按照此方法輸出的數(shù)都為負(fù)數(shù) 
*/ 
I習(xí)題5-10 分?jǐn)?shù)序列求和

注意一點(diǎn):類型一致的問題

#include<stdio.h>
/*
有分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13,...
求前20項(xiàng)的和
輸出 小數(shù)點(diǎn)后保留6 位小數(shù),末尾輸出換行 
*/
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); 
        /*如果在定義函數(shù)top和bottom時(shí)
        用整型的話最后計(jì)算結(jié)果即使進(jìn)行強(qiáng)制類型轉(zhuǎn)化算出來的也是整數(shù)并且結(jié)果偏差較大 
        因此在定義函數(shù)時(shí)就應(yīng)該用double,那么在main函數(shù)中也不必再進(jìn)行強(qiáng)制類型轉(zhuǎn)換了 
        */ 
    }
    printf("%.6f\n",sum);
    return 0;
    
} 

作業(yè)比賽編號(hào) : 100000569 - 《算法筆記》2.5小節(jié)——C/C++快速入門->數(shù)組

A | 習(xí)題6-4 有序插入(repeat)

注意:做這個(gè)題之前先搞懂插入排序

#include<stdio.h>
/*
輸入 第一行輸入以空格分隔的9個(gè)整數(shù),要求按照從小到大的順序輸入 
     第二行輸入一個(gè)整數(shù),將此整數(shù)插入到前有序的9個(gè)數(shù)中,
     使得最終的10個(gè)數(shù)依然是從小到大有序的 
輸出 從小到大輸出這10個(gè)數(shù),每個(gè)數(shù)一行
提示 定義數(shù)組時(shí),把數(shù)組長(zhǎng)度定義為10 
*/ 
int main(){
    int a[10],temp;
    int j=10;
    //一次性向數(shù)組中輸入幾個(gè)數(shù)字中間用空格需要利用循環(huán)
    for(int i=1;i<=9;i++){
        scanf("%d",&a[i]);
    } 
    scanf("%d",&temp);
    /*
    類似插入排序
    但由于前面9個(gè)數(shù)是已經(jīng)按照大小順序排好了
    所以只需要比較一趟 
    具體比較辦法是從后往前枚舉已有序部分來確定插入的位置 
    */ 
    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 | 習(xí)題6-5 數(shù)組元素逆置
#include<stdio.h>
/*
將一個(gè)長(zhǎng)度為10的整數(shù)數(shù)組中的值按逆序重新存放
輸入 以空格分隔的10個(gè)整數(shù)
輸出 按相反的順序輸出這10個(gè)數(shù),每個(gè)數(shù)占一行 
*/
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 | 習(xí)題6-6 楊輝三角(repeat)
#include<stdio.h>
/*
輸入 正整數(shù)n,表示將要輸出的楊輝三角的層數(shù)
輸出 輸出n層楊輝三角,每一層的整數(shù)之間用一個(gè)空格隔開,最多輸出10層 
*/

/*
思路:開兩個(gè)數(shù)組,a[10] 和temp[10]
temp用于臨時(shí)存放由a推導(dǎo)出的下一層
然后某一層推導(dǎo)并打印過后再將temp中的數(shù)據(jù)存入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存入數(shù)組a中,以供下一次循環(huán)使用*/
            for (int m=0; m<=i-1; m++){
                a[m] = temp[m];
            } 
        }
    }
    return 0;
} 
D | 習(xí)題6-12 解密
#include<stdio.h>
#include<string.h>
/*
輸入 一行密文
輸出 解密后的原文,單獨(dú)占一行
加密原則:第一個(gè)字母變成第26個(gè)字母,
          第i個(gè)字母變成第(26-i+1)個(gè)字母 
          非字符字符不變 
*/

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 | 習(xí)題6-13 字符串比較
#include<stdio.h>
#include<string.h>
/* 比較兩個(gè)字符串s1和s2的大小,如果s1>s2,則輸出一個(gè)正數(shù); 
若s1=s2,則輸出0;若s1<s2,則輸出一個(gè)負(fù)數(shù)。
要求:不用strcpy函數(shù);兩個(gè)字符串用gets函數(shù)讀入。
輸入 輸入2行字符串
輸出 一個(gè)整數(shù),表示這兩個(gè)字符串 比較的差值,單獨(dú)占一行。*/
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 逆序輸出數(shù)組元素
#include<stdio.h>
/*
輸入 10個(gè)整數(shù)(存儲(chǔ)在一個(gè)長(zhǎng)度為10的整形數(shù)組中),以空格分隔
輸出 將輸入的10個(gè)整數(shù)逆序輸出,每個(gè)數(shù)占一行 
*/
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 數(shù)組求解Fibonacci數(shù)列問題
#include<stdio.h>
/*
要求用數(shù)組求解 Fibonacci數(shù)列
輸出 Fibonacci數(shù)列的前20個(gè)數(shù),每個(gè)數(shù)占一行 
*/
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個(gè)整數(shù)
輸出 依次輸出排好序的10個(gè)整數(shù),每個(gè)數(shù)占一行  
*/  
int main() {
    int a[10];
    for (int i=0; i<=9; i++) {
        scanf("%d",&a[i]);
    }
    for (int i=1; i<=9; i++) { //10個(gè)數(shù)比較9躺
        //每一趟從a[0]到a[10-j-1]都要與后面一個(gè)數(shù)比較
        //例如:第一趟時(shí),從a[0]到a[8]都需要和后面一個(gè)數(shù)進(jìn)行比較,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 矩陣轉(zhuǎn)置

J | 例題6-9 字符串求最大值(repeat)
#include<stdio.h>
#include<string.h> 
/*
輸入 3行字符串,每行均為一個(gè)字符串 
輸出 一行,輸出三個(gè)字符串中的最大者 
*/ 

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;
}

作業(yè)比賽編號(hào) : 100000570 - 《算法筆記》2.6小節(jié)——C/C++快速入門->函數(shù)

A | 習(xí)題7-5 字符串逆序存放
B | 習(xí)題7-7 復(fù)制字符串中的元音字母

作業(yè)比賽編號(hào) : 100000571 - 《算法筆記》2.7小節(jié)——C/C++快速入門->指針

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

作業(yè)比賽編號(hào) : 100000572 - 《算法筆記》2.8小節(jié)——C/C++快速入門->結(jié)構(gòu)體(struct)的使用

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

作業(yè)比賽編號(hào) : 100000574 - 《算法筆記》2.10小節(jié)——C/C++快速入門->黑盒測(cè)試

A | A+B 輸入輸出練習(xí)I
B | A+B 輸入輸出練習(xí)II
C | A+B 輸入輸出練習(xí)III
D | A+B 輸入輸出練習(xí)IV
E | A+B 輸入輸出練習(xí)V
F | A+B 輸入輸出練習(xí)VI
G | A+B 輸入輸出練習(xí)VII
H | A+B 輸入輸出練習(xí)VIII

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容