c語言pins,c語言平方怎麼打出來

本文目錄一覽:

求大神們幫忙!!單片機ATmega8515讀取RTC(DS1302)的時間信息的C語言程序,只要讀秒,分,時,這三個信息

#includereg52.h //包含單片機寄存器的頭文件

#includeintrins.h //包含_nop_()函數定義的頭文件

unsigned char code digit[10]={“0123456789”}; //定義字符數組顯示數字

sbit SCLK=P1^0; //位定義1302芯片的接口,時鐘輸出端口定義在P1.0引腳

sbit DATA=P1^1; //位定義1302芯片的接口,數據輸出端定義在P1.1引腳

sbit RST=P1^2; //位定義1302芯片的接口,複位端口定義在P1.2引腳

/*****************************************************

函數功能:延時若干微秒

入口參數:n

***************************************************/

void delaynus(unsigned char n)

{

unsigned char i;

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

}

/*****************************************************

函數功能:向1302寫一個位元組數據

入口參數:x

***************************************************/

void Write1302(unsigned char dat)

{

unsigned char i;

SCLK=0; //拉低SCLK,為脈衝上升沿寫入數據做好準備

delaynus(2); //稍微等待,使硬件做好準備

for(i=0;i8;i++) //連續寫8個二進制位數據

{

DATA=dat0x01; //取出dat的第0位數據寫入1302 低位在前

,高位在後

delaynus(2); //稍微等待,使硬件做好準備

SCLK=1; //上升沿寫入數據

delaynus(2); //稍微等待,使硬件做好準備

SCLK=0; //重新拉低SCLK,形成脈衝

dat=1; //將dat的各數據位右移1位,準備寫入

下一個數據位

}

}

/*****************************************************

函數功能:根據命令字,向1302寫一個位元組數據

入口參數:Cmd,儲存命令字;dat,儲存待寫的數據

***************************************************/

void WriteSet1302(unsigned char Cmd,unsigned char dat)

{

RST=0; //禁止數據傳遞

SCLK=0; //確保寫數居前SCLK被拉低

RST=1; //啟動數據傳輸

delaynus(2); //稍微等待,使硬件做好準備

Write1302(Cmd); //寫入命令字

Write1302(dat); //寫數據

SCLK=1; //將時鐘電平置於高電平狀態

RST=0; //禁止數據傳遞

}

/*****************************************************

函數功能:從1302讀一個位元組數據

入口參數:x

***************************************************/

unsigned char Read1302(void)

{

unsigned char i,dat;

delaynus(2); //稍微等待,使硬件做好準備

for(i=0;i8;i++) //連續讀8個二進制位數據

{ dat=1;

if(DATA==1) //如果讀出的數據是1

dat|=0x80; //將1取出,寫在dat的最高位

SCLK=1; //將SCLK置於高電平,為下降沿讀出

delaynus(2); //稍微等待

SCLK=0; //拉低SCLK,形成脈衝下降沿

delaynus(2); //稍微等待

}

return dat; //將讀出的數據返回

}

/*****************************************************

函數功能:根據命令字,從1302讀取一個位元組數據

入口參數:Cmd

***************************************************/

unsigned char ReadSet1302(unsigned char Cmd)

{

unsigned char dat;

RST=0; //拉低RST

SCLK=0; //確保寫數居前SCLK被拉低

RST=1; //啟動數據傳輸

Write1302(Cmd); //寫入命令字

dat=Read1302(); //讀出數據

SCLK=1; //將時鐘電平置於已知狀態

RST=0; //禁止數據傳遞

return dat; //將讀出的數據返回

}

/*****************************************************

函數功能: 1302進行初始化設置

***************************************************/

void Init_DS1302(void)

{

unsigned char flag;

flag= ReadSet1302(0x81);

if(flag0x80) { //判斷時鐘芯片是否關閉

WriteSet1302(0x8E,0x00); //根據寫狀態寄存器命令

字,寫入不保護指令

WriteSet1302(0x80,((55/10)4|(55%10))); //根據寫秒寄存器命

令字,寫入秒的初始值

WriteSet1302(0x82,((59/10)4|(59%10))); //根據寫分寄存器命

令字,寫入分的初始值

WriteSet1302(0x84,((23/10)4|(23%10))); //根據寫小時寄存器命

令字,寫入小時的初始值

WriteSet1302(0x86,((18/10)4|(18%10))); //根據寫日寄存器命令

字,寫入日的初始值

WriteSet1302(0x88,((6/10)4|(6%10))); //根據寫月寄存器命令字

,寫入月的初始值

WriteSet1302(0x8c,((9/10)4|(9%10))); //根據寫年寄存器命令

字,寫入年的初始值

WriteSet1302(0x90,0xa5); //打開充電功能 選擇2K

電阻充電方式

WriteSet1302(0x8E,0x80); //根據寫狀

態寄存器命令字,寫入保護指令

}

}

//如果不想每次都初始化時間,也就是掉電後還想讓時鐘繼續走時的話 就用

上面的語句

/*——————–這是每次都初始化的語句—————–*/

/*

WriteSet1302(0x8E,0x00); //根據寫狀態寄存器命令字

,寫入不保護指令

WriteSet1302(0x80,((55/10)4|(55%10))); //根據寫秒寄存器命令字

,寫入秒的初始值

WriteSet1302(0x82,((59/10)4|(59%10))); //根據寫分寄存器命

令字,寫入分的初始值

WriteSet1302(0x84,((23/10)4|(23%10))); //根據寫小時寄存器命

令字,寫入小時的初始值

WriteSet1302(0x86,((18/10)4|(18%10))); //根據寫日寄存器命令

字,寫入日的初始值

WriteSet1302(0x88,((6/10)4|(6%10))); //根據寫月寄存器命令字

,寫入月的初始值

WriteSet1302(0x8c,((9/10)4|(9%10))); //根據寫年寄存器命令

字,寫入年的初始值

WriteSet1302(0x90,0xa5); //打開充電功能 選擇2K

電阻充電方式

WriteSet1302(0x8E,0x80); //根據寫狀態寄存器命令

字,寫入保護指令

*/

/********************************************************************

***********

以下是對液晶模塊的操作程序

*********************************************************************

**********/

sbit RS=P2^0; //寄存器選擇位,將RS位定義為P2.0引腳

sbit RW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳

sbit E=P2^2; //使能信號位,將E位定義為P2.2引腳

sbit BF=P0^7; //忙碌標誌位,,將BF位定義為P0.7引腳

/*****************************************************

函數功能:延時1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒

***************************************************/

void delay1ms()

{

unsigned char i,j;

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

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

;

}

/*****************************************************

函數功能:延時若干毫秒

入口參數:n

***************************************************/

void delaynms(unsigned char n)

{

unsigned char i;

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

delay1ms();

}

/*****************************************************

函數功能:判斷液晶模塊的忙碌狀態

返回值:result。result=1,忙碌;result=0,不忙

***************************************************/

bit BusyTest(void)

{

bit result;

RS=0; //根據規定,RS為低電平,RW為高電平時,可以讀

狀態

RW=1;

E=1; //E=1,才允許讀寫

_nop_(); //空操作

_nop_();

_nop_();

_nop_(); //空操作四個機器周期,給硬件反應時間

result=BF; //將忙碌標誌電平賦給result

E=0; //將E恢復低電平

return result;

}

/*****************************************************

函數功能:將模式設置指令或顯示地址寫入液晶模塊

入口參數:dictate

***************************************************/

void WriteInstruction (unsigned char dictate)

{

while(BusyTest()==1); //如果忙就等待

RS=0; //根據規定,RS和R/W同時為低電平時,可

以寫入指令

RW=0;

E=0; //E置低電平(根據表8-6,寫指令時,E為

高脈衝,

// 就是讓E從0到1發生正跳變,所以應先置”0″

_nop_();

_nop_(); //空操作兩個機器周期,給硬件反應時間

P0=dictate; //將數據送入P0口,即寫入指令或地址

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四個機器周期,給硬件反應時間

E=1; //E置高電平

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四個機器周期,給硬件反應時間

E=0; //當E由高電平跳變成低電平時,液晶模塊

開始執行命令

}

/*****************************************************

函數功能:指定字符顯示的實際地址

入口參數:x

***************************************************/

void WriteAddress(unsigned char x)

{

WriteInstruction(x|0x80); //顯示位置的確定方法規定為”80H+地址碼

x”

}

/*****************************************************

函數功能:將數據(字符的標準ASCII碼)寫入液晶模塊

入口參數:y(為字符常量)

***************************************************/

void WriteData(unsigned char y)

{

while(BusyTest()==1);

RS=1; //RS為高電平,RW為低電平時,可以寫入數據

RW=0;

E=0; //E置低電平(根據表8-6,寫指令時,E為高脈衝

// 就是讓E從0到1發生正跳變,所以應先置”0″

P0=y; //將數據送入P0口,即將數據寫入液晶模塊

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四個機器周期,給硬件反應時間

E=1; //E置高電平

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四個機器周期,給硬件反應時間

E=0; //當E由高電平跳變成低電平時,液晶模塊開始執

行命令

}

/*****************************************************

函數功能:對LCD的顯示模式進行初始化設置

***************************************************/

void LcdInitiate(void)

{

delaynms(15); //延時15ms,首次寫指令時應給LCD一段較

長的反應時間

WriteInstruction(0x38); //顯示模式設置:16×2顯示,5×7點陣,

8位數據接口

delaynms(5); //延時5ms ,給硬件一點反應時間

WriteInstruction(0x38);

delaynms(5); //延時5ms ,給硬件一點反應時間

WriteInstruction(0x38); //連續三次,確保初始化成功

delaynms(5); //延時5ms ,給硬件一點反應時間

WriteInstruction(0x0c); //顯示模式設置:顯示開,無光標,

光標不閃爍

delaynms(5); //延時5ms ,給硬件一點反應時間

WriteInstruction(0x06); //顯示模式設置:光標右移,字符不

delaynms(5); //延時5ms ,給硬件一點反應時間

WriteInstruction(0x01); //清屏幕指令,將以前的顯示內容清

delaynms(5); //延時5ms ,給硬件一點反應時間

}

/**************************************************************

以下是1302數據的顯示程序

**************************************************************/

/*****************************************************

函數功能:顯示秒

入口參數:x

***************************************************/

void DisplaySecond(unsigned char x)

{

unsigned char i,j; //j,k分別儲存十位和個位

i=x/10;//取十位

j=x%10;//取個位

WriteAddress(0x49); //寫顯示地址,將在第2行第7列開始顯示

WriteData(digit[i]); //將百位數字的字符常量寫入LCD

WriteData(digit[j]); //將十位數字的字符常量寫入LCD

delaynms(50); //延時1ms給硬件一點反應時間

}

/*****************************************************

函數功能:顯示分鐘

入口參數:x

***************************************************/

void DisplayMinute(unsigned char x)

{

unsigned char i,j; //j,k十位和個位

i=x/10;//取十位

j=x%10;//取個位

WriteAddress(0x46); //寫顯示地址,將在第2行第7列開始顯示

WriteData(digit[i]); //將百位數字的字符常量寫入LCD

WriteData(digit[j]); //將十位數字的字符常量寫入LCD

delaynms(50); //延時1ms給硬件一點反應時間

}

/*****************************************************

函數功能:顯示小時

入口參數:x

***************************************************/

void DisplayHour(unsigned char x)

{

unsigned char i,j; //j,k十位和個位

i=x/10;//取十位

j=x%10;//取個位

WriteAddress(0x43); //寫顯示地址,將在第2行第7列開始顯示

WriteData(digit[i]); //將百位數字的字符常量寫入LCD

WriteData(digit[j]); //將十位數字的字符常量寫入LCD

delaynms(50); //延時1ms給硬件一點反應時間

}

/*****************************************************

函數功能:顯示日

入口參數:x

***************************************************/

void DisplayDay(unsigned char x)

{

unsigned char i,j; //j,k十位和個位

i=x/10;//取十位

j=x%10;//取個位

WriteAddress(0x0c); //寫顯示地址,將在第2行第7列開始顯示

WriteData(digit[i]); //將十位數字的字符常量寫入LCD

WriteData(digit[j]); //將個位數字的字符常量寫入LCD

delaynms(50); //延時1ms給硬件一點反應時間

}

/*****************************************************

函數功能:顯示月

入口參數:x

***************************************************/

void DisplayMonth(unsigned char x)

{

unsigned char i,j; //j,k分別儲存十位和個位

i=x/10;//取十位

j=x%10;//取個位

WriteAddress(0x09); //寫顯示地址,將在第2行第7列開始顯示

WriteData(digit[i]); //將十位位數字的字符常量寫入LCD

WriteData(digit[j]); //將個位數字的字符常量寫入LCD

delaynms(50); //延時1ms給硬件一點反應時間

}

/*****************************************************

函數功能:顯示年

入口參數:x

***************************************************/

void DisplayYear(unsigned char x)

{

unsigned char i,j; //j,k分別儲存十位和個位

i=x/10;//取十位

j=x%10;//取個位

WriteAddress(0x06); //寫顯示地址,將在第2行第7列開始顯示

WriteData(digit[i]); //將十位位數字的字符常量寫入LCD

WriteData(digit[j]); //將個位數字的字符常量寫入LCD

delaynms(50); //延時1ms給硬件一點反應時間

}

/*****************************************************

函數功能:主函數

***************************************************/

void main(void)

{

unsigned char second,minute,hour,day,month,year; //分別儲存苗

、分、小時,日,月,年

unsigned char ReadValue; //儲存從1302讀取的數據

LcdInitiate(); //將液晶初始化

WriteAddress(0x01); //寫Date的顯示地址,將在第1行第2列開始顯示

WriteData(‘D’); //將字符常量寫入LCD

WriteData(‘a’); //將字符常量寫入LCD

WriteData(‘t’); //將字符常量寫入LCD

WriteData(‘e’); //將字符常量寫入LCD

WriteData(‘:’); //將字符常量寫入LCD

WriteAddress(0x08); //寫年月分隔符的顯示地址, 顯示在第1行第9列

WriteData(‘-‘); //將字符常量寫入LCD

WriteAddress(0x0b); //寫月日分隔符的顯示地址, 顯示在第1行第12列

WriteData(‘-‘); //將字符常量寫入LCD

WriteAddress(0x45); //寫小時與分鐘分隔符的顯示地址, 顯示在第2行第

6列

WriteData(‘:’); //將字符常量寫入LCD

WriteAddress(0x48); //寫分鐘與秒分隔符的顯示地址, 顯示在第2行第9

WriteData(‘:’); //將字符常量寫入LCD

Init_DS1302(); //將1302初始化

while(1)

{

ReadValue = ReadSet1302(0x81); //從秒寄存器讀數據

second=((ReadValue0x70)4)*10 + (ReadValue0x0F);//將讀出數據

轉化

DisplaySecond(second); //顯示秒

ReadValue = ReadSet1302(0x83); //從分寄存器讀

minute=((ReadValue0x70)4)*10 + (ReadValue0x0F); //將讀出數據

轉化

DisplayMinute(minute); //顯示分

ReadValue = ReadSet1302(0x85); //從分寄存器讀

hour=((ReadValue0x70)4)*10 + (ReadValue0x0F); //將讀出數據轉

DisplayHour(hour); //顯示小時

ReadValue = ReadSet1302(0x87); //從分寄存器讀

day=((ReadValue0x70)4)*10 + (ReadValue0x0F); //將讀出數據轉

DisplayDay(day); //顯示日

ReadValue = ReadSet1302(0x89); //從分寄存器讀

month=((ReadValue0x70)4)*10 + (ReadValue0x0F); //將讀出數據

轉化

DisplayMonth(month); //顯示月

ReadValue = ReadSet1302(0x8d); //從分寄存器讀

year=((ReadValue0xf0)4)*10 + (ReadValue0x0F); //將讀出數據轉

DisplayYear(year); //顯示年

}

}

c語言switch問題/單片機

首先告訴你,這不是一個循環程序!使用switch只是相當於if ….else…. 程序是判斷wenum的值,wenum的值是0,1,2,3,4,5中的一個。當wenum=0時執行case 0:後面語句遇到break就跳出!,後面的依次類推。 如果是在單片機中,循環一般是在while(1)中來完成的,整個switch應該是循環體中的一部分你的s++也應該是在一個循環語句中實現的,或者在定時器中斷中實現。總之要保證s++反覆執行!

c語言 建立一個鏈表,實現增刪改查

下面是以前寫的一個關於鏈表的綜合操作,你可以看看,應該可以滿足你的要求。

/********************************************************************

created: 2009/09/15

created: 16:9:2009 17:20

filename: E:\dd\lianbiao\lianbiao.cpp

author:

purpose: 一個win32 的控制台程序

實現單項鏈表的數據刪除、插入、排序等功能

*********************************************************************/

#include stdio.h

#include “windows.h”

#include “malloc.h”

#define LEN sizeof(struct student)

#define NULL 0

#define N 5 //N為所要創建的鏈表的長度

int n = 0; //定義全局變量n,表示鏈表的節點個數

/*******************************************************************

Author/data: /2009/09/15

Description: 聲明一個結構體作為鏈表的節點.

tip: student 只是一個標籤,是不能聲明變量的

*********************************************************************/

struct student

{

int num;

float cj;

struct student *Pnext;

};

/*******************************************************************

Author/data: /2009/09/15

Description: 創建一個動態鏈表

參數: 返回鏈表的第一個節點的地址

x 為鏈表的長度

*********************************************************************/

struct student *pa(int x)

{

struct student *head;

struct student *p1,*p2;

// n = 0;

p1 = p2 = (struct student *)malloc(LEN); //開闢一個結構體內存

fflush(stdin); // 清除緩衝區數據 避免直接讀入緩衝區數據

scanf(“%d,%f”,p1-num,p1-cj);

head = NULL;

while(p1-Pnext != NULL)

{

n = n+1;

if(n == 1)

{

head = p1; // 鏈表的頭地址

}

else

{

p2-Pnext = p1; //鏈接鏈表數據

}

/* 判斷是否最後一個 */

if(n = x)

{

p1-Pnext = NULL;

}

else

{

p2 = p1;

p1 = (struct student *)malloc(LEN);

fflush(stdin);

scanf(“%d,%f”,p1-num,p1-cj);

}

}

return(head);

}

/*******************************************************************

Author/data: /2009/09/15

Description: 輸出一個鏈表

參數: head為第一個節點的地址

*********************************************************************/

void print(struct student *head)

{

struct student *p;

int i = 0;

printf(“\nNow,These %d records are:\n”,n);

p = head;

if(head != NULL) // 如果鏈表不是空的,則進行數據輸出

{

do

{

printf(“%d\t”,i++);

printf(“%5d %5.1f\n”,p-num,p-cj); // 輸出鏈表數據

p = p-Pnext;

}while(p != NULL);

}

}

/*******************************************************************

Author/data: /2009/09/16

Description: 釋放動態鏈表的地址空間

參數: 鏈表的頭地址head

無返回值

*********************************************************************/

void freelinkspace(struct student *head)

{

struct student Ltemp;

Ltemp.Pnext = head-Pnext; // Ltemp 用來存放-next,避免空間被

// 釋放後,找不到下一個結點的地址

while(head-Pnext != NULL) // 判斷是否已經空間釋放到最後一個

{

free(head);

head = Ltemp.Pnext;

Ltemp.Pnext = head-Pnext;

}

free(head); // 釋放最後一個結點空間

}

/*******************************************************************

Author/data: /2009/09/15

Description: 刪除鏈錶鏈表中的一個結點

參數: head 為第一個節點的地址

num 為要刪除結點的序號(head-num)

*********************************************************************/

struct student *del(struct student *head,int num)

{

struct student *p1,*p2;

p1 = head;

while(p1-num!=num p1-Pnext!=NULL) // 尋找要刪除的結點

{

p2 = p1; // p2 存放刪除結點的前一個結點地址

p1 = p1-Pnext; // p1 存放要刪除的結點

}

if(num == p1-num) // 是否找到要刪除結點

{

if(p1 == head) // 刪除的是第一個結點

{

head = p1-Pnext;

}

else if(p1-Pnext == NULL) // 刪除的是最後一個結點

{

p2-Pnext = NULL;

}

else // 刪除中間的結點

{

p2-Pnext = p1-Pnext;

p1-Pnext = NULL;

}

printf(“delete: %d\n”,num);

n = n-1; // 鏈表長度 – 1

}

else

{

printf(“%d not been found! \n”,num);

}

delete(p1);

return(head);

}

/*******************************************************************

Author/data: /2009/09/16

Description: 添加一個結點到鏈表中

參數: head 為第一個結點的地址指針

stud 為要插入的結點的地址指針

*********************************************************************/

struct student *insert(struct student *head,struct student *stud)

{

struct student *p0,*p1,*p2;

p0 = stud;

p1 = head;

while(p0-nump1-num p1-Pnext!=NULL) // 找到添加結點的位置

{

p2 = p1; // p2 存放要添加的前一個結點的地址

p1 = p1-Pnext; // p1 存放要添加的後一個結點的地址

}

if(p0-num=p1-num p1-Pnext!=NULL)

{

if(p1 == head) // 添加結點到第一個位置

{

p0-Pnext = p1;

head = p0;

}

else

{

p2-Pnext = p0;

p0-Pnext = p1;

}

}

else // 添加結點到最後一個位置

{

p1-Pnext = p0;

p0-Pnext = NULL;

}

n = n+1; // 結點數目 + 1

return(head);

}

/*******************************************************************

Author/data: /2009/09/16

Description: 鏈表的重新排序===按照.num(不能重複)的大小從小到大排

列鏈表數據

參數: head 接收鏈表第一個節點的地址指針

返回值為新生成鏈表的第一個節點的地址指針

*********************************************************************/

struct student *linkpaix(struct student *head)

{

struct student *stemp,*ltemp,*shead,*head_h; /* */

struct student *p,*q; /* 申請兩個鏈表指針,用來儲存鏈表交換過

程的中間值 */

head_h = head;

ltemp = head;

p = (struct student *) malloc(LEN);

q = (struct student *) malloc(LEN); /* 為p,q開闢動態存儲空間 */

/* -==== 先將鏈表的第一個數據與其他數據比較 ====- */

while(head-Pnext != NULL)

{

shead = head;

head = head-Pnext;

if(ltemp-num head-num)

{

if(ltemp == shead)

{

ltemp -Pnext = head -Pnext;

head -Pnext = ltemp;

}

else

{

p-Pnext = head -Pnext;

q-Pnext = ltemp -Pnext;

head -Pnext = q-Pnext;

shead -Pnext = ltemp;

ltemp -Pnext = p-Pnext;

}

head_h = head;

head = ltemp;

ltemp = head_h;

}

}

/* -==== 先將鏈表的第一個數據與其他數據比較 ====- */

/* -==== 比較鏈表第一個以外的數據 ====- */

while(ltemp -Pnext != NULL)

{

stemp = ltemp;

ltemp = ltemp -Pnext;

head = ltemp;

while(head-Pnext != NULL)

{

shead = head;

head = head-Pnext;

if(ltemp-num head-num)

{

if(ltemp == shead)

{

p-Pnext = head -Pnext;

stemp -Pnext = head;

head -Pnext = ltemp;

ltemp -Pnext = p-Pnext;

}

else

{

p-Pnext = head -Pnext;

q-Pnext = ltemp -Pnext;

stemp -Pnext = head;

head -Pnext = q-Pnext;

shead -Pnext = ltemp;

ltemp -Pnext = p-Pnext;

}

head = ltemp;

ltemp = stemp -Pnext;

}

}

}

/* -==== 比較鏈表第一個以外的數據 ====- */

free(p);

free(q); // 釋放p,q的動態存儲空間

return(head_h);

}

/*******************************************************************

Author/data: /2009/09/15

Description: 主函數

參數:

*********************************************************************/

void main()

{

struct student *phead,*pins; // 定義2個鏈表指針

int delnum, selflog,flog_a = 1,Nf = 1; // 要刪除的對象id

char delflog ; // 刪除標誌y/n

char insflog, flog_nx = ‘n’;

char flog_free ; // 釋放標誌

/* === 輸入N個數據 === N 為定值

printf(“please input %d numbers:\n”,N);

phead = pa(N); // 創建一個動態鏈表,並賦值

print(phead); // 輸出鏈表數據

*/

/* === 輸入Nx個數據 === Nx 為輸入值 === */

int Nx; // Nx 想要輸入的鏈表長度

printf(“How long do you want establish? \t”);

fflush(stdin);

scanf(“%d”,Nx);

/* -== 判斷創建的是否是一個空鏈表 ==- */

while(Nx == 0)

{

printf(“您要創建的是一個空鏈表,是否確定?y/n \t”);

fflush(stdin);

scanf(“%c”,flog_nx);

if(flog_nx == ‘n’)

{

printf(“How long do you want input?\t”);

fflush(stdin);

scanf(“%d”,Nx);

}

else if(flog_nx == ‘y’) goto endl;

else

{

printf(“wrong input!\n”);

printf(“How long do you want input?\t”);

fflush(stdin);

scanf(“%d”,Nx);

}

}

printf(“please input %d numbers: “,Nx);

printf(“如:1,3 兩個數中間以,隔開\n”);

phead = pa(Nx); // 創建一個動態鏈表,並賦值

print(phead); // 輸出鏈表數據

/* -== 鏈表操作 ==- */

while(flog_a)

{

if(phead == NULL) {printf(“鏈表已空,無法操作\n”); flog_a = 0; break;}

printf(“\n操作\n1:\t插入數據\n2:\t刪除數據\n3:\t排序\n4:\t清屏\n5:\t輸出現在的鏈表數據\n0:\texit\n”);

printf(“\nPlease input:\t”);

fflush(stdin);

if(scanf(“%d”,selflog)) // select flog 選擇項

switch(selflog)

{

case 1 :

/* ====== 插入數據到鏈表 ====== */

printf(“insert someone? y/n\t”);

fflush(stdin);

scanf(“%c”,insflog);

while(insflog != ‘n’)

{

while(insflog != ‘y’ insflog != ‘n’)

{

printf(“wrnong input,please input again. \n”);

printf(“another one? y/n\t”);

fflush(stdin);

scanf(“%c”,insflog);

}

printf(“please input the date:\n”);

pins = (struct student *)malloc(LEN);

fflush(stdin);

scanf(“%d,%f”,pins-num,pins-cj);

phead = insert(phead,pins);

print(phead);

printf(“another one? y/n\t”);

fflush(stdin);

scanf(“%c”,insflog);

while(insflog != ‘y’ insflog != ‘n’)

{

printf(“wrnong input,please input again. \n”);

printf(“another one? y/n\t”);

fflush(stdin);

scanf(“%c”,insflog);

}

}

/* ====== 插入數據到鏈表 ====== */

break;

case 2 :

/* ====== 刪除鏈表中的數據 ====== */

printf(“del someone? y/n\t”);

fflush(stdin);

scanf(“%c”,delflog);

while(delflog != ‘n’ phead != NULL)

{

while(delflog != ‘y’ delflog != ‘n’)

{

printf(“wrnong input,please input again. \n”);

printf(“del someone? y/n\t”);

fflush(stdin);

scanf(“%c”,delflog);

}

printf(“please input the student what you want del:\n”);

fflush(stdin);

scanf(“%d”,delnum);

phead = del(phead,delnum);

print(phead);

printf(“another one? y/n\t”);

fflush(stdin);

scanf(“%c”,delflog);

if((n+1)==0)

{

printf(“There is no more num could be del!\n”);

break;

}

}

/* ====== 刪除鏈表中的數據 ====== */

break;

case 3 :

/* ====== 排列鏈表數據 ====== */

printf(“\n排序之後:”);

phead = linkpaix(phead);

print(phead); // 排序該數據鏈表

/* ====== 排列鏈表數據 ====== */

break;

case 4 :// clrscr();

system(“cls”);

break;

case 5 : print(phead); break;

case 0 : flog_a = 0 ; break; /* 退出 */

default : printf(“wrong input\nPlease input again”);

break;

}

else printf(“非法輸入!\n”);

}

endl: while(1)

{

if(Nx == 0)

{

printf(“Can’t establish the link!\n”);

break;

}

printf(“\n保留數據?y/n\t”); // 是否釋放地址空間

fflush(stdin);

scanf(“%c”,flog_free);

if(flog_free == ‘y’)

{

break;

}

else if(flog_free == ‘n’)

{

freelinkspace(phead);

break;

}

else

{

printf(“wrong input!\n”);

}

}

printf(“OVER!\nGOOD LUCK!\n”);

}

C#中怎麼複製數組

C#中數組複製有多種方法

數組間的複製,int[] pins = {9,3,4,9};int [] alias = pins;這裡出了錯誤,也是錯誤的根源,以上代碼並沒有出錯,但是根本不是複製,因為pins和alias都是引用,存在於堆棧中,而數據9,3,4,3是一個int對象存在於堆中,int [] alias = pins;只不過是創建另一個引用,alias和pins同時指向{9,3,4,3},當修改其中一個引用的時候,勢必影響另一個。複製的意思是新建一個和被複制對象一樣的對象,在C#語言中應該有如下4種方法來複制。

方法一:使用for循環

int []pins = {9,3,7,2}

int []copy = new int[pins.length];

for(int i =0;i!=copy.length;i++)

{

copy[i] = pins[i];

}

方法二:使用數組對象中的CopyTo()方法

int []pins = {9,3,7,2}

int []copy2 = new int[pins.length];

pins.CopyTo(copy2,0);

方法三:使用Array類的一個靜態方法Copy()

int []pins = {9,3,7,2}

int []copy3 = new int[pins.length];

Array.Copy(pins,copy3,copy.Length);

方法四:使用Array類中的一個實例方法Clone(),可以一次調用,最方便,但是Clone()方法返回的是一個對象,所以要強制轉換成恰當的類類型。

int []pins = {9,3,7,2}

int []copy4 = (int [])pins.Clone();

方法五:

string[] student1 = { “$”, “$”, “c”, “m”, “d”, “1”, “2”, “3”, “1”, “2”, “3” };

string[] student2 = { “0”, “1”, “2”, “3”, “4”, “5”, “6”, “6”, “1”, “8”, “16”,”10″,”45″, “37”, “82” };

ArrayList student = new ArrayList();

foreach (string s1 in student1)

{

student.Add(s1);

}

foreach (string s2 in student2)

{

student.Add(s2);

}

string[] copyAfter = (string[])student.ToArray(typeof(string));

兩個數組合併,最後把合併後的結果賦給copyAfter數組,這個例子可以靈活變通,很多地方可以用。

在C#中,採用什麼屬性表示數組的維數

C#聲明數組時,方括號[]必須跟在類型後面,而不是標識符後面

1. 聲明一維數組

C#數組的大小不是其類型的一部分,而在C語言中卻是數組類型的一部分

int[] mySigArray = new int[4];    //聲明數組類型,並使用new關鍵字為他分配內存空間/*上述聲明可分解為以下兩步*/int[] mySigArray;                 //聲明數組類型mySigArray = new int[4];          //使用new關鍵字為他分配內存空間

另外C#聲明數組時支持分配內存的方括號內是整型變量或變量表達式,只要事先確定了變量的值即可(這個在C語言的C99標準出現之前是不允許的)

int[] mySigArray = new int[n];    //n的值必須事先確定,聲明之後即使改變n的值數組大小也不會變

2. 聲明多維數組

int[,] myMulArray = new int[4,3]; //聲明二維整型數組

3. 聲明鋸齒數組(數組的數組)

多維數組的大小是矩形的,例如3X3(也可以是是4×3,只需每行大小相同)個元素。而鋸齒數組的大小設置比較靈活,在鋸齒數組中,每一行都可以有不同的大小,如下圖,鋸齒數組成鋸齒狀

int[][] mySawArray = new int[3][];    //注意與二維數組不同,這裡有兩個方括號

數組的初始化

如果有初始化數據,可以用以下最簡單的形式初始化

int[] mySigArray = {1,2,3,4};            //一維數組初始化int[,] myMulArray = {{1,2,3},{4,5,6},{7,8,9}};     //二維數組初始化int[][] mySawArray = {new int[] {1,2},new int[] {3,4,5,6,7,8},new int[] {9,10,11}};   //鋸齒數組初始化

數組的訪問

1. 訪問上述初始化的的數組中單個元素

int i = mySigArray[2];        //i=3int j = myMulArray[2,1];     //j=8int k = mySawArray[2][1];     //k=10注意二維數組與鋸齒數組的區別

2. 遍歷訪問數組元素

C#提供了foreach語句,該語句提供了一種簡單、明了的方法來循環訪問數組

foreach(int m in myArray)      //將所有數組元素的值加1,myArray可以是一維、多維或鋸齒數組{

m++;

}    

另外也可以用for循環遍曆數組,使用這種方式可以更好的控制數組元素(知道每次循環中的數組對象是哪個),下面這段代碼用foreach語句是無法實現的

for (int i = 0; i mySawArray.Length; i++)

{    for (int j = 0; j mySawArray[i].Length; j++)

{

myMulArray[i,j]=mySawArray[i][j];    //把鋸齒數組的每個元素賦值給二維數組中相應的元素    }

}

數組的常用屬性和方法

在C#中,數組實際上是對象。System.Array是所有數組類型的抽象基類型,提供創建、操作、搜索和排序數組的方法,因此所有的數組都可以使用它的屬性和方法

1. 常用屬性

Length:獲得一個32位整數,該整數表示Array的所有維數中元素的總數,即數組的元素個數,常用來限制數組下標的大小

2. 常用方法

2.1 數組的複製

在C#中,數組的複製一般分為以下三種:

int[] pins = {3,9,7,2};int[] copy1 = new int[pins.Length];pins.CopyTo(copy1,0);   //使用數組對象的CopyTo()方法進行複製,參數0表示從copy1數組的第一個元素(下標是0)開始放置從pins數組複製過來的值int[] copy2 = new int[pins.Length];Array.Copy(pins,copy2,copy2.Length); //使用Array類的一個靜態方法Copy(),參數copy2.Length表示從pins數組的第一個元素開始到copy2數組所能容納的最後一個元素(copy2.Length)都複製到copy2數組int[] copy3 = (int[])pins.Clone(); //使用數組對象的Clone()方法,它會創建一個新的數組,返回值是一個對象,所以需要強制類型轉換成恰當的類型

2.2 數組的排序

排序是編程中常用的算法之一。C#中提供了兩個數組排序的方法:

Array.Sort(Array)用於對數組進行從小到大排序

Array.Reverse(Array)用於對數組進行反向排序

int[] pins = {3,9,7,2};

Array.Sort(pins);    //pins={2,3,7,9}Array.Reverse(pins);    //pins={9,7,3,2}

怎樣用C語言做一個按鈕並設置點擊反應

void delay() //延遲子程序

{

unsigned char i,j;

i=5;

while(i–)

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

}

uint key() //按鍵子程序

{

f(k1==0)// 當按鍵按下時

{

delay( );// 延遲等待

if(k1==0) // 如果按鍵還是按下的動作,確定按鍵已經按下

while(!k1) ; // 當按鍵有彈起以後,再執行動作

{ /*這裡自己/設置按鍵按下以後要執行的動作*/}

}

}

希望對您有所幫助!

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-04 19:32
下一篇 2025-01-04 19:32

相關推薦

  • 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
  • OpenJudge答案1.6的C語言實現

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

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

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

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論