這個作業(yè)屬于哪個課程 | C語言程序設計II |
---|---|
這個作業(yè)要求在哪里 | https://edu.cnblogs.com/campus/zswxy/MS/homework/3206 |
我在這個課程的目標是 | 能夠對相對復雜的問題,合理定義程序的多函數結構;能夠使用遞歸函數進行編程;掌握宏的基本用法;掌握編譯預處理的概念。 |
這個作業(yè)在哪個具體方面幫助我實現(xiàn)目標 | PTA習題 |
參考文獻 | C語言程序設計第10章 |
圓盤數 起始柱 目的柱 過度柱
移動漢諾塔的步驟
每行顯示一步操作,具體格式為:
盤片號: 起始柱 -> 目的柱
其中盤片號從 1 開始由小到大順序編號。
3
a c b
1: a -> c
2: a -> b
1: c -> b
3: a -> c
1: b -> a
2: b -> c
1: a -> c
#include<stdio.h>void Hanio(int n,char a,char c,char b);int main(void){ int n; char a,c,b; scanf("%d %c %c %c",&n,&a,&c,&b); Hanio(n,a,c,b); return 0; } void Hanio(int n,char a,char c,char b) { if(n==1) printf("1: %c -> %c\n",a,c); else{ Hanio(n-1,a,b,c); printf("%d: %c -> %c\n",n,a,c); Hanio(n-1,b,c,a); } }
輸入首先在第一行給出不超過 10 的正整數 N,隨后 N 行,每行給出一句不超過 1000 個字符的、以回車結尾的用戶的對話,對話為非空字符串,僅包括字母、數字、空格、可見的半角標點符號。
按題面要求輸出,每個 AI 的回答前要加上 AI: 和一個空格。
6
Hello ?
Good to chat with you
can you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know
Hello ?
AI: hello!
Good to chat with you
AI: good to chat with you
can you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know
#include<stdio.h>#include<string.h>int main(void){ char str1[1001]; static int i,a,x,y,N,b; scanf("%d\n",&N); char str[N][1001]; for(i=0;i<N;i ){ /*輸入對話,存入二維數組*/ gets(str[i]); } for(b=0;b<N;b ){ /*對輸入的對話一行一行 進行改造*/ i=0; a=0; x=0; while(str[b][i]!='\0'){ /*改造開始,以單個字母進行改變*/ if(str[b][i]==' '&&x==1){ /*多個空格變成一個*/ str1[a]=' '; a ; x=0; } if(str[b][i]!=' '){ /*清除符號前的空格*/ if((str1[a-1]==' ')&&((str[b][i]<'a'||str[b][i]>'z')&&(str[b][i]<'A'||str[b][i]>'Z'))&&((str[b][i]<'0')||(str[b][i]>'9'))){ if(str[b][i]=='?'){ /*改變問號為嘆號*/ str1[--a]='!'; a ; x=1; } else{ str1[--a]=str[b][i]; a ; x=1; } } else{ if(str[b][i]<='Z'&&str[b][i]>='A'&&str[b][i]!='I'){ /*改大寫為小寫*/ str1[a]=str[b][i]-'A' 'a'; a ; x=1; } else{ if(str[b][i]=='?'){ /*改變問號為嘆號*/ str1[a]='!'; a ; x=1; } else{ /*其他字母正常存入*/ str1[a]=str[b][i]; a ; x=1; } } } } i ; /*下一個字母*/ } str1[a]='\0'; /*添加字符串結束標記*/ if(str1[a-1]==' '){ /*去掉字符串最后的空格*/ str1[a-1]='\0'; } i=0; while(str1[i]!='\0'){ /*判斷是否為can you*/ if(str1[i]=='c'&&str1[i 1]=='a'&&str1[i 2]=='n'&&str1[i 3]==' '&&str1[i 4]=='y'&&str1[i 5]=='o'&&str1[i 6]=='u'){ if(((str1[i-1]<'a'||str1[i-1]>'z')&&(str1[i-1]<'A'||str1[i-1]>'Z'))&&((str1[i 7]<'a'||str1[i 7]>'z')&&(str1[i 7]<'A'||str1[i 7]>'Z'))){ str1[i]='I'; /*判斷can you是否獨立(“獨立”是指被空格或標點符號分隔開的單詞)*/ str1[i 1]=' '; str1[i 2]='c'; str1[i 3]='a'; str1[i 4]='n'; str1[i 5]='8'; str1[i 6]='8'; i =7; /*減少判斷量,從can you后的字符繼續(xù)判斷*/ continue; } } /*判斷是否為could you*/ if(str1[i]=='c'&&str1[i 1]=='o'&&str1[i 2]=='u'&&str1[i 3]=='l'&&str1[i 4]=='d'&&str1[i 5]==' '&&str1[i 6]=='y'&&str1[i 7]=='o'&&str1[i 8]=='u'){ if(((str1[i-1]<'a'||str1[i-1]>'z')&&(str1[i-1]<'A'||str1[i-1]>'Z'))&&((str1[i 9]<'a'||str1[i 9]>'z')&&(str1[i 9]<'A'||str1[i 9]>'Z'))){ str1[i]='I'; /*判斷could you是否獨立(“獨立”是指被空格或標點符號分隔開的單詞)*/ str1[i 1]=' '; str1[i 2]='c'; str1[i 3]='o'; str1[i 4]='u'; str1[i 5]='l'; str1[i 6]='d'; str1[i 7]='8'; str1[i 8]='8'; i =7; /*減少判斷量,從could you后的字符繼續(xù)判斷*/ continue; } } /*判斷I是否獨立(“獨立”是指被空格或標點符號分隔開的單詞)*/ if(str1[i]=='I'&&((str1[i-1]<'a'||str1[i-1]>'z')&&(str1[i-1]<'A'||str1[i-1]>'Z'))&&((str1[i 1]<'a'||str1[i 1]>'z')&&(str1[i 1]<'A'||str1[i 1]>'Z'))){ str1[i]='7'; } /*判斷me是否獨立(“獨立”是指被空格或標點符號分隔開的單詞)*/ if((str1[i]=='m'&&str1[i 1]=='e')&&((str1[i-1]<'a'||str1[i-1]>'z')&&(str1[i-1]<'A'||str1[i-1]>'Z'))&&((str1[i 2]<'a'||str1[i 2]>'z')&&(str1[i 2]<'A'||str1[i 2]>'Z'))){ str1[i]='5'; str1[i 1]='6'; i ; } i ; } /*輸出改變后的字符串,'8'轉義為空,('5''6')轉義為you,'7'轉義為you*/ printf("%s\nAI: ",str[b]); y=strlen(str1); for(i=0;i<y;i ){ if(str1[i]=='8') continue; else if(str1[i]=='5'&&str1[i 1]=='6'){ printf("you"); i ; continue; } else if(str1[i]=='7'){ printf("you"); } else printf("%c",str1[i]); } printf("\n"); } }
這一個億我是賺不了了,太復雜了,不會。
細分成一個個的小模塊,然后再合起來也還是蠻難的。
正整數 n (0 < n ≤ 12)
若問題有解,則輸出全部擺法(兩種擺法之間空一行),否則輸出 None。
要求:試探的順序逐行從左往右的順序進行,請參看輸出樣例2。
3
None
6
. Q . . . .. . . Q . .. . . . . QQ . . . . .. . Q . . .. . . . Q .. . Q . . .. . . . . Q. Q . . . .. . . . Q .Q . . . . .. . . Q . .. . . Q . .Q . . . . .. . . . Q .. Q . . . .. . . . . Q. . Q . . .. . . . Q .. . Q . . .Q . . . . .. . . . . Q. . . Q . .. Q . . . .
遞歸求解迷宮最短通道的總步長。輸入一個迷宮,求從入口通向出口的可行路徑中最短的路徑長度。為簡化問題,迷宮用二維數組 int maze[10][10]來存儲障礙物的分布,假設迷宮的橫向和縱向尺寸的大小是一樣的,并由程序運行讀入, 若讀入迷宮大小的值是n(3<n<=10),則該迷宮橫向或縱向尺寸都是n,規(guī)定迷宮最外面的一圈是障礙物,迷宮的入口是maze[1][1],出口是maze[n-2][n-2], 若maze[i][j] = 1代表該位置是障礙物,若maze[i][j] = 0代表該位置是可以行走的空位(0<=i<=n-1, 0<=j<=n-1)。求從入口maze[1][1]到出口maze[n-2][n-2]可以走通的路徑上經歷的最短的總步長。要求迷宮中只允許在水平或上下四個方向的空位上行走,走過的位置不能重復走。
輸入迷宮大小的整數n, 以及n行和n列的二維數組(數組元素1代表障礙物,0代表空位)
若有可行的通道則輸出一個整數,代表求出的通道的最短步長;若沒有通道則輸出"No solution"
10
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 1 0 1
1 0 0 1 0 0 0 1 0 1
1 0 0 0 0 1 1 0 0 1
1 0 1 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0 0 1
1 0 1 1 1 0 1 1 0 1
1 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
上述輸入代表的是如下這樣一個迷宮:
14
第十二周的教學內容是:第十一章 指針進階
請大家查閱資料,思考如下問題:
請舉實例解釋以下幾個概念:數組指針,指針數組,指針函數,函數指針,二級指針,單向鏈表。(無實例不給分)
請用自己的理解回答。如果有引用他人的文字,請一定要標出出處(使用Markdown的鏈接方式)。
時間 | 代碼行 | 博客字數 | 用時(h) | 知識點 |
---|---|---|---|---|
3.19~3.20 | 100 | 500 | 10h | 二維數組的使用;選擇排序和冒泡排序法 |
3.26~3.29 | 150 | 1200 | 6h | 如何定義和使用指針;掌握字符串的基本概念及使用方法,重點理解字符串與一維字符數組的區(qū)別、字符串的存儲以及字符串的操作方法。 |
4.2~4.5 | 85 | 1862 | 6h | 理解變量、內存單元和地址之間的關系;掌握如何定義指針變量,怎樣使用指針變量,怎樣進行指針變量的初始化;掌握指針變量的基本運算;理解指針作為函數參數的作用;掌握如何使用指針實現(xiàn)函數調用返回多個值。 |
4.10~4.12 | 109 | 2068 | 6h | 掌握數組名作為函數參數的用法,理解指針、數組和地址之間的關系,理解指針和數組可以實現(xiàn)相同的操作。 |
4.17~4.19 | 128 | 1892 | 10h | 掌握常用字符串函數以及使用指針操作字符串的方法,掌握動態(tài)內存分配 |
4.24~4.26 | 84 | 1884 | 8h | 能夠根據實際情況合理定義結構,能夠使用結構變量與結構數組進行熟練編程,掌握結構指針的操作,并應用于函數傳遞。 |
5.7~5.10 | 200 | 3000 | 6h | 能夠對相對復雜的問題,合理定義程序的多函數結構;能夠使用遞歸函數進行編程;掌握宏的基本用法;掌握編譯預處理的概念。 |
本周學習了多函數結構,遞歸函數,宏,還是不怎么了解,題目好復雜。
一個問題兩人做不動的話,就問題蠻大了。
來源:http://www.icode9.com/content-4-186251.html