代码3

本文包含多个C语言编程实例,从简单的静态变量演示到复杂的问题解决,如找出8枚银币中的假币、实现康威的生命游戏及开发一个简易文本编辑器,并涉及字符串倒序等实用技巧。
#include<stdio.h>
//static int j;
//void fun1(void)
//{
//  static int i = 0;
//  i++;
//  printf("i=%d", i);
//  
//}
//
//void fun2(void)
//{
//  j = 0;
//  j++;
//  printf("j=%d", j);
//  printf("\n");
//}
//int main()
//{
//  for (int k = 0; k < 10; k++)
//  {
//      fun1();
//      fun2();
//  }
//  getchar();
//  return 0;
//}
//int b[100];
//void fun(int b[100])
//{
//  
//}
//int main()
//{
//  int* p = NULL;
//  printf("sizeof(p)=%d\n", sizeof(p));
//  printf("sizof(*P)=%d\n", sizeof(*p));
//  int a[100];
//  printf("sizof(a)=%d\n", sizeof(a));
//  printf("sizof(a[100])=%d\n", sizeof(a[100]));
//  printf("sizof(&a)=%d\n", sizeof(&a));
//  printf("sizof(&a[0])=%d\n", sizeof(&a[0]));
//  printf("sizof(b)=%d\n", sizeof(b));
//  getchar();
//  return 0;
//}

//int main()
//{
//  char a[1000];
//  int i;
//  for (i = 0; i<1000; i++)
//  {
//      a[i] = -1 - i;
//  }
//  printf("%d", strlen(a));
//  getchar();
//  return 0;
//  
//}
//
//fun()
//{
//  return 1;
//}
//
//main()
//{
//  printf("%d", fun(2));
//  getchar();//结果为1
//
//}



//8银币,求假币
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void compare(int[], int, int, int);
void eightcoins(int[]);

int main(void)
{
    int coins[8] = { 0 };
    int i;
    srand(time(NULL));
    for (i = 0; i < 8; i++)
        coins[i] = 10;
    printf("\n输入假币重量(比十大或小):");
    scanf("%d", &i);
    coins[rand() % 8] = i;
    eightcoins(coins);
    printf("\n\n列出所有银币重量:");
    for (i = 0; i < 8; i++)
        printf("%d", coins[i]);
    printf("\n");
    getchar();
    return 0;
}

void compare(int coins[], int i, int j, int k)
{
    if (coins[i]>coins[k])
        printf("\n假币%d较重", i + 1);
    else
        printf("\n假币%d较轻", j + 1);
}

void eightcoins(int coins[])
{
    if (coins[0] + coins[1] + coins[2] == coins[3] + coins[4] + coins[5])
    {
        if (coins[6] > coins[7])
            compare(coins, 6, 7, 0);
        else
            compare(coins, 7, 6, 0);
    }
    else if (coins[0] + coins[1] + coins[2] > coins[3] + coins[4] + coins[5])
    {
        if (coins[0] + coins[3] == coins[1] + coins[4])
            compare(coins, 2, 5, 0);
        else if (coins[0] + coins[3] > coins[1] + coins[4])
            compare(coins, 0, 4, 1);
        if (coins[0] + coins[3] < coins[1] + coins[4])
            compare(coins, 1, 3, 0);
    }
    else if (coins[0] + coins[1] + coins[2] < coins[3] + coins[4] + coins[5])
    {
        if(coins[0] + coins[3] == coins[1] + coins[4])
            compare(coins, 5, 2, 0);
    else if (coins[0] + coins[3] > coins[1] + coins[4])
        compare(coins, 3, 1, 0);
    if (coins[0] + coins[3] < coins[1] + coins[4])
        compare(coins, 4, 0, 1);
    }
}


//生命游戏
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

#define MAXROW 10
#define MAXCOL 25
#define DEAD 0
#define ALIVE 1


int map[MAXROW][MAXCOL];
int newmap[MAXROW][MAXCOL];
int row, col;
void init();
int neighbors(int, int);
void outputMap();
void copyMap();

int main()
{

    char ans;
    init();
    while(1)
    {
        outputMap();
        for (row = 0; row < MAXROW; row++)
        {
            for (col = 0; col < MAXCOL; col++)
            {
                switch (neighbors(row,col))
                {
                case 0:
                case 1:
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                    newmap[row][col] = DEAD;
                case 2:
                    newmap[row][col] = map[row][col];
                    break;
                case 3:
                    newmap[row][col] = ALIVE;
                    break;
                }
            }
        }
        copyMap();
        printf("\nContinue next Generation ?");
        getchar();
        ans = toupper(getchar());
        if (ans != 'Y');
    }
    return 0;
}

void init()
{

    for (row = 0; row < MAXROW;row++)
    for (col = 0; col < MAXCOL; col++)
        map[row][col] = DEAD;
    puts("Game of life Program");
    puts("Enter x,y where x,y is living cell");
    printf("0<=x<=%d,0<=y<=%d\n", MAXROW - 1, MAXCOL - 1);
    puts("Terminate with x,y=-1,-1");

    while (1){
        scanf("%d%d", &row, &col);
        if (0 <= row&&row<MAXROW &&
            0 <= col&&col<MAXCOL)
            map[row][col] = ALIVE;
        else if(row == -1 || col == -1)
            break;
        else
            printf("(x,y)exceedsmapranage!");
    }
}
intneighbors(introw, intcol)
{
    int count = 0, c, r;

    for (r = row - 1; r <= row + 1; r++)
    for (c = col - 1; c <= col + 1; c++){
        if (r<0 || r >= MAXROW || c<0 || c >= MAXCOL)
            continue;
        if (map[r][c] == ALIVE)
            count++;
    }
    if (map[row][col] == ALIVE)
        count--;
    return count;
}
void outputMap(){

    printf("\n\n%20cGame of life cell status\n");
    for (row = 0; row< MAXROW; row++){
        printf("\n%20c", ' ');
        for (col = 0; col < MAXCOL; col++)
        if (map[row][col] == ALIVE) putchar('#');
        else putchar('-');
    }
}
void copyMap(){
    int row, col;
    for (row = 0; row< MAXROW; row++)
    for (col = 0; col < MAXCOL; col++)
        map[row][col] = newmap[row][col];
}



//设计一个采用块链结构的简化文本程序,程序简化为只可对一行进行操作,要求具有行输入,整行删除,文本显示和退出四项功能
#include<stdio.h>
#include<stdlib.h>
#define MAX 100    //最大的行数
typedef struct node
{
    char Data[80];
    struct node *Next;
}nodetype;       //节点类型

typedef struct head
{
    int Num;         //行号
    int Len;         //改行字符的个数
    nodetype *Next;
}headtype;        //头结点类型

headtype Head[MAX];

void Initial();//初始化各行头结点
int MenuSelect();//菜单选择函数
void EnterData();//输入数据函数
void DeleteLine();//整行删除函数
void List();//显示各行数据函数
void ClearBuffer();//清空缓存函数,与scanf配合使用

main()
{
    char choice;//存放用户输入的选择参数
    Initial();  //初始化各行的头结点
    while (1)
    {
        choice = MenuSelect();
        switch (choice)
        {
        case 1:
            EnterData();  //输入数据
            break;
        case 2:
            DeleteLine();//整行删除
            break;
        case 3:
            List();//显示各行数据
            break;
        case 4:
            exit(0);//退出

        }
    }
}
void ClearBuffer()
{
    while (getchar() != '\n');
}

void Initial()
{
    int i;
    for (i = 0; i < MAX; i++)
    {
        Head[i].Len = 0;         //各行头结点长度参数置为零
    }
}

int MenuSelect()
{
    int i;
    i = 0;
    printf("1.Enter\n");
    printf("2.Delete\n");
    printf("3.List\n");
    printf("4.Exit\n");
    while (i <= 0 || i > 4)
    {
        printf("请输入菜单选择号\n");
        scanf("%d", &i);
        ClearBuffer();
    }
    return (i);
}

void EnterData()
{
    nodetype* p, *find();
    int i, j, m, LineNumber, k;
    char StrBuffer[100];
    while (1)
    {
        printf("输入数据要插入的行号(0~100):\n");
        scanf("%d", &LineNumber);
        ClearBuffer();
        //输入参数不在0-100之间,跳出整个循环
        if (LineNumber < 0 || LineNumber >= MAX)
            return;
        printf("请输入要插入的数据,以@作为结束符号\n");
        i = LineNumber;         //头结点赋值
        Head[i].Num = LineNumber;
        Head[i].Next = (nodetype*)malloc(sizeof(nodetype));
        p = Head[i].Next;
        m = 1;
        j = -1;
        StrBuffer[0] = 0;
        k = 0;
        do
        {
            j++;
            if (!StrBuffer[k])
            {
                scanf("%s", StrBuffer);//输入字符串,最后数据肯定为0
                k = 0;
            }
            if (j >= 80 * m)
            {
                m++;
                p->Next = (nodetype*)malloc(sizeof(nodetype));
                p = p->Next;
            }
            p->Data[j % 80] = StrBuffer[k++];// 给节点数据域赋值
        } while (p->Data[j % 80] != '@');  //当输入符号@是,跳出循环
        Head[i].Len = j;
    }
}


void DeleteLine()
{
    nodetype *p, *q;
    int i, j, m, LineNumber;
    while (1)
    {
        printf("请输入要删除的行号(0-100):\n");
        scanf("%d", &LineNumber);
        if (LineNumber < 0 || LineNumber >= MAX)
            return;
        i = LineNumber;
        p = Head[i].Next;
        m = 0;          //当前节点序号
        if (Head[i].Len>0)
        {
            m = (Head[i].Len - 1) / 80 + 1;  //查找该行用到几个链表节点
        }
        for (j = 0; j < m; j++)
        {
            q = p->Next;
            free(p);
            p = q;
        }
        Head[i].Len = 0;   //头指针赋值为0,表明本行为空
        Head[i].Num = 0;
    }
}


void List()
{
    nodetype *p;
    int i, j, m, n;
    for (i = 0; i < MAX; i++)
    {
        if (Head[i].Len>0)       //本行不为空
        {
            printf("第%d行有数据,他们是:\n", Head[i].Num);
            n = Head[i].Len;
            m = 1;
            p = Head[i].Next;
            for (j = 0; j < n; j++) //遍历本行,查找到数据在哪个节点
            if (j >= 80 * m)
            {
                p = p->Next;
                m++;
            }
            else
                printf("%c", p->Data[j % 80]);  //以此打印出来
            printf("\n");
        }
    }
    printf("\n");
}

//字符串倒序
#include<stdio.h>
#include<string.h>
int main()
{
  char str[]="abcdef";

  int x=strlen(str);

  char strtemp[100]={0};

  for(char *p=str;*p !='\0';p++);

  int i= 0;
  while(i<strlen(str))
 {

    strtemp[i++]=*(--p);
  }
   printf("%s\n",strtemp);
  getchar();
  return 0;
}












1.声明一个动物基类Animal,私有整型成员变量年龄age,请定义一个派生类Dog,在其成员函数SetAge(int n)中直接给age赋值,测试下看是否会出问题?如何解决? 2.设计一个单基继承的类层次程序,用Person类派生出Student类,增加属性学号index和年级level。Person类中至少有姓名name、年龄age等数据成员,以及构造函数、输出函数等,其余成员函数根据需要添加。在主函数中进行测试。 3.定义一个学生类Student和教师类Teacher,学生类有姓名name、学号index等数据成员,教师类有姓名name、工作证号workID、职称title、课程course、周学时hoursPerWeek等数据成员。再定义一个助教类TeachingAssistant,多继承于学生类和教师类,该类可以使用学生类的全部数据成员,以及教师类的课程和周学时数据成员。要求:每个类提供自定义的构造函数和析构函数,并通过同名函数ShowInfo来显示全部数据成员的值。在主函数中进行测试。 4.声明一个Person,包含姓名name和年龄age等私有数据成员以及相关的成员函数;由它派生出领导类Leader,包含职务position和部门department私有数据成员以及相关的成员函数;再由Person派生出工程师类Engineer,包含职务position和专业speciality私有数据成员以及相关的成员函数;再由Leader和Engineer类派生出主任工程师类Chairman。在主函数中测试各类对象初始化和信息输出,查看是否会出问题?如何解决?
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 4 实验2 一个简单的Java Applet程序 4 实验3 联合编译 5 上机实践2 基本数据类型与控制语句 6 实验1 输出希腊字母表 6 实验2 回文数 6 实验3 猜数字游戏 8 上机实践3 类与对象 9 实验1 三角形、梯形和圆形的类封装 9 实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19 实验2 比较日期的大小 21 实验3 处理大整数 22 上机实践6 组件及事件处理 23 实验1 算术测试 23 实验2 信号灯 25 实验3 布局与日历 28 上机实践7 组件及事件处理2 31 实验1 方程求根 31 实验2 字体对话框 34 实验3 英语单词拼写训练 37 上机实践8 多线程 41 实验1 汉字打字练习 41 实验2 旋转的行星 43 实验3 双线程接力 47 上机实践9 输入输出流 50 实验1 学读汉字 50 实验2 统计英文单词字 53 实验2 读取Zip文件 56 上机实践10 Java 中的网络编程 57 实验1 读取服务器端文件 57 实验2 使用套接字读取服务器端对象 59 实验3 基于UDP的图像传输 62 上机实践11 数据结构 66 实验1 扫雷小游戏 66 实验2 排序与查找 70 实验3 使用TreeSet排序 72 上机实践12 java Swing 74 实验1 JLayeredPane分层窗格 74 实验2 使用表格显示日历 75 实验3 多文档界面(MDI) 78 上机实践1 初识Java 实验1 一个简单的应用程序 2.模板代码 Hello.java package 实验一; public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("你好,很高兴学习Java"); //命令行窗口输出"你好,很高兴学习Java" A a=new A(); a.fA(); } } class A { void fA() {System.out.println("we are student"); } } 实验2 一个简单的Java Applet程序 2.模板代码 FirstApplet.java import java.applet.*; import java.awt.*; public class FirstApplet extends Applet { public void paint(Graphics g) { g.setColor(Color.blue); g.drawString("这是一个Java Applet 程序",10,30);//在Java Applet中绘制一行文字:“这是一个Java Applet 程序” g.setColor(Color.red); g.setFont(new Font("宋体",Font.BOLD,36)); g.drawString("我改变了字体",20,50);//在Java Applet中绘制一行文字:“我改变了字体” } }实验3 联合编译 2.模板代码 public class MainClass { public static void main (String args[ ]) { System.out.println("你好,只需编译我") ; //命令行窗口输出"你好,只需编译我" A a=new A(); a.fA(); B b=new B(); b.fB(); } } public class A { void fA() {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值