怎样用C语言编写这个程序

作者&投稿:双闹 (若有异议请与网页底部的电邮联系)
如何使用c语言编写一个密码程序~

密码保存在文件中,从文件中读取密码,但是没做容错和异常处理,仅供参考

#include
#include

#define PSDLEN 6

void inputPsd(char *str) /*处理输入*/
{
int i;

for(i = 0; i < PSDLEN; i++)
{
while(1)
{
str[i] = getch();
if(str[i] == '\b') /*处理退格键*/
{
i--;
if(i < 0)
{
i = 0;
}
else
{
printf("\b \b");
}
continue;
}
else if(str[i] == '') /*处理回车键*/
{
continue;
}
else
{
printf("*");
break;
}
}
}
str[i] = '\0';
printf("
");
}

int checkFirst() /*检测是否是第一次使用*/
{
FILE *fp;
if((fp = fopen("psd.dat", "rb")) == NULL)
{
return 1;
}
fclose(fp);
return 0;
}

void firstUse() /*第一次使用 需要输入密码*/
{
FILE *fp;
int i;
char passwd[PSDLEN + 1];
char checkPsd[PSDLEN + 1];

if((fp = fopen("psd.dat", "wb")) == NULL)
{
printf("Creat password error!
");
exit(1);
}
while(1)
{
printf("Please input password:");
inputPsd(passwd);

printf("
Please input password again:");
inputPsd(checkPsd);

if(!strcmp(passwd, checkPsd))
{
break;
}
printf("
check password error!
");
}
fwrite(passwd, sizeof(char), PSDLEN, fp);
fclose(fp);
}

void login() /*核对密码,并登录*/
{
FILE *fp;
int i, num = 3;
char passwd[PSDLEN + 1];
char checkPsd[PSDLEN + 1];

if((fp = fopen("psd.dat", "rb")) == NULL)
{
puts("Open psd.dat error");
exit(1);
}
fread(passwd, sizeof(char), PSDLEN, fp);
fclose(fp);
passwd[PSDLEN] = '\0';

printf("Please input password to login");
while(num)
{
printf("you have %d chances to cry:
", num);
inputPsd(checkPsd);
if(!strcmp(passwd, checkPsd))
{
break;
}
puts("
password error,Please input again");
num--;
}
if(!num)
{
puts("Press any key to exit...");
getch();
exit(0);
}
else
{
puts("
--------
Welcome!
--------
");
}
}

void main()
{
if(checkFirst())
{
firstUse();
}
else
login();

getch();
}

1、用一个字符数组来存密码再用一个字符数组接收你的输入,然后用strcmp来比较,如果返回0则密码是正确的2、例程:
#include "stdio.h"#include "string.h"int main(){ char mima[100]="YuanShi888"; char input[100]={0}; printf("请输入密码:"); gets(input); if(strcmp(mima,input)==0) printf("恭喜你,密码正确!
"); else printf("对不起,密码输入错误!
"); }

#include "stdio.h"
#include "conio.h"
#include "dos.h"

typedef struct
{
int x;
int y; //二维坐标
int value; //每4进制位的值
int near_flag;
/*权值,
二进制:000
第1位是1表示已经与0相连
第2位是1表示已经与1相连
第3位是1表示已经与2相连
例:
110 :表示与2和1相连,但是不与0相连
111 :表示与0,1,2都相连
001 :表示与0相连,与1,2不相连
*/
} xy_value;

xy_value num[26];
/* 判断权位,确定相连的数是否符合 */
jdg_flag()
{
int i;
for(i=0;i<25;i++)
switch (num[i].value)
{
case 3: {if( num[i].near_flag != 6) return 0; else break;}
case 2: {if(( num[i].near_flag& 3)!= 3) return 0; else break;}
case 1: {if(( num[i].near_flag& 1)!= 1) return 0; else break;}

}
return 1;

}

flag()//初始化权位
{
int i;
int x,y;
for(i=0;i<25;i++)
{
x=num[i].x;
y=num[i].y;

if((x-1)>=0) //如果越界,则越界的那边不给予权值
num[i].near_flag|=(1<<(num[(x-1)*5+y].value));
if((x+1)<=4)
num[i].near_flag|=(1<<(num[(x+1)*5+y].value));
if((y-1)>=0)
num[i].near_flag|=(1<<(num[(y-1)+x*5].value));
if((y+1)<=4)
num[i].near_flag|=(1<<(num[(y+1)+x*5].value));

}
}
/* 增加1 */
addnum(int i)
{
num[i].value+=1;
if(num[i].value==4)
{
num[i].value=0;
i=addnum(i+1);
}
return i;
}

main()
{

int i,sumbuff=0,sum=0;
int x,y;
for( i= 0; i< 26; i++)//初始化结构体
{
num[i].value= 0;
num[i].x= (int)(i/ 5); //初始化坐标
num[i].y= i% 5;
}

while( num[25].value== 0)
{
addnum(0); //0表示从第一位开始
flag();

if(!jdg_flag())
{

for(i=0;i<25;i++)
num[i].near_flag&=0; /*由于不符合条件,必须消除消权*/
continue;
}
for( i=0; i<25; i++)
sumbuff+=num[i].value; //能运算到这,说明符合条件.求和
if(sumbuff>sum)//输出目前得到的 满足条件的 最大和的 矩阵
{
for(x=0;x<5;x++)
{
for(y=0;y<5;y++)
printf("%d ",num[x*5+y].value);
printf("\n");

}
sum=sumbuff;
printf("now sum is:%d\n",sum);
printf("\n");
}
sumbuff=0;

}
for(x=0;x<5;x++)
{
for(y=0;y<5;y++)
printf("%d ",num[x*5+y].value);
printf("\n");

}

}

这是最笨的方法,一个个比较。。我跑半个小时了 - -!
一共有1000多万亿种,3G CPU,每秒30亿次浮点型运算。假设每次比较一次需要一个浮点型的话,需要100小时左右!那么。。。这个算法 将摇摇无期。。。 跑上一年我都不觉得奇怪。。
算法,基本没有。
1.当成二维坐标。
2.赋值结构体的时候,我是弄成类似25位的4进制数。每个结构体中的value为每位的数值。
26位为循环用的标志位。每次循环,4进制数,增加一。正好可以遍历所有的数。
额。。我写成的是 0,1,2,3四个数字填。
20:54--------------------------
目前情况是这样的:
3 2 1 0 1
1 0 2 2 3
3 2 2 1 2
2 1 0 0 0
0 0 0 0 0
now sum is:28

我目前所想到的,不一定完全正确
第一步:5*5的空格中每个空格初始化为1

第二步:把每个空格中的数字1再+1试试,符合2必须和1相邻条件则加一
然后每行就是21212,21212,21212,21212,21212

然后以此类推

每个格的上下左右是相邻,左上角左下角,右上角右下角,算不算相邻?我试试看能不能编出来

这个我以前解过,和一个很有名的堆房子手机游戏city bloxx的部分内容一样。
这个的数学论证方法在这:club。tech。163。com/bbs/mobile_0s22/92272018。html (把。改成.)

你的相邻是什么意思?斜着的(比如左上角算不)算么???一个格子旁边有8个,是最接近的那4个还是8个都可以?

int i;
int sum;
for(i=1;i<=10;i++)
{
sum = sum + i;
}

手头没用C++ 大概这个意思



怎么用C语言编写程序“输入一个正整数n,计算1-2\/3+3\/5-4\/7+5\/9...
include<stdio.h> int main (void){ int i,n,m=1;double sum=0.0;printf("Enter a number:");scanf("%d",&n);for(i=1;i<=n;i++){ sum=sum+(double)i\/(2i-1);m=-m;} printf("sum=%lf\\n",sum);return 0;} 试着运行吧,我没上机,大概就是这个样子的 ...

谁能用c语言中的for语句,编写个从1加到100的程序
当然可以!以下是用C语言编写从1加到100的程序的示例代码:Copy code include <stdio.h> int main() { int sum = 0;for (int i = 1; i <= 100; i++) { \/\/ 从1加到100 sum += i;} printf("1到100的和为:%d\\n", sum);return 0;} 在程序中,我们使用了 for ...

用C语言编写一个程序:
printf( "请答题 Ctrl+C 结束...\\n" );while(1){ v1 = GEN_VALUE(); \/\/随机生成第1个算数 v2 = GEN_VALUE(); \/\/随机生成第2个算数 op = ops[ RANDOM(0,3) ]; \/\/随机决定是哪个运算符 \/\/保证第1个算数大于第2个算数,如不需要,则把这个判断删除即可 if( v1<v2 )...

用c语言办我编写一个程序。实现从键盘输入10个整数统计非负数并计算非...
include <stdio.h> main(){ int a[10],i,sum=0,count=0;for(i=0;i<10;i++){ scanf("%d",&a[i]);if(a[i]>=0){ sum=sum+a[i];count++;} } printf("total %d feifushu.\\nThe sum of them is %d",count,sum);getch();} ...

如何用C语言编写一个程序???
include"stdio.h"include"string.h"include<iostream.h> typedef struct { char name[32];char tel[16];} contact;contact list[100];int main(){ char name[32];strcpy(list[0].name,"keefo");strcpy(list[0].tel,"1234567");strcpy(list[1].name,"keefo1");strcpy(list[1].tel,"...

用C语言程序编写分别输出空字符和回车换行符的ASCII值?
当您要编写程序以输出空字符和回车换行符的ASCII值时,可以使用以下C语言代码:include <stdio.h>int main() { char space = ' ';char newline = '\\n';printf("ASCII value of space: %d\\n", space);printf("ASCII value of newline: %d\\n", newline);return 0;} 代码中定义了两个...

用c语言怎么编写。
include "stdio.h"include "stdlib.h"main(){long a[10] ,i,zhen=0,fu=0;printf("\\n请输入10个数:\\n");for(i=0;i<10;i++){scanf("%ld",&a[i]);if(a[i]>0)zhen++;if(a[i]<0)fu++;}\/\/问了一下数学老师,0不是正,以不是负整数;printf("\\n正整数有:%ld个\\n",zhen)...

用c语言编写一个程序,从键盘上输入两个字符给字符变量a,b,并输出变...
程序代码如下:include <stdio.h> \/\/编译预处理命令 int main(int argc, char *argv[]) \/\/主函数,字符的声明 { char a,b; \/\/定义字符a,b scanf("%c %c",&a,&b); \/\/输入字符a,b printf("%c %c\\n",a,b);\/\/打印字符a,b return 0; \/\/返回并且输出a,b } 扩展...

用c语言编写一个简单计算器程序
#include<stdio.h>//计算器 voidmenu()//自定义的菜单界面 { printf("---\n");printf("请输入你的选择\n");printf("1.+\n");printf("2.-\n");printf("3.*\n");printf("4./\n");printf("---\n");} intmain(){ int...

如何用C语言编写一个科学计算器
用栈 就可以办到了。。。这个很详细的, lz 随便输入一个表达式,中间的计算过程全部输出了,lz试两个 就知道怎么回事了。 #include <stdio.h> include <stdlib.h> include <string.h> define MAXSIZE 4000;typedef struct { char data[10];int top;\/\/头地址 int base;\/\/基地址 int length;...

吴起县15839393187: 用c语言怎么写????? -
盖青非洛: 工具/原料 VC++6.0 电脑方法/步骤 1、首先,打开编译器,新建文件.出现的空白处是写代码的. 2、输入”#include“这个为头文件. 3、第二行,输入”main“,加上一对”小括号“. 4、在main,下方,输入一对大括号 {}. 5、在大括号里输入,”printf("Hello,Word\n");”. 6、运行程序即可看到输入的话了.

吴起县15839393187: 如何编写C语言程序?
盖青非洛: 1、需要一个编辑器,TXT、VC++、TC,还有其它的文本编辑器都行,编出.c的程序文件(还有其它资源文件、.h的头文件等) 2、然后需要将所有的文件和资源整合在一起 3、接下来需要编译和连接工具 VC++6.0包含了上面的所有工具及整合,6.0又适合我们去学习C,所以用这个软件就好,当然还有其它别的,看开发的程度、内容及习惯爱好!

吴起县15839393187: 如何用C语言编写这个程序?
盖青非洛: 1.程序分析:见下面注释 2.程序源代码: #include "stdio.h" #include "stdio.h" 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\n",sn); printf("the tenth is %f meter\n",hn); getch(); } 这个是WIN-TC的教程,如果你用C++编译器,不用打最后的getch();

吴起县15839393187: 在C语言中编这个程序怎么编? -
盖青非洛: #include<stdio.h> void main() {int a;printf("Please enter a number:");scanf("%d",&a);while(a%10!=0){printf("%d",a%10);a=a/10;} }

吴起县15839393187: 用C语言编写一个程序?
盖青非洛: main() { int i,j,a[901],b[100],x,y,z; for(i=100,j=0;i<=999;i++,j++) a[j]=i; i=0; for(j=0;j<901;j++) { x=a[j]%10; y=a[j]/10%10; z=a[j]/100; if(x*x*x+y*y*y+z*z*z==a[j]) b[i++]=a[j];} for(j=0;j<i;j++) { printf("%d ",b[j]); if(i%4==0) printf("\n"); } } 已经调试出来了,结果如下: 所有的水仙花数:

吴起县15839393187: c语言 如何编写以下这个程序 -
盖青非洛: #include int main(){int ch;printf(n");printf("* 1 Length conversion...

吴起县15839393187: 下面这个程序如何用C语言编写
盖青非洛: main() { int i,j,temp; int a[10]; for(i=0;i<10;i++) scanf ("%d,",&a[i]); for(j=0;j<=9;j++) { for (i=0;i<10-j;i++) if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;} } for(i=1;i<11;i++) printf("%5d,",a[i] ); printf("\n"); } 看的明白吧?不明白 百度冒泡排序..

吴起县15839393187: 这个程序用c语言怎么编
盖青非洛: int a,b,c,d; printf("请为输入abcd的值只能是1或2"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); if(a==b==c==d) { printf("相等"); } else printf("相等");

吴起县15839393187: 怎样用C语言编一个最简单的“回答问题”的程序? -
盖青非洛: 这要看简单到什么程度了 一个 例子 #include<iostream> using namespace std; int main() {int a;cout<<"请问1+1等于几?"<<"请输入答案"<<endl;while(cin>>a){if(a==2){cout<<"yes";break;}else{cout<<"no"<<endl;cout<<"再试一次"<<endl;}}return 0; } 这是一个c++程序 其实vc++简单

吴起县15839393187: 如何用C语言编写下列程序? -
盖青非洛: #include main() { float a,x,y; printf("please input a,x:"); scanf("%f%f",&a,&x); y=cos(sqrt(a+x))+exp(a*x); printf("%f ", y); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网