1. 程式人生 > 實用技巧 >實驗2:wonderful

實驗2:wonderful

首先非常感謝老師及同學們對我的幫助,使我終於找到了截圖工具

(果然還是我的問題,怎麼能怪電腦呢?)

正片開始——實驗2

1.任務1

#include<stdio.h>
int main(){
    int a=5,b=7,c=100,d,e,f;
    
    
    d=a/b*c;
    e=a*c/b;
    f=c/b*a;
    printf("d=%d,e=%d,f=%d\n",d,e,f);
    
    return 0;
} 

從理論上分析,變數d的值是0,e的值是71,f的值是70

實際執行結果:

與理論符合得很好

line6-8中的算術表示式為(不好用鍵盤表示,只能用文字輔助了):

6.a/b取整再乘c

7.先是a乘以c再除以b,再對整個求整

8.先是c除以b求整,再乘以a

變數d,e,f的計算結果不同的原因是沒有考慮整型變數或誤解了整型變數的適用範圍

2.任務2

#include<stdio.h>
int main(){
    int x=1234;
    float f=123.456;
    double m=123.456;
    char ch='a';
    char a[]="Hello,world!";
    int y=3,z=4;
    
    
    
    printf("%d %d\n",y,z);
    printf(
"y=%d, z=%d\n",y,z); printf("8d,%2d\n",x,x); printf("%f, %8f, %8.1f,%0.2f, %.2e\n",f,f,f,f,f); printf("%lf\n",m); printf("%3c\n",ch); printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); return 0; }

執行結果:

經本人仔細查閱得知以下格式符及其用法

%d 從鍵盤輸出十進位制整數

%c 從鍵盤輸出一個位元組

%f 從鍵盤輸出一個實數(%e和%f作用相同,%lf輸出double的變數)

%s 從鍵盤輸出一個字串

PS:若在格式符%和d,f,c,s等字母之間加上常數則表示輸出常數位,加上l則表示輸出長X型資料

3.任務3

修改後程式碼

#include<stdio.h>
int main(){
    double x,y;
    char c1,c2,c3;
    int a1,a2,a3;
    
    scanf("%d%d%d",&a1,&a2,&a3);
    printf("%d,%d,%d\n",a1,a2,a3);
    
    scanf(" %c %c %c",&c1,&c2,&c3);
    printf("%c%c%c\n",c1,c2,c3);
    scanf("%lf,%lf",&x,&y);
    printf("%lf,%lf\n",x,y);
    
    return 0;
}

主要難在如何正確輸入上

n次未正確輸入結果:

然後迫不得已求助各路大佬才得知正確的輸入方法:

方法1:1空格2空格3abc1.5,2.5

方法2: 1回車2回車3回車9(空格)a空格或回車b空格或回車c空格或回車1.5,2.5

(PS:某位高年級大佬說a前面加個空格可以使輸入和輸出正常,因為程式會把空格自動識別為%c,所以在%c前加一個空格就能在輸入時把空格或逗號那種字元

吞掉從而使輸入輸出正確,有點費解,嗯——不過現在我不加空格也可以使程式正常運行了)

正確輸入結果(2種方法之一)

4.任務4

填寫暢通無阻

#include<stdio.h>
int main(){
    char x;
    
    x=getchar();
    
    
    if(x>='0'&&x<='9')
       printf("%c是數字字元\n",x);
    else if(x>='a'&&x<='z'||x>='A'&&x<='Z')
       printf("%c是英文字元\n",x);
    else
       printf("%c是其它字元\n",x);
       
       
       return 0;
} 

執行結果

(1)數字字元

正常

(2)英文字元

也正常

(3)其它字元

輸入用英文輸入法輸入的符號時

正常

然額

當輸入用中文輸入法輸入的¥

????????????????????????????????????????????????????????

Why?

5.任務5

也還好操作

int main() {
    char ans1, ans2;
    
    printf("複習了沒? (輸入y或Y表示複習了,輸入n或N表示沒複習) :  ");
    ans1 = getchar();  
    
    getchar(); 
    
    printf("\n動手敲程式碼了沒? (輸入y或Y表示敲了,輸入n或N表示木有敲) :  ");
    ans2 = getchar();
    
    if(ans1=='y'||ans1=='Y'&&ans2='y'||ans2='Y')
        printf("\n羅馬不是一天建成的:)\n");    
    else
        printf("\n羅馬不是一天毀滅的。。。\n");

    return 0;
} 

執行結果

截圖截得參差不齊(已人工對齊),不過執行倒是正常的

6.任務6

真心不太會搞,上網學習來的(這個程式僅用來算2的n次方)

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    unsigned long long sum;
    printf("請輸入要計算的N次方:");
    scanf("%d",&n);
    sum=pow(2,n);
    printf("%llu",sum);
    return 0; 
}

執行結果

然後應用這個自己編譯了一個求和程式

可同時輸出2的n次和其總和

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    unsigned long long sum;
    printf("請輸入要計算的N次方:");
    scanf("%d",&n);
    sum=pow(2,n);
    
    printf("%d\n",sum);
    int s;
    s=2*sum-2;
    printf("%d",s);
    
    return 0; 
}

執行結果(有兩張照片粘在一起了,弄不開了emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm)

NICE-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PS:1.pow(x,y)函式的作用是計算x的y次方,x,y及函式值都是double型,要求原始碼用#include<stdio.h>和#include<math.h>

2.%llu對應的資料型別為unsigned long long,這是C語言用來表示整數的最大型別

3.請允許我在程式中所作的小小的補充

7.任務7

矩陣小人太難了,我只實現了小人的顏色變換和移動,而且我還不能同時實現這2個目標

碰巧之前向某學習愛好者學習了顏色變換的技巧(滑稽)....................................................................................................................................................................

剛開啟程式碼,我驚了

這是什麼鬼畫符???????????????????????????????????????????????

現在正常了

#include<stdio.h>

#include<stdlib.h>

int main()

{

    int i;

    for (i = 1; i <= 250;)

    {

        system("color 1"); 

        system("color 2");

        system("color 3");

        system("color 4");

        system("color 5");

        system("color 6");

        system("color a");

        printf("你牛逼的我無話可說\t");



        i = i + 0.03125;

    }



    return 0;

}

然後就實現了(以下只是部分顏色)

鑑於以上基礎

我實現了會變色的縱向appear小人

程式碼附上——

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

int main()

{

    int i;

    for (i = 1; i <= 250;)

    {

        system("color 1"); 

        system("color 2");

        system("color 3");

        system("color 4");

        system("color 5");

        system("color 6");

        system("color a");
        printf(" O\n");
        printf("<H>\n");
        printf("I I\n");
        
        
    }
        return 0;
}
            

效果圖(視訊咋上傳?)

顏色可變噢

由於個人經驗不足和獵奇心理,又上網學習了怎樣使小人水平移動

程式碼2附上

#include<stdio.h>

#include<stdlib.h>
#include<windows.h>
int main(){
    int i;
    int a,b;
    a=0;

    for (i = 1; i <= 250;)

    {

        system("color 1"); 

        system("color 2");

        system("color 3");

        system("color 4");

        system("color 5");

        system("color 6");

        system("color a");
        
        
        while(a<=80)
        {
            system("cls");
            b=1;
            while(b<=a)
            {
                printf(" ");
                b=b+1;
                
            }
            printf(" O\n");
            
            b=1;
            while(b<=a)
            {
                printf(" ");
                b=b+1;
            }
            printf("<H>\n");
            
            b=1;
            while(b<=a)
            {
                printf(" ");
                b=b+1;
            }
            printf("I I\n");
            
            Sleep(300);
            a=a+1;
        i=i+0.03125;    
        }

但不知為啥,小人移動時只呈現綠色,只有停下時才呈現顏色變換。

為什麼不能同時呈現呢?

效果圖奉上——

(1)移動過程中

(2)停下來時

在學長的細心指導下,現在闊以了

#include <stdio.h>

#include <stdlib.h>
#include <windows.h>
int main()
{
    int i;
    int a, b;
    a = 0;

    for (i = 1; i <= 250;i = i + 0.03125)

    {
        a=0;

        while (a <= 80)
        {
            system("color 1");
            system("color 2");
            system("color 3");
            system("color 4");
            system("color 5");
            system("color 6");
            system("color a");
            
            system("cls");
            b = 1;
            while (b <= a)
            {
                printf(" ");
                b = b + 1;
            }
            printf(" O\n");

            b = 1;
            while (b <= a)
            {
                printf(" ");
                b = b + 1;
            }
            printf("<H>\n");

            b = 1;
            while (b <= a)
            {
                printf(" ");
                b = b + 1;
            }
            printf("I I\n");

            Sleep(300);
            a = a + 1;
        }
    }

    return 0;
}

效果圖3(部分顏色,4張截圖)

實驗總結

1.本次實驗中出現了許多讓我無法解釋的現象

我在上面都提到了:

(1)

(2)

堅信發現問題比解決問題更重要,奧利給——

但問題

還是要解決的

在此向各路大佬們致以崇高的敬意——

2.知識點整理Time

3.Addition

(1)能不能把體會感受及分享的內容和實驗部分結合在一起呢?我覺得這樣更方便書寫和閱讀,感受也會更豐富自然一些

(2)我想分享的大都在以上實驗裡了,歡迎閱讀

(3)做了一下午了,碼字不易,給個好評吧

最後

謝謝所有看到最後的人!