c语言字符串算法判断实验原理,C语言第二次实验报告
一.實驗題目,設計思路,實現方法
第十一次作業(二維數組):
11-5 打印楊輝三角(20 分)
本題要求按照規定格式打印前N行楊輝三角。
輸入格式:
輸入在一行中給出N(1≤N≤10)。
輸出格式:
以正三角形的格式輸出前N行楊輝三角。每個數字占固定4位。
輸入樣例:
6
輸出樣例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
思路:楊輝三角是一道經典的數學題目,看到輸出樣例,我們可以很容易的相到用二維數組,之后先打印為1的數,然后利用數學方法,一個元素的值等于上面相鄰兩個元素的和,然后控制好打印空格與換行。
實現方法:C語言中的二維數組,以及對下標的數學運算。
二.部分源程序
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
if(j==1)a[i][1]=1;
else if(j==i)a[i][i]=1;
else {
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
三.遇到的問題及解決方法,心得體會
此題首先要想到率先打印1的元素,才好進行運算,還有一個點是簡單數學方法的應用,a[i][j]=a[i-1][j-1]+a[i-1][j],此題難度不高,盡量能做到一遍通過。
第十二次作業(字符串)
一.實驗題目,設計思路,實現方法
12-6 字符串轉換成十進制整數(15 分)
輸入一個以#結束的字符串,本題要求濾去所有的非十六進制字符(不分大小寫),組成一個新的表示十六進制數字的字符串,然后將其轉換為十進制數后輸出。如果在第一個十六進制字符之前存在字符“-”,則代表該數是負數。
輸入格式:
輸入在一行中給出一個以#結束的非空字符串。
輸出格式:
在一行中輸出轉換后的十進制數。題目保證輸出在長整型范圍內。
輸入樣例:
+-P-xf4+-1!#
輸出樣例:
-3905
思路:第一步是先慮去不和法的字符。
二.對合法字符進行進制轉換運算。
三.對數字的的正負進行判斷。
實現方法:先將字符串讀入到數組之中,然后對每一項進行考究。
二.部分源程序
while((a[i]=getchar())!=‘#‘)i++;
a[i]=‘\0‘;
for(i=0;a[i]!=‘\0‘;i++){
if(a[i]>=‘0‘&&a[i]<=‘9‘){
number=number*16+a[i]-‘0‘;h=1;
}else if(a[i]>=‘a‘&&a[i]<=‘f‘){
number=number*16+a[i]-‘a‘+10;h=1;
}else if(a[i]>=‘A‘&&a[i]<=‘F‘){
number=number*16+a[i]-‘A‘+10;h=1;
}
t=i;
if(h==1&&q==1){
q=2;
for(j=0;j
if(a[j]==‘-‘){
flag=-flag;
break;
} } }}
三.遇到的問題及解決方法,心得體會
此題慮去不合法字符后,還要對合法字符進行分類討論,有時候會分不清楚,還有“如果在第一個十六進制字符之前存在字符“-”,則代表該數是負數”,這個設下了一個小陷阱,要對正負標志進行專門的判斷。
第十三次作業(指針)
一.實驗題目,設計思路,實現方法
13-5 判斷回文字符串(20 分)
本題要求編寫函數,判斷給定的一串字符是否為“回文”。所謂“回文”是指順讀和倒讀都一樣的字符串。如“XYZYX”和“xyzzyx”都是回文。
函數接口定義:
bool palindrome( char *s );
函數palindrome判斷輸入字符串char *s是否為回文。若是則返回true,否則返回false。
裁判測試程序樣例:
#include
#include
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
char s[MAXN];
scanf("%s", s);
if ( palindrome(s)==true )
printf("Yes\n");
else
printf("No\n");
printf("%s\n", s);
return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例1:
thisistrueurtsisiht
輸出樣例1:
Yes
thisistrueurtsisiht
輸入樣例2:
thisisnottrue
輸出樣例2:
No
thisisnottrue
思路:率先定義一個指針指向這個字符串,然后頭尾相互比較字符是否相等,如果相等向中間移動,否則判斷不為回文字符。
實現方法:按照題目給定的條件與主函數,利用指針判斷。
二.部分源程序
for(int i=0;s[i]!=‘\0‘;i++)
count++;
if(count==1)
return 1;
count--;
while(count>a)
{
if(*(s+a)==*(s+count))
k=1;
else k=0;
count--;
a++;
}
return k;
三.遇到的問題及解決方法,心得體會
先要計算出字符串的長度,因為沒有“string.h”的頭文件,就for(int i=0;s[i]!=‘\0‘;i++)count++;來計算,若用指針算長度,要記得指回頭,還有如果
第十四次實驗報告(指針與結構)
一.實驗題目,設計思路,實現方法
14-5 指定位置輸出字符串(20 分)
本題要求實現一個函數,對給定的一個字符串和兩個字符,打印出給定字符串中從與第一個字符匹配的位置開始到與第二個字符匹配的位置之間的所有字符。
函數接口定義:
char *match( char *s, char ch1, char ch2 );
函數match應打印s中從ch1到ch2之間的所有字符,并且返回ch1的地址。
裁判測試程序樣例:
#include
#define MAXS 10
char *match( char *s, char ch1, char ch2 );
int main()
{
char str[MAXS], ch_start, ch_end, *p;
scanf("%s\n", str);
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);
return 0;
}
思路:核心思想還是分類討論,對出現的字符是否會在字符串內進行分析,如果兩個都在字符串內輸出什么,如果第二個不在字符串內輸出什么,
如果都不在字符串內輸出什么。
實現方法:對指針的靈活運用,以及指向字符數組的分析。
二.部分源程序
for(i=0;i
if(s[i]==ch1){
p=&s[i];
for(j=i;j
if(s[j]!=ch2)
printf("%c", s[j]);
if(s[j]==ch2){
printf("%c\n", s[j]);
return p;
}
}
printf("\n");
return p;
}
}
s[len-1]=‘\n‘;
p=&s[len-1];
return p;
三.遇到的問題及解決方法,心得體會
這題本來問題不大,但是有一句很重要的一句話:返回ch1的地址。這句話導致了一個很重要的測試點一直讓我過不去,就是兩個字符都不在字符串內的時候要輸出的是兩個空行,
但是其中一個空行是要ch1的地址指向,不能直接輸出,這個問題點困擾我好久,第二天早上在食堂突發奇想才明白。
第十五次作業:
一.實驗題目,設計思路,實現方法
15-5 建立學生信息鏈表(20 分)
本題要求實現一個將輸入的學生成績組織成單向鏈表的簡單函數。
函數接口定義:
void input();
該函數利用scanf從輸入中獲取學生的信息,并將其組織成單向鏈表。鏈表節點結構定義如下:
struct stud_node {
int????????????? num;????? /*學號*/
char???????????? name[20]; /*姓名*/
int????????????? score;??? /*成績*/
struct stud_node *next;??? /*指向下個結點的指針*/
};
單向鏈表的頭尾指針保存在全局變量head和tail中。
輸入為若干個學生的信息(學號、姓名、成績),當輸入學號為0時結束。
裁判測試程序樣例:
#include
#include
#include
struct stud_node {
int??? num;
char?? name[20];
int??? score;
struct stud_node *next;
};
struct stud_node *head, *tail;
void input();
int main()
{
struct stud_node *p;
head = tail = NULL;
input();
for ( p = head; p != NULL; p = p->next )
printf("%d %s %d\n", p->num, p->name, p->score);
return 0;
}
/* 你的代碼將被嵌在這里 */
二.部分源程序
if(head==NULL)
{
head=p;
head->next=NULL;
}
if(tail!=NULL)
tail->next=p;
tail=p;
tail->next=NULL;
三.遇到的問題及解決方法,心得體會
一開始對鏈表不是十分熟悉,不是很懂鏈表創建的問題,經過對建立學生信息庫的多次練習才明白,鏈表的強大之處以及鏈表結點的創建,以及對指針的應用更加
得心應手。
總結
以上是生活随笔為你收集整理的c语言字符串算法判断实验原理,C语言第二次实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java mqtt客户端_java 实现
- 下一篇: 数据库复习资料及课后习题答案