当前位置:首页 » 编程语言 » 最容易懂的c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

最容易懂的c语言

发布时间: 2023-08-26 05:40:51

① C语言基础编程问题,要简洁易懂的程序

函数fun的原理是传字符串指针和字符串长度两个参数,用for循环遍历字符串,

当遇到数字字符时,就把数字字符和其后面的字符向后移动1个字符,

在原来数字字符的位置写一个'$',当前字符位置i加1,字符串长度n加1.

完整的C语言程序如下

#include<stdio.h>

#include<string.h>

void fun(char* s,int n){

int i,j;

for(i=0;s[i]!='';i++){

if('0'<=s[i]&&s[i]<='9'){

for(j=n;j>=i;j--){

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

}

s[i]='$';

i++;

n++;

}

}

}

int main(){

char a[80];

scanf("%s",a);

fun(a,strlen(a));

printf("%s ",a);

return 0;

}

② 最简单的编程语言是什么

你是不是想象自己学会了编程,开了家公司,有很多的钱?可当你开始自学编程,却因为讲师对你讲听不懂的术语给忽悠了,从而放弃了学编程?其实,编程很有趣。下面小编——虾哥——为你介绍哪几种编程语言最容易。
方法/步骤
1/4分步阅读
排名第一:Visual basic

visual的意思是“视觉”,basic是一种最适合初学者的编程语言。顾名思义。它是可以在窗口里拖组件的Basic编程语言。它由微软开发,简单易用,新手大师都适合。

2/4
排名第二:Visual C++

VC++其实也是微软推出的C/C++语言集成开发环境。它功能简单,简单到连框架都可以省去一点(当然不可以全部省去),比较适合初学者。唯一让初学者接受不了的可能是新手只能开发控制台,学着学着会觉得开发这些黑底白字的东东没什么用。

3/4
排名第三:Java

Java最流行。有三种原因:1.Java程序员工资高。2.Java的优点是跨平台,适合做移动开发。3.因为以上两点,很多想学编程的人发现学Java的人多,所以就跟风学Java。Java比较难学,学过C/C++的人学Java更容易听懂。

4/4
还有Java script,HTML,PHP,RUBY等语言。如果你有足够的耐心,学以下几种编程语言也不是问题。但是还是建议按本篇经验所介绍的编程语言的顺序来学吧。

注意事项
本经验只是作者观点,学哪种语言都可以。

③ C语言入门题目,求详细易懂的解答过程。

答案为第一行:Tony。
解答:for循环共循环2次,然后strcpy(a,b)比较两串字符大小,如果strcpy值大于0,则a大于b。具体的比较是看字符串的字母的ASCII码的大小,如果相同,再继续比较第二个,这个不赘述。
主要看一下name[],对于一维数组来讲,它是元素,对于二维数组来讲,它不是具体的元素,而是代表的一维数组。比如name[3][20],为3行20列,那么name[0],它代表的是组成二维数组的第一维数组。又知道puts()括号里可以放一维数组名,可以输出它里面的字符串,对放name[0]的话,那就是输出3行20列中的第一行字符串。
通过for比较我们已经得出结果,即两次for循环都不符合条件,因此,m没有变化,=0。所以puts(nam[0])的话,就是输出Tony。
望楼主采纳。

④ C语言编程实现时间片轮转算法,尽量写得简单易懂,谢谢

#include<stdlib.h>
#define MAX 5 //进程数量
#define RR 2 //时间片大小

/*时间片轮转算法*/

struct pro
{
int num;
int arriveTime;
int burst;
int rt; //记录进程被运行的次数
struct pro *next;
};

int TOTALTIME; //记录所有进程的总时间

//函数声明
struct pro* creatList();
void insert(struct pro *head,struct pro *s);
struct pro* searchByAT(struct pro *head,int AT);
void del(struct pro* p);
int getCount(struct pro *head,int time);
struct pro* searchEnd(struct pro *head);
void move(struct pro *headF,struct pro *headT,int n);

struct pro* creatList() //创建链表,按照进程的到达时间排列,记录所有进程的信息
{
struct pro* head=(struct pro*)malloc(sizeof(struct pro));
head->next=NULL;
struct pro* s;
int i;
TOTALTIME=0;
for(i=0;i<MAX;i++)
{
s=(struct pro*)malloc(sizeof(struct pro));
printf("请输入进程名:\n");
scanf("%d",&(s->num));
printf("请输入到达时间:\n");
scanf("%d",&(s->arriveTime));
printf("请输入运行时间:\n");
scanf("%d",&(s->burst));
TOTALTIME+=s->burst; //计算总时间
s->rt=1; //rt的初始值为1
s->next=NULL;
insert(head,s);
}
return head; //到达队列中的进程按照其到达时间的先后顺序排列
}

void insert(struct pro *head,struct pro *s) //插入节点
{
struct pro *p=searchByAT(head,s->arriveTime);
s->next=p->next;
p->next=s;
return;
}

struct pro* searchByAT(struct pro *head,int AT) //查找第一个到达时间大于等于AT的节点,返回其前一个指针
{
struct pro *p,*q;
p=head;
q=head->next;
while(q!=NULL&&q->arriveTime<=AT)
{
p=q;
q=q->next;
}
return p;
}

void del(struct pro* p) //删除p的下一个节点
{
struct pro *tmp;
tmp=p->next;
p->next=tmp->next;
free(tmp);
return;
}

int getCount(struct pro *head,int time) //察看在time之前到达但未移动到运行队列的进程数量
{
int count=0;
struct pro *s,*t;
s=head;
t=s->next;
while(t!=NULL&&t->arriveTime<=time)
{
s=t;
t=t->next;
count++; //count记录当前时刻到达的进程数
}
return count;
}

struct pro* searchEnd(struct pro *head) //查找并返回循坏队列的尾节点的前一个节点
{
struct pro *p,*q;
p=head;
q=head->next;
while(q->next!=head)
{
p=q;
q=q->next;
}
return p;
}

void move(struct pro *headF,struct pro *headT,int n) //将headF后的n个节点移动到循环队列headT中
{
struct pro *r,*s,*t;
s=headF;
t=s->next;
r=t; //r记录要移动的第一个节点
while(n>1)
{
t=t->next;
n--;
}
s->next=t->next; //以上完成从原队列中摘除相关节点,r,t分别为第一个和最后一个节点
s=searchEnd(headT);
t->next=s->next;
s->next=r;
}

void run(struct pro *head)
{
int time=0; //记录当前时间
int newarrive;//新到达进程数
struct pro *runhead=(struct pro*)malloc(sizeof(struct pro));
runhead->next=runhead; //创建新的循环链表,存放当前就绪队列中的进程
struct pro *p,*q;
p=runhead;
q=p->next; //q记录当前应当运行的进程
while(time<=TOTALTIME)
{
newarrive=getCount(head,time);
if(newarrive>0)
move(head,runhead,newarrive); //将head后的newarrive个节点移动到runhead队列中
if(runhead->next==runhead) //就绪队列中没有进程
time++;
else if(q==runhead)
{
p=q;
q=q->next;
}
else
{
printf("进程名:%d\n",q->num);
printf("到达时间:%d\n",q->arriveTime);
if(q->rt==1)
printf("响应时间:%d\n",time-q->arriveTime);
else
printf("第%d次运行开始时间:%d\n",q->rt,time);
if(q->burst<=RR)
{
time+=q->burst;
printf("第%d次运行结束时间:%d\n",q->rt,time);
printf("周转时间:%d\n",time-q->arriveTime);
printf("************************************\n");
struct pro *tmp=q;
q=q->next;
p->next=q;
free(tmp);
}
else //q->burst>RR
{
time+=RR;
printf("第%d次运行结束时间:%d\n",q->rt,time);
printf("************************************\n");
q->burst-=RR;
q->rt++;
p=q;
q=q->next;
}
}
}
}

void main()
{
struct pro *head=creatList();
printf("当前时间片大小为:%d\n",RR);
run(head);
}