❶ c語言 編寫程序
鏈表創建使用creat函數,每調用一次創建一個節點。第一次調用函數會自己創建頭節點內存。
列印輸出部分,只要列印第一個節點,只要stuHead->next就可以了。
我這里寫循環里,是演示遍歷鏈表,你把break去掉就是列印整個鏈表。
#include<stdio.h>
#include<malloc.h>
typedef struct stuInfo
{
int id;//學號
char name[10];//姓名
int score;//成績
struct stuInfo *next;
}SINFO;
int creat(SINFO **stuHead,SINFO**stuTail);//成功返回1,失敗返回0
int main()
{
SINFO *stuHead=NULL,*stuTail=NULL;
if(!creat(&stuHead,&stuTail))
return 1;
if(!creat(&stuHead,&stuTail))
return 1;
if(!creat(&stuHead,&stuTail))
return 1;
while(stuHead->next)
{
printf("鏈表第一個學生信息: ");
printf("學號:%d ",stuHead->next->id);
printf("姓名:%s ",stuHead->next->name);
printf("成績:%d ",stuHead->next->score);
break;//去掉這個,就是列印鏈表所有信息,作為參考
stuHead=stuHead->next;
}
return 0;
}
int creat(SINFO **stuHead,SINFO**stuTail)//成功返回1,失敗返回0
{
SINFO *sHead=*stuHead,*sTail=*stuTail,*sNew=NULL;
if(!sHead)
{
sHead=(SINFO *)malloc(sizeof(SINFO)),sHead->next=NULL;
if(!sHead)
return 0;//拋出異常
}
sNew=(SINFO *)malloc(sizeof(SINFO));
if(!sNew)
return 0;//拋出異常
printf("請輸入學號:"),scanf("%d",&sNew->id);
printf("請輸入姓名:"),scanf("%s",sNew->name);
printf("請輸入成績:"),scanf("%d",&sNew->score);
sNew->next=NULL;
if(sHead->next==NULL)
sHead->next=sNew;
else
sTail->next=sNew;
sTail=sNew;
*stuHead=sHead;
*stuTail=sTail;
return 1;
}
❷ C學習筆記(一) C語言和匯編語言的區別
C學習筆記(一) C語言和匯編語言的區別
2016-07-11 09:43162人閱讀評論(0)收藏舉報
分類:
C學習筆記(13)
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
C學習筆記(五)C語言和匯編語言的區別
C語言和匯編語言的區別:
匯編:效率高,對硬體的可操控性更強,體積小,不易維護,可移植性很差;
C:效率比較低,硬體可操控性比較差,目標代碼體積大,容易維護,可移植性很好。
匯編語言運行效率高的原因:
1.匯編語言實質上是機器語言的助記符。 CPU只能運行它所支持的指令集,而這些指令集當中的每條指令都是一些二進制數的序列,也就是「0」和「1」的有序組合;「0」和「1」的組合不便於程序員的記憶因此有了「MOV A 0x40」等這樣的助記符。所以匯編語言編譯成CPU可執行的機器語言其實只要做一個翻譯的動作就好了。而C語言編寫完程序後,需要通過編譯器將C語言編譯成與相應CPU指令集對應的機器語言。匯編語言與機器語言是一一對應的。但是C語言呢?當然沒這么好事了。C語言的語法是固定的,C語言編寫的程序要編譯成CPU能讀懂的機器語言指令沒辦法一一對應,因此需要有編譯規則了,所以運行效率低一些。也可以說,C語言,是面向程序員的語言,而匯編語言是直接面向CPU的語言。
2.匯編是直接面對CPU的語言,只要是在指令集支持的范圍內,匯編語言可以直接而靈活地管理包括特殊功能寄存器、通用寄存器、存儲單元的每一個位元組,甚至是每一個bit。C語言對內存的使用及管理功能也是很強大的,但畢竟還是受制於語法。舉個最簡單的例子,C語言當中沒有對應三位元組或是五位元組的變數類型,要麼int型,要麼long型,所以每次申請必須是固定的位元組數,勢必造成內存使用上的浪費。而大部份匯編語言根本沒有這樣的語法,在偽指令的幫助下(其實也只是提高可讀性),匯編語言程序可以使用任意位元組數的變數,當然處理起來比C語言麻煩得多,最終還是一個位元組一個位元組地拼接處理,而用C語言寫程序就輕鬆了,不用管這些,最終編譯器會搞定嘛。而輕松的代價就是造成了浪費。而內存使用效率不高同時也會影響到整個程序的整體效率。
C語言與匯編的不同適用場合
1:若只有較簡單的邏輯操作、邏輯演算法、簡單運算,使用匯編會得到較為精準的代碼,但用c也同樣可以做到。
2:若摻有復雜運算、浮點運算、非線性方程等,匯編難度很大,而C語言作為一種高級語言,有簡潔緊湊,使用靈活的語法機制,編寫復雜程序容易得多。
3:每一款處理器各自的匯編語法大都不一樣,若僅使用匯編,可擴充性、可移植性都很差,用c就會好的多。
4:對硬體進行初始化的操作,使用匯編語言。
❸ 用C語言編寫程序
程序就是讀取文件到數組,再將數組進行排序,最後寫入文件。
讀寫文件流程:fopen獲取文件流(根據讀寫需求,選擇參數,使用完必須調用fclose函數關閉),fscanf讀取文件內容,fseek控制文件流指針,fprintf寫入文件。
選擇排序:每個循環周期選出一個最值,交換一次。
下面是代碼(數組為動態數組):
#include <stdio.h>
#include <malloc.h>
int maxLen;//數組長度
int *read2Nums(char path[]);//讀取
int write2File(int *nums,char path[]);//寫入
void showNums(int *nums);
int px(int *nums,int flag);//選擇排序flag=1升序,flag=0降序
int main()
{
int *nums=NULL;
char rPath[]="c:\000.dat",wPath[]="c:\rank.dat";
if(!(nums=read2Nums(rPath))) return 1;
showNums(nums);
printf("數組升序排列: ");
if(px(nums,1)==-1) return 1;
showNums(nums);
printf("數組降序排列: ");
if(px(nums,0)==-1) return 1;
showNums(nums);
printf("寫入到文件路徑%s下(存在覆蓋,不存在新建) ",wPath);
if(write2File(nums,wPath)==-1) return 1;
printf("寫入成功! ");
return 0;
}
void showNums(int *nums)
{
int i;
if(nums) for(i=0,printf("文件內容: ");i<maxLen;printf("%d ",nums[i]),i++);
printf(" ");
}
int px(int *nums,int flag)
{
int i,j,n,temp;
if(!nums) return -1;
for(i=0;i<maxLen-1;i++)
{
n=i;
for(j=i+1;j<maxLen;j++)
{
if(flag && nums[n]>nums[j]) n=j;
if(!flag && nums[n]<nums[j]) n=j;
}
temp=nums[i],nums[i]=nums[n],nums[n]=temp;
}
return 1;
}
int write2File(int *nums,char path[])
{
int i;
FILE *fp=NULL;
if(!nums) return -1;
if(!(fp=fopen(path,"w"))) return -1;
//fseek(fp,SEEK_END);
for(i=0;i<maxLen;i++)
fprintf(fp,"%d ",nums[i]);
fclose(fp);
return 1;
}
int *read2Nums(char path[])
{
int *nums=NULL,*temp=NULL,cnt=0;
FILE *fp=NULL;
maxLen=10;
if(!(fp=fopen(path,"r"))) return NULL;
nums=(int *)malloc(sizeof(int)*maxLen);
if(!nums) return NULL;
while(fscanf(fp,"%d",&nums[cnt++])!=-1)
if(cnt==maxLen)//數組長度不夠擴展(每次擴展10長度)
{
maxLen=maxLen+10;
temp=(int *)realloc(nums,sizeof(int)*maxLen);
if(temp) return NULL;
nums=temp;
}
if(--cnt<maxLen)//函數結束前,刪除多餘地址,減少內存佔用
{
maxLen=cnt;
temp=(int *)realloc(nums,sizeof(int)*maxLen);
if(!temp) return NULL;
nums=temp;
}
fclose(fp);
return nums;
}
❹ 學c語言如何做筆記
我自學C語言的時候的筆記只記程序,然後在程序旁邊寫下程序中新學的知識,比如
剛學的時候
#include <stdio.h>
main()
{
printf("Hello!");
}
每個C程序的基本格式是:
#include <stdio.h>
main()
{
printf("Hello!");
}
後來學到
#include <stdio.h>
main()
{
int x;-----要用的變數,先聲明,
x=1;
printf("x=%d",x);----^.....
}
如此類推了,這樣不了解就可以運行程序式式,我自己感覺還不錯,就是有時候,要寫太多了.
❺ c語言編寫程序
#include<stdio.h>
#defineCOL3
#defineROW3
intmain()
{
intarray[ROW][COL]={1,2,3,4,5,6,7,8,9};
intpos;
for(inti=0;i<ROW;i++){
for(intj=0;j<COL;j++){
printf("%d ",array[i][j]);
}
printf(" ");
}
printf("請輸入指定列:");
scanf("%d",&pos);
if(pos<0||pos>=COL){
printf("輸入錯誤!");
return-1;
}
int*p=array[0]+pos;
intsum=0;
for(intn=0;n<ROW;n++){
sum+=*p;
p=p+ROW;
}
printf("%d",sum);
return0;
}
❻ C語言程序設計的筆記
自己學唄,要什麼筆記啊,自己不能記啊,是不是要考試了,想看一下啊,我感覺編程靠突擊是很不現實的,你自己找老師同學復印點不就行了
❼ 用C語言編寫程序,急用,非常感謝!
#include <stdio.h>
void jiami(FILE *fp,FILE *fp1)
{ unsigned char c,c1;
while(fscanf(fp,"%c",&c)==1)
{ c1=c/16+c%16*16;
fprintf(fp1,"%c",c1);
}
fclose(fp);
fclose(fp1);
}
void jiemi(FILE *fp,FILE *fp1)
{ jiami(fp,fp1);
}
int main()
{ int a,b;
FILE *fp,*fp1,*fp2;
fp=fopen("0.cpp","r");
fp1=fopen("jiami.txt","w");
jiami(fp,fp1);
fp=fopen("jiami.txt","r");
fp1=fopen("jiemi.txt","w");
jiemi(fp,fp1);
printf("加密文件是jiami.txt,解密文件是jiemi.txt,請查看\n");
return 0;
}
❽ C語言怎麼做筆記
先熟悉第一個程序吧。自己添加註釋,反復觀摩
❾ 用C語言編寫程序
#include<stdio.h>
intmain()
{
floata,b;//表示數量//
scanf("%f%f",&a,&b);
printf("%.2f ",a*b);
return0;
}