C语言程序设计

C语言程序设计,第1张

#include <stdioh>

#include <stdlibh>

#include <stringh>

#define MAX_NUM 50

#define MAX_LINE 256

struct student {

    char name[10];

    float math;

    float chinese;

    float eng;

    float aver;

    char  grade;

};

const char  student_file = "studenttxt";

const char  grade_file   = "gradetxt";

int init(struct student  s, int n);

int fun(struct student s[], int n);

void sort(struct student  s, int n);

void display(struct student  s, int n);

void save_student(struct student  s, int n, const char  file);

void load_student(const char  file);

int main(int argc, char argv[])

{

    int num = 0;

    struct student st[MAX_NUM];

    num = init(st, MAX_NUM);

    printf("\n等级为D的人数: %d\n", fun(st, num));

    save_student(st, num, student_file);

    sort(st, num);

    save_student(st, num, grade_file);

    display(st, num);

    printf("\n所有学生信息\n");

    load_student(student_file);

    printf("\n排序后的学生信息\n");

    load_student(grade_file);

    return 0;

}

/ 初始化 /

int init(struct student  s, int n)

{

    int num = 0, i = 0;

    if (0 == s || 0 >= n || MAX_NUM < n)

        return 0;

    printf("请输入学生数量[不大于50]: ");

    fflush(stdout);

    scanf("%d", &num);

    while (0 >= num || n < num)

    {

        fflush(stdin);

        printf("无效的参数,请输入学生数量[不大于50]: ");

        fflush(stdout);

        scanf("%d", &num);

    }

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

    {

        printf("请输入第%d个学生的信息: ", i + 1);

        fflush(stdout);

        scanf("%9s %f %f %f", s[i]name, &s[i]math, &s[i]chinese, &s[i]eng);

        fflush(stdin);

    }

    return num;

}

/ 计算平均成绩并统计等级为D的人数 /

int fun(struct student s[], int n)

{

    int i = 0, cnt = 0;

    if (0 == s || 0 >= n || MAX_NUM < n)

        return 0;

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

    {

        s[i]aver = (s[i]math + s[i]chinese + s[i]eng) / 30;

        if (70 <= s[i]aver && 85 > s[i]aver)

            s[i]grade = 'B';

        else if (60 <= s[i]aver && 70 > s[i]aver)

            s[i]grade = 'C';

        else if (60 > s[i]aver)

            s[i]grade = 'D';

        else

            s[i]grade = 'A';

        if ('D' == s[i]grade)

            ++cnt;

    }

    return cnt;

}

/ 降序排列 /

void sort(struct student  s, int n)

{

    int i = 0, j = 0;

    struct student tmp;

    if (0 == s || 0 >= n || MAX_NUM < n)

        return 0;

    for (i = 0; i < n - 1; ++i)

    {

        for (j = 0; j < n - 1 - i; ++j)

        {

            if (s[j]aver < s[j + 1]aver)

            {

                tmp = s[j];

                s[j] = s[j + 1];

                s[j + 1] = tmp;

            }

        }

    }

}

void display(struct student  s, int n)

{

    int i = 0;

    if (0 == s || 0 >= n || MAX_NUM < n)

        return 0;

    printf("所有学生的信息如下: \n");

    for (i = 0; i != n; ++i)

    {

        printf("%d name[%s] math[%1f] chinese[%1f] eng[%1f] aver[%1f] grade[%c]\n",

               i + 1, s[i]name, s[i]math, s[i]chinese, s[i]eng, s[i]aver, s[i]grade);

    }

}

/ 保存学生信息到指定文件 /

void save_student(struct student  s, int n, const char  file)

{

    int i = 0;

    FILE  fp = 0;

    char buf[MAX_LINE] = {0};

    if (0 == s || 0 >= n || MAX_NUM < n || 0 == file)

        return 0;

    if (fp = fopen(file, "w"))

    {

        for (i = 0; i != n; ++i)

        {

            sprintf(buf, "%s %1f %1f %1f %1f %c\r\n",

                    s[i]name, s[i]math, s[i]chinese, s[i]eng, s[i]aver, s[i]grade);

            fwrite(buf, 1, strlen(buf), fp);

            memset(buf, 0x00, MAX_LINE);

        }

        fclose(fp);

    }

}

/ 加载指定文件中的信息 /

void load_student(const char  file)

{

    char buf[MAX_LINE] = {0};

    FILE  fp = 0;

    if (0 == file)

        return ;

    if (fp = fopen(file, "r"))

    {

        while (fgets(buf, MAX_LINE, fp))

            printf("%s", buf);

        fclose(fp);

    }

}

下面是一个比较三个数的例子:

#include <stdioh>

int main()

{

int t,a,b,c;

scanf("%d%d%d",&a,&b,&c);

if(a<b)

{

t=a,a=b,b=t;

}

if(a<c)

{

t=a,a=c,c=t;

}

if(b<c)

{

t=b, b=c, c=t;

}

printf("%d %d %d\n",c,b,a);

return 0;

}

原理就是运用冒泡算法,把最大的数浮在最上面,而小的数就下沉,最后就输出。

"扫雷"小游戏C代码

#include<stdioh>

#include<mathh>

#include<timeh>

#include<stdlibh>

main( )

{char a[102][102],b[102][102],c[102][102],w;

int i,j;  /循环变量/

int x,y,z[999];  /雷的位置/

int t,s;  /标记/

int m,n,lei;  /计数/

int u,v;  /输入/

int hang,lie,ge,mo;  /自定义变量/

srand((int)time(NULL));  /启动随机数发生器/

leb1:  /选择模式/

printf("\n   请选择模式:\n   1标准  2自定义\n");

scanf("%d",&mo);

if(mo==2)  /若选择自定义模式,要输入三个参数/

{do

{t=0; printf("请输入\n行数 列数 雷的个数\n");

scanf("%d%d%d",&hang,&lie,&ge);

if(hang<2){printf("行数太少\n"); t=1;}

if(hang>100){printf("行数太多\n");t=1;}

if(lie<2){printf("列数太少\n");t=1;}

if(lie>100){printf("列数太多\n");t=1;}

if(ge<1){printf("至少要有一个雷\n");t=1;}

if(ge>=(hanglie)){printf("雷太多了\n");t=1;}

}while(t==1);

}

else{hang=10,lie=10,ge=10;}  /否则就是选择了标准模式(默认参数)/

for(i=1;i<=ge;i=i+1)  /确定雷的位置/

{do

{t=0; z[i]=rand( )%(hanglie);

for(j=1;j<i;j=j+1){if(z[i]==z[j]) t=1;}

}while(t==1);

}

for(i=0;i<=hang+1;i=i+1)  /初始化a,b,c/

{for(j=0;j<=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }

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

{for(j=1;j<=lie;j=j+1) {a[i][j]='+';} }

for(i=1;i<=ge;i=i+1)  /把雷放入c/

{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}

for(i=1;i<=hang;i=i+1)  /计算b中数字/

{for(j=1;j<=lie;j=j+1)

{m=48;

if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;

if(c[i-1][j]=='#')m=m+1;  if(c[i+1][j+1]=='#')m=m+1;

if(c[i][j+1]=='#')m=m+1;  if(c[i+1][j]=='#')m=m+1;

if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;

b[i][j]=m;

}

}

for(i=1;i<=ge;i=i+1)  /把雷放入b中/

{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}

lei=ge;  /以下是游戏设计/

do

{leb2:  /输出/

system("cls");printf("\n\n\n\n");

printf("    ");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c  ",w);

}

printf("\n   |");

for(i=1;i<=lie;i=i+1){printf("---|");}

printf("\n");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c |",w);

for(j=1;j<=lie;j=j+1)

{if(a[i][j]=='0')printf("   |");

else printf(" %c |",a[i][j]);

}

if(i==2)printf(" 剩余雷个数");

if(i==3)printf(" %d",lei);

printf("\n   |");

for(j=1;j<=lie;j=j+1){printf("---|");}

printf("\n");

}

scanf("%d%c%d",&u,&w,&v);  /输入/

u=u+1,v=v+1;

if(w!='#'&&a[u][v]=='@')

goto leb2;

if(w=='#')

{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}

else if(a[u][v]=='@'){a[u][v]=''; lei=lei+1;}

else if(a[u][v]==''){a[u][v]='+';}

goto leb2;

}

a[u][v]=b[u][v];

leb3:  /打开0区/

t=0;

if(a[u][v]=='0')

{for(i=1;i<=hang;i=i+1)

{for(j=1;j<=lie;j=j+1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

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

{for(j=lie;j>=1;j=j-1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;   if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=hang;i>=1;i=i-1)

{for(j=1;j<=lie;j=j+1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=hang;i>=1;i=i-1)

{for(j=lie;j>=1;j=j-1)

{s=0;

if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;

if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;

if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;

if(s==1)a[i][j]=b[i][j];

}

}

for(i=1;i<=hang;i=i+1)  /检测0区/

{for(j=1;j<=lie;j=j+1)

{if(a[i][j]=='0')

{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='')t=1;

if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='')t=1;

if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='')t=1;

if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='')t=1;

if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='')t=1;

if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='')t=1;

if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='')t=1;

if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='')t=1;

}

}

}

if(t==1)goto leb3;

}

n=0;  /检查结束/

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

{for(j=1;j<=lie;j=j+1)

{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='')n=n+1;}

}

}

while(a[u][v]!='#'&&n!=(hanglie-ge));

for(i=1;i<=ge;i=i+1)  /游戏结束/

{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }

printf("    ");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c  ",w);

}

printf("\n   |");

for(i=1;i<=lie;i=i+1){printf("---|");}

printf("\n");

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

{w=(i-1)/10+48; printf("%c",w);

w=(i-1)%10+48; printf("%c |",w);

for(j=1;j<=lie;j=j+1)

{if(a[i][j]=='0')printf(" |");

else  printf(" %c |",a[i][j]);

}

if(i==2)printf(" 剩余雷个数");

if(i==3)printf(" %d",lei); printf("\n   |");

for(j=1;j<=lie;j=j+1) {printf("---|");}

printf("\n");

}

if(n==(hanglie-ge)) printf("你成功了!\n");

else printf("    游戏结束!\n");

printf("    重玩请输入1\n");

t=0;

scanf("%d",&t);

if(t==1)goto leb1;

}

/注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入0a9三个字符再按回车键。3行7列不是雷,则输入3a7回车;第8行第5列是雷,就输入8#5回车,9行0列是雷则输入9#0并回车/

学习C语言,我想应当首先手头有一本入门教材,如果有条件用计算机的话,在计算机上安装TC程序。

前面的基本内容我想你自己会学好学会的,关键就是在指针以后的内容比较复杂抽象,需要下一番功夫才行呀。

如果有什么问题可以在网上线我留言。QQ360795604

在C语言中的进制表示方法

%c 一个字符

%d 十进制整数

%o 八进制整数

%x 十六进制整数

%X 同上

%c 一个字符

%s 一个字符串,遇空格、制表符或换行符结束。

%f 实数,可以用小数形式或指数形式输入。 程序:#include<stdioh>

int main()

{

int i;

for(i=33;i<=126;i++)

{

printf("十进制:%d 八进制:%o 十六进制: %x\n",i,i,i);

}

return 0;

}

以上就是关于C语言程序设计全部的内容,包括:C语言程序设计、C语言程序设计,比较数字大小的实例、一种C语言小游戏程序设计(程序已经附上)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9332420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存