c语言

阅读 / 问答 / 标签

2道c语言题目

要帮忙么

C语言编程的时候提示少了个分号,但是没少啊

提示的原话是什么?

c语言编程 cos(x)=1-x^2/2!+x^3/3!-x^4/4!+......-x^10/10!

看一下吧 这样写OK吧double cos(double x){ double a; double b = 1; double sum = 1 ; for (int i = 2 ; i <= 10 ; i++) { a = 1 ; for (int j = 1 ; j <= i ; j++) { b = b * x ; // 求次方 a = a * j ; // 求阶乘 } if (i % 2 == 0) { sum += (-( b / a)); } else { sum += (b / a); } } return sum;}

c语言编程 cos(x)=1-x^2/2!+x^3/3!-x^4/4!+......-x^10/10!

下面是代码,我测试过是对的,希望我的努力对你有帮助。#include<stdio.h>#include<math.h>/*求阶乘函数*/intjiecheng(intn){if(n<0){printf("错误的数字 ");return-1;}elseif(n==0||n==1){return1;}else{returnjiecheng(n-1)*n;}}/*自己写的cos函数*/doublemycos(doublex){inti=2;doublesum=1.0f;intk=-1;while(i<=10){sum+=k*pow(x,i)/jiecheng(i);//pow是math.h里的函数求x的i次方k=-k;i++;}returnsum;}voidmain(){doublex=3.0f;printf("%d ",jiecheng(2));//测试阶乘printf("%f ",mycos(x));printf("%f ",cos(x));//库函数里的cos函数用来对比}

c语言,cos(x)的近似计算

sdcdsvasdfvsdvsdafvafdrgbvfdvfdrvdsfvardfarsdfsdarfar

用C语言把2-100之内的素数放到数组里,并且输出来。

int i,j,l,a[50],n=0,k;for(i=2;i<=100;i++){l=1;for(j=2;j<i;j++){if(i%j==0){l=0;break;}}if(l==1)a[n++]=i; }for(k=0;k<n;k++){if(k%5==0)printf(" ");printf("%4d ",a[k]);}

c语言va_arg使用

va_arg是一个宏定义,用于处理函数不确定参数个数时,即可变参数列表时对参数的取用。1 头文件:#include <stdarg.h>2 形式:type va_arg(va_list ap, type);3 说明:这个宏被展开成一个包含类型为type,值为ap的表达式。参数ap应该首先被宏va_start 或 va_copy初始化,但又必须在被宏va_end调用之前使用。每次调用va_arg都会改变ap值使得后续的参数值能被依次添加。参数type应该是一个类型名,并且用type*能够得到该类型的指针类型。如果type为空,或者type和实际参数不匹配, 那么除了以下两种情况,这个宏的行为是未定义的。1) 一个是带符号整型,另一个是与之对应的无符号整型,并且值可以被表达成这两种类型的任何一种;2) 一个是空类型指针,另一个是字符类型指针。第一次调用va_arg返回parmN之后的参数值,后续的调用依次返回剩下的参数值。parmN应为函数中“...”前最后一个参数值。

我用C语言编了一个计算器单片机程序,可是总是实现不了功能,不知道是什么原因,请高手赐解。

你这个键盘 还显示 计算,。哪一个不能啊??

求几C语言个小游戏代码,简单的,要注释、、谢谢了、

// Calcu24.cpp : Defines the entry point for the console application.///*6-624点游戏*/#include "conio.h"#include "stdlib.h"#include "time.h"#include "math.h"#include "string.h"/* 从一副扑克牌中,任取4张。 2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按 1 计算 要求通过加减乘除四则运算得到数字 24。 本程序可以随机抽取纸牌,并用试探法求解。*/void GivePuzzle(char* buf){ char card[] = {"A","2","3","4","5","6","7","8","9","T","J","Q","K"}; for(int i=0; i<4; i++){ buf[i] = card[rand() % 13]; }}void shuffle(char * buf){ for(int i=0; i<5; i++){ int k = rand() % 4; char t = buf[k]; buf[k] = buf[0]; buf[0] = t; }}int GetCardValue(int c) { if(c=="T") return 10; if(c>="0" && c<="9") return c - "0"; return 1;}char GetOper(int n){ switch(n) { case 0: return "+"; case 1: return "-"; case 2: return "*"; case 3: return "/"; } return " ";}double MyCalcu(double op1, double op2, int oper){ switch(oper) { case 0: return op1 + op2; case 1: return op1 - op2; case 2: return op1 * op2; case 3: if(fabs(op2)>0.0001) return op1 / op2; else return 100000; } return 0;}void MakeAnswer(char* answer, int type, char* question, int* oper){ char p[4][3]; for(int i=0; i<4; i++) { if( question[i] == "T" ) strcpy(p[i], "10"); else sprintf(p[i], "%c", question[i]); } switch(type) { case 0: sprintf(answer, "%s %c (%s %c (%s %c %s))", p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]); break; case 1: sprintf(answer, "%s %c ((%s %c %s) %c %s)", p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]); break; case 2: sprintf(answer, "(%s %c %s) %c (%s %c %s)", p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]); break; case 3: sprintf(answer, "((%s %c %s) %c %s) %c %s", p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]); break; case 4: sprintf(answer, "(%s %c (%s %c %s)) %c %s", p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]); break; }}bool TestResolve(char* question, int* oper, char* answer){ // 等待考生完成 int type[5]={0,1,2,3,4};//计算类型 double p[4]; double sum=0; // for(int i=0; i<4; i++) //循环取得点数 { p[i]=GetCardValue(int(question[i])); } for(i=0;i<5;i++) { MakeAnswer(answer,type[i],question,oper); //获取可能的答案 switch(type[i]) { case 0: sum=MyCalcu(p[0],MyCalcu( p[1],MyCalcu(p[2], p[3], oper[2]),oper[1]),oper[0]); //A*(B*(c*D)) break; case 1: sum=MyCalcu(p[0],MyCalcu(MyCalcu(p[1], p[2], oper[1]),p[3],oper[2]),oper[0]); //A*((B*C)*D) break; case 2: sum=MyCalcu(MyCalcu(p[0], p[1], oper[0]),MyCalcu(p[2], p[3], oper[2]),oper[1]); // (A*B)*(C*D) break; case 3: sum=MyCalcu(MyCalcu(MyCalcu(p[0], p[1], oper[0]),p[2],oper[1]),p[3],oper[2]); //((A*B)*C)*D break; case 4: sum=MyCalcu(MyCalcu(p[0],MyCalcu(p[1], p[2], oper[1]),oper[0]),p[3],oper[2]); //(A*(B*C))*D break; } if(sum==24) return true; } return false;}/* 采用随机试探法:就是通过随机数字产生 加减乘除的 组合,通过大量的测试来命中的解法 提示: 1. 需要考虑用括号控制计算次序的问题 比如:( 10 - 4 ) * ( 3 + A ), 实际上计算次序的数目是有限的: A*(B*(c*D)) A*((B*C)*D) (A*B)*(C*D) ((A*B)*C)*D (A*(B*C))*D 2. 需要考虑计算结果为分数的情况:( 3 + (3 / 7) ) * 7 3. 题目中牌的位置可以任意交换*/bool TryResolve(char* question, char* answer){ int oper[3]; // 存储运算符,0:加法 1:减法 2:乘法 3:除法 for(int i=0; i<1000 * 1000; i++) { // 打乱纸牌顺序 shuffle(question); // 随机产生运算符 for(int j=0; j<3; j++) oper[j] = rand() % 4; if( TestResolve(question, oper, answer) ) return true; } return false;}int main(int argc, char* argv[]){ // 初始化随机种子 srand( (unsigned)time( NULL ) ); char buf1[4]; // 题目 char buf2[30]; // 解答 printf("*************************** "); printf("计算24 "); printf("A J Q K 均按1计算,其它按牌点计算 "); printf("目标是:通过四则运算组合出结果:24 "); printf("*************************** "); for(;;) { GivePuzzle(buf1); // 出题 printf("题目:"); for(int j=0; j<4; j++){ if( buf1[j] == "T" ) printf("10 "); else printf("%c ", buf1[j]); } printf(" 按任意键参考答案... "); getch(); if( TryResolve(buf1, buf2) ) // 解题 printf("参考:%s ", buf2); else printf("可能是无解... "); printf("按任意键出下一题目,x 键退出... "); if( getch() == "x" ) break; } return 0;}

C语言编程:首先输入两个数和一个运算符号,然后根据运算符号来做相应的运算。

改正一楼的二个地方就是,#include <stdio.h>void main(){int n1,n2,result; /*result代表结果*/char oper;printf("请输入两个数: ");scanf("%d%d",&n1,&n2);fflush(stdin)/*此处清除键盘缓冲区,否则结果是错的*/printf(" 请输入运算");/*此处是printf书写错误*/scanf("%c",&oper);switch(oper){case "+":result=n1+n2;break;case "-":result=n1-n2;break;case "*":result=n1*n2;break;case "/":result=n1/n2;break;}printf(" %d %c %d = %d ",n1,oper,n2,result);}

c语言编程 那个void和后面一点花括号的,表示什么意思啊?switch(oper),在用户输入

void那个函数说明画一条分界线,类似于----------------分割线,其实在switch之前,c1c2等等结果已经被计算出来,后来输入oper,只是用switch匹配,看oper到底和case中哪个相等,就输出哪个结果啊~

c语言中scan()什么意思

是scanf()吧 ? 这个是输入的函数。。

C语言中resolve函数是什么意思

在编译环境中,选中resolve函数,右键,查看定义

c语言课程设计,哪位大神帮帮忙,游戏管理系统。

帮做毕业设计,价格白菜,红包就行,需要回复我

在c语言的环境下编一个运动的图形程序,有代码,要求200行左右,谢谢有急用,要复制就能用的 ,

#include<io.h>#include<stdio.h>#include<dos.h>#include<string.h>#include<math.h>#include<stdio.h>#include<bios.h>#include<mem.h>#include<fcntl.h>#include<stdlib.h>#include<conio.h>#define VGA256 0x13#define TEXT_MODE 0x03#define SCREEN_WIDTH 320#define SCREEN_HEIGHT 200#define PALETTE_MASK 0x3c6#define PALETTE_REGISTER_RD 0x3c7#define PALETTE_REGISTER_WR 0x3c8#define PALETTE_DATA 0x3c9#define PCX_WIDTH 150#define PCX_HEIGHT 150typedef struct RGB_color_typ{ unsigned char red; unsigned char green; unsigned char blue;}RGB_color,*RGB_color_ptr;unsigned char far *video_buffer=(char far *)0xA0000000L;void Set_Palette_Register(int index,RGB_color_ptr color){ outp(PALETTE_MASK,0xff); outp(PALETTE_REGISTER_WR,index); outp(PALETTE_DATA,color->red); outp(PALETTE_DATA,color->green); outp(PALETTE_DATA,color->blue);}void Get_Palette_Register(int index,RGB_color_ptr color){ outp(PALETTE_MASK,0xff); outp(PALETTE_REGISTER_RD,index); color->red=inp(PALETTE_DATA); color->green=inp(PALETTE_DATA); color->blue=inp(PALETTE_DATA);}void Delay(int clicks){unsigned int far *clock=(unsigned int far *)0x0000046CL;unsigned int now;now=*clock;while(abs(*clock-now)<clicks){}}void Set_Video_Mode(int mode){ union REGS inregs,outregs; inregs.h.ah=0; inregs.h.al=(unsigned char)mode; int86(0x10,&inregs,&outregs);}void Plot_Pixel_Fast(int x,int y,char color){video_buffer[((y<<8)+(y<<6))+x]=color;}void main(void){ int index,index0,flag=0,i,j; RGB_color color; Set_Video_Mode(VGA256); for(index=0;index<32;index++) for(index0=0;index0<8;index0++) for(i=0;i<10;i++) for(j=0;j<10;j++) Plot_Pixel_Fast(0+(index-0)*10+j,0+i+index0*10,index+index0*32); getch(); for(index=1;index<256;index++) { Get_Palette_Register(index,(RGB_color_ptr)&color); color.red=color.red-10; color.green=color.green-10; color.blue=color.blue-10; Set_Palette_Register(index,(RGB_color_ptr)&color); Delay(1); } getch(); for(index=1;index<256;index++) { Get_Palette_Register(index,(RGB_color_ptr)&color); color.red=0; color.green=0; color.blue=0; Set_Palette_Register(index,(RGB_color_ptr)&color); Delay(1); } getch(); Set_Video_Mode(TEXT_MODE);}

C语言怎么学习啊?

你不行

如何学习C语言啊?

你好! 你是初学者吧!初学C++的人一般想一步登天,一下子就把C++学好,这样是不现实的。我给提一些建议,希望能给你带来帮助。一般来说C++是不难学的,只要你上课认真记好笔记,多去跟老师交流,多看书,多去想 ,就能跟上老师的步伐。若你要在人群中出类拔萃,就必须下苦功夫了。我们的邓小平爷爷说的一句话“实践出真知”是绝对没错的哦!!!要经常去电子阅览室实践,去实际操作,这样你才能更好的学好C++了。最好是自己有一台电脑。话说到这里,相必你应该清楚了吧!!!就看你自己的了。

c语言中PROTO是什么意思

这不是写得很明白吗?#if _HW_ #define PROTO #else #define PROTO extern#endifPROTO是extern的别名

C语言编写顺序表。为什么我的修改操作总是修改不了第一位,其他的均可正常运行,程序如下,帮帮忙哈

-1试试

C语言基本代码,求详细解释,越详细越好。

#include"stdio.h" //基本输入输出头文件#include"math.h" //数学头文件double pcos(double a); //声明函数pcosmain() //主程序开始{ double x,y; //定义双精度变量 x与y printf("please input one number:"); //输出提示 scanf("%lf",&x); //输入变量x的值 y=pcos(x); //调用pcos函数,x作为实参传递给函数形参a,将pcos(x)的值赋给x, printf("cos of %lf is %lf ",x,y); //输出x与y的值}double pcos(double a) //定义双精度函数,形参为双精度变量a{ double b; //定义双精度变量b b=cos(a); //将cos(a)的值赋给b return b; //将b作为函数的值返回调用程序}

简单C语言问题 linker error

在游戏过程中,按ESC键退出,按Enter键重新开局; */#include <stdlib.h> #include <graphics.h> #include <bios.h> #include <dos.h> #include <conio.h> #define Enter 7181 #define ESC 283 #define UP 18432 #define DOWN 20480 #define LEFT 19200 #define RIGHT 19712 #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif void interrupt (*oldhandler)(__CPPARGS); void interrupt newhandler(__CPPARGS); void SetTimer(void interrupt (*IntProc)(__CPPARGS)); void KillTimer(void); void Initgra(void); void TheFirstBlock(void); void DrawMap(void); void Initsnake(void); void Initfood(void); void Snake_Headmv(void); void Flag(int,int,int,int); void GameOver(void); void Snake_Bodymv(void); void Snake_Bodyadd(void); void PrntScore(void); void Timer(void); void Win(void); void TheSecondBlock(void); void Food(void); void Dsnkorfd(int,int,int); void Delay(int); struct Snake {int x;int y;int color;}Snk[12]; struct Food {int x;int y;int color;}Fd; int flag1=1,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0, checkx,checky,num,key=0,Times,Score,Hscore,Snkspeed,TimerCounter,TureorFalse; char Sco[2],Time[6]; void main() { Initgra(); SetTimer(newhandler); TheFirstBlock(); while(1) {DrawMap(); Snake_Headmv(); GameOver(); Snake_Bodymv(); Snake_Bodyadd(); PrntScore(); Timer(); Win(); if(key==ESC) break; if(key==Enter) {cleardevice(); TheFirstBlock(); } TheSecondBlock(); Food(); Delay(Snkspeed); } closegraph(); KillTimer(); } void interrupt newhandler(__CPPARGS) { TimerCounter++; oldhandler(); } void SetTimer(void interrupt (*IntProc)(__CPPARGS)) { oldhandler=getvect(0x1c); disable(); setvect(0x1c,IntProc); enable(); } void KillTimer() { disable(); setvect(0x1c,oldhandler); enable(); } void Initgra() {int gd=DETECT,gm; initgraph(&gd,&gm,"C:\tc"); } void TheFirstBlock() {setcolor(11); settextstyle(0,0,4); outtextxy(100,220,"The First Block"); loop:key=bioskey(0); if(key==Enter) {cleardevice(); Initsnake(); Initfood(); Score=0; Hscore=1; Snkspeed=10; num=2; Times=0; key=0; TureorFalse=1; TimerCounter=0; Time[0]="0";Time[1]="0";Time[2]=":";Time[3]="1";Time[4]="0";Time[5]=""; } else if(key==ESC) cleardevice(); else goto loop; } void DrawMap() {line(10,10,470,10); line(470,10,470,470); line(470,470,10,470); line(10,470,10,10); line(480,20,620,20); line(620,20,620,460); line(620,460,480,460); line(480,460,480,20); } void Initsnake() {randomize(); num=2; Snk[0].x=random(440); Snk[0].x=Snk[0].x-Snk[0].x%20+50; Snk[0].y=random(440); Snk[0].y=Snk[0].y-Snk[0].y%20+50; Snk[0].color=4; Snk[1].x=Snk[0].x; Snk[1].y=Snk[0].y+20; Snk[1].color=4; }

C语言结构体循环赋值,为什么结果都一样的?

楼主这道题什么意思,for循环中i的值怎么可以超过70呢,大致看了一下。如果愿意请给我私信。

在什么软件下可以编写makefile,比如编写c语言可以在VC6.0下编写,那么makefile可以在那里写呢。

Qt creator and vi

请问C语言,MAK文件的内容是如何生成的?

编译系统自动生成的!

c语言字母金字塔怎么输出如下图

J不用循环了啊,一直就J++就可以了啊!

本人初三开始学习C语言,开始是为了兴趣,后来发现有个noi,一等奖可以报送大学。

noi全称是“全国青少年信息学奥林匹克竞赛”noip全称是“全国青少年信息学奥林匹克联赛”一个字不一样级别就不一样。noip是各省分开考,但考题一样,题目较简单。全国大概有600个一等奖名额,各省一等奖分数线也不一样,而且不得一等奖是没有什么用的,一等奖按国家政策可以有保送资格或高考加分资格,但是如果LZ现在还没有上高中,那就不要指望保送资格或高考加分资格了,因为已经明文截止到现在的高一了。noi程序较复杂,考题很难。各省要现各自举办省选,选出最优秀的oiers(各省名额也不一样哦),再到指定省份参加全国级别的竞赛,就是全国被选出的oiers要在一起比赛。正式比赛分两试,两天考完,考完后还有交流大会,级别比noip要高多了。而且国家没有取消noi的保送资格或高考加分资格,得到铜牌就有保送资格或高考加分资格,只是金银铜牌保送的大学不一样而已。

学生选课系统C语言程序

我学的是VF呀,心有余而力不足o~~

小弟初学FLUENT,用C语言编写的程序代入UDF中提示错误,但是找不出来,麻烦大神们帮忙看看

include <iostream>#include <stdio.h>int jc(int m){if(m!=1) return m*jc(m-1);else return 1;} int c(int m,int n){if(m>=n) return jc(m)/(jc(n)*jc(m-n));} int main(void){int m,n;scanf("%d%d",&m,&n);printf("%d ",c(m,n));return 0;}

c语言 将一个二进制数,转换为对应的十进制数

#include <stdio.h> int main() { int i,flag,<a href="https://www.baidu.com/s?wd=num&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPyn4nHRLuAP9nAfduHw-0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtkn1R4nWnzPjDvP1cdPjmLnWR" target="_blank" class="baidu-highlight">num</a>; char s[33]; while(gets(s)) { <a href="https://www.baidu.com/s?wd=num&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPyn4nHRLuAP9nAfduHw-0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtkn1R4nWnzPjDvP1cdPjmLnWR" target="_blank" class="baidu-highlight">num</a> = 0; flag = 1; for(i = 0; s[i] && flag ;++i) { if(s[i] < "0" || s[i] > "1") flag = 0; else <a href="https://www.baidu.com/s?wd=num&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPyn4nHRLuAP9nAfduHw-0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtkn1R4nWnzPjDvP1cdPjmLnWR" target="_blank" class="baidu-highlight">num</a> = 2 * num + s[i] - "0"; } if(flag) printf("(%s)2 <==> %d ",s,num); else printf(""%s"中有非法字符。 ",s); fflush(stdin); } return 0;}

c语言数组中一个数的删除与插入

#include<<a href="https://www.baidu.com/s?wd=stdio.h&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Yvuym1PyczPHmYn101nh7h0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtdPjTznj6YPjc" target="_blank" class="baidu-highlight">stdio.h</a>>#define MAX 50int insert(int a[],int n,int i,int x){ int j; if(n+1>MAX) printf("无插入空间 "); //数组只能存MAX个数 else if(i<1||i>n+1) printf("插入位置非法 "); //插入位置的范围为1..n+1 else { for(j=n-1;j>i-2;j--) a[j+1]=a[j]; //将数组中i位置及其后面的数,依次向后移动一格 a[<a href="https://www.baidu.com/s?wd=i-1&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Yvuym1PyczPHmYn101nh7h0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtdPjTznj6YPjc" target="_blank" class="baidu-highlight">i-1</a>]=x; //在i位置插入x n++; } return n; //返回当前数组大小}int del(int a[],int n,int i){ int j; if(i<1||i>n) printf("删除位置非法 "); else { for(j=<a href="https://www.baidu.com/s?wd=i-1&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Yvuym1PyczPHmYn101nh7h0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtdPjTznj6YPjc" target="_blank" class="baidu-highlight">i-1</a>;j<n-1;j++) a[j] = a[j+1]; n--; } return n;}int search(int a[],int n,int x){ int i; for(i=0;i<n;i++) { if(a[i]==x) return i+1; } return -1;}void printArray(int a[],int n){ int i; for(i=0;;i++) { if(i==n-1) { printf("%d ",a[i]); break; } printf("%d ",a[i]); }}void main(){ int n,i,a[MAX]; int index,x; printf("输入数组中的元素个数 "); scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); printf("请输入要插入的位置和插入的数 "); scanf("%d %d",&index,&x); n = insert(a,n,index,x); printArray(a,n); printf("请输入要删除元素的位置 "); scanf("%d",&index); n = del(a,n,index); printArray(a,n); printf("请输入要查询的元素 "); scanf("%d",&x); i = search(a,n,x); if(i!=-1) printf("%d的位置:%d ",x,i); else printf("未找到%d ",x);}

用C语言编写程序:生产者和消费者之间实现同步与互斥问题

你真有个性~ 写那么多...我看看能不能看懂...

(C语言中)互斥锁的死锁问题

如果你将mutex_c换成mutex_p,则不会死锁,因为,你第一个线程锁上后,切换到第二个线程,因为mutex_p未释放,第二个线程无法获取mutex_p,进入等待状态,此时OS将再次调度第一个线程,直到第一个线程释放mutex_p之后,第二个线程才会被激活,然后调试第二线程,获取mutex_p.使用OS提供的互斥量来保护公共资源还是比较安全的,但如果用二值信号量的话,就可能会有优先级反转的情况.

请问c语言if(mutex==0)是表示什么意思

http://www.xfbbs.com/Book/jinghuawenzhai/VB_1/htmapi73.htm我也没有明白她写的是什么意思,但也许有用吧!

(C语言中)互斥锁的死锁问题

如果你将mutex_c换成mutex_p,则不会死锁,因为,你第一个线程锁上后,切换到第二个线程,因为mutex_p未释放,第二个线程无法获取mutex_p,进入等待状态,此时OS将再次调度第一个线程,直到第一个线程释放mutex_p之后,第二个线程才会被激活,然后调试第二线程,获取mutex_p.使用OS提供的互斥量来保护公共资源还是比较安全的,但如果用二值信号量的话,就可能会有优先级反转的情况.

C语言如何把它翻译成中文

你确定这是C语言?

c语言编程问题,输出用-和|表示的表格,求助

#include<stdio.h>#include<string.h>int main(){ int i,j,t,n,table[10][2]; char hline[64],vline[64]; scanf("%d",&t); for(i=0;i<t;i++) scanf("%d%d",&table[i][0],&table[i][1]); for(i=0;i<t;i++) { n=table[i][1]*3+1; memset(hline,"-",n); hline[n]=""; for(j=0;j<table[i][1];j++) { vline[3*j]="|"; vline[3*j+1]=" "; vline[3*j+2]=" "; } vline[3*j]="|"; vline[3*j+1]=""; for(j=0;j<table[i][0];j++) { puts(hline); puts(vline); puts(vline); } puts(hline); } return 0;}

如何用C语言实现RIL_Java中与RILD socket通讯

http://www.devdiv.com/forum.php?mod=viewthread&tid=78111按照帖子上,将c写好的代码编成.so文件,通过JNI调用其方法

strand(time(null)) 在C语言中 为什么可以 随机化数种子 原形是什么

注(似乎函数写错,应该是srand(time(null))吧 )srand(time(null))利用时间设置随机种子产生随机数更具体的介绍 参考以下内容http://hi.baidu.com/douyuan516/blog/item/a424262a7527bff0e6cd400c.html

C语言如何取字符串的最后一个,比如Lloyd2取最后一个字符

#include "stdio.h"main(){ char a[80]; int i; printf("请输入字符串,以0结束:"); for(i=0;i<80;i++) { scanf("%c",&a[i]); if(a[i]=="0") break; } printf("最后一个字符为:%c",a[i-1]); getch();}

关于c语言的问题

内存中的7个字节分别是:(1)B (2)B (3) (4)\ (5)"(6) (7)在内存中存储字符串时需要在字符串末尾加上字符串结束标志().在对字符串操作时用来判断字符串是否结束.字符串长度指的就是字符串本身应有的数据长度,忽略末尾的结束标志.对于上面的3-7来说,反斜杠是转移字符,因为控制字符是不可见的,不方便输入,所以采用这种"转义"的方法例如: 实际上是ASCII码中的0A(参考ASCII码).字符串中每个字节存储的就是ASCII码.参考:ASCII码1http://pic.lyglyg.com/yourpic/2005/11/18/027bf0d818ad41042e04374a73812833.gif2。http://pic.lyglyg.com/yourpic/2005/11/18/a7255c5d9177ff5f3d41bf159fe0f800.gif

C语言,while(i)是什么意思,while(!i)是什么意思

这个很简单c++中有两个表示为"假":[0]和[false],其它都为"真".while(i)就相当于(根据i的类型)while(i!=0)或者while(i!=false)[!]符号表示非,所以while(!i)表示while(i==0)或者while(i==false)

C语言中的while(!i)是什么意思

当i不等于0时循环 ————————不好意思,我错了。xieyu555168 是对的

C语言中while(0)和while(1)分别是什么意思呢?

一直执行while所包含的语句,就是无限循环。一般用来执行程序的主体,程序运行后,一直循环等待中断等事件的发生;处理完事件后,继续循环。

VC++6.0 下 C语言做俄罗斯方块 ( )图形函数库问题

#include <windows.h>#include <conio.h>#include <string>#include <time.h>#include <iostream>#define up 72#define down 80#define left 75#define right 77#define esc 27using namespace std;//-----------------------// 重要数据定义typedef struct m_point { //控制台中的坐标点定义, 其中0<=x<=24, 0<=y<79 int x; int y;}m_point;typedef struct block { //方块定义, 一个方块有四个点, 例如: ■■■ // ■ m_point opt; m_point pt2; m_point pt3; m_point pt4;}block;block bloary[6][4]; //方块数组,一共有6种,每种有4个方向bool scrop[15][10]; //游戏空间定义,初始值全标记为0,向屏幕打印蓝色方块, //如果标记为1,则向屏幕找印深蓝色方块// 数据定义完毕//---------------------------// 功能函数声明void begin(); //开始函数void color(int n_color); //设置字符颜色int getrand(int max); //获得不大于max的随机数void go(int x, int y); //使光移动到指定位置void show_unit(); //输出 ■ 字符char getudlr(); //接受键盘上的上下左右及回车键并返回相应字符 u d l r kvoid show_block(block b); //输出方块void init(); //初始化block bloary[6][4]数组void show_scrop(); //根据scrop[15][10]的值打印相应颜色的方块bool isexist(block b); //判断当前方块中的四个坐标是否在游戏空间中被标记为 1void markspace(block b); //当方块停留时,把方块四个点的坐标在游戏空间数组scrop[][]中的相应位置标记为1void move_block(block &b, char ch, int &lark); //移动方块void change_block(block &b, int i, int &j, int lark); //改变当前方块的方向,注:一共有四个方向void check(int &score); //消行函数void wait(float secs); //让程序等待secs秒void othergetch(); //起暂停功能void out(char* chars, int n); //相当于C++中的cout功能void initb(int optx, int opty, //容易看出这个函数中传递了8个int值,分别用于这四点的横坐标和纵坐标, //另外bloc是一个block结构体,block结构体中含有8个int值来表示方块的4个点 int pt2x, int pt2y, int pt3x, int pt3y, int pt4x, int pt4y, block &bloc);// 功能函数声明完毕void show_unit2() { WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE)," ",2,0,0);}void show_block2(block b){ go(b.opt.x, b.opt.y); show_unit2(); go(b.pt2.x, b.pt2.y); show_unit2(); go(b.pt3.x, b.pt3.y); show_unit2(); go(b.pt4.x, b.pt4.y); show_unit2();}int main(){ system("color ec"); system("title 俄罗斯方块"); color(0xec); go(33,2); out("制作人:赵晨晔",22); go(33,3); out("游戏规则:",10); go(33,4); out("1.按左右下键进行移动",20); go(33,5); out("2.按向上键改变形状",18); go(10,0); for (int ckh=0; ckh<15; ckh++) { go(20,ckh); cout<<"║"; } go(0,15); cout<<"══════════■"; begin(); return 0;}// 以下是功能函数定义部分void begin(){ init(); static int score = 0; for(int i=0; i<15; i++) for(int j=0; j<10; j++) scrop[i][j]=0; int lev=0; cout<<"请输入速度(1~9)"; cin>>lev; while(1) { block b; int lark=1; int i=getrand(6); int j=getrand(4); go(20,21); b = bloary[i][j]; show_scrop(); show_block(b); if(isexist(b)) { system("cls"); go(37,12); out("失败,结束!",10); othergetch(); exit(-1); } while(lark!=0) { show_scrop(); show_block(b); int delay=10*lev; int max_delay=100; char ch=""; while(delay<max_delay) { if(_kbhit()) { int key=_getch(); switch (key) { case up: show_block2(b); change_block(b, i, j, lark); show_block(b); break; case down: ch="d"; delay=max_delay; break; case left: ch="l"; show_block2(b); move_block(b, ch, lark); show_block(b); break; case right: ch="r"; show_block2(b); move_block(b, ch, lark); show_block(b); break; case esc: exit(-1); break; } } _sleep(3); delay++; } if (ch="d"){ show_block2(b); move_block(b,ch,lark); show_block(b); } } if(lark==0) { markspace(b); } check(score); }}// 函数作用:初始化bloary[6][4]数组,这个数组表示16个方块的结构体,具体是,// 一共有6种方块,每种方块又有4种不同的方向(也就是种不同的形状)// 其中initb函数将在下面定义void init(){ //////////////////////////////////////////////////////////// /**/ initb(2, 1, 0, 0, 2, 0, 0, 1, bloary[0][0]); ///// /**/ initb(2, 1, 0, 0, 2, 0, 0, 1, bloary[0][1]); ///// /**/ initb(2, 1, 0, 0, 2, 0, 0, 1, bloary[0][2]); ///// /**/ initb(2, 1, 0, 0, 2, 0, 0, 1, bloary[0][3]); ///// /**/ initb(2, 1, 0, 1, 4, 1, 6, 1, bloary[1][0]); ///// /**/ initb(2, 1, 2, 0, 2, 2, 2, 3, bloary[1][1]); ///// /**/ initb(2, 1, 0, 1, 4, 1, 6, 1, bloary[1][2]); ///// /**/ initb(2, 1, 2, 0, 2, 2, 2, 3, bloary[1][3]); ///// /**/ initb(2, 1, 0, 0, 0, 1, 4, 1, bloary[2][0]); ///// /**/ initb(2, 1, 2, 0, 4, 0, 2, 2, bloary[2][1]); ///// /**/ initb(2, 1, 0, 1, 4, 1, 4, 2, bloary[2][2]); ///// /**/ initb(2, 1, 2, 0, 0, 2, 2, 2, bloary[2][3]); ///// /**/ initb(2, 1, 4, 0, 0, 1, 4, 1, bloary[3][0]); ///// /**/ initb(2, 1, 2, 0, 2, 2, 4, 2, bloary[3][1]); ///// /**/ initb(2, 1, 0, 1, 4, 1, 0, 2, bloary[3][2]); ///// /**/ initb(2, 1, 0, 0, 2, 0, 2, 2, bloary[3][3]); ///// /**/ initb(2, 1, 2, 0, 0, 1, 4, 1, bloary[4][0]); ///// /**/ initb(2, 1, 2, 0, 4, 1, 2, 2, bloary[4][1]); ///// /**/ initb(2, 1, 0, 1, 4, 1, 2, 2, bloary[4][2]); ///// /**/ initb(2, 1, 2, 0, 0, 1, 2, 2, bloary[4][3]); ///// /**/ initb(2, 1, 2, 0, 4, 0, 0, 1, bloary[5][0]); ///// /**/ initb(2, 1, 2, 0, 4, 1, 4, 2, bloary[5][1]); ///// /**/ initb(2, 1, 2, 0, 4, 0, 0, 1, bloary[5][2]); ///// /**/ initb(2, 1, 2, 0, 4, 1, 4, 2, bloary[5][3]); ///// ////////////////////////////////////////////////////////////}// 函数作用:初始化方块,一个方块具有四个坐标,如 ■■■// ■// 容易看出这个函数中传递了8个int值,分别用于这四点的横坐标和纵坐标,// 另外bloc是一个block结构体,block结构体中含有8个int值来表示方块的4个点void initb(int optx, int opty, int pt2x, int pt2y, int pt3x, int pt3y, int pt4x, int pt4y, block &bloc){ bloc.opt.x = optx; bloc.opt.y = opty; bloc.pt2.x = pt2x; bloc.pt2.y = pt2y; bloc.pt3.x = pt3x; bloc.pt3.y = pt3y; bloc.pt4.x = pt4x; bloc.pt4.y = pt4y;}// 函数作用:这个函数的作用是在控制台下打印游戏空间,即数组scrop[15][10],// 如果scrop[i][j]是0,则用0xab色打印■字符// 如果scrop[i][j]是1,则用0xb3色打印■字符// 打印效果为10*15的矩形方块,我把它称为游戏空间void show_scrop(){ go(0,0); for (int i=0; i<15; i++) { for (int j=0; j<10; j++) { if (0==scrop[i][j]) { color(0x00); show_unit(); } else { color(0x03); show_unit(); } } go(0,i+1); } go(0,0); color(0x0c);}//函数作用:判断当前方块中的四个坐标是否在游戏空间中被标记为 1bool isexist(block b){ if (scrop[b.opt.y][b.opt.x/2]==1|| scrop[b.pt2.y][b.pt2.x/2]==1|| scrop[b.pt3.y][b.pt3.x/2]==1|| scrop[b.pt4.y][b.pt4.x/2]==1) return true; else return false;}//函数作用:移动方块void move_block(block &b, char ch, int &lark){ block copyb = b; switch(ch) { case "l": //左移 b.opt.x=b.opt.x-2; b.pt2.x=b.pt2.x-2; b.pt3.x=b.pt3.x-2; b.pt4.x=b.pt4.x-2; break; case "r": //右移 b.opt.x=b.opt.x+2; b.pt2.x=b.pt2.x+2; b.pt3.x=b.pt3.x+2; b.pt4.x=b.pt4.x+2; break; case "d": //下移 b.opt.y=b.opt.y+1; b.pt2.y=b.pt2.y+1; b.pt3.y=b.pt3.y+1; b.pt4.y=b.pt4.y+1; break; } if(b.opt.x<0||b.opt.x>18|| b.pt2.x<0||b.pt2.x>18|| b.pt3.x<0||b.pt3.x>18|| b.pt4.x<0||b.pt4.x>18 ) //过左右界还原 { b = copyb; } if(b.opt.y>14|| b.pt2.y>14|| b.pt3.y>14|| b.pt4.y>14|| isexist(b) ) //到底还原或重叠还原 { b = copyb; lark = 0; //lark = 0 表示方块停下 } //消除按左右键导致重叠时发生停留现象 if(ch=="l"||ch=="r") { lark = 1; } //消除按左右键导致重叠时发生停留现象...}//函数作用:改变当前方块的方向,注:一共有四个方向void change_block(block &b, int i, int &j, int lark){ block copyb = b; int orx = b.opt.x; int ory = b.opt.y; j = j+1; j = j%4; b = bloary[i][j]; if(b.opt.x<orx) { int i = orx - b.opt.x; for(int j=0; j<i/2; j++) { b.opt.x=b.opt.x+2; b.pt2.x=b.pt2.x+2; b.pt3.x=b.pt3.x+2; b.pt4.x=b.pt4.x+2; } } if(b.opt.y<ory) { int i = ory - b.opt.y; for(int j=0; j<i; j++) { b.opt.y=b.opt.y+1; b.pt2.y=b.pt2.y+1; b.pt3.y=b.pt3.y+1; b.pt4.y=b.pt4.y+1; } } if(b.opt.x<0||b.opt.x>18|| b.pt2.x<0||b.pt2.x>18|| b.pt3.x<0||b.pt3.x>18|| b.pt4.x<0||b.pt4.x>18 ) { b = copyb; j--; } if(b.opt.y>14|| b.pt2.y>14|| b.pt3.y>14|| b.pt4.y>14|| isexist(b) ) { b = copyb; j--; lark = 0; }}// 函数作用:消行void check(int &score){ bool mark = 1; int line = 0; int line_marked[4] = {0, 0, 0, 0}; // line_marked用于记录游戏空间中被全部标记的某一行的行号,(即需要被消去的行的行号) int kai=0; // s 用于记录line_marked中当前被标记的个数 //检查哪些行需要消去 for(int i=0; i<15; i++) { for(int j=0; j<10; j++) { if(scrop[i][j]==0) mark = 0; } if(mark==1) { line++; line_marked[kai++] = i; score++; } mark=1; } //检查哪些行需要消去... go(25,21); go(28, 21); cout<<"分数: "<<score; //打印分数 if(score==100) { system("cls"); go(37,12); out("通关",4); othergetch(); exit(-1); } int dis = line; //消行前闪烁 for(int goline=0; goline<kai; goline++) { color(0x04); go(0,line_marked[goline]); int s=0; for(; s<10; s++) { out("■",2); } wait(.1f); color(0x0d); go(0,line_marked[goline]); for(s=0; s<10; s++) { out("■",2); } wait(.1f); } //消行前闪烁... kai = 0; //消行 for(int k=1; k<=dis; ++k) { for (int p=line_marked[kai++]; p>=1; p--) { for (int q=0; q<10; q++) { scrop[p][q]=scrop[p-1][q]; } } for(int h=0; h<10; h++) { scrop[0][h]=0; } } //消行...}//函数作用:当方块停留时,把方块四个点的坐标在游戏空间数组scrop[][]中的相应位置标记为1void markspace(block b){ for (int i=0; i<15; i++) { for (int j=0; j<10; j++) { if((b.opt.x==2*j && b.opt.y==i)|| (b.pt2.x==2*j && b.pt2.y==i)|| (b.pt3.x==2*j && b.pt3.y==i)|| (b.pt4.x==2*j && b.pt4.y==i)) { scrop[i][j]=1; } } }}//函数作用:输出方块void show_block(block b){ go(b.opt.x, b.opt.y); show_unit();

关于C语言程序,请大虾们在每一段的代码后面帮我做个注释!我会追加分数的!谢谢!

在直角坐标系下给定直线上两点,绘制直线,默认为红色,要求: ,标示出直线在不同区域的颜色,在给定区域内,直线为白色,在区域外直线为黄色程序是这样的:#include <graphics.h>//添加graphics.h头文件const int wxl=100,wxr=400,wyb=100,wyt=300;//声明参 数,即参考区域typedef struct//定义直线结构体{int x1,y1,x2,y2;//声明变量}LINE;//LINE现在即为一个过(x1,y1),(x2,y2)的直线int encode(int x,int y)//编码,用来判断点的位置{int ret=0;if(x<wxl) ret|=1<<0;//ret与(1左移0)后相或,标记横坐//标在区域左侧if(x>wxr) ret|=1<<1;// 左移1,同上右侧if(y<wyb) ret|=1<<2;//左移2,标记纵坐标在区域下侧if(y>wyt) ret|=1<<3;//左移3,同上上侧return ret;}//void midPoint(int x1,int y1,int x2,int y2,int *xn,int *yn)//求(x1,y1),(x2,y2)中点,*xn,*yn分别为指向中点的指针{int mx,my,code1,code2;while(1){mx=(x1+x2)/2;//mx is the middle of x1,x2my=(y1+y2)/2;//my 同上if(abs(x1-mx)+abs(y1-my)<3) break;//如果两点的横纵坐//标距离之和小于6,即 难以区分,退出else//否则{code1=encode(x1,y1);//对其中一点code2=encode(mx,my);//及中点编码if((code1&code2)!=0)//如果按位相与不为0,即两点在区域{//外侧,且位于同侧x1=mx;y1=my;//把该点移向中点}else//否则{x2=mx;y2=my;//把另一点移向中点}}}*xn=mx;//把中点横坐标的地址传给指针*xn*yn=my;//同上}void cs_line(int x1,int y1,int x2,int y2)//编码并设{//定颜色int code1=0,code2=0,mx,my;int spx,spy,epx,epy;LINE l;//已知一条直线lsetcolor(0x0c);//设定背景颜色黑色,图像红色line(x1,y1,x2,y2);//画出lcode1=encode(x1,y1);code2=encode(x2,y2);//判定两点位//置if((code1&code2)!=0) return;//如果两点位于区域外,且//在同侧,返回else if((code1|code2)==0)//如果编码按位相或等于0,即{//两点位于区域内setcolor(0x0f);//设定背景颜色黑色,图像白色line(x1,y1,x2,y2);//画出直线 }else//否则{midPoint(x1,y1,x2,y2,&spx,&spy);//中点midPoint(x2,y2,x1,y1,&epx,&epy);//中点setcolor(0x0f);//设定背景颜色黑色,图像白色line(spx,spy,epx,epy);}}void main(){int driver,mode,i;//驱动,模式,driver=VGA;//初始化图形mode=VGAHI;//初始化局部变量detectgraph(&driver,&mode);//检测VGA卡initgraph(&driver,&mode,"c:\tc");//初始化图形系统setcolor(0x0e);//设定背景为黑色,图形为黄色line(wxl,wyb,wxl,wyt);//以下四句画出边框line(wxl,wyt,wxr,wyt);line(wxr,wyt,wxr,wyb);line(wxr,wyb,wxl,wyb);cs_line(50,50,190,400);//画出给定直线cs_line(150,250,320,250);//画出给定直线getch();//接受键盘输入closegraph();//退出图形}能力有限,就能理解这么多了。

这道C语言题如何解

mma(inta,intb)//(11,19){intc;a+=a;b+=b;c=mmb(a,b);//2:a=22;b=38returnc*c;//5:c*c=2*2=4}mmb(itna,intb)//3:22,38{intc;c=a*b%3;//4:c=22*38%3=2returnc;}main(){intx=11,y=19;printf(“%d ”,mma(x,y));//1:相当于传值mma(11,19);}这题就是运用函数的传递和相互调引。

排序算法的设计(c语言)根据程序画流程图及对每句程序加注释

分给的挺高的,今天太晚了有点困了,明天有时间再给你看看吧

菜鸟怎么样学习C语言

学习C语言,谭浩强的《C程序设计》是一部非常好的C语言书籍,学习程序设计是一个非常漫长的过程,不要着急,一本书多看两遍三遍,学会交叉学习法,在学习C的过程中,可以看看数据结构,编译原理,操作系统等书籍,对编成都是很有帮助的。最开始学习的时候,先不要编一些比较大的程序,多编一些小程序,比如数组运算,字符组合等等,指针是C语言的精华,是比较复杂的部分。如果有一天你能熟练驾驭指针的操作了,我相信你,你一定能学习好C语言的。我是2001年接触编程的,刚开始只是大概了解一下,并没有进行比较深入的学习,我是从VB开始入门的,学了1年多,然后转入C语言,按照C—— C++——VC的顺序学习,C学了两年,现在开始学习C++,C++的学习是很有难度的,类,标准库,多态,继承等等比较抽象难道懂的概念,虽然他秉承了 C语言的风格,但是有很多很多是C语言不具备的,要多看书,上机实践也是必不可少的。《C++编程思想》,《C++标准库》,这些书都非常好,内容也很全面,例程书籍也是必不可少的,多看源代码对编程是很有帮助的,也会少走很多弯路。总之,C++的学习是一个比较漫长的过程,大概需要两年的时间,这只是底限,如果想学通,学精,还需要更多的时间。我向你推荐一些C++经典书籍:c++程序设计教程c++编程思想c++大学教程c++程序设计语言数据结构算法与应用c++语言描述c++标准模板库------自修教程与参考手册泛型编程与STL深度探索c++对象模型设计模式---可复用面向对象软件的基础重构---改善既有代码的设计Essential c++Effective c++More Effctive c++C++ primer前五本应该属于入门书籍,后面的属于学习难度比较大的,想提高C++的编程能力,看看这些书籍有好处。建议你把编程思想这本书多看看。多做练习题,对提高编程水平的帮助是很大的。

C语言 看不懂答案怎么来的

楼主是都看不懂还是怎么的?问题可不可以清楚一点?这样也好解答一些嘛。

C语言socket基础编程问题

bind函数的原型是int bind(SOCKET s, const sockaddr *addr, int namelen);第二个参数的类型是const sockaddr*,而不是sockaddr_in*。你传递的参数类型错误。

linux C语言编程,socket实现的即使通讯系统

//服务端server.c#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#define SERVPORT 6000 /*服务器监听端口号 */#define BACKLOG 10 /* 最大同时连接请求数 */#define MAXDATASIZE 100main(){ char buf[MAXDATASIZE]; int sockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */ struct sockaddr_in my_addr; /* 本机地址信息 */ struct sockaddr_in remote_addr; /* 客户端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket创建出错!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind出错!"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror("listen出错!"); exit(1); } while(1) { sin_size = sizeof(struct sockaddr_in); if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) { perror("accept出错"); continue; } printf("received a connection from %s ", inet_ntoa(remote_addr.sin_addr)); if (!fork()) { /* 子进程代码段 */ if ((recvbytes=recv(client_fd, buf, MAXDATASIZE, 0)) ==-1) { perror("recv出错!"); close(client_fd); exit(0); } buf[recvbytes] = ""; printf("from client Received: %s",buf); if (send(client_fd, "thanks! ", 8, 0) == -1) perror("send出错!"); close(client_fd); exit(0); } close(client_fd); }}//客户端client.c#include<stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define SERVPORT 6000#define MAXDATASIZE 100main(int argc, char *argv[]){ int sockfd, recvbytes; char buf[MAXDATASIZE]; struct hostent *host; struct sockaddr_in serv_addr; if (argc < 2) { fprintf(stderr,"Please enter the server"s hostname! "); exit(1); } if((host=gethostbyname(argv[1]))==NULL) { herror("gethostbyname出错!"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket创建出错!"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(SERVPORT); serv_addr.sin_addr = *((struct in_addr *)host->h_addr); bzero(&(serv_addr.sin_zero),8); if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) { perror("connect出错!"); exit(1); }if (send(sockfd, "hello! ", 7, 0) == -1) { perror("send出错!"); exit(1); } if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1) { perror("recv出错!"); exit(1); } buf[recvbytes] = ""; printf("Received: %s",buf); close(sockfd);}

编程的兄弟,能不能介绍下c语言中,流是怎么通过socket接收的。。接收到的是个什么值,举个简单例子就好

下面是代码, socket就是绑定IP和端口后,并双方相互连接后,一般就是客户端 和服务器,利用sendto recvfrom 函数发送接收,这个流是字节数据,下面是udp发送接收数据的例子,可以看看,前面大部分代码都是初始化网络,绑定IP和端口 socket的初始化功能的,核心在sendto 和recvfrom //发送端程序#include <stdio.h>#include <winsock.h>int main(int argc, char* argv[]){ WSADATA wsaData; //指向WinSocket信息结构的指针 SOCKET sockListener; SOCKADDR_IN sin,saUdpServ; BOOL fBroadcast = TRUE; char sendBuff[1024]; int nSize; int ncount=0; if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)//进行WinSocket的初始化 { printf("Can"t initiates windows socket!Program stop. ");//初始化失败返回-1 return -1; } sockListener=socket(PF_INET,SOCK_DGRAM,0); setsockopt ( sockListener,SOL_SOCKET,SO_BROADCAST,(CHAR *)&fBroadcast,sizeof ( BOOL )); sin.sin_family = AF_INET; sin.sin_port = htons(0); sin.sin_addr.s_addr = htonl(INADDR_ANY); if(bind( sockListener, (SOCKADDR *)&sin, sizeof(sin))!=0) { printf("Can"t bind socket to local port!Program stop. ");//初始化失败返回-1 return -1; } saUdpServ.sin_family = AF_INET; saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST ); saUdpServ.sin_port = htons (7001);//发送用的端口,可以根据需要更改 nSize = sizeof ( SOCKADDR_IN ); while(1) { sprintf(sendBuff,"Message %d",ncount++); sendto ( sockListener,sendBuff, lstrlen (sendBuff), 0, (SOCKADDR *) &saUdpServ, sizeof ( SOCKADDR_IN )); printf("%s ",sendBuff); }return 0;}///////////////////////接收#include <stdio.h>#include <winsock.h>#include <conio.h>int main(int argc, char* argv[]){ WSADATA wsaData; //指向WinSocket信息结构的指针 SOCKET sockListener; SOCKADDR_IN sin,saClient; char cRecvBuff[1024]; int nSize,nbSize; int iAddrLen=sizeof(saClient); if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)//进行WinSocket的初始化 { printf("Can"t initiates windows socket!Program stop. ");//初始化失败返回-1 return -1; } sockListener=socket(AF_INET, SOCK_DGRAM,0); sin.sin_family = AF_INET; sin.sin_port = htons(7001);//发送端使用的发送端口,可以根据需要更改 sin.sin_addr.s_addr = htonl(INADDR_ANY); if(bind( sockListener, (SOCKADDR FAR *)&sin, sizeof(sin))!=0) { printf("Can"t bind socket to local port!Program stop. ");//初始化失败返回-1 return -1; } while(1) { nSize = sizeof ( SOCKADDR_IN ); if((nbSize=recvfrom (sockListener,cRecvBuff,1024,0,(SOCKADDR FAR *) &saClient,&nSize))==SOCKET_ERROR) { printf("Recive Error"); break; } cRecvBuff[nbSize] = ""; printf("%s ",cRecvBuff);} return 0;}

c语言怎样实现网络编程?

1、要实现网络编程,首先得了解网络编程的原理。大部分网络编程底层都是通过TCP/IP或者UDP协议进行通讯,不管是TCP还是UDP通讯,都是通过调用socket实现的。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Socket通讯分为两部分:服务器端和客户端,服务器端监听客户端的连接,连接上之后,实现数据通讯,流程2、用C语言调用Socket实现通讯服务器端示例代码如下:#include#include#include#include#include#include#include#include#definePORT1500//端口号#defineBACKLOG5/*最大监听数*/intmain(){intsockfd,new_fd;/*socket句柄和建立连接后的句柄*/structsockaddr_inmy_addr;/*本方地址信息结构体,下面有具体的属性赋值*/structsockaddr_intheir_addr;/*对方地址信息*/intsin_size;sockfd=socket(AF_INET,SOCK_STREAM,0);//建立socketif(sockfd==-1){printf("socketfailed:%d

在windows下,如何用纯C语言实现socket网络编程?

使用 vc 吧。是不是纯很重要吗??????

C语言编程技术的优势和劣势?

随着互联网编程技术的不断发展,现在大多数的软件开发都是通过编程语言来实现的,今天我们就一起来了解一下C语言编程开发技术都有哪些优势和劣势。C语言的一些好的体验一次通过阅读POV-Ray源代码学会如何在C语言中实现面向对象编程。通过阅读GTK+源代码了解C语言代码的清晰、干净和可维护性。通过阅读SIOD和Guile的源代码,知道如何使用C语言实现Scheme解析器。使用C语言写出GNOMEEye的初始版本,并对MicroTile渲染进行调优。C语言的一些不好的体验在Evolution团队时,很多东西老是崩溃。那个时候还没有Valgrind,为了得到Purify这个软件,需要购买一台Solaris机器。调试gnome-vfs线程死锁问题。调试Mesa,却无果。接手Nautilus-share的初始版本,却发现代码里面居然没有使用free()。想要重构代码,却不知道该如何管理好内存。想要打包代码,却发现到处是全局变量,而且没有静态函数。但不管怎样,还是来说说那些Rust里有但C语言里没有的东西吧。自动资源管理Rust从C++那里借鉴了一些想法,如RAII(ResourceAcquisitionIsInitialization,资源获取即初始化)和智能指针,并加入了值的单一所有权原则,还提供了自动化的决策性资源管理机制。自动化:不需要手动调用free()。内存使用完后会自动释放,文件使用完后会自动关闭,互斥锁在作用域之外会自动释放。如果要封装外部资源,基本上只要实现Drop这个trait就可以了。封装过的资源就像是编程语言的一部分,因为你不需要去管理它的生命周期。决策性:资源被创建(内存分配、初始化、打开文件等),然后在作用域之外被销毁。根本不存在垃圾收集这回事:代码执行完就都结束了。程序数据的生命周期看起来就像是函数调用树。如果在写代码时老是忘记调用这些方法(free/close/destroy),或者发现以前写的代码已经忘记调用,甚至错误地调用,那么以后我再也不想使用这些方法了。泛型Vec真的就是元素T的vector,而不只是对象指针的数组。在经过编译之后,它只能用来存放类型T的对象。在C语言里需要些很多代码才能实现类似的功能,所以我不想再这么干了。trait不只是interfaceRust并不是一门类似那样的面向对象编程语言,它有trait,看起来就像是里的interface——可以用来实现动态绑定。如果一个对象实现了Drawable,那么就可以肯定该对象带有draw()方法。不过不管怎样,trait的威力可不止这些。依赖管理以前实现依赖管理需要:手动调用或通过自动化工具宏来调用g-config。指定头文件和库文件路径。基本上需要人为确保安装了正确版本的库文件。而在Rust里,只需要编写一个Cargo.toml文件,然后在文件里指明依赖库的版本。这些依赖库会被自动下载下来,或者从某个指定的地方获取。测试C语言的单元测试非常困难,原因如下:内部函数通常都是静态的。也就是说,它们无法被外部文件调用。测试程序需要使用#include指令把源文件包含进来,或者使用#ifdefs在测试过程中移除这些静态函数。需要编写Makefile文件将测试程序链接到其中的部分依赖库或部分代码。需要使用测试框架,并把测试用例注册到框架上,还要学会如何使用这些框架。卫生宏(HygienicMacro)Rust的卫生宏避免了C语言宏可能存在的问题,比如宏中的一些东西会掩盖掉代码里的标识符。Rust并不要求宏中所有的符号都必须使用括号,比如max(5+3,4)。没有自动转型在C语言里,南邵北大青鸟发现很多bug都是因为在无意中将int转成short或char而导致,而在Rust里就不会出现这种情况,因为它要求显示转型。不会出现整型溢出这个就不用再多作解释了。

C语言编程技术的优势和劣势?

随着互联网编程技术的不断发展,现在大多数的软件开发都是通过编程语言来实现的,今天我们就一起来了解一下C语言编程开发技术都有哪些优势和劣势。C语言的一些好的体验一次通过阅读POV-Ray源代码学会如何在C语言中实现面向对象编程。通过阅读GTK+源代码了解C语言代码的清晰、干净和可维护性。通过阅读SIOD和Guile的源代码,知道如何使用C语言实现Scheme解析器。使用C语言写出GNOMEEye的初始版本,并对MicroTile渲染进行调优。C语言的一些不好的体验在Evolution团队时,很多东西老是崩溃。那个时候还没有Valgrind,为了得到Purify这个软件,需要购买一台Solaris机器。调试gnome-vfs线程死锁问题。调试Mesa,却无果。接手Nautilus-share的初始版本,却发现代码里面居然没有使用free()。想要重构代码,却不知道该如何管理好内存。想要打包代码,却发现到处是全局变量,而且没有静态函数。但不管怎样,还是来说说那些Rust里有但C语言里没有的东西吧。自动资源管理Rust从C++那里借鉴了一些想法,如RAII(ResourceAcquisitionIsInitialization,资源获取即初始化)和智能指针,并加入了值的单一所有权原则,还提供了自动化的决策性资源管理机制。自动化:不需要手动调用free()。内存使用完后会自动释放,文件使用完后会自动关闭,互斥锁在作用域之外会自动释放。如果要封装外部资源,基本上只要实现Drop这个trait就可以了。封装过的资源就像是编程语言的一部分,因为你不需要去管理它的生命周期。决策性:资源被创建(内存分配、初始化、打开文件等),然后在作用域之外被销毁。根本不存在垃圾收集这回事:代码执行完就都结束了。程序数据的生命周期看起来就像是函数调用树。如果在写代码时老是忘记调用这些方法(free/close/destroy),或者发现以前写的代码已经忘记调用,甚至错误地调用,那么以后我再也不想使用这些方法了。泛型Vec真的就是元素T的vector,而不只是对象指针的数组。在经过编译之后,它只能用来存放类型T的对象。在C语言里需要些很多代码才能实现类似的功能,所以我不想再这么干了。trait不只是interfaceRust并不是一门类似那样的面向对象编程语言,它有trait,看起来就像是里的interface——可以用来实现动态绑定。如果一个对象实现了Drawable,那么就可以肯定该对象带有draw()方法。不过不管怎样,trait的威力可不止这些。依赖管理以前实现依赖管理需要:手动调用或通过自动化工具宏来调用g-config。指定头文件和库文件路径。基本上需要人为确保安装了正确版本的库文件。而在Rust里,只需要编写一个Cargo.toml文件,然后在文件里指明依赖库的版本。这些依赖库会被自动下载下来,或者从某个指定的地方获取。测试C语言的单元测试非常困难,原因如下:内部函数通常都是静态的。也就是说,它们无法被外部文件调用。测试程序需要使用#include指令把源文件包含进来,或者使用#ifdefs在测试过程中移除这些静态函数。需要编写Makefile文件将测试程序链接到其中的部分依赖库或部分代码。需要使用测试框架,并把测试用例注册到框架上,还要学会如何使用这些框架。卫生宏(HygienicMacro)Rust的卫生宏避免了C语言宏可能存在的问题,比如宏中的一些东西会掩盖掉代码里的标识符。Rust并不要求宏中所有的符号都必须使用括号,比如max(5+3,4)。没有自动转型在C语言里,北京北大青鸟发现很多bug都是因为在无意中将int转成short或char而导致,而在Rust里就不会出现这种情况,因为它要求显示转型。不会出现整型溢出这个就不用再多作解释了。

C语言编程技术的优势和劣势?

随着互联网编程技术的不断发展,现在大多数的软件开发都是通过编程语言来实现的,今天我们就一起来了解一下C语言编程开发技术都有哪些优势和劣势。C语言的一些好的体验一次通过阅读POV-Ray源代码学会如何在C语言中实现面向对象编程。通过阅读GTK+源代码了解C语言代码的清晰、干净和可维护性。通过阅读SIOD和Guile的源代码,知道如何使用C语言实现Scheme解析器。使用C语言写出GNOMEEye的初始版本,并对MicroTile渲染进行调优。C语言的一些不好的体验在Evolution团队时,很多东西老是崩溃。那个时候还没有Valgrind,为了得到Purify这个软件,需要购买一台Solaris机器。调试gnome-vfs线程死锁问题。调试Mesa,却无果。接手Nautilus-share的初始版本,却发现代码里面居然没有使用free()。想要重构代码,却不知道该如何管理好内存。想要打包代码,却发现到处是全局变量,而且没有静态函数。但不管怎样,还是来说说那些Rust里有但C语言里没有的东西吧。自动资源管理Rust从C++那里借鉴了一些想法,如RAII(ResourceAcquisitionIsInitialization,资源获取即初始化)和智能指针,并加入了值的单一所有权原则,还提供了自动化的决策性资源管理机制。自动化:不需要手动调用free()。内存使用完后会自动释放,文件使用完后会自动关闭,互斥锁在作用域之外会自动释放。如果要封装外部资源,基本上只要实现Drop这个trait就可以了。封装过的资源就像是编程语言的一部分,因为你不需要去管理它的生命周期。决策性:资源被创建(内存分配、初始化、打开文件等),然后在作用域之外被销毁。根本不存在垃圾收集这回事:代码执行完就都结束了。程序数据的生命周期看起来就像是函数调用树。如果在写代码时老是忘记调用这些方法(free/close/destroy),或者发现以前写的代码已经忘记调用,甚至错误地调用,那么以后我再也不想使用这些方法了。泛型Vec真的就是元素T的vector,而不只是对象指针的数组。在经过编译之后,它只能用来存放类型T的对象。在C语言里需要些很多代码才能实现类似的功能,所以我不想再这么干了。trait不只是interfaceRust并不是一门类似那样的面向对象编程语言,它有trait,看起来就像是里的interface——可以用来实现动态绑定。如果一个对象实现了Drawable,那么就可以肯定该对象带有draw()方法。不过不管怎样,trait的威力可不止这些。依赖管理以前实现依赖管理需要:手动调用或通过自动化工具宏来调用g-config。指定头文件和库文件路径。基本上需要人为确保安装了正确版本的库文件。而在Rust里,只需要编写一个Cargo.toml文件,然后在文件里指明依赖库的版本。这些依赖库会被自动下载下来,或者从某个指定的地方获取。测试C语言的单元测试非常困难,原因如下:内部函数通常都是静态的。也就是说,它们无法被外部文件调用。测试程序需要使用#include指令把源文件包含进来,或者使用#ifdefs在测试过程中移除这些静态函数。需要编写Makefile文件将测试程序链接到其中的部分依赖库或部分代码。需要使用测试框架,并把测试用例注册到框架上,还要学会如何使用这些框架。卫生宏(HygienicMacro)Rust的卫生宏避免了C语言宏可能存在的问题,比如宏中的一些东西会掩盖掉代码里的标识符。Rust并不要求宏中所有的符号都必须使用括号,比如max(5+3,4)。没有自动转型在C语言里,北京北大青鸟发现很多bug都是因为在无意中将int转成short或char而导致,而在Rust里就不会出现这种情况,因为它要求显示转型。不会出现整型溢出这个就不用再多作解释了。

学C语言会用到socket网络编程,那它是什么意思

socket是个套接字功能组件,用于编写通信程序。c语言包罗万象,什么都会用到,只是你会不会用而已。

在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?

winscok2.h

c语言socket编程

最简单的方法,发送方在发送完成后,close这个socket,接收方自然就会recv 0 bytes了,另外,receive程序里最好写成if (nNumRead <= 0) break;

怎样用C语言做socket网络编程?

mfc只是对socket进行了一些封装,大部分人做网络编程都是用的原始的socket,比如如下接口都可以在c下进行调用x0dx0a 1.socket() x0dx0a 2.bind() x0dx0a 3.connect() x0dx0a 4.listen() x0dx0a 5.accept() x0dx0a 6.send() 和recv() x0dx0a 7.sendto() 和recvfrom() x0dx0a 8.close() 和shutdown() x0dx0a 9.getpeername() x0dx0a 10.gethostname() x0dx0a这些接口是在Winsock2.h中定义的不是在mfc中定义的,你只需要包含Winsock2.h头文件和Ws2_32.lib库就可以了。

socket编程。怎么实现数据包的转发?C语言版的。

网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 下面用Socket实现一个windows下的c语言socket通信例子,用客户端传递一个字符串,服务器端进行接收。 【服务器端】 #include "stdafx.h" #include <stdio.h> #include <winsock2.h> #include <winsock2.h> #define SERVER_PORT 5208 //侦听端口 void main() { WORD wVersionRequested; WSADATA wsaData; int ret, nLeft, length; SOCKET sListen, sServer; //侦听套接字,连接套接字 struct sockaddr_in saServer, saClient; //地址信息 char *ptr;//用于遍历信息的指针 //WinSock初始化 wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本 ret=WSAStartup(wVersionRequested, &wsaData); if(ret!=0) { printf("WSAStartup() failed! "); return; } //创建Socket,使用TCP协议 sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sListen == INVALID_SOCKET) { WSACleanup(); printf("socket() faild! "); return; } //构建本地地址信息 saServer.sin_family = AF_INET; //地址家族 saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序 saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址 //绑定 ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer)); if (ret == SOCKET_ERROR) { printf("bind() faild! code:%d ", WSAGetLastError()); closesocket(sListen); //关闭套接字 WSACleanup(); return; } //侦听连接请求 ret = listen(sListen, 5); if (ret == SOCKET_ERROR) { printf("listen() faild! code:%d ", WSAGetLastError()); closesocket(sListen); //关闭套接字 return; } printf("Waiting for client connecting! "); printf("Tips: Ctrl+c to quit! "); //阻塞等待接受客户端连接 while(1)//循环监听客户端,永远不停止 { length = sizeof(saClient); sServer = accept(sListen, (struct sockaddr *)&saClient, &length); if (sServer == INVALID_SOCKET) { printf("accept() faild! code:%d ", WSAGetLastError()); closesocket(sListen); //关闭套接字 WSACleanup(); return; } char receiveMessage[5000]; nLeft = sizeof(receiveMessage); ptr = (char *)&receiveMessage; while(nLeft>0) { //接收数据 ret = recv(sServer, ptr, 5000, 0); if (ret == SOCKET_ERROR) { printf("recv() failed! "); return; } if (ret == 0) //客户端已经关闭连接 { printf("Client has closed the connection "); break; } nLeft -= ret; ptr += ret; } printf("receive message:%s ", receiveMessage);//打印我们接收到的消息。 } // closesocket(sListen); // closesocket(sServer); // WSACleanup(); } 【客户端】 #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <winsock2.h> #define SERVER_PORT 5208 //侦听端口 void main() { WORD wVersionRequested; WSADATA wsaData; int ret; SOCKET sClient; //连接套接字 struct sockaddr_in saServer; //地址信息 char *ptr; BOOL fSuccess = TRUE; //WinSock初始化 wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本 ret = WSAStartup(wVersionRequested, &wsaData); if(ret!=0) { printf("WSAStartup() failed! "); return; } //确认WinSock DLL支持版本2.2 if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2) { WSACleanup(); printf("Invalid WinSock version! "); return; } //创建Socket,使用TCP协议 sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sClient == INVALID_SOCKET) { WSACleanup(); printf("socket() failed! "); return; } //构建服务器地址信息 saServer.sin_family = AF_INET; //地址家族 saServer.sin_port = htons(SERVER_PORT); //注意转化为网络节序 saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127"); //连接服务器 ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer)); if (ret == SOCKET_ERROR) { printf("connect() failed! "); closesocket(sClient); //关闭套接字 WSACleanup(); return; }char sendMessage[]="hello this is client message!"; ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0); if (ret == SOCKET_ERROR) { printf("send() failed! "); } else printf("client info has been sent!"); closesocket(sClient); //关闭套接字 WSACleanup(); }

C语言里空格是加什么

可以用 代表空格

c语言的nul和null

都对,因为他们的值都是0,只不过null是为空指针而生,nul是一般作为字符串终止符的

c语言循环问题

C语言中的while是一种循环语句,是计算机的一种基本循环模式。当满足条件时进入循环,不满足跳出使用格式为:while(条件表达式){循环体语句;}当while循环的条件表达式为真时,进入循环,一直循环到条件表达式为假为止

输入两个正整数m和n,求其最大公约数和最小公倍数c语言

帅爆啦,上面的解答

求windows内核C语言源代码

小哥,你太天真了,你还是去看Linux的源代码吧。你不可能找到windows的源代码的,人家不开源,不过你可以尝试成为微软操作系统部的员工,那也许有可能。

求C语言编程题目

题在哪里呢?

windows环境,多线程情况下,C语言向文件写入数据。

.......补充:.......又补充:大约一个正常人都会认为这个公式是正确的:打开 + 写入 > 写入。这说明楼主你是对的。既然有了正确答案,那我们也就不再继续深究了。

c语言中堆栈的书籍推荐_c++编程书籍推荐

强烈建议,《汇编语言》王爽编。这是16位汇编国内最好的一本书。学了这个其他的就很容易搞明白了。其他的你需要:《Cprimer中文版》《操作系统原理》《windows环境下汇编语言程序设计第2版》(罗云彬编,这个也很不错,也很好懂,《操作系统原理》讲理论的东西,它比《操作系统原理》更加实用)如果有必要,《计算机组成原理》也可以学学,这是从硬件角度考虑怎么实现CPU和内存的互相操作。

C语言 如果real和unreal的类型不一样还能这样赋吗? 谢谢

那需要看real和unreal都分别是什么类型,如果类型之间能够通过类型转换转换相同的话,还是可以赋值的,比如int型赋值给float。

跪求同济大学魏鸿磊单片机原理及应用(C语言编程)课后习题答案

你好,软件,私信已经发给你,查收一下记得好评和采纳。

一个C语言的问题

#include <stdio.h> void dtoh(char sour[],char resu[]){int x; sscanf(sour,"%d",&x); sprintf(resu,"%x",x);}void htod(char sour[],char resu[]){int x; sscanf(sour,"%x",&x); sprintf(resu,"%d",x);}int main(){char d1[20]="16189", h1[20];char d2[20], h2[20]="3F3D";dtoh(d1,h1); printf("%s - %s ",d1,h1);htod(h2,d2); printf("%s - %s ",h2,d2);return 0;}

用c语言读取24位位图bmp文件

行像素错了一位,导致图像倾斜了。

C51 4*4键盘扫描程序(c语言)

键盘为4*4矩阵式连接,一共有16个按键。 工作原理为。P1端的低四位为列,高四位行。所先置低四位为低,高四位为高,当有按键按下时高四位就会有某位被拉低。只要判断高四位不为全高就说明有按键按下。判断有按键按下后就要判断是某位按下的,方法为,选将高四位的某一位置低。判断低四位是否有低电平出现。依次对高四位的每位置低并判断低四位出现的低电平。如高四位某位置低后低四某也有出现低电平。这样就能判断出低四位与高四位相连的位某位按键被按下了。通过定义好的编码就可以查出是某个按键被按下了,程序将按键值通过查表并发送到LED上显示。 6位LED为动态扫描方式 。先显示第一位,延时一定时间后在显示第二位依次类推。。。 共有17个按键。按下按键后数码管显示相应的数字,并左移一位。uchar kbscan(void) /*键扫描函数*/{uchar j; uchar sccode,recode; P2=0x0f; /*发0行扫描码*/ if((P2 & 0x0f)!= 0x0f) /*若有键按下*/ { dlms(); if((P2&0x0f)!= 0x0f) /*逐行扫描初值*/ { sccode=0xfe; for(j=4;j>0;j--) { while((sccode&0x10)!=0) { P2=sccode; /*输出行扫描码*/ if((P2&0xf0)!=0xf0) /*本行有键按下*/ { recode=(P2&0xf0)|0x0f; return((~sccode)+(~recode)); /*返回特征字节码*/ } else sccode=(sccode<<1)|0x01; /*行扫描码做移一位*/ } } } } return(0); /*无键按下,返回0值*/}参考链接: http://www.picavr.com/news/2008-07/6869.htm

C语言遗传算法在求解TSP问题 毕业论文+源代码

目录摘要IAbstractII引言1第一章基本遗传算法21.1遗传算法的产生及发展31.2基本原理31.3遗传算法的特点31.4基本遗传算法描述51.5遗传算法构造流程6第二章遗传算法的实现技术62.1编码方法72.1.1二进制编码72.1.2格雷码编码72.1.3符点数编码82.1.4参数编码82.2适应度函数102.3选择算子102.4交叉算子102.4.1单点交叉算子102.4.2双点交叉算子112.4.3均匀交叉算子112.4.4部分映射交叉112.4.5顺序交叉122.5变异算子122.6运行参数122.7约束条件的处理方法132.8遗传算法流程图14第三章遗传算法在TSP上的应用153.1TSP问题的建模与描述153.2对TSP的遗传基因编码方法163.3针对TSP的遗传操作算子173.3.1选择算子173.3.1.1轮盘赌选择173.3.1.2最优保存策略选择173.3.2交叉算子203.3.2.1单点交叉203.3.2.2部分映射交叉213.3.3变异算子233.4TSP的混和遗传算法26第四章实例分析274.1测试数据274.2测试结果274.3结果分析27摘要TSP(TravelingSalesmanProblem)旅行商问题是一类典型的NP完全问题,遗传算法是解决NP问题的一种较理想的方法。文章首先介绍了基本遗传算法的基本原理、特点及其基本实现技术;接着针对TSP问题,论述了遗传算法在编码表示和遗传算子(包括选择算子、交叉算子变异算子这三种算子)等方面的应用情况,分别指出几种常用的编码方法的优点和缺点,并且结合TSP的运行实例详细分析了基本遗传算法的4个运行参数群体大小、遗传算法的终止进化代数、交叉概率、变异概率,对遗传算法的求解结果和求解效率的影响,经过多次的测试设定出了它们一组比较合理的取值。最后,简单说明了混合遗传算法在求解TSP问题中的应用并对遗传算法解决TSP问题的前景提出了展望。关键词:TSP遗传算法遗传算子编码@@@需要的话按我的名字找我吧

C语言遗传算法在求解TSP问题 毕业论文+源代码

目录摘要iabstractii引言1第一章基本遗传算法21.1遗传算法的产生及发展31.2基本原理31.3遗传算法的特点31.4基本遗传算法描述51.5遗传算法构造流程6第二章遗传算法的实现技术62.1编码方法72.1.1二进制编码72.1.2格雷码编码72.1.3符点数编码82.1.4参数编码82.2适应度函数102.3选择算子102.4交叉算子102.4.1单点交叉算子102.4.2双点交叉算子112.4.3均匀交叉算子112.4.4部分映射交叉112.4.5顺序交叉122.5变异算子122.6运行参数122.7约束条件的处理方法132.8遗传算法流程图14第三章遗传算法在tsp上的应用153.1tsp问题的建模与描述153.2对tsp的遗传基因编码方法163.3针对tsp的遗传操作算子173.3.1选择算子173.3.1.1轮盘赌选择173.3.1.2最优保存策略选择173.3.2交叉算子203.3.2.1单点交叉203.3.2.2部分映射交叉213.3.3变异算子233.4tsp的混和遗传算法26第四章实例分析274.1测试数据274.2测试结果274.3结果分析27摘要tsp(travelingsalesmanproblem)旅行商问题是一类典型的np完全问题,遗传算法是解决np问题的一种较理想的方法。文章首先介绍了基本遗传算法的基本原理、特点及其基本实现技术;接着针对tsp问题,论述了遗传算法在编码表示和遗传算子(包括选择算子、交叉算子变异算子这三种算子)等方面的应用情况,分别指出几种常用的编码方法的优点和缺点,并且结合tsp的运行实例详细分析了基本遗传算法的4个运行参数群体大小、遗传算法的终止进化代数、交叉概率、变异概率,对遗传算法的求解结果和求解效率的影响,经过多次的测试设定出了它们一组比较合理的取值。最后,简单说明了混合遗传算法在求解tsp问题中的应用并对遗传算法解决tsp问题的前景提出了展望。关键词:tsp遗传算法遗传算子编码@@@需要的话按我的名字找我吧

c语言为什么这么难学,我为什么老是学不会

C 语音应该是不难的,就是一堆的指令语句去执行你的思想你的算法。如果你有微机原理的基础去理解每一条语句就会简单很多。

国家计算机二级C语言考试要买什么教材?

国家计算机二级C语言的构成:1.源程序由函数构成,每个函数完成相对独立的功能。2.每个源程序中必须有且只能有一个主函数,可以放在任何位置,但程序总是从主函数开始执行。3.函数体:在函数后面用一对花括号括起来的部分。报考了计算机二级C语言之后,需要花比较多的时间去学习C语言知识,去刷题。你可以去买题库,那种有一百多套题的试卷,你可以每天做一套。个人建议在网上买题库比较方便,直接在电脑上做题。多去看讲解视频,希望可以给你帮助。

c语言编程

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去      掉不满足条件的排列。2.程序源代码:main(){int i,j,k;printf(“ “);for(i=1;i〈5;i++)    /*以下为三重循环*/ for(j=1;j〈5;j++)   for (k=1;k〈5;k++)   {    if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/    printf(“%d,%d,%d “,i,j,k);   }}==============================================================【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高   于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提   成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于   40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于   100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(“%ld“,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15; if(i〈=100000)  bonus=i*0.1; else if(i〈=200000)     bonus=bonus1+(i-100000)*0.075;    else if(i〈=400000)        bonus=bonus2+(i-200000)*0.05;       else if(i〈=600000)           bonus=bonus4+(i-400000)*0.03;          else if(i〈=1000000)              bonus=bonus6+(i-600000)*0.015;             else              bonus=bonus10+(i-1000000)*0.01;printf(“bonus=%d“,bonus);} ==============================================================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后      的结果满足如下条件,即是结果。请看具体分析:2.程序源代码:#include “math.h“main(){long int i,x,y,z;for (i=1;i〈100000;i++) { x=sqrt(i+100);   /*x为加上100后开方后的结果*/  y=sqrt(i+268);   /*y为再加上168后开方后的结果*/   if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/    printf(“ %ld “,i); }}============================================================== 【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊      情况,闰年且输入月份大于3时需考虑多加一天。2.程序源代码:main(){int day,month,year,sum,leap;printf(“ please input year,month,day “);scanf(“%d,%d,%d“,&year,&month,&day);switch(month)/*先计算某月以前月份的总天数*/{ case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf(“data error“);break;}sum=sum+day;  /*再加上某天的天数*/ if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/  leap=1; else  leap=0;if(leap==1&&month〉2)/*如果是闰年且月份大于2,总天数应该加一天*/sum++;printf(“It is the %dth day.“,sum);}==============================================================【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x〉y则将x与y的值进行交换,      然后再用x与z进行比较,如果x〉z则将x与z的值进行交换,这样能使x最小。2.程序源代码:main(){int x,y,z,t;scanf(“%d%d%d“,&x,&y,&z);if (x〉y){t=x;x=y;y=t;} /*交换x,y的值*/if(x〉z){t=z;z=x;x=t;}/*交换x,z的值*/if(y〉z){t=y;y=z;z=t;}/*交换z,y的值*/printf(“small to big: %d %d %d “,x,y,z);}==============================================================【程序6】题目:用*号输出字母C的图案。1.程序分析:可先用"*"号在纸上写出字母C,再分行输出。2.程序源代码:#include “stdio.h“main(){printf(“Hello C-world! “);printf(“ **** “);printf(“ * “);printf(“ * “);printf(“ **** “);}==============================================================【程序7】题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!1.程序分析:字符共有256个。不同字符,图形不一样。      2.程序源代码:#include “stdio.h“main(){char a=176,b=219;printf(“%c%c%c%c%c “,b,a,a,a,b);printf(“%c%c%c%c%c “,a,b,a,b,a);printf(“%c%c%c%c%c “,a,a,b,a,a);printf(“%c%c%c%c%c “,a,b,a,b,a);printf(“%c%c%c%c%c “,b,a,a,a,b);}==============================================================【程序8】题目:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码:#include “stdio.h“main(){ int i,j,result; printf(“ “); for (i=1;i〈10;i++)  { for(j=1;j〈10;j++)    {     result=i*j;     printf(“%d*%d=%-3d“,i,j,result);/*-3d表示左对齐,占3位*/    }   printf(“ “);/*每一行后换行*/  }}============================================================== 【程序9】题目:要求输出国际象棋棋盘。1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。2.程序源代码:#include “stdio.h“main(){int i,j;for(i=0;i〈8;i++) {  for(j=0;j〈8;j++)   if((i+j)%2==0)    printf(“%c%c“,219,219);   else    printf(“ “);   printf(“ “); }}==============================================================【程序10】题目:打印楼梯,同时在楼梯上方打印两个笑脸。1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。2.程序源代码:#include “stdio.h“main(){int i,j;printf(“11 “);/*输出两个笑脸*/for(i=1;i〈11;i++) { for(j=1;j〈=i;j++)   printf(“%c%c“,219,219); printf(“ “); }}【程序11】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月   后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....2.程序源代码:main(){long f1,f2;int i;f1=f2=1;for(i=1;i〈=20;i++) { printf(“%12ld %12ld“,f1,f2);   if(i%2==0) printf(“ “);/*控制输出,每行四个*/   f1=f1+f2; /*前两个月加起来赋值给第三个月*/   f2=f1+f2; /*前两个月加起来赋值给第三个月*/ }}==============================================================【程序12】题目:判断101-200之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,      则表明此数不是素数,反之是素数。       2.程序源代码:#include “math.h“main(){ int m,i,k,h=0,leap=1; printf(“ “); for(m=101;m〈=200;m++)  { k=sqrt(m+1);   for(i=2;i〈=k;i++)     if(m%i==0)      {leap=0;break;}   if(leap) {printf(“%-4d“,m);h++;<br>        if(h%10==0)<br>        printf(“ “);<br>        }   leap=1;  } printf(“ The total is %d“,h);}==============================================================【程序13】题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数   本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2.程序源代码:main(){int i,j,k,n;printf(“"water flower"number is:“); for(n=100;n〈1000;n++) {  i=n/100;/*分解出百位*/  j=n/10%10;/*分解出十位*/  k=n%10;/*分解出个位*/  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)   {   printf(“%-5d“,n);   } }printf(“ “);}============================================================== 【程序14】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n〈〉k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。2.程序源代码:/* zheng int is divided yinshu*/main(){int n,i;printf(“ please input a number: “);scanf(“%d“,&n);printf(“%d=“,n);for(i=2;i〈=n;i++) {  while(n!=i)  {   if(n%i==0)   { printf(“%d*“,i);    n=n/i;   }   else    break;  }}printf(“%d“,n);}==============================================================【程序15】题目:利用条件运算符的嵌套来完成此题:学习成绩〉=90分的同学用A表示,60-89分之间的用B表示,   60分以下的用C表示。1.程序分析:(a〉b)?a:b这是条件运算符的基本例子。2.程序源代码:main(){ int score; char grade; printf(“please input a score “); scanf(“%d“,&score); grade=score〉=90?"A":(score〉=60?"B":"C"); printf(“%d belongs to %c“,score,grade);}==============================================================【程序16】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。1.程序分析:利用辗除法。2.程序源代码:main(){ int a,b,num1,num2,temp; printf(“please input two numbers: “); scanf(“%d,%d“,&num1,&num2); if(num1  { temp=num1;  num1=num2;   num2=temp; }a=num1;b=num2;while(b!=0)/*利用辗除法,直到b为0为止*/ {  temp=a%b;  a=b;  b=temp; }printf(“gongyueshu:%d “,a);printf(“gongbeishu:%d “,num1*num2/a);}============================================================== 【程序17】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.程序分析:利用while语句,条件为输入的字符不为" ".      2.程序源代码:#include “stdio.h“main(){char c;<br> int letters=0,space=0,digit=0,others=0;<br> printf(“please input some characters “);<br> while((c=getchar())!=" ")<br> {<br> if(c〉="a"&&c〈="z"||c〉="A"&&c〈="Z")<br>  letters++;<br> else if(c==" ")<br>  space++;<br>   else if(c〉="0"&&c〈="9")<br>       digit++;<br>     else<br>       others++;<br>}printf(“all in all:char=%d space=%d digit=%d others=%d “,letters,space,digit,others);}==============================================================【程序18】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时   共有5个数相加),几个数相加有键盘控制。1.程序分析:关键是计算出每一项的值。2.程序源代码:main(){ int a,n,count=1; long int sn=0,tn=0; printf(“please input a and n “); scanf(“%d,%d“,&a,&n); printf(“a=%d,n=%d “,a,n); while(count〈=n) {  tn=tn+a;  sn=sn+tn;  a=a*10;  ++count; }printf(“a+aa+...=%ld “,sn);}==============================================================【程序19】题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程   找出1000以内的所有完数。1. 程序分析:请参照程序〈--上页程序14.2.程序源代码:main(){static int k[10];int i,j,n,s;for(j=2;j〈1000;j++) { n=-1; s=j;  for(i=1;i   {   if((j%i)==0)   { n++;    s=s-i;    k[n]=i;   }  } if(s==0) { printf(“%d is a wanshu“,j); for(i=0;i  printf(“%d,“,k); printf(“%d “,k[n]); }}}============================================================== 【程序20】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在   第10次落地时,共经过多少米?第10次反弹多高?1.程序分析:见下面注释2.程序源代码:main(){float sn=100.0,hn=sn/2;int n;for(n=2;n〈=10;n++) {  sn=sn+2*hn;/*第n次落地时共经过的米数*/  hn=hn/2; /*第n次反跳高度*/ }printf(“the total of road is %f “,sn);printf(“the tenth is %f meter “,hn);}
 1 2 3 4 5 6  下一页  尾页