當前位置:首頁 » 編程語言 » c語言匹配相似題目
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言匹配相似題目

發布時間: 2022-07-30 02:33:55

A. 問兩道類似的c語言題目,如何來分析,有點混淆了,請高手指導!謝謝!

考察的是break的用法。break可以跳出一個程序段(用{}括起來的一段代碼)或者一層循環(for或者while)。
對於程序1,先對y賦值,再跳出。對於程序2,直接跳出了,對y進行賦值的語句就沒有被執行,所以程序1的輸出為0,程序2的輸出還是-1。

B. 大一C語言題目求解(箱子匹配)

//不用數組,就直接比較。三個數最大比三次。若數據較多可改成鏈表存儲,按照鏈表來排序

#include<stdio.h>
struct xiangzi{int side1;int side2;int side3;};
struct xiangzi sortNoArray(struct xiangzi xzT){
if(xzT.side1>xzT.side2){
xzT.side1=xzT.side1^xzT.side2;
xzT.side2=xzT.side1^xzT.side2;
xzT.side1=xzT.side1^xzT.side2;
};
if(xzT.side2>xzT.side3){
xzT.side2=xzT.side2^xzT.side3;
xzT.side3=xzT.side2^xzT.side3;
xzT.side2=xzT.side2^xzT.side3;
};
if(xzT.side1>xzT.side2){
xzT.side1=xzT.side1^xzT.side2;
xzT.side2=xzT.side1^xzT.side2;
xzT.side1=xzT.side1^xzT.side2;
};
return xzT;
}
int main() {
unsigned int T;

scanf("%d",&T);
while(T--){
struct xiangzi xzA,xzB;
scanf("%d%d%d",&xzA.side1, &xzA.side2,&xzA.side3);
xzA=sortNoArray(xzA);
scanf("%d%d%d",&xzB.side1, &xzB.side2,&xzB.side3);
xzB=sortNoArray(xzB);
if(xzA.side1<=xzB.side1&&xzA.side2<=xzB.side2&&xzA.side3<=xzB.side3)
printf("yes ");
else printf("no ");
}
return 0;
}

C. 急!!急!!急!!數據結構(C語言版)程序設計題: 使用KMP演算法實現一個模式匹配。

#include <cstring>

#include <iostream>

using namespace std;

//修正後的求next數組各值的函數代碼

void get_nextval(char const* ptrn, int plen, int* nextval)

{

int i = 0; //i是從0開始的

nextval[i] = -1;

int j = -1;

while( i < plen-1 )

{

if( j == -1 || ptrn[i] == ptrn[j] ) //循環的if部分

{

++i;

++j;

if( ptrn[i] != ptrn[j] ) //++i,++j之後,再次判斷ptrn[i]與ptrn[j]的關系

nextval[i] = j;

else

nextval[i] = nextval[j];

}

else //循環的else部分

j = nextval[j];

}

}

void print_progress(char const* src, int src_index, char const* pstr, int pstr_index)

{

cout<<src_index<<"\t"<<src<<endl;

cout<<pstr_index<<"\t";

for( int i = 0; i < src_index-pstr_index; ++i )

cout<<" ";

cout<<pstr<<endl;

cout<<endl;

}

//int kmp_seach(char const*, int, char const*, int, int const*, int pos) KMP模式匹配函數

//輸入:src, slen主串

//輸入:patn, plen模式串

//輸入:nextval KMP演算法中的next函數值數組

int kmp_search(char const* src, int slen, char const* patn, int plen, int const* nextval, int pos)

{

int i = pos;

int j = 0;

while ( i < slen && j < plen )

{

if( j == -1 || src[i] == patn[j] )

{

++i;

++j;

}

else

{

j = nextval[j];

//當匹配失敗的時候直接用p[j_next]與s[i]比較,

//下面闡述怎麼求這個值,即匹配失效後下一次匹配的位置

}

}

if( j >= plen )

return i-plen;

else

return -1;

}

int main()

{

std::string src = "";

std::string prn = "abac";

int* nextval = new int[prn.size()];

//int* next = new int[prn.size()];

get_nextval(prn.data(), prn.size(), nextval);

//get_next(prn.data(), prn.size(), next);

for( int i = 0; i < prn.size(); ++i )

cout<<nextval[i]<<"\t";

cout<<endl;

cout<<"result sub str: "<<src.substr( kmp_search(src.data(), src.size(), prn.data(), prn.size(), nextval, 0) )<<endl;

system("pause");

delete[] nextval;

return 0;

}
望樓主採納!

D. C語言題目 輸入密碼看是否匹配

姓名部分較簡單,你可以自己寫。
口令部分寫好了。
密碼輸入:允許回退鍵更正輸入,回車結束輸入

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main()
{
char p[50];
char UserName[50]="student";
char password[50]="iamtiger";
int i=0;
int n;
printf("Please enter your name:\n");
scanf("%s",UserName);
n=0;
Loop:
i=0;
printf("Please enter your passwd:\n");
fflush(stdin);
while ( i < 50 ){
p[i] = getch();
if (p[i] == '\r') break;
if (p[i] == '\b') { i=i-1; printf("\b \b"); } else {i=i+1;printf("*");};
}
p[i]='\0';
if ( strcmp(password,p)==0) printf("\npasswd is right!\n");
else {
printf("\npassword wrong\n");
n++;
if (n>=3) { printf("Err bye !\n"); return 0;} else goto Loop;
};
return 0;
}

E. c語言數據類型轉換規則 類似題目:

表達式的結果double型的,但是由於c是float型,所以表達式的賦值結果還是float型

F. C語言題目

1, printf的格式匹配順序是從左向右,對應的%x和%o表示以十六進制和八進制格式輸出,把91轉化成16進制是61,8進制是141;c語言中兩個連續的百分號可以看成是一個整體,作用是列印出一個百分號,然後緊跟的一個d當作字元輸出,如果d前面再加一個%號,答案就要選D,沒有加就選C,第一題就解決了

2,printf(」%d,%0」,(a=a+l,a+b,b),a+'a'-'A',b);根據格式匹配,b不會輸出,我們可以看成printf(」%d,%0」,(a=a+l,a+b,b),a+'a'-'A');首先看(a=a+l,a+b,b),這是一個逗號表達式,書上講到,逗號表達式取最右邊表達式的值,因此這個表達式的十進制數就是b,也就是20,這個要記住。然後看a+'a'-'A'這個表達式,由於a='A',所以就是'A'+'a'-'A',所以就是'a'了,a的ASCII碼是97,轉換成16進制就是141

3,這個其實是考察字元串以'\0'結束的問題,static char x[] ="abcde"; 表示x其實是一個字元串,要求以'\0'結束,它的長度和{'a','b','c','d','e', '\0'}; 是一樣的,這下就知道選哪個答案了吧。

5,這道題實際是考察strcat函數的功能。strcat(p1,p2)實際上是把p2追加到p1的後面,所以是abcABC阿

6,這道題目實際上考察指針和數組的區別,記得在《POINTER ON C》的中文版中寫道:數組具有確定數量的元素,指針只是一個標量值,只有當數組名在表達式中使用時,編譯器才會為它產生一個指針常量。注意,這里說的是指針常量,不是指針變數。兩外根據左值規定,常量不能做左值。看到這點,你就明白為什麼會出錯了,因為在6題中的a += 2,這個時候數組名a在表達式中,因此a變成了指針常量,然而a += 2試圖修改一個常量的值,肯定出錯。

7,看看strlen(strcpy(s1,s2)); 這條語句的功能是先將s2拷貝到s1中,然後計算字元串s1的長度。你既然選對了,我就不多說了,很簡單。

9,這道題也沒有什麼多說的吧,pow(y,fabs(x));pow函數的原型是double pow(double x, double y);表示求x的y次方。fabs表示求一個浮點數的絕對值。實際上pow(y,fabs(x))就是pow(2.0,fabs(3.0)),也就是2.0的3.0次方,8.00000;

10,這道題你沒有寫清楚吧。估計就是考一個條件表達式。

11,這道題有點意思,如果是考試,我肯定也會做錯,主要是設置了一個break語句的陷阱。由於x = 0;所以有限執行case O:switch(y==2)
{ case 1:printf(」*」);break; case 2:printf(」%」);break;} 這個能列印出"*"(原因: y == 2的條件為真),然後執行break語句跳出switch(y==2)這個switch語句,陷阱就在這里,case 0這條語句後面沒有出現break語句,所以這個程序又會執行,case 1這個條件,然後又會根據z的值列印出"#"。 因此列印出 *# 。

12,這個不難,d = (a>b>c) ,把這條語句分解,引入一個變數x, 這條語句分解成, x = (a > b ); d = (x > c);由於a > b 成立,因此x = 1; 然而x < c; 所以d = 0;

13,這個選對了就不說了;主要是考察if語句中的條件表達式,語句要以分號結束。scanf語句需要對a加取地址符。

14, 這個對if語句一層一層的看下來就可以了。判斷if(x < y) ,成立,判斷if( y!=10 ), 也成立,然後判斷if(!ok1) (等價於if (ok1 == 0)),由於ok1 = 5;所以表達式為假,執行else if(ok2) (等價於else if( ok2 != 0)),由於ok2 = 0, 所以不成立,繼續往下走,就執行a = -1;因此結果就是-1;

終於回答完了!!!!很久沒有遇到這么有意思的問題了。

G. C語言類似斐波那契數列的題

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int n,i,x,y;
double s,temp;
s=0;x=2;y=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
s=s+1.0*x/y;
temp=x;//用一個臨時變數存放x
x=x+y;//經歷了這個過程 x不再是原來的值了 所以你寫的y=x就錯了
y=temp;
}
printf("%.2lf\n",s);
system("pause");
return 0;
}

H. C語言題目 幫幫忙

1.c
if(i+ +%5= =0)
if(+ +i%8= =0) printf("%d",i);
i++是先操作後自增,所以相當於i%5==0;i=i+1;
++i是先自增再操作,所以相當於i=i+1;i%8==0
所以只有32適合 32 % 8 == 0 32 - 2 % 5 ==0
2.d
int fun (double x[10],int *n)
沒什麼好介紹的,只要理解數組名可以當成是指向數組開始地址的指針就行了,當然跟真正的指針還有差別,就是它不能做左值

3.b
int k[2][3], *pk[3];
k是個二維整型數組,這個容易理解;pk是個一維整型指針數組,存放的內容是一個整型指針,所以B)pk[0]=&k[1][2]; 是正確的,再看其他三個:
a:A)pk=k; k是個int *[2][3]的指針而pk是int *[3]的指針,類型不匹配
c:C)pk=k[0]; 同上
d:D)pk[1]=k; pk[1]是整型指針,而k是個int *[2][3]的指針,類型不匹配

4.b 這個不用怎麼解釋了吧,需要注意的是int x[3][2]={0},將數組所有初始化成0,而且scanf("%d",x[i]);x[i]其實相當於&x[i][0];所以x[0][0]:2,x[1][0]:4, x[0][1]沒有賦值,所以為初始化值0,所以結果是2 0 4

5.d
a:strcpy(y,x[4]); x[4]其實是並不是指針,而是指針的內容e,這里必須是char *
b:strcpy(+ +y,&x[1]); 數組y不能作為左值,這里++y相當於y=y+1,是不允許的,因為數組y可以看成是常量指針,它的指向的地址是不能修改的
c:strcpy(s=y+5,x); c雖然編譯沒有錯誤,但是復制的值不夠長了,相當於s=&y[5],這樣只是是5-9五個值,但是x有10個值
d:復制長度剛剛好,類型也匹配,所以d是正確的

6.c
只需要理解fseek(fp,-2L,SEEK_END); 是指從文件最後開始,到-2L(L表示-2為long類型)個字元,而c中字元串是以0結尾的,也就是字元實際上是abcd0,所以-2剛好就是指向c(下標0開始)

I. c語言字元串匹配問題

#include<stdio.h>

#include<ctype.h>

#include<string.h>
#include<stdlib.h>

#define MAXSIZE 10240

#define WORDSIZE 256

int main()

{

int isCaseSensitive , totalInput , totalLength=0, length;

int i = 0 ;

char* line_addr, *lines_ , *line_addr_;

char lines[MAXSIZE];

char word[WORDSIZE];

lines_ = lines;
scanf("%s\n",word);//輸入要查找的字元串S

scanf("%d\n",&isCaseSensitive);//是否大小寫敏感

scanf("%d\n",&totalInput);//多行文字的行數
for(line_addr=lines;i<totalInput; i++){//輸入多行文字
gets(line_addr);

length = strlen(line_addr);

line_addr += length + 1;

totalLength += length + 1;

}

//大小寫不敏感,全部當成小寫對待
if(!isCaseSensitive){

i = 0;

while(word[i]){
word[i] = tolower(word[i]);
i++;
}
lines_ = (char*)malloc(totalLength);
for(i=0 ; i< totalLength; i++){
lines_[i] = tolower(lines[i]);
}

}

i = 0;

line_addr = lines ;
line_addr_ = lines_;
while(i < totalInput){

if(strstr(line_addr_,word) != NULL){//查找是否包含了字元串S
puts(line_addr);
}

line_addr += strlen(line_addr) + 1;
line_addr_ += strlen(line_addr_) + 1;
i ++ ;

}
return 0;
}

J. c語言的括弧匹配問題

#include <stdio.h>

#include <stdlib.h>

int main()

{

int i,count;

char ch[10001],ch1[10001];

while(gets(ch)!=NULL)

{

count=-1;

for(i=0;ch[i]!='';i++)

{

if(ch[i]=='('||ch[i]=='['||ch[i]=='<'||ch[i]=='{')

{

ch1[++count]=ch[i];

}

else

{

if(ch[i]-ch1[count]<3)

{

count--;

}

else

{

break;

}

}

}

if(count==-1)

printf("YES ");

else

printf("NO ");

}

return 0;

}