當前位置:首頁 » 編程語言 » c語言中的綜合設計
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中的綜合設計

發布時間: 2023-05-24 21:26:58

c語言綜合實驗設計報告


題目: C語言輸出萬年歷

學院:

專業:

班級:

姓名:

設計日期:總分:

一、設計題目:

C語言輸出萬年歷

二、題目闡述及設計思路:

C語言輸出萬年歷,輸入年份、月份,計算得到的是這一天是星期幾;給定年,月,計算此月有多少天 。本程序運用的萬年歷的計算公式: d=a-1+(a-1)/4-(a-1)/100+(a-1)/400+c; 其中a為年c為該日期在本年中的天數,d取整數,當d/7餘數0時是星期天,余數1時是星期一依此類推。

三、主要知識點:

運用函數調用,if,else函數switch語句。for,while,循環語句。

四、程序清單:

#include <stdio.h>

int m_day(int year,int month)/*此函數是給定年,月,計算此月有多少天.*/

{

if ((year%4==0 &&year%100!=0) ?? (year%400==0))

switch(month)

{

case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;

case 4: case 6: case 9: case 11: return 30;

case 2: return 29;

}

else

switch(month)

{

case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;

case 4: case 6: case 9: case 11: return 30;

case 2: return 28;

}

}

int main()

{

int year,month;

int i, days=0, d, day=0;

printf ("Enter the year and month:\n");

scanf ("%d %d ", &year, &month );

for (i=1;i<month; i++)

days+=m_day (year,i);

d=year-1+(year-1)/4-(year-1)/100+(year-1)/400+days+1;

printf("%d-%d\n",year,month);

printf(" Sun Mon Tue Wed Thu Fri Sat\n");

for (i=0;i<d%7;i++)

printf(" ");

for (i=1;i<=7-d%7;i++)

{

day++;

printf("%5d",day);

}

printf("\n");

while(1)

{

for (i=1;i<=7;i++)

{

day++;

if (day>m_day(year,month))

printf("%5d",day);

}

printf("\n");

}

}

五、設計結果說明:

1、設計優點:

程序充分利用所學的C語言知識,運用了函數的調用、循環語句、以及return語句,使得編程更加有條理。簡單易懂,結構清晰,也使得程序的使用更加方便。

2、設計不足:

在編程序時,由於考慮到時間和受所學知識的限制,只能輸入年份、月份,計算得到的是這一天是星期幾;給定年,月,計算此月有多少天 。而並不能輸入公歷的年月日,輸出農歷年月日以及輸入農歷節氣,輸出當年農歷的年月日及公歷年月日。

② c語言程序設計(周信東版)的綜合程序設計如下:編寫程序,從鍵盤輸入某樓6家住戶某月的水電消耗及水費和電費

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

int main()
{
char user[4];
char waterNum[4];
char elecNum[4];
char inlinebuf[32];
char outlinebuf[32];
char pbuf[256];
FILE *fp1;
FILE *fp2;

int WaterNum=0;
int ElecNum=0;
int length =0;
int m=0;
int n=0;
int weishuflag=0;
int flagnum=0;
int i=0;
int j=0;

float waterPrice=0.0;
float elecPrice=0.0;

if((fp1=fopen("./input.dat","r"))==NULL)
{
printf("open input data error!\n");
return -1;
}

if((fp2=fopen("./change.dat","w"))==NULL)
{
printf("open input data error!\n");
return -1;
}

fseek(fp1,0,SEEK_END);
length = ftell(fp1);
fseek(fp1,0,SEEK_SET);
memset(pbuf,0,sizeof(pbuf));

printf("the input data length == %d\n",length);
fread(pbuf,length,1,fp1);

fseek(fp2, 0, SEEK_SET);
sprintf(outlinebuf,"住戶\t\t水費\t\t電費\n");
fputs(outlinebuf, fp2);

while(length--)
{
if(pbuf[m]!='\n')
{
inlinebuf[n]=pbuf[m];
n++;
}
else
{
j = 0;
inlinebuf[n++]='\t'; //為處理每一行的最後一個數據(即用電量),需加入一個tab或空格鍵
inlinebuf[n] = '\0';//一行數據結束
while( inlinebuf[j] != '\0')
{
switch(flagnum)
{
case 0: //用戶
if(inlinebuf[j] != ' ' && inlinebuf[j] != '\t')
{
user[i]=inlinebuf[j];
i++;
}
else
{
user[i]='\0';
flagnum++;//表示之前獲取的是住戶,下兩個數據分別獲取用水量與用電量
i=0;
}
break;

case 1: //用水量
if(inlinebuf[j] != ' ' && inlinebuf[j] != '\t')
{
waterNum[i]=inlinebuf[j];
i++;
}
else
{
waterNum[i]='\0';
weishuflag=i;//表示當前數據的位數,住戶、用水量、用電量均限制為三位數以內
flagnum++;//表示下個數據獲取的是用電量
if(weishuflag == 1)
{
WaterNum = waterNum[0] - 48;
}
else if(weishuflag == 2)
{
WaterNum = (waterNum[0] - 48)*10 + (waterNum[1] - 48);
}
else
{
WaterNum = (waterNum[0] - 48)*100 + (waterNum[1] - 48)*10 + (waterNum[2] - 48);
}
i=0;
weishuflag = 0;
}
break;

case 2: //用電量
if(inlinebuf[j] != ' ' && inlinebuf[j] != '\t')
{
elecNum[i]=inlinebuf[j];
i++;
}
else
{
elecNum[i]='\0';
weishuflag=i;//表示當前數據的位數,住戶、用水量、用電量均限制為三位數以內
flagnum = 0;//表示一行三個數據獲取完畢
if(weishuflag == 1)
{
ElecNum = elecNum[0] - 48;
}
else if(weishuflag == 2)
{
ElecNum = (elecNum[0] - 48)*10 + (elecNum[1] - 48);
}
else
{
ElecNum = (elecNum[0] - 48)*100 + (elecNum[1] - 48)*10 + (elecNum[2] - 48);
}
i=0;
weishuflag = 0;
}
break;
default:
break;
}
j++;
}
waterPrice = (float)WaterNum * 1.5;
elecPrice = (float)ElecNum * 0.5;
printf("The user == %s,waterNum == %d,elecNum == %d\n",user,WaterNum,ElecNum);//列印用戶,用水量,用電量
printf("The user == %s,waterPrice == %.1f,elecPrice == %.1f\n\n",user,waterPrice,elecPrice);//列印用戶,水費,電費
sprintf(outlinebuf,"%3s \t\t%4.1f \t\t%4.1f\n",user,waterPrice,elecPrice);

fputs(outlinebuf, fp2);//寫入每一行數據(數據格式為 住戶 + 水費 + 電費)
memset(outlinebuf,0,sizeof(outlinebuf));
memset(inlinebuf,0,sizeof(inlinebuf));
n=0; //一行數據處理結束,開始新的一行
}
m++;
}

fclose(fp1);
fclose(fp2);
return 0;
}
input.dat(每一行數據分別為住戶 用水量 用電量,以空格或tab鍵隔開,且每行數據必須以回車結尾)
101 5 150
201 4 90
301 4 120
401 3 78
501 4 60
601 6 105
charge.dat (輸出文件格式如下)
住戶 水費 電費
101 7.5 75.0
201 6.0 45.0
301 6.0 60.0
401 4.5 39.0
501 6.0 30.0
601 9.0 52.5

③ C語言綜合程序設計 個人生活費管理系統

這程序可以先定義結構體
struct student
{
char name[20];
int id;
........
};
題目要求用malloc分配內存 建議用鏈表做
模糊查找用strstr
如果樓主覺得有難度 可以look look 我的 name,然後jia me,我原創與你

④ C語言綜合設計

  • 如果對樓主有幫助,給個採納好不,謝謝啦

  • 1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去
    掉不滿足條件的排列。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int i,j,k;
    printf(" ");
    for(i=1;i<5;i++) /*以下為三重循環*/
    for(j=1;j<5;j++)
    for (k=1;k<5;k++)
    {
    if (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/
    printf("%d,%d,%d ",i,j,k);
    }
    getch();
    }


  • ==============================================================
    【程序2】
    題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高
    於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的凳巧悶部分,可可提
    成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於
    40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於
    100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
    1.程序分寬清析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    long int i;
    int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
    scanf("%ld",&i);
    bonus1=100000*0. 1;
    bonus2=bonus1+100000*0.75;
    bonus4=bonus2+200000*0.5;
    bonus6=bonus4+200000*0.3;
    bonus10=bonus6+400000*0.15;
    if(i<=100000)
    bonus=i*0.1;
    else if(i<=200000)
    bonus=bonus1+(i-100000)*0.075;
    else if(i<=400000)
    bonus=bonus2+(i-200000)*0.05;
    else if(i<=600000)
    bonus=bonus4+(i-400000)*0.03;
    else if(i<=1000000)
    bonus=bonus6+(i-600000)*0.015;
    else
    bonus=bonus10+(i-1000000)*0.01;
    printf("bonus=%d",bonus);
    getch();
    }


  • ==============================================================
    【程序3】
    題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
    1.程序分析:在10萬以內判斷,棗彎先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
    的結果滿足如下條件,即是結果。請看具體分析:
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "math.h"
    #include "stdio.h"
    #include "conio.h"
    main()
    {
    long int i,x,y,z;
    for (i=1;i<100000;i++)
    {
    x=sqrt(i+100); /*x為加上100後開方後的結果*/
    y=sqrt(i+268); /*y為再加上168後開方後的結果*/
    if(x*x==i+100&&y*y==i+268) /*如果一個數的平方根的平方等於該數,這說明此數是完全平方數*/
    printf(" %ld ",i);
    }
    getch();
    }


  • ==============================================================
    【程序4】
    題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
    1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊
    情況,閏年且輸入月份大於3時需考慮多加一天。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int day,month,year,sum,leap;
    printf(" please input year,month,day ");
    scanf("%d,%d,%d",&year,&month,&day);
    switch(month) /*先計算某月以前月份的總天數*/
    {
    case 1:sum=0;break;
    case 2:sum=31;break;
    case 3:sum=59;break;
    case 4:sum=90;break;
    case 5:sum=120;break;
    case 6:sum=151;break;
    case 7:sum=181;break;
    case 8:sum=212;break;
    case 9:sum=243;break;
    case 10:sum=273;break;
    case 11:sum=304;break;
    case 12:sum=334;break;
    default:printf("data error");break;
    }
    sum=sum+day; /*再加上某天的天數*/
    if(year%400==0||(year%4==0&&year%100!=0)) /*判斷是不是閏年*/
    leap=1;
    else
    leap=0;
    if(leap==1&&month>2) /*如果是閏年且月份大於2,總天數應該加一天*/
    sum++;
    printf("It is the %dth day.",sum);
    getch();
    }


  • ==============================================================
    【程序5】
    題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
    1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,
    然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int x,y,z,t;
    scanf("%d%d%d",&x,&y,&z);
    if (x>y)
    {t=x;x=y;y=t;} /*交換x,y的值*/
    if(x>z)
    {t=z;z=x;x=t;} /*交換x,z的值*/
    if(y>z)
    {t=y;y=z;z=t;} /*交換z,y的值*/
    printf("small to big: %d %d %d ",x,y,z);
    getch();
    }


  • ==============================================================
    【程序6】
    題目:用*號輸出字母C的圖案。
    1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    printf("Hello C-world! ");
    printf(" **** ");
    printf(" * ");
    printf(" * ");
    printf(" **** ");
    getch();
    }


  • ==============================================================
    【程序7】
    題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
    1.程序分析:字元共有256個。不同字元,圖形不一樣。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    char a=176,b=219;
    printf("%c%c%c%c%c ",b,a,a,a,b);
    printf("%c%c%c%c%c ",a,b,a,b,a);
    printf("%c%c%c%c%c ",a,a,b,a,a);
    printf("%c%c%c%c%c ",a,b,a,b,a);
    printf("%c%c%c%c%c ",b,a,a,a,b);
    getch();
    }


  • ==============================================================
    【程序8】
    題目:輸出9*9口訣。
    1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int i,j,result;
    printf(" ");
    for (i=1;i<10;i++)
    {
    for(j=1;j<10;j++)
    {
    result=i*j;
    printf("%d*%d=%-3d",i,j,result); /*-3d表示左對齊,佔3位*/
    }
    printf(" "); /*每一行後換行*/
    }
    getch();
    }


  • ==============================================================
    【程序9】
    題目:要求輸出國際象棋棋盤。
    1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int i,j;
    for(i=0;i<8;i++)
    {
    for(j=0;j<8;j++)
    if((i+j)%2==0)
    printf("%c%c",219,219);
    else
    printf(" ");
    printf(" ");
    }
    getch();
    }


  • ==============================================================
    【程序10】
    題目:列印樓梯,同時在樓梯上方列印兩個笑臉。
    1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int i,j;
    printf("11 "); /*輸出兩個笑臉*/
    for(i=1;i<11;i++)
    {
    for(j=1;j<=i;j++)
    printf("%c%c",219,219);
    printf(" ");
    }
    getch();
    }


  • 【程序11】
    題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月
    後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
    1.程序分析:兔子的規律為數列1,1,2,3,5,8,13,21....
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    long f1,f2;
    int i;
    f1=f2=1;
    for(i=1;i<=20;i++)
    {
    printf("%12ld %12ld",f1,f2);
    if(i%2==0) printf(" "); /*控制輸出,每行四個*/
    f1=f1+f2; /*前兩個月加起來賦值給第三個月*/
    f2=f1+f2; /*前兩個月加起來賦值給第三個月*/
    }
    getch();
    }


  • ==============================================================
    【程序12】
    題目:判斷101-200之間有多少個素數,並輸出所有素數。
    1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
    則表明此數不是素數,反之是素數。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    #include "math.h"
    main()
    {
    int m,i,k,h=0,leap=1;
    printf(" ");
    for(m=101;m<=200;m++)
    {
    k=sqrt(m+1);
    for(i=2;i<=k;i++)
    if(m%i==0)
    {
    leap=0;
    break;
    }
    if(leap)
    {
    printf("%-4d",m);
    h++;
    if(h%10==0)
    printf(" ");
    }
    leap=1;
    }
    printf(" The total is %d",h);
    getch();
    }


  • ==============================================================
    【程序13】
    題目:列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數
    本身。例如:153是一個「水仙花數」,因為153=1的三次方+5的三次方+3的三次方。
    1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int i,j,k,n;
    printf("'water flower'number is:");
    for(n=100;n<1000;n++)
    {
    i=n/100;/*分解出百位*/
    j=n/10%10;/*分解出十位*/
    k=n%10;/*分解出個位*/
    if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
    printf("%-5d",n);
    }
    getch();
    }


  • ==============================================================
    【程序14】
    題目:將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。
    程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:
    (1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。
    (2)如果n<>k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,
    重復執行第一步。
    (3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • /* zheng int is divided yinshu*/
    #include "stdio.h"
    #include "conio.h"
    main()
    {
    int n,i;
    printf(" please input a number: ");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++)
    while(n!=i)
    {
    if(n%i==0)
    {
    printf("%d*",i);
    n=n/i;
    }
    else
    break;
    }
    printf("%d",n);
    getch();
    }


  • ==============================================================
    【程序15】
    題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,
    60分以下的用C表示。
    1.程序分析:(a>b)?a:b這是條件運算符的基本例子。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int score;
    char grade;
    printf("please input a score ");
    scanf("%d",&score);
    grade=score>=90?'A':(score>=60?'B':'C');
    printf("%d belongs to %c",score,grade);
    getch();
    }


  • ==============================================================
    【程序16】
    題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
    1.程序分析:利用輾除法。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int a,b,num1,num2,temp;
    printf("please input two numbers: ");
    scanf("%d,%d",&num1,&num2);
    if(num1<num2)/*交換兩個數,使大數放在num1上*/
    {
    temp=num1;
    num1=num2;
    num2=temp;
    }
    a=num1;b=num2;
    while(b!=0)/*利用輾除法,直到b為0為止*/
    {
    temp=a%b;
    a=b;
    b=temp;
    }
    printf("gongyueshu:%d ",a);
    printf("gongbeishu:%d ",num1*num2/a);
    getch();
    }


  • ==============================================================
    【程序17】
    題目:輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
    1.程序分析:利用while語句,條件為輸入的字元不為' '.

    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    char c;
    int letters=0,space=0,digit=0,others=0;
    printf("please input some characters ");
    while((c=getchar())!=' ')
    {
    if(c>='a'&&c<='z'||c>='A'&&c<='Z')
    letters++;
    else if(c==' ')
    space++;
    else if(c>='0'&&c<='9')
    digit++;
    else
    others++;
    }
    printf("all in all:char=%d space=%d digit=%d others=%d ",letters,
    space,digit,others);
    getch();
    }


  • ==============================================================
    【程序18】
    題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時
    共有5個數相加),幾個數相加有鍵盤控制。
    1.程序分析:關鍵是計算出每一項的值。
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    int a,n,count=1;
    long int sn=0,tn=0;
    printf("please input a and n ");
    scanf("%d,%d",&a,&n);
    printf("a=%d,n=%d ",a,n);
    while(count<=n)
    {
    tn=tn+a;
    sn=sn+tn;
    a=a*10;
    ++count;
    }
    printf("a+aa+...=%ld ",sn);
    getch();
    }


  • ==============================================================
    【程序19】
    題目:一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2+3.編程
    找出1000以內的所有完數。
    1. 程序分析:請參照程序<--上頁程序14.
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "conio.h"
    main()
    {
    static int k[10];
    int i,j,n,s;
    for(j=2;j<1000;j++)
    {
    n=-1;
    s=j;
    for(i=1;i<j;i++)
    {
    if((j%i)==0)
    {
    n++;
    s=s-i;
    k[n]=i;
    }
    }
    if(s==0)
    {
    printf("%d is a wanshu",j);
    for(i=0;i<n;i++)
    printf("%d,",k);
    printf("%d ",k[n]);
    }
    }
    getch();
    }


  • ==============================================================
    【程序20】
    題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在
    第10次落地時,共經過多少米?第10次反彈多高?
    1.程序分析:見下面注釋
    2.程序源代碼:

  • 復制代碼代碼如下:


  • #include "stdio.h"
    #include "stdio.h"
    main()
    {
    float sn=100.0,hn=sn/2;
    int n;
    for(n=2;n<=10;n++)
    {
    sn=sn+2*hn;/*第n次落地時共經過的米數*/
    hn=hn/2; /*第n次反跳高度*/
    }
    printf("the total of road is %f ",sn);
    printf("the tenth is %f meter ",hn);
    getch();
    }

⑤ C語言程序設計綜合程序設計 一、目的要求 1. 加深對《C語言程序設計》課程所學知識的理解; 2. 掌握結構化

可以利用stack來做

⑥ 跪求一個C語言綜合設計---編寫一個通訊錄管理程序,包含序號,姓名,電話,地址,

struct persons
{
char name[16];
char sex[6];
char age[3];
char bir[5];
char phnum[18];
char addr[20];
}persons[100];
/**********************************************************************************/
typedef struct lnode
{
char name[16]; /*姓稿滾名*/
char sex[6]; /*性別:以man代表男性,woman代表女性*/
char age[3]; /*年齡*/
char bir[5]; /*生日,其中前兩位數字代表月份,後兩位數字代表日期*/
char phnum[18]; /*電話*/
char addr[20]; /*地址*/
struct lnode *next;
}listnode,*linklist;
/*********************************************************************************/
linklist head=NULL,r=NULL;
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
int i;
char name1[16],phnum1[18],addr1[20],ch,a,b;
char s1[20];
FILE *fp;

//以虧戚上為stuct.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include"struct.h"

/************************************************************************/
void creat() /*將文件的信息讀入結構體數組,再轉存入鏈表中*/
{
int j;
long k;
fp=fopen("TXL.txt","r+"); /*如果這個文件存在,那麼打開這個文件*/
if(fp!=NULL)
{
for(i=1;i<100;i++)
{
j=fgetc(fp);
if(j==EOF)
return;
k=i-1;
fseek(fp,k*sizeof(struct persons),0); /*讀取一個人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp);
s=(linklist)malloc(sizeof(listnode)); /*存到鏈表中*/
strcpy(s->name,persons[i].name);
strcpy(s->銷敬陵sex,persons[i].sex);
strcpy(s->age,persons[i].age);
strcpy(s->bir,persons[i].bir);
strcpy(s->phnum,persons[i].phnum);
strcpy(s->addr,persons[i].addr);
if(head==NULL)
head=s;
else
r->next=s;
r=s;}
}
else
{ fp=fopen("TXL.txt","w+");/*如果這個文件不存在,那麼為讀寫創建一個默認文件TXL.txt*/
i=1;
}
}
/************************************************************************/
void Show()/*顯示默認文件裡面的所有信息*/
{ p1=head;
if(p1==NULL)
{ printf("\n\n\t\t There is nothing in the addr-book!");
printf("\n\n\t\t Please insert!");
}/*如果文件為空,則給出提示*/
while(p1!=NULL)
{
printf("\n\tName:%s ",p1->name);
printf("Sex:%s ",p1->sex);
printf("Age:%s ",p1->age);
printf("Bir:%s ",p1->bir);
printf("Phnum:%s ",p1->phnum);
printf("Addr:%s\n",p1->addr);
p1=p1->next;
}
}
/*****************************************************************/
void Delete_1() /*定義按姓名刪除的函數*/
{
void menu();
printf("\n\n\t\tPlease input the name:");
gets(name1); /*輸入要刪除人的姓名*/
p4=head;
while(strcmp(name1,p4->name)!=0&&p4!=NULL)
p4=p4->next;
if(p4==NULL)
{
printf("\n\n\t\tIt is not found in the TXL!");
menu();
}/*如果找不到該人,則返回主菜單*/
else
{ printf("\t\tThe information have been deleted is that:");
printf("\n\t\tname:%s ",p4->name);
printf("sex:%s ",p4->sex);
printf("age:%s ",p4->age);
printf("bir:%s ",p4->bir);
printf("phnum:%s ",p4->phnum);
printf("addr:%s\n",p4->addr);
}
p4=head;
if(strcmp(p4->name,name1)==0)
{
p4=p4->next;
head=p4;
}
else
{
while(strcmp(p4->next->name,name1)!=0)
p4=p4->next;
p5=p4->next;
p4->next=p5->next;
free(p5);
}
}
/*****************************************************************/
void Delete_2() /*定義按電話號碼刪除的函數*/
{
void menu();
printf("\n\n\t\tPlease input the phnum:");
gets(phnum1); /*輸入要刪除的人的電話號碼*/
p6=head;
while(strcmp(phnum1,p6->phnum)!=0&&p6!=NULL)
p6=p6->next;
if(p6==NULL)
{
printf("\n\n\t\tIt is not found in the TXL!");
menu();
}/*如果找不到該電話號碼,則返回主菜單*/
else
{ printf("\t\tThe information have been deleted is that:");
printf("\n\t\tname:%s ",p6->name);
printf("sex:%s ",p6->sex);
printf("age:%s ",p6->age);
printf("bir:%s ",p6->bir);
printf("phnum:%s ",p6->phnum);
printf("addr:%s\n",p6->addr);
}
p6=head;
if(strcmp(p6->phnum,phnum1)==0)
{
p6=p6->next;
head=p6;
}
else
{
while(strcmp(p6->next->phnum,phnum1)!=0)
p6=p6->next;
p7=p6->next;
p6->next=p7->next;
free(p7);
}
}
/******************************************************************/
void Delete()/*在Delete()函數中按需要選擇用不同的刪除方式*/
{
printf("\n\t\tPlease make a choice below:\n");
printf("\t\t1.Delete by name.\n");
printf("\t\t2.Delete by phnum.\n");
printf("\t\tPlease insert your choice:");
a=getche();
switch(a)
{
case '1':Delete_1();
break;
case '2':Delete_2();
break;
default:
printf("\n\t\t**********************************\n");
printf("\n\t\t The number should 1-2!!! \n");
printf("\n\t\t**********************************");
break;
}
}
/*****************************************************************/
void Search_1() /*按姓名查找的函數定義*/
{

printf("\n\n\t\tPlease input the name:");
p8=head;
gets(name1); /*輸入要查找的人的姓名*/
while(strcmp(name1,p8->name)!=0&&p8!=NULL)
p8=p8->next;
if(p8==NULL)
printf("\n\n\t\tIt is not found in the TXL!");
else
{
printf("\n\t\tname:%s ",p8->name);
printf("sex:%s ",p8->sex);
printf("age:%s ",p8->age);
printf("bir:%s ",p8->bir);
printf("phnum:%s ",p8->phnum);
printf("addr:%s\n",p8->addr);
}
}
/****************************************************************/
void Search_2()/*按電話號碼查找的函數定義*/
{

printf("\n\n\t\tPlease input the phnum:");
p9=head;
gets(phnum1);/*輸入要查找的人的電話號碼*/
while(strcmp(phnum1,p9->phnum)!=0&&p9!=NULL)
p9=p9->next;
if(p9==NULL)
printf("\n\n\t\tIt is not found in the TXL!");
else
{
printf("\n\t\tname:%s ",p9->name);
printf("sex:%s ",p9->sex);
printf("age:%s ",p9->age);
printf("bir:%s ",p9->bir);
printf("phnum:%s ",p9->phnum);
printf("addr:%s\n",p9->addr);
}
}
/***************************************************************/
void Search_3()/*定義按宿舍(地址)查找的函數*/
{

printf("\n\n\t\tPlease input the addr:");
p0=head;
gets(addr1);/*輸入要查到的人的宿舍(地址)*/
while(strcmp(addr1,p0->addr)!=0&&p0!=NULL)
p0=p0->next;
if(p0==NULL)
printf("\n\n\t\tIt is not found in the TXL!");
else
{
printf("\n\t\tname:%s ",p0->name);
printf("sex:%s ",p0->sex);
printf("age:%s ",p0->age);
printf("bir:%s ",p0->bir);
printf("phnum:%s ",p0->phnum);
printf("addr:%s\n",p0->addr);
}
}
/*************************************************************************/
void Search()/*在Search中按需要調用不同的查找方式*/
{
printf("\n\t\tPlease make a choice below:\n");
printf("\t\t1.Search by name.\n");
printf("\t\t2.Search by phnum.\n");
printf("\t\t3.Search by addr.\n");
printf("\t\tPlease insert your choice:");
b=getche();
switch(b)
{
case '1':Search_1();
break;
case '2':Search_2();
break;
case '3':Search_3();
break;
default:
printf("\n\t\t**********************************\n");
printf("\n\t\t The number should 1-3!!! \n");
printf("\n\t\t**********************************");
break;
}

}
/************************************************************************/
void Insert() /*向文件插入一組的信息*/
{
s=(linklist)malloc(sizeof(listnode));
printf("\n\t\tPlease insert the someone's information:");
printf("\n\t\tName:");
scanf("%s",s->name);
printf("\t\tSex:");
scanf("%s",s->sex);
printf("\t\tAge:");
scanf("%s",s->age);
printf("\t\tBir:");
scanf("%s",s->bir);
printf("\t\tPhnum:");
scanf("%s",s->phnum);
printf("\t\tAddr:");
scanf("%s",s->addr);
if(head==NULL)
head=s;
else
r->next=s;
r=s;
}
/***********************************************************************/
void Save() /*將信息保存在默認文件裡面*/
{ int j;
fp=fopen("TXL.txt","w");
for(p2=head,j=0;p2!=NULL;j++,p2=p2->next)
{
strcpy(persons[j].name,p2->name);
strcpy(persons[j].sex,p2->sex);
strcpy(persons[j].age,p2->age);
strcpy(persons[j].bir,p2->bir);
strcpy(persons[j].phnum,p2->phnum);
strcpy(persons[j].addr,p2->addr);
fwrite(&persons[j],sizeof(struct persons),1,fp);
}
}
/************************************************************************/
void menu ()/*顯示主菜單*/
{
do
{
printf("\n\n\n\n\n");
printf("\n\t\t ************************************");
printf("\n\t\t * Please make a choice below: *");
printf("\n\t\t * 1.Show all the information *");
printf("\n\t\t * 2.Delete a piece of information *");
printf("\n\t\t * 3.Search a piece of information *");
printf("\n\t\t * 4.Insert a piece of information *");
printf("\n\t\t * 5.Save and Exit *");
printf("\n\t\t * 6.Exit and Without Save *");
printf("\n\t\t * Input Your Choice: *");
printf("\n\t\t ************************************");
ch=getche();
switch(ch)
{
case '1': Show();
break;
case '2': Delete();
break;
case '3': Search();
break;
case '4': Insert();
break;
case '5': Save();fclose(fp);exit(0);
case '6':fclose(fp);exit(0);
break;
default:
printf("\n\t\t**********************************\n");
printf("\n\t\t The number should 1-6!!! \n");
printf("\n\t\t**********************************");
break;
}
}
while(1);
}
/**********************************************************************/
void main()
{
creat();
menu();
}

⑦ 求大神,,c語言綜合設計,學生選課系統

OK ,需要幫忙的話我提供。

⑧ 大神幫忙寫一篇C語言程序設計綜合性實驗

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#defineMAXSIZE36

structWord{
charword[MAXSIZE];
unsignedsize;
}words[10000];

intn=0;

voidSort(){
//沒有時間寫了
}

voidAdditive(charword[]){
inti,flag=1;
for(i=0;i<n&&flag;++i){
if(strcmp(words[i].word,word)==0){
++words[i].size;
flag=0;
}
}
if(flag){
strcpy(words[n].word,word);
words[n].size=1;
++n;
}
}

intmain(){
inti,ch;
charword[MAXSIZE];
FILE*fin=fopen("case1.in","rt");
if(fin==NULL){
printf("無法打開數據文件! ");
return1;
}
i=0;
while((ch=fgetc(fin))!=EOF){
if(isalpha(ch))word[i++]=tolower(ch);
elseif(i){
word[i]='';
i=0;
Additive(word);
}
}
if(i){
word[i]='';
Additive(word);
}
fclose(fin);
Sort();
return0;
}

⑨ 求C語言程序綜合設計

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

typedef struct _student
{
char name[30];
int number;
int chinese, math;
int total;
} student;

int index = 0;
student ss[100];

void asort()
{
int i, j, k;

for (i = 0; i < index-1; ++i)
{
k = i;

for (j = i + 1; j < index; ++j)
{
if (ss[k].total < ss[j].total)
{
k = j;
}
}

if (k != i)
{
student s;
memcpy(&s, &ss[i], sizeof(student));
memcpy(&ss[i], &ss[k], sizeof(student));
memcpy(&ss[k], &s, sizeof(student));
}
}
}

void input()
{
printf("\n請輸入學生信息(姓名、學號、語文、數學成績)!結束輸入。\n");

while (1)
{
scanf("%s", ss[index].name);

if (ss[index].name[0] == '!')
break;

scanf("%d %d %d", &ss[index].number, &ss[index].chinese, &ss[index].math);
ss[index++].total = ss[index].chinese + ss[index].math;
}
}

void rank()
{
int i = 0, r = 1;
printf("\nNo: Total: Name:\n");

for (; i < index - 1; ++i)
{
printf("%d\t\t%d\t\t%s\n", r, ss[i].total, ss[i].name);

if (ss[i].total != ss[i+1].total)
++r;
}

printf("%d\t\t%d\t\t%s\n", r, ss[i].total, ss[i].name);
}
void find()
{
char nm[30];
int i;

printf("\n請輸入需要查找的學生名:\n");
scanf("%s", nm);

for (i = 0; i < index; ++i)
{
if (!strcmp(ss[i].name, nm))
break;
}

if (i < index)
printf("學號:%d\t姓名:%s\t語文成績:%d\t數學成績:%d\t總成績:%d\n",
ss[i].number, ss[i].name, ss[i].chinese, ss[i].math, ss[i].total);
else
printf("沒有找到合適的記錄!\n");
}

void statistic()
{
int min, max, i, tt;
float avg = 0., pr = 0.;
max = tt = 0;
min = 100;

for (i = 0; i < index; ++i)
{
tt += ss[i].chinese;

if (ss[i].chinese < min)
min = ss[i].chinese;

if (ss[i].chinese > max)
max = ss[i].chinese;

if (ss[i].chinese > 60)
++pr;
}

avg = (float)tt / index;

if (index == 1)
{
if (ss[0].chinese < 60)
pr = 0.;
else
pr = 100.;
}
else
pr = (pr / index) * 100;

printf("\n語文成績的平均分、及格率、最高分、最低分是:%0.2f %0.2f %d %d\n",
avg, pr, max, min);

avg = pr = 0.;
max = tt = 0;
min = 100;

for (i = 0; i < index; ++i)
{
tt += ss[i].math;

if (ss[i].math < min)
min = ss[i].math;

if (ss[i].math > max)
max = ss[i].math;

if (ss[i].math > 60)
++pr;
}

avg = (float)tt / index;

if (index == 1)
{
if (ss[0].math < 60)
pr = 0.;
else
pr = 100.;
}
else
pr = (pr / index) * 100;

printf("語文成績的平均分、及格率、最高分、最低分是:%0.2f %0.2f %d %d\n",
avg, pr, max, min);
}

void display()
{
int i = 0;
printf("\n學號\t姓名\t語文成績\t數學成績\t總成績\n");

for (;i < index; ++i)
{
printf("%d\t%s\t%d\t\t%d\t\t%d\n", ss[i].number, ss[i].name,
ss[i].chinese, ss[i].math, ss[i].total);
}
}

void menu()
{
int choice;

while (1)
{
puts("\n\n請輸入你想進行的操作:\n");
puts("1. 添加學生 2. 總分排名 3. 查找信息");
puts("4. 顯示統計 5. 成績表 0. 退出程序");

do
scanf("%d", &choice);
while (choice < 0 || choice > 5);

if (choice == 0) break;

switch (choice)
{
case 1:
input();
asort();
break;
case 2:
rank();
break;
case 3:
find();
break;
case 4:
statistic();
break;
case 5:
display();
break;
}
}
}

int main(void)
{
menu();
return 0;
}

⑩ c語言綜合設計報告,急急急!!!程序已經有了,報告該怎麼寫

實驗名稱:函數使用練習
一、預習准備
1. 實驗目的:
(1) 掌握函數的定義方法;
(2) 掌握實參與形參「值傳遞」的意義和方法;
(3) 理解變數的作用域概念,學習在程序中正確定義和引用變數。
2. 實驗儀器與設備:PC 機,Windows,Visual C++。
3. 程序流程圖:
(1) 寫一個函數,用於判斷一個數是否為「水仙花數」。所謂「水仙花數」是指一個
3 位數,其各位數字的立方和等於該數本身。調用該數列印出所有的「水仙花數」。
函數:flower,用於判斷一個三位數是否為「水仙花數」。
輸入:x,三位整數。
輸出:0,x 不是「水仙花數」;
1,x 是「水仙花數」。
流程:如圖1 所示。
圖 1 函數flower 流程圖
主函數流程如圖 2 所示。
http://blog.sciencenet.cn/u/wellwang
2
圖 2 「水仙花數」程序主函數流程圖
(2) 編寫一個函數實現十進制整數到二進制數的轉換,用非遞歸的方法實現該函數。
在主函數中,輸入一個整數,調用該函數將這個整數轉換為二進制數,輸出二
進制數。
函數:D2B,用於將一個十進制整數轉換為二進制數。
輸入:d,十進制數;
b,整型數組。
輸出:整型值,二進制數長度。
流程如圖3 所示。
主函數流程如圖 4 所示。
二、實驗過程
程序一:
1. 實驗步驟:
(1) 創建Win32 Console Application 工程,工程名:E5_1;
(2) 創建C++ Source File ,文件名:E5_1;
http://blog.sciencenet.cn/u/wellwang
3
圖 3 函數D2B 流程圖
圖 4 「十進制整數轉換二進制數」程序主函數流程圖
http://blog.sciencenet.cn/u/wellwang
4
(3) 輸入源程序:
#include <stdio.h>
int flower(int x);
void main()
{
int i;
for(i=100;i<1000;i++)
if(flower(i))
printf("%d\n",i);
}
int flower(int x)
{
int a,b,c;
a=x/100;
b=(x%100)/10;
c=x%10;
if(x==a*a*a+b*b*b+c*c*c)
return 1;
else
return 0;
}
(4) 編譯,運行程序:
編譯中未出現警告和錯誤。運行程序,程序輸出結果。
2. 實驗數據:
程序輸出:
153
370
371
407
程序二:
1. 實驗步驟:
(1) 創建Win32 Console Application 工程,工程名:E5_2;
(2) 創建C++ Source File ,文件名:E5_2;
(3) 輸入源程序:
#include <stdio.h>
int D2B(int d,int b[]);
void main()
{
int i,d,l,b[10];
printf("請輸入一個十進制數:");
scanf("%d",&d);
http://blog.sciencenet.cn/u/wellwang
5
l=D2B(d,b);
for(i=l-1;i>=0;i--)
printf("%d",b[i]);
printf("\n");
}
int D2B(int d,int b[])
{
int i=0;
do
{
b[i]=d%2;
d=d/2;
i++;
}while(d!=0);
return i;
}
(4) 編譯,運行程序:
編譯中未出現警告和錯誤。運行程序,程序輸出結果。
2. 實驗數據:
(1) 第一組數據:
輸入:8
輸出:1000
(2) 第二組數據:
輸入:90
輸出:1011010
(3) 第三組數據:
輸入:0
輸出:0
(4) 第四組數據:
輸入:-10
輸出:-10-10
三、實驗總結
程序一輸出數據正確。
程序二在輸入的數為負整數(-10)時,輸出結果不正確,這是因為負數在轉換為
二進制的過程中,對2 取模的值可能為-1。對於負數,可以先取它們的絕對值進行轉
換,轉換完成後,再在二進制數前面加上負號即可。
通過本次實驗,掌握了函數的原型說明、函數定義以及函數調用的方法;理解了
函數實參與形參「值傳遞」的意義;理解了變數作用域的概念;提高了編程水平和動
手能力。