c语言字符串算法判断实验原理,C语言第二次实验报告
一.實(shí)驗(yàn)題目,設(shè)計(jì)思路,實(shí)現(xiàn)方法
第十一次作業(yè)(二維數(shù)組):
11-5 打印楊輝三角(20 分)
本題要求按照規(guī)定格式打印前N行楊輝三角。
輸入格式:
輸入在一行中給出N(1≤N≤10)。
輸出格式:
以正三角形的格式輸出前N行楊輝三角。每個(gè)數(shù)字占固定4位。
輸入樣例:
6
輸出樣例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
思路:楊輝三角是一道經(jīng)典的數(shù)學(xué)題目,看到輸出樣例,我們可以很容易的相到用二維數(shù)組,之后先打印為1的數(shù),然后利用數(shù)學(xué)方法,一個(gè)元素的值等于上面相鄰兩個(gè)元素的和,然后控制好打印空格與換行。
實(shí)現(xiàn)方法:C語(yǔ)言中的二維數(shù)組,以及對(duì)下標(biāo)的數(shù)學(xué)運(yùn)算。
二.部分源程序
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];
}
}
}
三.遇到的問(wèn)題及解決方法,心得體會(huì)
此題首先要想到率先打印1的元素,才好進(jìn)行運(yùn)算,還有一個(gè)點(diǎn)是簡(jiǎn)單數(shù)學(xué)方法的應(yīng)用,a[i][j]=a[i-1][j-1]+a[i-1][j],此題難度不高,盡量能做到一遍通過(guò)。
第十二次作業(yè)(字符串)
一.實(shí)驗(yàn)題目,設(shè)計(jì)思路,實(shí)現(xiàn)方法
12-6 字符串轉(zhuǎn)換成十進(jìn)制整數(shù)(15 分)
輸入一個(gè)以#結(jié)束的字符串,本題要求濾去所有的非十六進(jìn)制字符(不分大小寫(xiě)),組成一個(gè)新的表示十六進(jìn)制數(shù)字的字符串,然后將其轉(zhuǎn)換為十進(jìn)制數(shù)后輸出。如果在第一個(gè)十六進(jìn)制字符之前存在字符“-”,則代表該數(shù)是負(fù)數(shù)。
輸入格式:
輸入在一行中給出一個(gè)以#結(jié)束的非空字符串。
輸出格式:
在一行中輸出轉(zhuǎn)換后的十進(jìn)制數(shù)。題目保證輸出在長(zhǎng)整型范圍內(nèi)。
輸入樣例:
+-P-xf4+-1!#
輸出樣例:
-3905
思路:第一步是先慮去不和法的字符。
二.對(duì)合法字符進(jìn)行進(jìn)制轉(zhuǎn)換運(yùn)算。
三.對(duì)數(shù)字的的正負(fù)進(jìn)行判斷。
實(shí)現(xiàn)方法:先將字符串讀入到數(shù)組之中,然后對(duì)每一項(xiàng)進(jìn)行考究。
二.部分源程序
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(chǎn)‘&&a[i]<=‘f‘){
number=number*16+a[i]-‘a(chǎn)‘+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;
} } }}
三.遇到的問(wèn)題及解決方法,心得體會(huì)
此題慮去不合法字符后,還要對(duì)合法字符進(jìn)行分類討論,有時(shí)候會(huì)分不清楚,還有“如果在第一個(gè)十六進(jìn)制字符之前存在字符“-”,則代表該數(shù)是負(fù)數(shù)”,這個(gè)設(shè)下了一個(gè)小陷阱,要對(duì)正負(fù)標(biāo)志進(jìn)行專門(mén)的判斷。
第十三次作業(yè)(指針)
一.實(shí)驗(yàn)題目,設(shè)計(jì)思路,實(shí)現(xiàn)方法
13-5 判斷回文字符串(20 分)
本題要求編寫(xiě)函數(shù),判斷給定的一串字符是否為“回文”。所謂“回文”是指順讀和倒讀都一樣的字符串。如“XYZYX”和“xyzzyx”都是回文。
函數(shù)接口定義:
bool palindrome( char *s );
函數(shù)palindrome判斷輸入字符串char *s是否為回文。若是則返回true,否則返回false。
裁判測(cè)試程序樣例:
#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
思路:率先定義一個(gè)指針指向這個(gè)字符串,然后頭尾相互比較字符是否相等,如果相等向中間移動(dòng),否則判斷不為回文字符。
實(shí)現(xiàn)方法:按照題目給定的條件與主函數(shù),利用指針判斷。
二.部分源程序
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;
三.遇到的問(wèn)題及解決方法,心得體會(huì)
先要計(jì)算出字符串的長(zhǎng)度,因?yàn)闆](méi)有“string.h”的頭文件,就for(int i=0;s[i]!=‘\0‘;i++)count++;來(lái)計(jì)算,若用指針?biāo)汩L(zhǎng)度,要記得指回頭,還有如果
第十四次實(shí)驗(yàn)報(bào)告(指針與結(jié)構(gòu))
一.實(shí)驗(yàn)題目,設(shè)計(jì)思路,實(shí)現(xiàn)方法
14-5 指定位置輸出字符串(20 分)
本題要求實(shí)現(xiàn)一個(gè)函數(shù),對(duì)給定的一個(gè)字符串和兩個(gè)字符,打印出給定字符串中從與第一個(gè)字符匹配的位置開(kāi)始到與第二個(gè)字符匹配的位置之間的所有字符。
函數(shù)接口定義:
char *match( char *s, char ch1, char ch2 );
函數(shù)match應(yīng)打印s中從ch1到ch2之間的所有字符,并且返回ch1的地址。
裁判測(cè)試程序樣例:
#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;
}
思路:核心思想還是分類討論,對(duì)出現(xiàn)的字符是否會(huì)在字符串內(nèi)進(jìn)行分析,如果兩個(gè)都在字符串內(nèi)輸出什么,如果第二個(gè)不在字符串內(nèi)輸出什么,
如果都不在字符串內(nèi)輸出什么。
實(shí)現(xiàn)方法:對(duì)指針的靈活運(yùn)用,以及指向字符數(shù)組的分析。
二.部分源程序
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;
三.遇到的問(wèn)題及解決方法,心得體會(huì)
這題本來(lái)問(wèn)題不大,但是有一句很重要的一句話:返回ch1的地址。這句話導(dǎo)致了一個(gè)很重要的測(cè)試點(diǎn)一直讓我過(guò)不去,就是兩個(gè)字符都不在字符串內(nèi)的時(shí)候要輸出的是兩個(gè)空行,
但是其中一個(gè)空行是要ch1的地址指向,不能直接輸出,這個(gè)問(wèn)題點(diǎn)困擾我好久,第二天早上在食堂突發(fā)奇想才明白。
第十五次作業(yè):
一.實(shí)驗(yàn)題目,設(shè)計(jì)思路,實(shí)現(xiàn)方法
15-5 建立學(xué)生信息鏈表(20 分)
本題要求實(shí)現(xiàn)一個(gè)將輸入的學(xué)生成績(jī)組織成單向鏈表的簡(jiǎn)單函數(shù)。
函數(shù)接口定義:
void input();
該函數(shù)利用scanf從輸入中獲取學(xué)生的信息,并將其組織成單向鏈表。鏈表節(jié)點(diǎn)結(jié)構(gòu)定義如下:
struct stud_node {
int????????????? num;????? /*學(xué)號(hào)*/
char???????????? name[20]; /*姓名*/
int????????????? score;??? /*成績(jī)*/
struct stud_node *next;??? /*指向下個(gè)結(jié)點(diǎn)的指針*/
};
單向鏈表的頭尾指針保存在全局變量head和tail中。
輸入為若干個(gè)學(xué)生的信息(學(xué)號(hào)、姓名、成績(jī)),當(dāng)輸入學(xué)號(hào)為0時(shí)結(jié)束。
裁判測(cè)試程序樣例:
#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;
三.遇到的問(wèn)題及解決方法,心得體會(huì)
一開(kāi)始對(duì)鏈表不是十分熟悉,不是很懂鏈表創(chuàng)建的問(wèn)題,經(jīng)過(guò)對(duì)建立學(xué)生信息庫(kù)的多次練習(xí)才明白,鏈表的強(qiáng)大之處以及鏈表結(jié)點(diǎn)的創(chuàng)建,以及對(duì)指針的應(yīng)用更加
得心應(yīng)手。
總結(jié)
以上是生活随笔為你收集整理的c语言字符串算法判断实验原理,C语言第二次实验报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java mqtt客户端_java 实现
- 下一篇: 心理学博士vs计算机博士,零基础跨专业考