大一c語言入門題目,大一c語言入門題目大全

本文目錄一覽:

大一C語言編程題?

車票根據題意兩兩站點連線生成,金額和數量分別用隨機數。

數據存儲:站點,車票,用戶分別為3個結構體,用於對應數據庫。

購買流程:檢查輸入數值有效性-檢查車票庫存-購買成功同步修改用戶購買流水及車票庫存。(這裡題目需求不明確,沒有指明用戶購買方式),我的代碼允許一個用戶同時購買多種票,每種票可分批購買多張。購買流水記錄自動增加和更新。

退票流程:檢查輸入和用戶購買記錄,同步更新用戶及車票信息。

刪除流程:選擇刪除沒有被用戶購買的票(函數檢查所有用戶,雖然本題只要一個用戶,實際傳參用戶數組首地址)。

PS: 這個題目涉及到增刪改,用鏈表來寫更好,但考慮你學習範圍,沒有使用鏈表而是動態數組,動態數組刪除,考慮內存佔用,不僅要需循環移位還要釋放多餘地址。

另外整體程序,異常的處理我只是單純返回0或者1或者-1區分基本的成功與失敗。你如想對個別異常進行特殊處理,自行修改返回值,接收判斷。

下面是代碼:

#include stdio.h

#include stdlib.h

#include string.h

#include time.h

#include windows.h

#include conio.h

#define MS 5//最大站點數

typedef struct station

{

  char sid[10];

  char sName[20];

}STN;

typedef struct ticket

{

  int tid;//票編號

  STN *ssP;//起始站

  STN *tsP;//終點站

  int value;//票價

  int number;//數量

}TKT;

typedef struct userInfo//用戶

{

  char uid[20];//身份證號

  int cnt;//購買的票種類數量

  int *btids;//購買的所有票id數組

  int *btNum;//購買的所有票數量數組

}UIFO;

int init(STN stns[MS],TKT **tkts);//初始化車站、票數據

int disAllTickets(TKT *tkts);

int buyTicket(UIFO *uifo,TKT *tkts);//異常返回0

int reTicket(UIFO *uifo,TKT *tkts);//異常返回0

int showMenu(UIFO *uifo,TKT *tkts);

int delIntByIndex(int *nums,int len,int index);//通過下標index刪除動態整型數組nums對應元素,並釋放多餘地址,返回刪除後的數組長度,異常返回-1

int delTkts(UIFO *uifos,int len,TKT *tkts);//刪除指定票(檢查用戶組,只要有一個用戶購買,無法刪除)

int cnt;//票種類數量

int main()

{

  STN stns[MS];

  TKT *tkts=NULL;

  UIFO uifo={“321002199902050614”,0,NULL,NULL};

  srand(time(NULL));

  cnt=init(stns,tkts);

  printf(“共生成%d組票(每組往返兩種票,共%d種票)\n\n”,cnt/2,cnt);

  printf(“按任意鍵繼續。。。。\n”),getch();

  system(“cls”);

  showMenu(uifo,tkts);

  return 0;

}

int showMenu(UIFO *uifo,TKT *tkts)

{

  int n=5;

  printf(“(1) Buy ticket\n”);

  printf(“(2) Refund ticket\n”);

  printf(“(3) Remove ticket\n”);

  printf(“(4) Display all tickets\n”);

  printf(“(0) Exit\n”);

  while(n0 || n4)

      scanf(“%d”,n);

  switch(n)

  {

      case 0: return 0;

      case 1: if(!buyTicket(uifo,tkts)) return 0;break;

      case 2: if(!reTicket(uifo,tkts)) return 0;break;

      case 3: if(!delTkts(uifo,1,tkts)) return 0;break;

      //這裡刪除功能,用戶多名,要傳數組首地址,由於演示只有一個用戶(len=對應用戶數),所以只傳該用戶地址(len=1)

      case 4: disAllTickets(tkts);break;

  }

  showMenu(uifo,tkts);

  return 1;

}

int disAllTickets(TKT *tkts)

{

  int i;

  for(i=0;icnt;i++)

      printf(“編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d\n”,tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

  printf(“按任意鍵繼續。。。。\n”),getch();

  system(“cls”);

  return 1;

}

int delIntByIndex(int *nums,int len,int index)

{

  int i,*temp=NULL;

  if(indexlen-1) return -1;

  for(i=index;ilen-1;i++)

      nums[i]=nums[i+1];

  len–;

  if(len)

  {

      temp=(int *)realloc(nums,sizeof(int)*len);

      if(!temp) return -1;

      nums=temp;

  }

  else

      free(nums);

  return len;

}

int reTicket(UIFO *uifo,TKT *tkts)

{

  int i,j,tid,n,index,len,flag=0;

  printf(“當前用戶購買記錄:\n”);

  for(i=0;iuifo-cnt;i++)

  {

      for(j=0;jcnt;j++)

          if(tkts[j].tid==uifo-btids[i]) index=j;

      printf(“–車票編號:%d,起末站:%s-%s,購買票數:%d\n”,uifo-btids[i],tkts[index].ssP-sName,tkts[index].tsP-sName,uifo-btNum[i]);

  }

  printf(“請輸入要退票的車票id及票數:”),scanf(“%d%d”,tid,n);

  for(i=0;iuifo-cnt;i++)

      if(uifo-btids[i]==tid uifo-btNum[i]=n)

      {

          for(j=0;jcnt;j++)

              if(tkts[j].tid==uifo-btids[i]) tkts[j].number+=n;//同步修改對應車票剩餘票數

          uifo-btNum[i]-=n;//用戶購買記錄修改

          if(uifo-btNum[i]==0)//某種車票全部退完,刪除該條記錄

          {

              len=delIntByIndex(uifo-btNum,uifo-cnt,i);

              if(len==-1) return 0;

              len=delIntByIndex(uifo-btids,uifo-cnt,i);

              if(len==-1) return 0;

              uifo-cnt=len;

          }

          flag=1;

          break;

      }

  if(flag)

      printf(“退票成功!\n”);

  else

      printf(“無此購買記錄或輸入數量不符合\n”);

  printf(“按任意鍵繼續。。。。\n”),getch();

  system(“cls”);

  return 1;

}

int buyTicket(UIFO *uifo,TKT *tkts)

{

  char spn[20],tpn[20];

  int i,n=-1,index=-1,*temp=NULL;

  for(i=0;icnt;i++)

      printf(“編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d\n”,tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

  printf(“請輸入始發站站名和終點站站名:”),scanf(“%s%s”,spn,tpn);

  for(i=0;icnt;i++)

      if(strcmp(tkts[i].ssP-sName,spn)==0 strcmp(tkts[i].tsP-sName,tpn)==0)

      {

          printf(“車票%s-%s 票價:%3d 剩餘票數:%d\n”,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

          index=i;

          break;

      }

  if(index==-1)

      printf(“購買失敗!無此路程的車票\n”);

  else

  {

      while(n=0)

      {

          printf(“請輸入要購買的數量(大於0):”),scanf(“%d”,n);

          if(tkts[index].numbern)

              printf(“錯誤:車票數量不足或者輸入數值超出範圍!請重新輸入!\n”),n=-1;

      }

      for(i=0;iuifo-cnt;i++)//檢查用戶購買記錄,重複票累加購買數量,不同票新增記錄

      {

          if(uifo-btids[i]==tkts[index].tid)

          {

              printf(“該票已購買了%d張,現再次購買%d張,累計購買了%d張\n”,uifo-btNum[i],n,uifo-btNum[i]+n);

              uifo-btNum[i]+=n;

              tkts[index].number-=n;

              break;

          }

      }

      if(i==uifo-cnt)//未檢查到重複記錄,新增

      {

          if(!uifo-btids)

          {

              uifo-btids=(int *)malloc(sizeof(int));

              if(!uifo-btids) return 0;

              uifo-btNum=(int *)malloc(sizeof(int));

              if(!uifo-btNum) return 0;

          }

          else

          {

              temp=(int *)realloc(uifo-btids,sizeof(int)*(uifo-cnt+1));

              if(!temp) return 0;

              uifo-btids=temp;

              temp=(int *)realloc(uifo-btNum,sizeof(int)*(uifo-cnt+1));

              if(!temp) return 0;

              uifo-btNum=temp;

          }

          uifo-btids[uifo-cnt]=tkts[index].tid;

          printf(“該票購買了%d張\n”,(uifo-btNum[uifo-cnt]=n));

          tkts[index].number-=n;

          uifo-cnt++;

          printf(“用戶購買記錄:\n”);

          for(i=0;iuifo-cnt;i++)

              printf(“–車票編號:%d,購買票數:%d\n”,uifo-btids[i],uifo-btNum[i]);

      }

      printf(“本次成功購買了%s-%s的票%d張!\n”,tkts[index].ssP-sName,tkts[index].tsP-sName,n);

  }

  printf(“按任意鍵繼續。。。。\n”),getch();

  system(“cls”);

  return 1;

}

int delTkts(UIFO *uifos,int len,TKT *tkts)//len:所有購買的用戶數量

{

  int i,j,k,tid,flag=0,index;

  for(i=0;icnt;i++)

      printf(“編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d\n”,tkts[i].tid,tkts[i].ssP-sName,tkts[i].tsP-sName,tkts[i].value,tkts[i].number);

  printf(“請輸入要刪除的車票編號:”),scanf(“%d”,tid);

  for(i=0;icnt;i++)

      if(tid==tkts[i].tid)

      {

          index=i;

          flag=1;

          for(j=0;jlen;j++)//檢查所有用戶購買記錄

          {

              for(k=0;kuifos[j].cnt;k++)

                  if(uifos[j].btids[k]==tid)

                  {

                      flag=0;

                      printf(“該票已被用戶購買,無法刪除,需先完成退票!\n”);

                      break;

                  }

              if(!flag)

                  break;

          }

          break;

      }

  if(!flag) printf(” 刪除失敗,輸入數值超出範圍或不可刪除!\n”);

  else

  {

      cnt–;

      if(cnt==0)

      {

          free(tkts[index].ssP);

          free(tkts[index].tsP);

          free(tkts[index]);

      }

      else

      {

          free(tkts[index].ssP);

          free(tkts[index].tsP);

          for(i=index;icnt;i++)

              tkts[i]=tkts[i+1];

          tkts[cnt].ssP=NULL;

          tkts[cnt].tsP=NULL;

          free(tkts[cnt]);

      }

      printf(” 刪除成功!\n”);

  }

  printf(“按任意鍵繼續。。。。\n”),getch();

  system(“cls”);

  return 1;

}

int init(STN stns[MS],TKT **tkts)

{

  TKT *tTemp=NULL;

  int i,j,n,v,cnt=2;

  static int id=1;

  printf(“生成站點:\n”);

  for(i=0;iMS;i++,id++)

  {

      sprintf(stns[i].sid,”車站%03d”,id);

      sprintf(stns[i].sName,”SN%03d”,id);

      printf(“—-站點名:%s。站點ID:%s\n”,stns[i].sid,stns[i].sName);

  }

  printf(“計算所有站點連線,生成車票(票是往返,所以一次生成往返兩組票):\n”);

  for(i=0;iMS;i++)

      for(j=i+1;jMS;j++)

      {

          if(!(*tkts))

          {

              *tkts=(TKT *)malloc(sizeof(TKT)*2);

              if(!(*tkts)) return -1;

          }

          else

          {

              tTemp=(TKT *)realloc((*tkts),sizeof(TKT)*cnt);

              if(!tTemp) return -1;

              *tkts=tTemp;

          }

          n=rand()%4+2;//每種票隨機2~5張(保證總數大於20)

          v=rand()%201+50;//隨機生成票價50~250

          (*tkts)[cnt-1].tid=cnt;

          (*tkts)[cnt-1].ssP=stns[i];

          (*tkts)[cnt-1].tsP=stns[j];

          (*tkts)[cnt-1].value=v;

          (*tkts)[cnt-1].number=n;

          (*tkts)[cnt-2].tid=cnt-1;

          (*tkts)[cnt-2].ssP=stns[j];

          (*tkts)[cnt-2].tsP=stns[i];

          (*tkts)[cnt-2].value=v;

          (*tkts)[cnt-2].number=n;

          printf(“—-%s和%s的之間往返票各生成%d張,票價為%d(隨機)\n”,stns[i].sName,stns[j].sName,n,v);

          cnt+=2;

      }

  return cnt-2;

}

//答題不易,如採納的,請不要無故刪除問題。

大一c語言考試題(急)

1、C源程序文件的擴展名是( .C );編譯後生成的文件名後綴是( .OBJ );經過連接後生成文件

名後綴是( .exe ); 在VC++6.0中用Run命令運行當前程序時,運行的程序擴展名是( .exe )。

2、結構化程序的三種基本結構是( 順序、選擇 、循環 )。

3、整型常量有三種表示方法,它們是( 十進制整數 )、( 八制整數 )、( 十六整數 )。

4、表達式3.5+1/2+56%10 的值是( 9.5 );10/10和10%10的值各是(1和0)。

5、表達式3%3*3的值是( 0 );5/3*3的值是( 3 );3*6%4的值是( 2 )。

6、設int x=12;執行x+=x-=x*x後,x 的值是( -264 )。

7、表達式k=7,k+=k-=k+1的值是( -2 )。

8、語句”printf(“%x,%o”,16,12);”的輸出結果是( 10,14 )。

9、設short x,y; y=(x=3,x+2,++x,x++*2);則x,y的值各是( 5 , 8 )。

10、設int x,y,z,t; x=y=z=1; t=++x||++y++z;則y的值是( 1 )。

11、條件10=x20 或x=0的C語言表達式是( x=10×20||x=0 )

12、設a=1,b=2,c=3,d=4;表達式ab?a:cd?a:d的值是( 1 )。

13、在 C 程序中,用( 1)表示邏輯值“真”。

14、表示“x≥y≥z”的C表達式是 ( x=yy=z )。

15、設x為int型變量,請寫出一個關係表達式( (x%21==0) ),用以判斷x同時為3和7的倍數時

,關係表達式的值為真。

16、 設ch是字符型變量,判斷ch為英文字母的表達式是: (

ch=’z’ch=’a’||ch=’A’ch=’Z’ )。

17、在C語言中參數的傳遞總是採用( 單向 )傳遞。

18、如果return 表達式;中”表達式”的類型與函數類型不一致,則以( 函數類型 )的類型為準

自動轉換;如果實際參數的類型與形式參數的類型不一致, 則以( 形式參數 )的類型為準自動轉

換。

19、函數形式參數在( 調用 )時分配內存,( 調用結束 )時釋放內存。

20、系統總是為數組分配( 連續 )的一塊內存。

21、字符串的結束標誌是(ASCII碼的0 )。

22、TC系統為任何指針變量分配的內存是( 4 )字節。

23、若有定義:double x[3][5]; 則x數組中行下標的下限為( 2 ),列下標的上限為( 4 )。

24、若有定義int x=3,*p;則使p指向變量x的賦值語句為( p=x )。

25、在C 語言程序中,在函數內部定義的變量稱為( 局部變量)。

26、char a[2][10]={“123”,”123456789”}, *p[2]={“123”,”123456789”}; 則(前者 )

佔用內存多。

27、struct st { char num[5]; int a[4]; float ave; } a,*p; 則變量a和p在內存各

占( 25和4 )字節。

28、union un { int i; char c;} ;

struct st { int v[4]; double t; union un k; }w, *pw; pw=w;

變量w佔用( 28 )字節; 通過w 訪問v[0]的形式是( w.v[0] );通過w訪問成員c的形式是(w.k.c

);通過pw訪問v[0]的全部形式有( pw-v[0] ,*(pw-v) );通過pw訪問成員c的全部形式有(

(pw-k.c) )。(實驗驗證,pw-k-c這種書寫有錯誤直接用.也是錯誤)

29、設fp是文件指針,要把字符變量ch的內容寫入文件,可用的語句有(

fputc(ch,fp);fwrite(ch,1,1,fp); )。

30、fputs(str, fp)函數的功能是( 將數據str寫入fp文件流中 )。

{29題不能用 fputs(ch,fp);由於ch只有一個字符,如果用這句的話,會因為沒有字符串結束標

志而寫入很長的數據。從實驗中得出。}

涉及到窮舉的題目,像28、29可能沒有列舉完全其他題目都是經過vc++6.0驗證過的。

大一C語言題目求解

c=n[0][j]+n[1][j]-2*’0’;——把對應字符相加變成了數字相加,如第一次是’0’+’8′-2*’0’結果就是數字0+8==8。第二次得到’8’+’9′-2*’0’==17,相應地第三次是10,最後一次是17。後面n[0][j]=c%10+’0’;又相應地把第一次的得數8+了’0’變成了字符’8’並存儲到n[0]的最後一位,並且如果結果大於等於10時只取個位(由c%10實現);所以第二次得到的是’7’,第三次得到的是’0’,最後得到的是’7’。所以最後輸出是7078和9198。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/185351.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 12:19
下一篇 2024-11-26 12:19

相關推薦

  • Python wordcloud入門指南

    如何在Python中使用wordcloud庫生成文字雲? 一、安裝和導入wordcloud庫 在使用wordcloud前,需要保證庫已經安裝並導入: !pip install wo…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python豎線圖:從入門到精通

    Python豎線圖,即Python的繪圖工具matplotlib中的一種圖形類型,具有直觀、易於理解的特點,適用於各種數據分析和可視化場景。本文從初學者角度出發,介紹Python豎…

    編程 2025-04-29
  • Python語法大全解析

    本文旨在全面闡述Python語法,並提供相關代碼示例,幫助讀者更好地理解Python語言。 一、基礎語法 1、Python的注釋方式 # 這是單行注釋 “”” 這是多行注釋,可以注…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • 二級考級舞蹈大全目錄

    本文將從以下多個方面對二級考級舞蹈大全目錄進行詳細闡述。 一、目錄結構 二級考級舞蹈大全目錄主要分為三級,即一級目錄、二級目錄和三級目錄。其中,一級目錄為舞蹈類型,二級目錄為舞蹈名…

    編程 2025-04-29

發表回復

登錄後才能評論