1.c语言 指针数组初步,编程题
#include <stdio.h>
void split(char *str, char **a);
int main()
{
char in[10000]={0};
char *a[10000]={NULL};
int i=0;
printf("Please input a string:\n");
//输入字符串
gets(in);
//处理
split(in, a);
//输出单词
printf("Words:\n");
for(;a[i];i++) printf("%s\n", a[i]);
}
void split(char *str, char **a)
{
char *p=str;
//处理第一个单词
if(*p && *p!=' ') {*a++=str;p++;}
while(*p)
{
//处理单词
if(*p!=' ' && *(p-1)=='\0') *a++ = p;
//处理空格
else if(*p==' ') *p='\0';
p++;
}
}
2.用C语言设计实现要求:计算n的阶乘(200<><>
阶乘超过170,double就溢出了,所以200<n<300的阶乘要考虑溢出问题,有两种办法,需要不完全精度时可以将尾数与阶码分开表示,如果要完整精度只能考虑大整数算法,比较慢而且有点麻烦,下边留一个尾数与阶码分开的算法,希望能帮到楼主。代码在VC6测试通过。
#include "stdafx.h"
#include "math.h"
#define MAX_N 10000000.00 //能够计算的最大的n值,如果你想计算更大的数对数,可将其改为更大的值
#define MAX_MANTISSA (1e308/MAX_N) //最大尾数
typedef unsigned short WORD;
struct bigNum
{
double n1; //表示尾数部分
int n2; //表示阶码部分
};
short GetExpBase2(double a) // 获得 a 的阶码
{
// 按照IEEE 754浮点数格式,取得阶码,仅仅适用于Intel 系列 cpu
WORD *pWord=(WORD *)(&a)+3;
WORD rank = ( (*pWord & 0x7fff) >>4 );
return (short)(rank-0x3ff);
}
double GetMantissa(double a) // 获得 a 的 尾数
{
// 按照IEEE 754浮点数格式,取得尾数,仅仅适用于Intel 系列 cpu
WORD *pWord=(WORD *)(&a)+3;
*pWord &= 0x800f; //清除阶码
*pWord |= 0x3ff0; //重置阶码
return a;
}
void calcFac(struct bigNum *p,int n)
{
int i;
p->n1=1;
p->n2=0;
for (i=1;i<=n;i++)
{
if (p->n1 >= MAX_MANTISSA) //继续相乘可能溢出,调整之
{
p->n2 += GetExpBase2(p->n1);
p->n1 = GetMantissa(p->n1);
}
p->n1 *=(double)i;
}
}
void printfResult(struct bigNum *p,char buff[])
{
double logx=log10(p->n1)+ p->n2 * log10(2);//求计算结果的常用对数
int logxN=(int)(floor(logx)); //logx的整数部分
sprintf(buff,"%.14fe%d",pow(10,logx-logxN),logxN);//转化为科学计算法形式的字符串
}
int main(int argc, char* argv[])
{
struct bigNum r;
char buff[32];
int n;
printf("n=?");
scanf("%d",&n);
calcFac(&r,n); //计算n的阶乘
printfResult(&r,buff); //将结果转化一个字符串
printf("%d!=%s\n",n,buff);
return 0;
}
3.C语言怎样设置特定的密码帐号登录系统
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include "string.h"
int main(void)
{
char szUser[20] = {0};
char *PUser[3]={"hv","km","00000000000"};
char *Pword[3]={"123","321","00000000000"};
char chPwd[4];
int flag_u=0,i=0,flag_p=0,num=0;
printf("Enter user name:");
gets(szUser);
//printf("szUser=%s\n",szUser);
while(i<2)
{
if(strcmp(szUser,PUser[i])==0)
{
flag_u=1;
break;
}
else
{
flag_u=0;
i++;
}
num=i;
}
//printf("num=%d,flag_u=%d\n",num,flag_u);
printf("Enter passwd:");
i=0;
while (i<10)
{
chPwd[i]=getch();
if(chPwd[i]==13)
break;
printf("%c", chPwd[i]);
Sleep(500);
printf("\b*");
i++;
}
chPwd[3]='\0';
//printf("chPwd=%s\n",chPwd);
printf("\n");
if(strcmp(chPwd,Pword[num])==0)
flag_p=1;
else
flag_p=0;
if((flag_u==1)&&(flag_p==1))
printf("登录成功!");
else
printf("您输入的账号或密码错误!");
getch();
}
4.c语言中如何读取一个文件word.txt(10M),并把读取的文件写进磁盘中
#include <stdio.h>
int main()
{
FILE *pword,*pword1;char a;
if((pword = fopen("word.txt","rt")) == NULL) return 0;
if((pword1= fopen("word1.txt","at")) == NULL) return 0;
do
{
a = fgetc(pword);
fputc(a,pword1);
}while (a != EOF);
fclose(pword);fclose(pword1);
return 1;
}
5.C语言编写用户登录程序
艾达的小刀
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
/*随机码产生函数*/
void RandomCode (char Rcode[])
{
int i;
srand ((unsigned int)time(NULL));
for (i = 0; i < 3; ++i)
Rcode[i] = rand()%10 + '0';
Rcode[i] = '\0';
}
/*登陆函数,判断信息是否匹配,若匹配返回1,否则返回0*/
int LandedApp (char *password[], char Rcode[])
{
char name[10] = {0};
char pword[10] = {0};
char rcode[4] = {0};
printf ("用户名 : ");
gets (name);
printf ("密码 : ");
gets (pword);
printf ("随机码 : ");
gets (rcode);
if (strcmp (name, password[0]) != 0 || strcmp (pword, password[1]) != 0 || strcmp (rcode, Rcode) != 0)
return 0;
else
return 1;
}
int main ()
{
char * password[2] = {"admin", "admin123"}; //用户名和密码
char rc[4] = {0}; //随机码
int count = 3; //可输入次数
puts ("请输入用户名,密码和随机码:");
while (count)
{
RandomCode (rc);
printf ("随机码 : %s\n", rc);
if (LandedApp(password, rc) != 0)
break;
--count;
if (count != 0)
puts ("错误的用户名或密码或随机码,请重新输入: ");
}
if (count != 0)
puts ("\n成功登陆!");
else
puts ("\n登录失败 !");
return 0;
}
艾达的小刀