❶ 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;
}