C語言作業(yè)

2018.7.17 00:23由于CSDN文章有審核機制誊稚,晚上等了兩個多小時沒人審核假丧,故搬家至此

之前作業(yè)

7.16 Lec5

//鏈表排序輸出輸入的整數(shù)
//by Gallien
#include <stdio.h>
#include <stdlib.h>
struct node
{
    int n;
    struct node * pNext;
};
int main(void)
{
    struct node *pHead = NULL, *pEnd = NULL, *pNode = NULL, *Judge1 = NULL, *Judge2 = NULL, *oldHead=NULL;
    int i = 1;
    printf("Please input a integer:\n");
    printf("en by inputing 0:");
p1:
    do
    {
        scanf("%d",&i);
        if(0!=i)
        {
            pNode = (struct node *)malloc(sizeof(struct node));
            if(NULL!=pNode)
            {
                pNode->n=i;
                pNode->pNext=NULL;
                if(NULL == pHead)
                {
                    pHead = pNode;
                    pEnd = pNode;
                }
                else
                {                               //要改的地方审胚,老師的程序的這里是把新輸入的數(shù)放到結(jié)尾恕沫,應(yīng)改為判斷位置然后插入
                    Judge1 = pHead;             //利用兩個指針Judge1,Judge2,byGallien來判斷應(yīng)該插入在哪里
                    if (pHead->n<i)
                    {
                        if (pHead==pEnd)        //如果pHead=pEnd绞呈,那么鏈表中此時只有一個數(shù)贸人,且前置條件為鏈表中的那個數(shù)小于pNode中存的數(shù)
                        {
                            pHead->pNext=pNode;     //故這里操作為把pNode加在pHead后面
                            pEnd=pNode;
                            continue;
                        }
                        else
                            Judge2=pHead->pNext;
                    }
                    else
                    {
                        oldHead = pHead;            //若pNode中的數(shù)比pHead中的還小,只需加在pHead前就行
                        pHead = pNode;
                        pHead->pNext = oldHead;
                        continue;
                    }
                    while (Judge2->n<i)             //此循環(huán)用于定位到底該插在哪里佃声,當結(jié)構(gòu)中的n有如下關(guān)系時停止:Judge1<pNode<=Judge2
                    {
                        if (Judge2 == pEnd)         //特殊情況艺智,若pNode比鏈表中所有數(shù)都大,我們就把它接在鏈表后面
                        {
                            pEnd->pNext = pNode;
                            pEnd = pNode;
                            goto p1;                //因為符合兩個Judge中間的插入操作接在循環(huán)后面圾亏,故特殊情況接在結(jié)尾后應(yīng)跳轉(zhuǎn)至總循環(huán)前十拣,故用goto
                        }
                        else
                        {
                            Judge1 = Judge2;            //把Judge1封拧,Judge2往后推一位的操作
                            Judge2 = Judge2->pNext;
                        }
                    }
                    Judge1->pNext = pNode;              //當循環(huán)結(jié)束的時候,若到了這里夭问,說明已經(jīng)找到了插入的地方泽西,插入即可
                    pNode->pNext = Judge2;
                }                                       //修改結(jié)束
            }
        }
    }while(i!=0);
    pNode = pHead;
    while(pNode!=NULL)
    {
        printf("%d\t",pNode->n);
        pHead = pNode;
        pNode = pNode->pNext;
        free(pHead);
    }
    printf("\n");
    return 0;
}

7.17 Lec6
encrypt

//加密程序  用法:在cmd用進入到exe文件所在路徑
//然后輸入exe名 空格 將被加密的文件名 即可,例如encrypt.exe data.txt
//輸出的密文的文件名為locked.txt
//by Gallien
#include <stdio.h>
int main(int argc,char *argv[])         //有參數(shù)的主函數(shù)甲喝,讀取字符串
{
    FILE *fp, *lock;
    char ch;
    fp = fopen(argv[1],"r");    //將exe后面第一個字符串作為被打開文件名字
    lock = fopen("locked.txt","w+");    //創(chuàng)建一個txt文件用于寫入被加密后的文本
    if (fp == NULL)
    {
        printf("can't open %s",argv[1]);    //若當前目錄無次文件則失敗并提醒用戶
        return 0;
    }
    while((ch = getc(fp)) != EOF)   //讀到文件結(jié)尾
        fprintf(lock,"%c",ch-25);   //加密尝苇,每個字符對于ASCII碼中編碼數(shù)小25的字符
    fclose(fp);
    fclose(lock);
    printf("Ok!");
    return 0;
}

decrypt

//解密程序  用法:在cmd用進入到exe文件所在路徑
//然后輸入exe名 空格 將被加密的文件名 即可,例如decrypt.exe locked.txt
//輸出的解密文件名為unlocked.txt
//by Gallien
#include <stdio.h>
int main(int argc,char *argv[])
{
    FILE *fp, *unlock;
    char ch;
    fp = fopen(argv[1],"r");
    unlock = fopen("unlocked.txt","w+");
    if (fp == NULL)
    {
        printf("can't open %s",argv[1]);
        return 0;
    }
    while((ch = getc(fp)) != EOF)
        fprintf(unlock,"%c",ch+25);
    fclose(fp);
    fclose(unlock);
    printf("Ok!");
    return 0;
}

大作業(yè)
main放一個.cpp埠胖,類的聲明放一個.h糠溜,類的實現(xiàn)放一個.cpp里
由于沒怎么學(xué)過CPP,其實我還是用C的想法來寫的這題直撤,完全沒有CPP的思想非竿,把老師分的幾個模塊給統(tǒng)一到了Solve_and_Write里了,所以private里也去掉了T

//需要一個支持C99或者更高標準的編譯器
//計算二維方塊中特定初始條件下的溫度演變數(shù)據(jù)
//可由用戶決定的數(shù)據(jù)為分割長度(delta_x),間隔時間(delta_t)(0.1-0.5) 和 總時間(T)
//若想修改其他參數(shù)則需從本文件宏部分更改然后編譯即可
//交了作業(yè)后才發(fā)現(xiàn)其實老師的頻率函數(shù)設(shè)置是有道理的
//因為這是有限元法谋竖,delta_t得取得比較小红柱,如果取大了,甚至?xí)霈F(xiàn)負溫度的結(jié)果
//所以可以優(yōu)化一下蓖乘,給輸出部分的代碼設(shè)一個計數(shù)器來輸出自己想要的間隔
//比如delta_t設(shè)為0.5锤悄,但是想要10000秒的數(shù)據(jù),就可以設(shè)每200次(即100s)輸出一次
//當然這個最好也是由用戶決定嘉抒,所以還得在用戶那里多獲取一個參數(shù)來確定輸出頻率
//by Gallien
#include <iostream>
#include "Heat2D.h"
#include "Heat2D.cpp"
#define SIZE 100.0      //不建議改零聚,因為中心高溫處
#define k_left 0.05
#define k_right 0.5
#define Heat_Capacity 2.0
#define Density 5.0
using namespace std;
int main()
{
    cout << "This program is used for solveing a particular probleme and output some datas."<<endl;     //與用戶交互并提示獲取一些解題所需信息
    cout << "Please set the parameters for your own probleme before the program work."<<endl;
    cout << endl << "<WARNING>: There would be many txt files, so please move the exe file to an empty folder"<<endl<<endl;     //建議用戶把exe程序移至空文件夾,因為生成文件過多些侍,怕混亂
    float delta_x,delta_t,Time;
    cout << "Please set the length of the divided square:"<<endl;
    cin >> delta_x;
    cout << "the time interval (delta t, better chosen among 0,1  0.2  0.3  0.4  0.5):"<<endl;
    cin >> delta_t;
    cout << "the time T:"<<endl;
    cin >>  Time;
    Heat2D myproblem(SIZE,delta_x,delta_t,Time);       //創(chuàng)建類
    myproblem.SetPhysicalParameters(k_left,k_right,Heat_Capacity,Density);      //設(shè)置物理參數(shù)隶症,更改參數(shù)請在本文件頭部更改
    myproblem.Solve_and_Write(Time);
    return 0;
}
 //類的聲明
class Heat2D
{
private:
    float m_Size;       //大方塊長度
    float m_delta_x;    //分割長度
    int m_N;            //分割段數(shù)
    float dt;           //時間間隔
    int m_N_time;     //注意這里并非時間,而是時間個數(shù)
    float m_t_end;      //總時間by Gallien
    double m_const_left;     //左邊半塊的系數(shù)
    double m_const_right;    //右邊半塊的系數(shù)
public:     
    Heat2D(float size,float delta_x,float delta_t,float Time);
    void SetPhysicalParameters(float k1,float k2,float c, float rou);           //設(shè)置物理參數(shù)的函數(shù)
    void Solve_and_Write(float t_end);
};
//成員函數(shù)
#include <stdio.h>
Heat2D::Heat2D(float size,float delta_x,float delta_t,float Time)
{
    m_Size = size;
    m_delta_x = delta_x;
    m_N = (int)(size/delta_x)+1;
    dt = delta_t;
    m_t_end = Time;
    m_N_time =(int)(Time/delta_t);
}

void Heat2D::SetPhysicalParameters(float k1,float k2,float c, float rou)
{
    m_const_left = (k1*dt)/(c*rou*m_delta_x*m_delta_x);
    m_const_right = (k2*dt)/(c*rou*m_delta_x*m_delta_x);
}

void Heat2D::Solve_and_Write(float t_end)
{
    float T[m_N][m_N];
    float Tnext[m_N][m_N];
    ///設(shè)置初始條件/////////////////////////////////////////////////////////////////////////////////////////////
    int x,y,t;
    for (x = 0;x < m_N;x++)
        for (y = 0;y <m_N;y++)
            T[x][y]=0.;       //先把背景0度給設(shè)了
    for (x = 0;x < m_N;x++)
    {
        T[x][0] = 500.;
        T[x][m_N-1] = 500.;     //左右邊五百度的賦值
    }
    for (x = 0;x <m_N;x++)
        for (y = 0;y<m_N;y++)
            if (    ((x*1.)/(m_N-1)*100 >= 45)&&
                    ((y*1.)/(m_N-1)*100 >= 45)&&
                    ((x*1.)/(m_N-1)*100 <= 55)&&
                    ((y*1.)/(m_N-1)*100 <= 55)      )//判斷點是否在2000度的范圍內(nèi),若在岗宣,則賦值
                T[x][y] = 2000.;
    FILE *fp;
    for (t = 0;t <= m_N_time;t++)
    {   ///計算下一時刻的方陣/////////////////////////////////////////////////////////////////////////////////
        for (x = 1;x < m_N-1;x++)     //計算下一時刻除去四邊的值
            for(y = 1;y < m_N-1;y++)
            {
                if (y <= m_N/2)     //左側(cè)賦值
                    Tnext[x][y] = (int)((m_const_left*(T[x-1][y]+T[x+1][y]+T[x][y-1]+T[x][y+1]-4*T[x][y])+T[x][y])*100)/100.;
                else            //右側(cè)賦值
                    Tnext[x][y] = (int)((m_const_right*(T[x-1][y]+T[x+1][y]+T[x][y-1]+T[x][y+1]-4*T[x][y])+T[x][y])*100)/100.;
            }
        for (y = 1;y < m_N-1;y++)        //計算Tnext上下邊界的值
        {
            Tnext[0][y] = Tnext[1][y];
            Tnext[m_N-1][y] = Tnext[m_N-2][y];
        }
        for (x = 0;x < m_N;x++)         //為左右邊界賦值
        {
            Tnext[x][0] = 500.;
            Tnext[x][m_N-1] =500.;
        }
        ///為每個時刻創(chuàng)建文件并輸出數(shù)據(jù)///////////////////////////////////////////////////////////////////////////
        char name[20];
        sprintf(name,"t=%.1fs.txt",t*dt);
        fp = fopen(name,"w+");
        for (x = 0;x < m_N;x++)             //輸出數(shù)據(jù)所用循環(huán)
        {
            for (y = 0;y <m_N;y++)
                fprintf(fp,"%-8.1f",T[x][y]);
            fprintf(fp,"\n" );
        }
        fclose(fp);
        printf("OK for t=%-5.1fs !\n", dt*t);  //為每個時刻文件輸出成功說明蚂会,若程序出錯則可判斷哪個時刻開始錯誤
        ///T時刻繼承Tnext的數(shù)據(jù)//////////////////////////////////////////////////////////////////////////////////
        for(x = 0;x <m_N;x++)
            for(y = 0;y <m_N;y++)
                T[x][y] = Tnext[x][y];
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耗式,隨后出現(xiàn)的幾起案子胁住,更是在濱河造成了極大的恐慌,老刑警劉巖纽什,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扔涧,死亡現(xiàn)場離奇詭異昭躺,居然都是意外死亡厉亏,警方通過查閱死者的電腦和手機价捧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來让蕾,“玉大人浪规,你說我怎么就攤上這事或听。” “怎么了笋婿?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵誉裆,是天一觀的道長。 經(jīng)常有香客問我缸濒,道長足丢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任庇配,我火速辦了婚禮斩跌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捞慌。我一直安慰自己耀鸦,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布啸澡。 她就那樣靜靜地躺著袖订,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗅虏。 梳的紋絲不亂的頭發(fā)上洛姑,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音皮服,去河邊找鬼吏口。 笑死,一個胖子當著我的面吹牛冰更,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昂勒,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蜀细,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了戈盈?” 一聲冷哼從身側(cè)響起奠衔,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎塘娶,沒想到半個月后归斤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡刁岸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年脏里,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虹曙。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡迫横,死狀恐怖番舆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矾踱,我是刑警寧澤恨狈,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站呛讲,受9級特大地震影響禾怠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贝搁,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一吗氏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧徘公,春花似錦牲证、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至等太,卻和暖如春捂齐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缩抡。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工奠宜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞻想。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓压真,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蘑险。 傳聞我的和親對象是個殘疾皇子滴肿,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海帶_4bbc閱讀 767評論 1 2
  • 曾經(jīng)有一份美好的愛情放在我的面前我沒有珍惜呵俏。等到失去后才后悔莫及堆缘。如果可以再對小李說。毛欣想說普碎。這輩子無緣再牽手吼肥。...
    毛欣與小李閱讀 2,613評論 0 13
  • 每個人在不同的時間地點都有可能發(fā)生失控,自控不是你說有就有的! 昨天帶著部門同事轉(zhuǎn)賣場潜沦,當發(fā)現(xiàn)多產(chǎn)品有出樣但是沒有...
    宇文東林閱讀 163評論 1 1
  • 旁觀了一場盛會萄涯,當某知名歌星出場時,滿場歡呼唆鸡,熒光棒舞動涝影,許多人離開座位,圍在舞臺的兩側(cè)争占,一起放聲高歌燃逻。而我...
    我就是七彩熊貓閱讀 342評論 0 0
  • 人人都想進步伯襟,想讓自己變得更好,這是人類最本質(zhì)的自戀的需求握童。 讀書絕對是最便捷且成本最低的讓自己變好的方式姆怪,沒有之...
    Dr彭的文字和她的日子閱讀 530評論 6 7