導航:首頁 > 編程語言 > 大學c語言編程題庫

大學c語言編程題庫

發布時間:2024-11-11 19:08:28

A. 求好用的大學C語言刷題軟體

在網上有菜鳥教程,慕課網。慕課網有視頻課,菜鳥教程條理清晰,搭配著看很容易學的,最重要的是動手敲代碼,理解更快,加油~

B. 大一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種票) ",cnt/2,cnt);

printf("按任意鍵繼續。。。。 "),getch();

system("cls");

showMenu(&uifo,tkts);

return 0;

}

int showMenu(UIFO *uifo,TKT *tkts)

{

int n=5;

printf("(1) Buy ticket ");

printf("(2) Refund ticket ");

printf("(3) Remove ticket ");

printf("(4) Display all tickets ");

printf("(0) Exit ");

while(n<0 || n>4)

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;i<cnt;i++)

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

printf("按任意鍵繼續。。。。 "),getch();

system("cls");

return 1;

}

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

{

int i,*temp=NULL;

if(index>len-1) return -1;

for(i=index;i<len-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("當前用戶購買記錄: ");

for(i=0;i<uifo->cnt;i++)

{

for(j=0;j<cnt;j++)

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

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

}

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

for(i=0;i<uifo->cnt;i++)

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

{

for(j=0;j<cnt;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("退票成功! ");

else

printf("無此購買記錄或輸入數量不符合 ");

printf("按任意鍵繼續。。。。 "),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;i<cnt;i++)

printf("編號:%2d 路程:%s-%s 票價:%3d 剩餘票數:%d ",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;i<cnt;i++)

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

{

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

index=i;

break;

}

if(index==-1)

printf("購買失敗!無此路程的車票 ");

else

{

while(n<=0)

{

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

if(tkts[index].number<n)

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

}

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

{

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

{

printf("該票已購買了%d張,現再次購買%d張,累計購買了%d張 ",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張 ",(uifo->btNum[uifo->cnt]=n));

tkts[index].number-=n;

uifo->cnt++;

printf("用戶購買記錄: ");

for(i=0;i<uifo->cnt;i++)

printf("--車票編號:%d,購買票數:%d ",uifo->btids[i],uifo->btNum[i]);

}

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

}

printf("按任意鍵繼續。。。。 "),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;i<cnt;i++)

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

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

for(i=0;i<cnt;i++)

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

{

index=i;

flag=1;

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

{

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

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

{

flag=0;

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

break;

}

if(!flag)

break;

}

break;

}

if(!flag) printf(" 刪除失敗,輸入數值超出范圍或不可刪除! ");

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;i<cnt;i++)

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

tkts[cnt].ssP=NULL;

tkts[cnt].tsP=NULL;

free(&tkts[cnt]);

}

printf(" 刪除成功! ");

}

printf("按任意鍵繼續。。。。 "),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("生成站點: ");

for(i=0;i<MS;i++,id++)

{

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

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

printf("----站點名:%s。站點ID:%s ",stns[i].sid,stns[i].sName);

}

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

for(i=0;i<MS;i++)

for(j=i+1;j<MS;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(隨機) ",stns[i].sName,stns[j].sName,n,v);

cnt+=2;

}

return cnt-2;

}

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

C. 《C語言程序設計》練習題

一、選擇題
1、C語言規定,在一個源程序中,main()函數的位置(C )。
A) 必須在最開始 B)必須在最後
C) 可以任意 D) 必須在系統調用的庫函數後面

這題你死記就行,你看看這個
任何一個C++程序都必須定義一個main函數,它的返回類型總是int類型。這個函數由操作系統來調用,在main函

數執行完以後,程序也就終止了。 main也可以使用return向操作系統返回一個值,使用操作系統的命令可以檢測

main的返回值。一般約定在main返回0時,表示程序運行過程中沒有出現錯誤,其它非零值表示程序出現異常情況。
若沒有為main指定返回值,這樣返回值是任意的。

2、若x和y都是int 型變數,x=100,y=200,且有以下程序段,printf(「%d」,(x,y));則其輸出結果是( A)。
A) 200 B) 100 C) 100 200 D) 輸出不確定值

(x,y)這是個逗號表達式,表達式的值為最後一個逗號後面表達式的值,因為前面有一個%d,所以輸出 的是y的



3、合法的C語法字元常量是(C )。
A) 「A」 B) 65 C) 『\t』 D) A

字元都是由兩個單引號括起來的,死記, a)為字元串

4、表達式「3!=4」的值是(A )。
A) 1 B) 0 C) T D) F

!=是c語言的邏輯運算符,3!=4為真,多以得1, 3=4為假,值為0

5、 int a=1,b=2,c=3,d=4,執行下列程序後x的值為( C)。
if(a>b) x=1;else if (c>d) x=2;else x=3;
A) 1 B) 2 C) 3 D) 4

如果a>b,1>2為假,不執行x=1,執行else if(c>d),判斷:3>4為假,不執行x=2,執行=3,完

6、以下程序的輸出結果是(D)。
Int x=10,y=3,z;printf(「%d\n」,z=(x%y,x/y));
A)1 B) 0 C) 4 D) 3

逗號表達式,x%y,10%3,商3餘1,模取余數1,x/y,10/3,商3餘1,除法取商3,逗號表達式,表達式的值為最後一

個逗號後面表達式的值

7、為表示x≥y≥z,應使用C語言表達式(A )。
A) (x>=y)&&(y>=z) B) (x>=y) AND (y>=z)
C) (x>=y>=z) D) (x>=y) & (y>=z)

關系運算符,x>=y與y>=z必須是同時成立的,因此要用邏輯運算符&&,&&與的意思

8、合法的數組定義是( a )。
A) int a[ ]=」string」; B) int a[5]={0,1,2,3,4,5};
C) char a=」string」; D) char a[ ]={「01234」};

a不指定數組長度定義,正確
b數組長度為5,就是裡面有5個數組元素,多了一個數組元素
c定義a不是數組而是一個變數,素組應該是a[]
d是錯的,字元串是這樣定義的:char a[ ]={'0','1','2','3','4','\0'};
[4]中數字是數組長度,說明裡面有幾個元素

9、設x和y均為int型變數,則語句「x+=y;y=x-y;x-=y;」的功能是(D)。
A) 把x和y按從小到大排列 B)把x和y按從大到小排列
C)無確定結果 D)交換x和y中的值

x+=y等同於x=x+y,把x加y的值賦給x,x現在存的是x與y的和
y=x-y把x減y的值賦給y,x現在存的是x與y的和 (x+y)-y=x,把x的值給y,y存x的值
x-=y等同於x=x-y,把x減y的值賦給x,(x+y)-y=x,現在的後面的y存的是x的值,做完後x里存的值是y,完成交換

10、若已定義x和y為double類型,則表達式「x=1,y=x+3/2」的值是(C)。
A) 1 B)2 C) 2.0 D) 1.0

逗號表達式,先讓x=1在算y=x+3/2,得2,因為是double類型,所以有小數點

11、下列條件語句中,功能與其他語句不同的是 (D)
A) if(a) printf("%d\n",x); else printf("%d\n",y);
B) if(a==0) printf("%d\n",y); else printf("%d\n",x);
C) if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D) if(a==0) printf("%d\n",x); else printf("%d\n",y);

a 如果a為真輸出x,如果a為假輸出y
b 如果a==0,也就是為假,輸出y,a為真輸出x,同a
c 如果a!=0為真,輸出x,a為假輸出y同上
d 如果a為假輸出x,如果a為真輸出y,與以上的都不同

12、以下能正確定義二維數組的是 (C)
A) int a[][3]; B) int a[][3]=2{2*3};
C) int a[][3]={0}; D) int a[2][3]={{1},{2},{3,4}};

a 沒有給數組賦初值
b {}里不能有*
c 正確,記住第一個[]中可以為空,第二個[]不能為空,死記
d a[2][3] 的意思是有兩個一維數組,每個一維數組里有3個元素,{{1},{2},{3,4}}; 她的意思是三個數組,{}中的每一個{}代表一個數組,里邊的數為數組元素

13、用C語言編寫的代碼程序 (B)
A)可立即執行 B)是一個源程序
C)經過編譯即可執行 D)經過編譯解釋才能執行

死記

D. 有什麼軟體可以搜索大學C語言題目的啊

大學c語言搜題app。大學c語言搜題app原名叫做菜鳥學C語言是一款非常好用的學習c語言的手機軟體

軟體功能

1、選擇題:按照考點分類的選擇題習題,並有答案解析。

2、錯題庫:可自動加練習過程中錯題加入收藏,以便反復練習。

3、上機操作題:300道上機操作題,程序填空題、程序修改題、程序設計題。

軟體優勢

1、選擇題:按照考點分類的選擇題習題,並有答案解析。

2、上級操作題:300道上機操作題,程序填空題、程序修改題、程序設計題。

3、最新押題:最新考試押題3套。

4、考點匯總:包含復習的考點。

5、錯題庫:可自動加練習過程中錯題加入收藏,以便反復練習。

6、收藏夾:可在練習過程中自行收錄題目到收藏夾,形成自己的小題庫,針對性練習,提高通過率。

軟體特色

1、隨時隨地都能夠學習,而且還支持下載保存你學習內容離線繼續學習。

2、同學們能夠直接通過搜索引擎來查詢尋找你感興趣對你內容。

3、解答問題的辦法非常多,可以選擇通過拍照來答題,也可以選擇輸入題目來解答。

閱讀全文

與大學c語言編程題庫相關的資料

熱點內容
php開發工程師面試題 瀏覽:952
linux內核源碼pdf 瀏覽:66
mc命令方塊怎麼提取 瀏覽:367
有關程序員的五大魔咒你中了幾個 瀏覽:204
本地文件如何上傳linux伺服器 瀏覽:17
傳奇資源網站源碼 瀏覽:377
f26app怎麼下載 瀏覽:120
程序員與酒 瀏覽:439
php政府網站源碼 瀏覽:912
前端面試常問演算法 瀏覽:153
pythonopen可以打開文件夾嗎 瀏覽:635
不銹鋼加密網帶廠家 瀏覽:347
哪一年除夕不演算法定節假日 瀏覽:40
程序員對鍵盤的需求 瀏覽:605
程序員的崢嶸歲月 瀏覽:58
python調用類裡面的函數 瀏覽:473
pre加密頭發醫院 瀏覽:547
優先順序高服務演算法 瀏覽:840
抖音最火解壓游戲名字 瀏覽:952
java打jar包命令 瀏覽:176