c语言代码进行除法运算

1,c语言代码进行除法运算时如何控制商不能为0的情况?
2,怎样在进行除法运算时,输出更精确的结果?

4个回答

%

float

通过条件控制语句让商不为0,建议使用double类型更精确

If语句控制分母不为0
double控制输出

1,用if选择结构,比如if(n/2!=0)然后继续操作。
2,使用double或float等类型,精度高。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
分数的除法计算,C语言
Problem Description Yifenfei and lemon are good friends, they don’t like Ctw, because Ctw’s name is so worldliness. One day Lcy give them a lot of jewel. Each jewel has own value. They put the jewels in a line, and don’t swap the position of jewel. In order to division the jewels, they think a lot of ideas. At last, they decide a way to division by voting. First let Ctw to divide the line into two non-empty sublines (each subline express a group of jewel). Second yifenfei will to divide one of sublines and also divide it into two non-empty sublines. Than let lemon to choose one of this three sublines., than yifenfei choose one of remaining subline. At last Ctw hold the last subline.. Every one wants to maximize their own share. But because yifenfei don’t like Ctw, so if there are two divisions let himself get the some value, he will choose the way let Ctw get smaller values. Assuming every one have full knowledge of each other’s strategies and make their decision optimally. Input The input contains multiple test cases. Each test case include, first one integers n. (3<=n<=100), express how many jewels. Next one line include n integers Vi (Vi<2^31). The order of jewel is according the position in the line.. Output For each test case output one integer that CTW is maximum value of jewels can get. Sample Input 4 50 90 10 100 3 5 5 5 9 1 1 1 1 1 1 1 1 1 Sample Output 50 5 2
c语言除法还有取整运算
![图片](https://img-ask.csdn.net/upload/201611/12/1478954997_864497.jpg)
C语言,组合数的一个计算,除法
Problem Description In the popular TV series Heroes, there is a tagline "Save the cheerleader, Save the world!". Here Heroes continues, "Solve the puzzle, Save the world!". Finally, alien invaders visit our planet. They are eccentric and launch attack many rounds. Since trust in prime numbers, each round they send out p killers, here p is a prime number. Countries on our planet unite and assemble an armed troop of n population. And fortunately we get a fatal weakness of enemy from a betrayer. If the ways of choosing m warriors from n is a multiple of p, the killer number, we will win. Otherwise, we will lose. As the greatest programmer of our planet, you are invited to write a program to count the number of m(0≤m≤n) such that C(n, m) is a multiple of prime p. Input Each line will contain an integer n(1≤n≤10^5) and a prime p(2≤p<10^7), separated by a single space. Process to the end of file. Output For each test of case, if the world can be saved, output the number of ways, otherwise, output "Where is hero from?"(without quotation), both on a single line. Sample Input 6 2 5333 127 100000 11 Sample Output 3 Where is hero from? 92301
C语言 如何实现用减法代替除法的运算并且有余数的时候显示余数
比如10/3=3。。。。1 运算过程为10-3=7 7-3=4 4-3=1 10 和 3 为变数。 应该用if while 句型还是 do。。。while?或者说for?
c语言 计算高精度浮点数 请问两段代码有什么不同?为什么其中一个会提示浮点错误?
题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。 (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将相除的结果以多个整数来表示,每个整数表示结果的一位。即商的第一位用一个整数来表示,第二位用另一个整数来表示,以此类推,就可以输出一个高精度的除法结果了。 如16/19的结果0.8421052631...就可以依次输出8、4、2、1、0、5、2、6、3、1...。 而除法的过程,则可以模仿人工列竖式做除法的方式,先将被除数乘以10,得到一位商以后,将余数乘以10作为下一轮计算的被除数: 160/19->8余8 80/19->4余4 ... 当某次余数为0时,则表明除尽。 现在,请写一个程序,输入一个分数,计算出它的小数形式。无论是否可以除尽,输出最多小数点后200位。 输入格式: 形如 a/b 的两个数,其中10<=a<b<100。也就是说,这个小数一定是小于1的正数。 输出格式: 形如 0.xxxxxxxxx 的小数,小数点后最多200位。输出结束的时候要带着回车换行。如果a/b是一个有限不循环小数,则输出完所有的有效位就可以了,不需要再输出后面的0来凑满200位。 输入样例: 16/19 输出样例: 0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684 #include <stdio.h> int main() { int a,b,i,shang,yu; scanf("%d %d", &a, &b); printf("0."); for (i=0;i<200;i++) { shang = (a*10)/b; yu = a*10%b; printf("%d",shang); a = yu; if (a==0) { printf("\n"); goto out; } } printf("\n"); out: return 0; } #include <stdio.h> int main(int argc, char const *argv[]) { int n,m,i=1,b=1; scanf("%d/%d",&n,&m); printf("0."); while(b){ n*=10; int d = n/m; n = n%m; printf("%d", d); if(n==0){b=0;} i++; if(i>200){ b=0; } } return 0; } --------------------- 版权声明:本文为CSDN博主「小楫轻舟丶」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lioldamon/article/details/78309405
C语言项目,怎么都调不出来,求修改,详细说明或者把改好的代码发出来,谢谢!
![图片说明](https://img-ask.csdn.net/upload/201911/24/1574581202_803596.jpg) (为什么打上去是全的,发出去就缺了呢) #include<stdio.h> #include<string.h>//字符串函数 #include<math.h> long Fact(int n); long FactSum(int v); //函数的定义(作用:计算输入阶乘数的阶乘和,并将结果返回主函数 void displaymain()//显示主菜单 { printf("*******************\n"); printf("简易计算器\n"); printf("*******************\n"); printf("请选择\n"); printf("1:加法\n"); printf("2:减法\n"); printf("3:乘法\n"); printf("4:除法\n"); printf("5:求余\n"); printf("6:累加\n"); printf("7:阶乘\n"); printf("8:阶乘累加\n"); printf("9:退出系统\n"); } void password() { int i=0,temp; char password[10]={0}; //声明一个最多有十个元素的数组,并且初始化值为0; for(i=0;i<3;i++) //循环语句体验证密码 { printf("请输入密码:"); scanf("%s",password);//输入密码(字符串) if(strcmp("19491001",password)==0)//strcmp:比较两个字符串是否一样 { printf("登陆成功\n"); int choice,flag=0; void displaymain(); void plus(); void minus(); void multiply(); void divide(); void complementation(); void accumulation(); int factorial(); int factorialSum(); while(flag==0) { displaymain(); printf("please input a digital(1-7)\n"); scanf("%d",&choice); if(choice>=1&&choice<=7) switch(choice) { case 1:plus();break; case 2:minus();break; case 3:multiply();break; case 4:divide();break; case 5:complementation();break; case 6:accumulation();break; case 7:factorial();break; case 8:factorialSum();break; default:printf("选项输入错误!\n"); } else { printf("your inputs is error!\n");flag=1; } } getch(); //菜单 } else { printf("密码错误\n"); } } void plus() { double a,b,temp; printf("请输入以空格分隔的两个运算数:\n"); scanf("%lf %lf",&a,&b); temp=a+b; } void minus() { double a,b,temp; printf("请输入被减数与减数(并用空格隔开):\n"); scanf("%lf %lf",&a,&b); temp=a-b; } void multiply() { double a,b,temp; printf("请输入以空格分隔的两个运算数:\n"); scanf("%lf %lf",&a,&b); temp=a*b; } void divide() { double a,b,temp; printf("请输入被除数与除数(并用空格隔开):\n"); scanf("%lf %lf",&a,&b); if(b!=0) temp=a/b; else printf("错误!\n"); } void complementation() { int a,b,temp; printf("请输入两个用空格隔开的运算数:\n"); scanf("%d %d",&a,&b); if(b!=0) { temp=a%b; } else printf("错误!\n"); } void accumulation() { int n,temp; int a,sum=1; printf("请输入要求累加的数值:\n"); scanf("%d",&n); for(a=2;a<=n;a++) { sum+=a; } temp=sum; printf("累加和为:%d\n",temp); } int factorial() { int m; long ret,temp; printf("请输入想求的阶乘数:"); scanf("%d",&m); ret = Fact(m);//调用函数Fact(),并将函数的返回值存入ret if(ret==-1) printf("输入错误!\n"); else { temp=ret; } return 0; } long Fact(int n)//函数的定义(作用:计算输入阶乘数的阶乘,并将结果返回主函数,且当n<0时,返回-1) { int i; long result = 1; if(n<0) { return -1; } else { for(i = 2;i<=n;i++) { result*=i; } return result; } } int factorialSum() { int m; long ret,temp; printf("请输入想求的阶乘和数:"); scanf("%d",&m); ret = FactSum(m);//调用函数Fact(),并将函数的返回值存入ret if(ret==-1) printf("输入错误!\n"); else temp=ret; return 0; } long FactSum(int v)//函数的定义(作用:计算输入阶乘数的阶乘和,并将结果返回主函数,且当n<0时,返回-1) { int i; long result=1,j = 1; if(v<0) { return -1; } else { for(i = 2;i<=v;i++) { j*=i; result+=j; } return result; } } void main() { password(); printf("结果是:%lf",temp); }
连续除法的数位的计算的问题,如何利用C语言的程序的设计来解决
Problem Description As a recruiting ploy, Google once posted billboards in Harvard Square and in the Silicon Valley area just stating “{first 10-digit prime found in consecutive digits of e}.com”. In other words, find that 10-digit sequence and then connect to the web site— and find out that Google is trying to hire people who can solve a particular kind of problem. Not to be outdone, Gaggle (a loosy-goosy fuzzy logic search firm), has devised its own recruiting problem. Consider the base 7 expansion of a rational number. For example, the first few digits of the base 7 expansion of 1/510 = 0.12541...7,33/410 = 11.15151...7, and 6/4910 = 0.06000...7, From this expansion, find the digits in a particular range of positions to the right of the "decimal" point. Input The input file begins with a line containing a single integer specifying the number of problem sets in the file. Each problem set is specified by four base 10 numbers on a single line, n d b e, where n and d are the numerator and denominator of the rational number and 0 ≤ n ≤ 5,000 and 1 ≤ d ≤ 5,000. b and e are the beginning and ending positions for the desired range of digits, with 0 ≤ b,e ≤ 250 and 0 ≤ (e-b) ≤ 20. Note that 0 is the position immediately to the right of the decimal point. Output Each problem set will be numbered (beginning at one) and will generate a single line: Problem k: n / d, base 7 digits b through e: result where k is replaced by the problem set number, result is your computed result, and the other values are the corresponding input values. Sample Input 4 1 5 0 0 6 49 1 3 33 4 2 7 511 977 122 126 Sample Output Problem set 1: 1 / 5, base 7 digits 0 through 0: 1 Problem set 2: 6 / 49, base 7 digits 1 through 3: 600 Problem set 3: 33 / 4, base 7 digits 2 through 7: 151515 Problem set 4: 511 / 977, base 7 digits 122 through 126: 12425
求助C语言大佬~不知道我的代码哪里错了
/* 英文算数计算系统 从键盘输入两个小于100的整数A和B,计算A与B两数的基本算数运算。需要注意的是:A和B的每一位数位上的数字由对应的英文单词给出。 系统要求: (1)系统由菜单做导航,给出输入数据功能、退出程序功能、数据输入功能并能够循环输入执行运算等。 (2)在数据运算输入功能菜单下分别给出A与B的相加运算、A与B的相乘运算、A与B的相减运算、A与B的相除运算、A与B的相除取于运算等功能。 (3)当A输入为zero,同时B输入为zero时自动返回菜单上一级。 输入样例: one + two = three four + five six = zero seven + eight nine = zero + zero = 输出样例: one + two = three three four + five six = nine zero zero seven + eight nine = nine six */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 30 //定义最大30个测试用例 char a[N][50]; //定义每个测试用例可以有50个字符 char comp[10][6] = {"zero","one","two","three","four","five","six","seven","eight","nine"}; int val[N]; void StringBracket(char *str)//删除空格 { int i,j,len; len=strlen(str); j=0; for(i=0; i<len; i++) { if(str[i]!=' ') { str[j]=str[i]; j=j+1; } } str[j]='\0'; } char calval(char *str) //计算每个表达式的值 { int i,j,len,y; int a1=0,a2=-1,b1=0,b2=-1;//每个表达式最多有4个整数 char str1[20],str2[20];//分解为两个字符串 char stra1[10],stra2[10]={0},strb1[10],strb2[10]={0};//每个字符串最多分解为两个子串 len=strlen(str); for(i=0; i<len; i++) { str1[i]=str[i]; if(str[i]=='+'|| str[i]=='-'|| str[i]=='*'|| str[i]=='/'|| str[i]=='%') { str1[i]='\0'; for(j=i+1; j<len; j++) str2[j-i-1]=str[j]; str2[len-i-2]='\0'; break; } } len=strlen(str1); for(i=0; i<len; i++) { stra1[i]=str1[i]; if(i>1 && str1[i]==' ') { stra1[i]='\0'; for(j=i+1; j<len; j++) stra2[j-i-1]=str1[j]; stra2[len-i-1]='\0'; break; } } len=strlen(str2); for(i=0; i<len; i++) { strb1[i]=str2[i]; if(i>1 && str2[i]==' ') //i>1表示不考虑前面的空格 { strb1[i]='\0'; for(j=i+1; j<len; j++) strb2[j-i-1]=str2[j]; strb2[len-i-1]='\0'; break; } } StringBracket(stra1); StringBracket(stra2); StringBracket(strb1); StringBracket(strb2); for(i=0; i<10; i++) { if(strcmp(stra1,comp[i])==0) a1=i; if(strcmp(stra2,comp[i])==0) a2=i; if(strcmp(strb1,comp[i])==0) b1=i; if(strcmp(strb2,comp[i])==0) b2=i; } if(a2>=0) a1=a1*10+a2; //a2初始化为-1,>=0表示为两位数 if(b2>=0) b1=b1*10+b2; switch(y) { case 1: return a1+b1; break; case 2: return a1-b1; break; case 3: return a1*b1; break; case 4: return a1/b1; break; case 0: return a1%b1; break; default: printf(" 输入错误,请重新输入\n"); } } int main() { int i,j,n=0; int y; char str[10]; printf("|--------------------------------|\n"); printf("| 英文算数计算系统 |\n"); printf("| 1--加法运算 |\n"); printf("| 2--减法运算 |\n"); printf("| 3--乘法运算 |\n"); printf("| 4--除法运算 |\n"); printf("| 0--相除取余运算 |\n"); printf("|--------------------------------|\n\n"); printf("|你想要进行哪一种运算(0-4) |\n"); scanf("%d",&y); system("pause"); system("cls"); printf("Please input numbers:\n"); while(1) { gets(a[n]); val[n]=calval(a[n]); if(val[n]==0) break; n++; if(n>=N) break; } printf("Output:\n"); for(i=0;i<n;i++) { if (val[i]>0) { itoa(val[i], str, 10);//整数转换为字符串 printf("%s ",a[i]);//输出原表达式 for(j=0;j<strlen(str);j++) { printf("%s ",comp[str[j]-0x30]); } } printf("\n"); } return 0; }
c语言简易计算器小白问题
#include <stdio.h> float fun1(float a,float b) { float c; c=a+b; return c; } float fun2(float a,float b) { float c; c=a-b; return c; } float fun3(float a,float b) { float c; c=a*b; return c; } float fun4(float a,float b) { float c; c=a/b; return c; } int main() { int d; float a,b; printf("\t\t|--------------------|\n"); printf("\t\t| 简易计算器 |\n"); printf("\t\t|--------------------|\n"); printf("\t\t| 1-加法 |\n"); printf("\t\t| 2-减法 |\n"); printf("\t\t| 3-乘法 |\n"); printf("\t\t| 4-除法 |\n"); printf("\t\t| 0-退出 |\n"); printf("\t\t|--------------------|\n"); printf("选择需要的计算:\n"); scanf("%d",&d); while(d<=5&&d>0) { printf("输入两个数字:\n"); scanf("%f,%f"&a,&b); switch(d) { case 1: printf("%.2f",fun1(a,b)); break; case 2: printf("%.2f",fun2(a,b)); break; case 3: printf("%.2f",fun3(a,b)); break; case 4: printf("%.2f",fun4(a,b)); break; case 0: printf("谢谢使用~~"); break; } } printf("\n谢谢使用~~"); return 0; } 显示输入那个位置有问题。新手求指导。我自己感觉结构有问题
C语言项目,功能8,9不能正常实现,求修改,按如图要求
![图片说明](https://img-ask.csdn.net/upload/201911/25/1574686303_298098.png) #include "stdio.h" #include "string.h"//字符串函数 #include "stdlib.h" #include"stdbool.h" long Fact(int n); long FactSum(int v); //函数的定义(作用:计算输入阶乘数的阶乘和,并将结果返回主函数 void displaymain()//显示主菜单 { printf("*******************\n"); printf("简易计算器\n"); printf("*******************\n"); printf("请选择\n"); printf("1:加法\n"); printf("2:减法\n"); printf("3:乘法\n"); printf("4:除法\n"); printf("5:求余\n"); printf("6:累加\n"); printf("7:阶乘\n"); printf("8:阶乘累加\n"); printf("9:退出系统\n"); } void password() { int i=0,temp; bool login_status=false; char password[10]={0}; //声明一个最多有十个元素的数组,并且初始化值为0; //for(i=0;i { for(i=0;i<3;i++) { printf("请输入密码:"); scanf("%s",password);//输入密码(字符串) if(strcmp("19491001",password)==0) { login_status=true; break; }else printf("密码错误,重新输入"); } if(true==login_status)//strcmp:比较两个字符串是否一样 { printf("登陆成功\n"); int choice,flag=0; void displaymain(); void plus(); void minus(); void multiply(); void divide(); void complementation(); void accumulation(); int factorial(); int factorialSum(); while(flag==0) { putchar('\n'); displaymain(); printf("please input a digital(1-7)\n"); scanf("%d",&choice); if(choice>=1&&choice<=7) switch(choice) { case 1:plus();break; case 2:minus();break; case 3:multiply();break; case 4:divide();break; case 5:complementation();break; case 6:accumulation();break; case 7:factorial();break; case 8:factorialSum();break; default:printf("选项输入错误!\n"); } else { printf("your inputs is error!\n");flag=1; } } getch(); //菜单 } else { printf("密码错误超过三次\n"); } } void plus() { double a,b,temp; printf("请输入以空格分隔的两个运算数:\n"); scanf("%lf %lf",&a,&b); temp=a+b; printf("结果是:%lf",temp); } void minus() { double a,b,temp; printf("请输入被减数与减数(并用空格隔开):\n"); scanf("%lf %lf",&a,&b); temp=a-b; printf("结果是:%f",temp); } void multiply() { double a,b,temp; printf("请输入以空格分隔的两个运算数:\n"); scanf("%lf %lf",&a,&b); temp=a*b; printf("结果是:%f",temp); } void divide() { double a,b,temp; printf("请输入被除数与除数(并用空格隔开):\n"); scanf("%lf %lf",&a,&b); if(b!=0) { temp=a/b; printf("结果是:%f",temp); } else printf("错误!\n"); } void complementation() { int a,b,temp; printf("请输入两个用空格隔开的运算数:\n"); scanf("%d %d",&a,&b); if(b!=0) { temp=a%b; printf("结果是:%d",temp); } else printf("错误!\n"); } void accumulation() { int n,temp; int a,sum=1; printf("请输入要求累加的数值:\n"); scanf("%d",&n); for(a=2;a<=n;a++) { sum+=a; } temp=sum; printf("累加和为:%d\n",temp); } int factorial() { int m; long ret,temp; printf("请输入想求的阶乘数:"); scanf("%d",&m); ret = Fact(m);//调用函数Fact(),并将函数的返回值存入ret if(ret==-1) printf("输入错误!\n"); else { temp=ret; printf("结果是:%d",temp); } return 0; } long Fact(int n)//函数的定义(作用:计算输入阶乘数的阶乘,并将结果返回主函数,且当n<0时,返回-1) { int i; long result = 1; if(n<0) { return -1; } else { for(i = 2;i<=n;i++) { result*=i; } return result; } } int factorialSum() { int m; long ret,temp; printf("请输入想求的阶乘和数:"); scanf("%d",&m); ret = FactSum(m);//调用函数Fact(),并将函数的返回值存入ret if(ret==-1) printf("输入错误!\n"); else temp=ret; return 0; } long FactSum(int v)//函数的定义(作用:计算输入阶乘数的阶乘和,并将结果返回主函数,且当n<0时,返回-1) { int i; long result=1,j = 1; if(v<0) { return -1; } else { for(i = 2;i<=v;i++) { j*=i; result+=j; } return result; } } void main() { int temp; password(); printf("运行结束"); }
c语言中函数中变量范围的问题?
ATT 测试环境:vs2013 win7 直接上代码 ``` # include <stdio.h> # include <stdlib.h> void switch_a () //声明switch_a函数 void menu()//声明menu函数 int main() { int a, b; //参加运算的两个数字 int c; //判断进行什么运算的变量 printf("欢迎使用四则运算器\n"); printf("请输入两个整型数字以空格隔开\n"); scanf_s("%d %d", &a, &b); //输入 两个整数 分别到a,b变量中 menu(); //调用menu函数 scanf_s("%d", &c);//输入1,2,3,4其中一个数字到变量c中 switch_a ();//调用switch_a函数 system("pause"); return 0; } void menu() { printf("+ 选择 1\n"); //输出菜单上的选择内容 printf("- 选择 2\n"); printf("x 选择 3\n"); printf("/ 选择 4\n"); return 0; } void switch_a () { switch (c) //判断C的值 { case 1: //c == 1 就是加法运算 printf("%d+%d=%d\n", a, b, a + b); break; case 2: //c == 2 就是减法运算 printf("%d-%d=%d\n", a, b, a - b); case 3: // c == 3 就是乘法运算 printf("%dX%d=%d\n", a, b, a*b); case 4: //c == 4 就是除法运算 printf("%d/%d=%d\n", a, b, a / b); default: //c == other 输出以下信息 printf("本程序只能输入1,2,3,4 您输入的数字应该不是它们之间的,请仔细检查!\n"); break; } return 0; } ``` 问题: 为什么switch_a函数里的a,b,c 还可以用?a,b,c的声明都是在main函数里面进行的
救救孩子吧 求用C设计一个自动生成四则运算试题的程序
我想了一天也没弄出来 我太难了 1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内 (2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式 (3)题目数量可定制 (4)相关参数可控制 是否包含乘法和除法 操作数数值范围可控(如操作数 在100以内 还是1000以内) 操作数是否含负数     (5)生成的运算题存储到外部文件result.txt中
修改代码,按图示要求
#include "stdio.h" #include "string.h"//字符串函数 #include "stdlib.h" long Fact(int n); long FactSum(int v); //函数的定义(作用:计算输入阶乘数的阶乘和,并将结果返回主函数 void displaymain()//显示主菜单 { printf("*******************\n"); printf("简易计算器\n"); printf("*******************\n"); printf("请选择\n"); printf("1:加法\n"); printf("2:减法\n"); printf("3:乘法\n"); printf("4:除法\n"); printf("5:求余\n"); printf("6:累加\n"); printf("7:阶乘\n"); printf("8:阶乘累加\n"); printf("9:退出系统\n"); } void password() { int i=0,temp; char password[10]={0}; //声明一个最多有十个元素的数组,并且初始化值为0; printf("请输入密码:"); scanf("%s",password);//输入密码(字符串) if(strcmp("19491001",password)==0)//strcmp:比较两个字符串是否一样 { printf("登陆成功\n"); int choice,flag=0; void displaymain(); void plus(); void minus(); void multiply(); void divide(); void complementation(); void accumulation(); int factorial(); int factorialSum(); void tuichu(); while(flag==0) { putchar('\n'); displaymain(); printf("please input a digital(1-7)\n"); scanf("%d",&choice); if(choice>=1&&choice<=7) switch(choice) { case 1:plus();break; case 2:minus();break; case 3:multiply();break; case 4:divide();break; case 5:complementation();break; case 6:accumulation();break; case 7:factorial();break; case 8:factorialSum();break; case 9:tuichu();break; default:printf("选项输入错误!\n"); } } getch(); //菜单 } else { printf("密码错误\n"); } } void plus() { double a,b,temp; printf("请输入以空格分隔的两个运算数:\n"); scanf("%lf %lf",&a,&b); temp=a+b; printf("结果是:%lf",temp); } void minus() { double a,b,temp; printf("请输入被减数与减数(并用空格隔开):\n"); scanf("%lf %lf",&a,&b); temp=a-b; printf("结果是:%f",temp); } void multiply() { double a,b,temp; printf("请输入以空格分隔的两个运算数:\n"); scanf("%lf %lf",&a,&b); temp=a*b; printf("结果是:%f",temp); } void divide() { double a,b,temp; printf("请输入被除数与除数(并用空格隔开):\n"); scanf("%lf %lf",&a,&b); if(b!=0) { temp=a/b; printf("结果是:%f",temp); } else printf("错误!\n"); } void complementation() { int a,b,temp; printf("请输入两个用空格隔开的运算数:\n"); scanf("%d %d",&a,&b); if(b!=0) { temp=a%b; printf("结果是:%d",temp); } else printf("错误!\n"); } void accumulation() { int n,temp; int a,sum=1; printf("请输入要求累加的数值:\n"); scanf("%d",&n); for(a=2;a<=n;a++) { sum+=a; } temp=sum; printf("累加和为:%d\n",temp); } int factorial() { int m; long ret,temp; printf("请输入想求的阶乘数:"); scanf("%d",&m); ret = Fact(m);//调用函数Fact(),并将函数的返回值存入ret if(ret==-1) printf("输入错误!\n"); else { temp=ret; printf("结果是:%d",temp); } return 0; } long Fact(int n)//函数的定义(作用:计算输入阶乘数的阶乘,并将结果返回主函数,且当n<0时,返回-1) { int i; long result = 1; if(n<0) { return -1; } else { for(i = 2;i<=n;i++) { result*=i; } return result; } } int factorialSum() { int m; long ret,temp; printf("请输入想求的阶乘和数:"); scanf("%d",&m); ret = FactSum(m);//调用函数Fact(),并将函数的返回值存入ret if(ret==-1) printf("输入错误!\n"); else temp=ret; return 0; } long FactSum(int v)//函数的定义(作用:计算输入阶乘数的阶乘和,并将结果返回主函数,且当n<0时,返回-1) { int i; long W=1,j = 1; if(v<0) { return -1; } else { for(i = 2;i<=v;i++) { j*=i; W+=j; } return W; } } void tuichu() { printf("已退出"); } void main() { int temp; password(); printf("结果是:%lf",temp); } ![图片说明](https://img-ask.csdn.net/upload/201911/25/1574687755_948559.png)
在VC环境下,使用动态链接库编程
在VC中使用动态链接库编写四则运算(减法、乘法、除法);并编写一个字符串加密和解密算法。 例如,在VC++中new一个Win32 Dynamic-Link Library工程,工程名为lib,然建立一个Win32 Console Appliction工程,工程名为TestDLL
CRC校验代码看不懂,请求高手支招。目前我看不懂的一篇CRC校验文章和一套逆序CRC校验。
#各位大神,我看不懂这篇文章还有一段逆序CRC代码。请各位大神帮帮忙: ## 1、文章(链接地址:https://wenku.baidu.com/view/9f7b55876f1aff00bed51ec0.html) 下面为不完全版 CRC(Cyclic Redundancy Check)校验应用较为广泛,以前为了处理简单,在程序中大多数采用LRC(Longitudinal Redundancy Check)校验,LRC校验很好理解,编程实现简单。用了一天时间研究了CRC的C语言实现,理解和掌握了基本原理和C语言编程。结合自己的理解简单写下来。 1、CRC简介 CRC检验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个检验码r位(就是CRC码),附在信息后面,构成一个新的二进制码序列数共(k+r)位,最后发送出去。接收端根据同样的规则校验,以确定传送中是否出错。接收端有两种处理方式:1、计算k位序列的CRC码,与接收到的CRC比较,一致则接收正确。2、计算整个k+r位的CRC码,若为0,则接收正确。 CRC码有多种检验位数,8位、16位、32位等,原理相同。16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(即乘以2的16次方后),除以一个多项式,最后所得到的余数就是CRC码。 求CRC码所采用的是模2运算法则,即多项式除法中采用不带借位的减法运算,运算等同于异或运算。这一点要仔细理解,是编程的基础。 CRC-16: (美国二进制同步系统中采用) G(X) = X16 + X15 + X2 + 1 CRC-CCITT: (由欧洲CCITT推荐) G(X) = X16 + X12 + X5 + 1 CRC-32: G(X) = X32 + X26 + X23 + X22 + X16 +X12 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X1 + 1 2、按位计算CRC 采用CRC-CCITT多项式,多项式为0x11021,C语言编程时,参与计算为0x1021,这个地方得深入思考才能体会其中的奥妙,分享一下我的思路:当按位计算CRC时,例如计算二进制序列为1001 1010 1010 1111时,将二进制序列数左移16位,即为1001 1010 1010 1111 (0000 0000 0000 0000),实际上该二进制序列可拆分为1000 0000 0000 0000 (0000 0000 0000 0000) + 000 0000 0000 0000 (0000 0000 0000 0000) + 00 0000 0000 0000 (0000 0000 0000 0000) + 1 0000 0000 0000 (0000 0000 0000 0000) + …… 现在开始分析运算: <1>对第一个二进制分序列求余数,竖式除法即为0x10000 ^ 0x11021运算,后面的0位保留; <2>接着对第二个二进制分序列求余数,将第一步运算的余数*2后再和第二个二进制分序列一起对0x11021求余,这一步理解应该没什么问题。如果该分序列为0,无需计算。 <3>对其余的二进制序列求余与上面两步相同。 <4>计算到最后一位时即为整个二进制序列的余数,即为CRC校验码。 该计算方法相当于对每一位计算,运算过程很容易理解,所占内存少,缺点是一位一位计算比较耗时。 下面给出C语言实现方法: 复制代码 代码如下: ## 第一段代码 unsigned char test[16] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff}; unsigned char len = 16; void main( void ) { unsigned long temp = 0; unsigned int crc; unsigned char i; unsigned char *ptr = test; while( len-- ) { for(i = 0x80; i != 0; i = i >> 1) { temp = temp * 2; if((temp & 0x10000) != 0) temp = temp ^ 0x11021; if((*ptr & i) != 0) temp = temp ^ (0x10000 ^ 0x11021); } ptr++; } crc = temp; printf("0x%x ",crc); } 上面的程序根据运算分析而来,很容易理解。为了节约内存空间,我们对程序作进一步的简化。分析可知,当二进制序列中上一位计算的余数第15bit位为1时,即( 上一位计算的余数 & 0x8000) != 0,计算本位时,上一位余数 * 2后可对0x11021作求余运算,然后再加上本位计算所得余数。这个很好理解,也就是说,打个比方,把它看作简单的除法,计算上一位时的余数乘以2后,如果比较大可以当被除数,就再去除除数求余。有一点和普通除法不同的是,因为多项式除法中采用不带借位的减法运算,所以0x10000也可以被0x11021除,余数并非为0x10000,而是0x1021。这个自己动手算一下就知道了。余数之和也是不带进位的加法运算,即异或。最后还强调一点,因为二进制序列是左移16位后参与运算的,所以,一直算到序列的最后一位也是可以被除的,这点大家要明白。下面给出简化后的C语言实现。 复制代码 代码如下: ## 第二段代码 unsigned char test[16] ={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff}; unsigned char len = 16; void main( void ) { unsigned int crc = 0; unsigned char i; unsigned char *ptr = test; while( len-- ) { for(i = 0x80; i != 0; i = i >> 1) { if((crc & 0x8000) != 0) { crc = crc << 1; crc = crc ^ 0x1021; } else { crc = crc << 1; } if((*ptr & i) != 0) { crc = crc ^ 0x1021; } } ptr++; } printf("0x%x ",crc); } 上面这段程序网上较为常见,但冇得详细的解释。通过我上面的详细分析,如果对此段程序理解还有困难,可以对比一下没简化之前的程序,细细品味一哈,还是比较容易理解的。要是还理解不了,还是从头再看下,我码这么多字容易吗。。。。。 按位计算CRC代码比较简单,所占内存少,但要一位一位去计算,下面再介绍一种按字节查表快速计算CRC的方法。 3、按字节计算CRC 有了上面按位计算的知识,理解这个就是小case了。还是举前面的例子:当字节计算CRC时,例如计算二进制序列为1001 1010 1010 1111时,即0x9a9f时,将二进制序列数左移16位,即为0x9a9f(0 0 0 0),实际上该二进制序列可拆分为0x9a00(0 0 0 0) + 0x009f(0 0 0 0),分析计算时和上面的步骤一样,唯一不同的是计算中上一步的余数CRC要乘以2的八次方参与下一步的运算,这个应该好理解撒。为了简化编程,将计算中的CRC拆成高八位和低八位的形式,高八位的值直接与本位值相加求余,低八位的值乘以2的八次方后作为余数和计算得的余数相加。为了提高计算速度,我们把8位二进制序列数的CRC全部计算出来,放在一个表中,采用查表法可大大提高计算速度。 表是怎么得到的呢?当然是计算出来的,下面的程序给出了多项式是0x11021的计算程序。 复制代码 代码如下: ## 第三段代码 void main( void ) { unsigned int crc = 0; unsigned char i; unsigned int j; for(j = 0; j < 256; j++) { crc = 0; for(i = 0x80; i != 0; i = i >> 1) { if((crc & 0x8000) != 0) { crc = crc << 1; crc = crc ^ 0x1021; } else { crc = crc << 1; } if((j & i) != 0) { crc = crc ^ 0x1021; } } printf("0x"); if(crc < 0x10) { printf("000"); } else if(crc < 0x100) { printf("00"); } else if(crc < 0x1000) { printf("0"); } printf("%x, ",crc); } } 如果你不是使用的0x11021多项式,只需把程序中0x1021换成其他的就可以了。后面的几个printf语句为了控制使生成的表比较整齐,如果无所谓,可直接用printf("0x%x, ",crc);代替。生成的表如下: 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, 好了,我们来写按字节计算的源程序: ## 第六段代码(CRC逆序校验代码) uint8 xCal_crc(uint8 *ptr,uint32 len) { uint8 crc; uint8 i; uint32 lenBak = len; uint8 *ptrBak = ptr; uint32 Debuglen = lenBak; uint8 *Debugptr = ptrBak; char CrcSendBuf[100] = {0}; crc = 0; while(len--) { crc ^= *ptr++; memset(CrcSendBuf, 0, 100); sprintf(CrcSendBuf, "head->crc = %02x \r\n", crc); UartSendString(CrcSendBuf, strlen(CrcSendBuf)); for(i = 0;i < 8;i++) { if(crc & 0x01) { crc = (crc >> 1) ^ 0x8C; } else { crc >>= 1; } } } return crc; }
问问大佬 我的代码有哪里不对 作业过不了 希望大佬能指点下 万分感谢
题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法。 (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了表达这样两个数的商,可以将相除的结果以多个整数来表示,每个整数表示结果的一位。即商的第一位用一个整数来表示,第二位用另一个整数来表示,以此类推,就可以输出一个高精度的除法结果了。 如16/19的结果0.8421052631...就可以依次输出8、4、2、1、0、5、2、6、3、1...。 #include <stdio.h> int main(void) { int a,b; int i=0; int shang,yushu; scanf("%d/%d",&a,&b); printf("0."); shang=a*10/b; yushu=a*10%b; printf("%d",shang); for(i=0;i<200 && yushu!=0;i++){ shang=yushu*10/b; yushu=yushu*10%b; printf("%d",shang); } return 0; }
C语言小学计算出题程序,三个linker error求解释!
题目要求 ![图片说明](https://img-ask.csdn.net/upload/201607/05/1467700498_614422.jpg) .h文件的代码如下 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_id_NUM 10 #define test_NUM 10 typedef struct student { char ID[MAX_id_NUM]; int score; int time; }student;// 定义student结构存储学生ID与对应成绩 typedef struct problem { int t;//区分类型||1==乘法||2==除法||3==加法||4==减法 int n1;//第一个运算数 int n2;//第二个运算数 int c_A;//正确答案 int u_A;//学生输入的答案 }problem;//定义problem结构存储问题与答案 student user;//全局变量user保存当前登录学生的ID与成绩 int quit=1;//退出的标识,当 quit==1时程序运行循环,quit==0时退出循环程序结束 void menu();//菜单函数,调出主要选择页面 int test();//算数测试函数 void W_file();//将成绩写入文档 int random1();//生成1~4的随机数 int random2(int i);//生成 0~99的随机数 int random3(int i);//生成0~10的随机数 int random4(int i);//生成0~49的随机数 void check();//查询函数,调出文档全部信息 ``` ``` #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include"head.h" int type=1; problem T[10]; //10道题 10个信封 int score=0; //分数从0开始记 void funcA() { int i=0,j=0; for(i=0;i<10000;i++) for(j=0;j<10000;j++) { int test() //产生随机数 { int i,flag=1; //类型:加减乘除 标志 int num1,num2,num3=100,num4; for(i=0;i<test_NUM;i++) { type=random1(); //随机函数 随机产生1234 flag=1; // switch(type) { case 1: //乘法 while(flag) { num1=random3(1); num2=random3(9); num3=num1*num2; if(num3<=99&&num3>=0)flag=0; //跳出WHILE循环 } printf("%d * %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=1; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; //正确回答 T[i].u_A=num4; //你的回答 break; case 2: while(flag) { num1=random2(1); num2=random3(9); if(num2==0)continue; num3=num1/num2; if(num3<=99&&num3>=0)flag=0; } printf("%d / %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=2; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; T[i].u_A=num4; break; case 3: while(flag) { num1=random2(1); num2=random2(9); num3=num1+num2; if(num3<=99&&num3>=0)flag=0; } printf("%d + %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=3; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; T[i].u_A=num4; break; default: while(flag) { num1=random2(2); num2=random4(1); num3=num1-num2; if(num3<=99&&num3>=0)flag=0; } printf("%d - %d=",num1,num2); scanf("%d",&num4); if(num3==num4)score+=10; T[i].t=4; T[i].n1=num1; T[i].n2=num2; T[i].c_A=num3; T[i].u_A=num4; break; } } } } int main() { int i=0; //计数 int error; //判断是否有错(id) 不符合标准=1 quit=1; //继续运行 char ID_NUM[MAX_id_NUM]; //临时存放ID clock_t start,finish; double duration; printf("[*****Welcome into MathTest system!*****]\n"); while(quit) //不断循环 =0时循环停止 { user.score=0; //查看分数 i=0; //确保是0 error=0 ; printf("Please input your ID:"); fflush(stdin); //清空缓存 准备输入时 防止干扰 gets(ID_NUM); //输入字符串 while(ID_NUM[i]!='\0') //判断循环 ID是否正确 =\0时是结尾 { if(i<2) { if(ID_NUM[i]>'Z'||ID_NUM[i]<'A') //反面 不在A-Z 错误 { error=1; break; } i++; } else { if(ID_NUM[i]<'0'||ID_NUM[i]>'9') { error=1; break; } i++; } } if(error==1||i!=6) //出现错误或个数错误 { printf("error!\n") ; continue; //跳出本次循环 下次循环继续 重新输入ID } strcpy(user.ID,ID_NUM); //复制函数 临时文件存储 menu(); //菜单函数 选择4个选项 } printf("funcA() START!!\n"); start=clock(); funcA(); finish=clock(); printf("funcA() END!!\n"); duration=(double)(finish-start)/CLOCKS_PER_SEC; printf("%.0f 毫秒\n",duration*1000); return 0; } int menu() { int in; // while(1) //不断循环 { printf("(1)Start a test\n(2)Check score\n(3)Exit\n(4)New log(ID) into\n"); scanf("%d",&in); switch(in) //多重选择判断 { case 1: user.score=test(); //test函数返回分数 W_file(); //调用函数形成文件 break; case 2: check(); break; //跳出WHILE case 3: quit=0; //退出 printf("Thanks for your using!\nSee you next time.\n" ); return; // 跳出MENU case 4: return; default: printf("error!\n"); //输入其他 break; } } } printf("Prob. |Correct Answ.|Ur Answ.\n"); for(i=0;i<test_NUM;i++) { type=T[i].t; switch(type) //格式化输出 { case 1: printf("%3d *%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; case 2: printf("%3d /%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; case 3: printf("%3d +%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; default: printf("%3d -%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A); break; } } getch();//return score; } void W_file() // { FILE *fp; if ((fp = fopen("score.txt", "a+")) == NULL) { printf("File not found!\n"); return; } fprintf(fp,"%s %d\n",user.ID,user.score); fclose(fp); } int random1() { srand(time(0)); return (rand()%4+1); } int random2(int i) { srand(time(0)+i); return (rand()%100); } int random3(int i) { srand(time(0)+i); return (rand()%11); } int random4(int i) { srand(time(0)+i); return (rand()%50); } void check() //反馈信息 { char ID[6]; int score; FILE *fp; if ((fp = fopen("score.txt", "r+")) == NULL) { printf("File not found!\n"); return; } fscanf(fp,"%s %d",ID,&score); //调用文件 while(!feof(fp)) { printf("ID:%s|Score:%d\n",ID,score); fscanf(fp,"%s %d",ID,&score); } fclose(fp); } ```
CCF 2019.3 二十四点 自己写了一个代码手打各种样例都没问题可是只有30分
![图片说明](https://img-ask.csdn.net/upload/201909/05/1567669319_544641.png) ``` #include<iostream> #include<stdio.h> using namespace std; int main(){ int n; cin>>n; int **a=new int*[n]; for(int i=0;i<n;i++){ a[i]=new int[4]; } char **b=new char*[n]; for(int i=0;i<n;i++){ b[i]=new char[4]; } for(int i=0;i<n;i++){ // cin>>a[i][0]; // b[i][0]=getchar(); // cin>>a[i][1]; // b[i][1]=getchar(); // cin>>a[i][2]; // b[i][2]=getchar(); // cin>>a[i][3]; scanf("%d%c%d%c%d%c%d",&a[i][0],&b[i][0],&a[i][1],&b[i][1],&a[i][2],&b[i][2],&a[i][3]); } for(int i=0;i<n;i++){ int num1=4;//数字剩余的个数 int num2=3;//字符个数 while(num1!=1){ for(int j=0;j<num2;j++){ if(b[i][j]=='x')a[i][j]=a[i][j]*a[i][j+1]; else if(b[i][j]=='/')a[i][j]=a[i][j]/a[i][j+1]; else if(j==num2-1&&b[i][j]=='+')a[i][j]=a[i][j]+a[i][j+1]; else if(j==num2-1&&b[i][j]=='-')a[i][j]=a[i][j]-a[i][j+1]; else continue; //符号和数字相对应,运算一次后,数字和符号都减少,保持靠左对齐,下面的操作是向左移位,保持紧凑 for(int k=j+1;k<num1-1;k++){ a[i][k]=a[i][k+1]; } num1--; for(int k=j;k<num2-1;k++){ b[i][k]=b[i][k+1]; } num2--; break; } } if(a[i][0]==24&&i!=n-1){ cout<<"Yes"<<endl; } else if(a[i][0]==24&&i==n-1){ cout<<"Yes"; } else if(a[i][0]!=24&&i!=n-1){ cout<<"No"<<endl; } else cout<<"No"; } return 0; } ``` 我本人的思路不是网上常用的堆栈的方法,利用的是两个普通数组进行的,一个存数字,一个存符号 先把除法和乘法扫描出来运算,转化成加法减法,每一次运算后保持进行移位靠左对齐保证数字和运算符对应, 希望有能力的大佬帮忙解答一下
PAT乙级1034,codeblocks上运行正确,但提交答案错误
我写了一段比较长的代码,在codeblocks运行显示的答案和输出样例的答案是一样的,但提交后显示答案错误,没有超时,求大神解释!(虽然思路比较繁琐,但结构尚且清晰……) ``` #include<stdio.h> #include<string.h> #include<stdlib.h> long gcd(long a,long b); void toform(long * num, long a, long b);//该函数把分数变为输出的标准形式,放在long数组里面, //即整数部分和最简分数部分,一共三个值 int check(long * input);//根据标准形式决定用哪种格式输出--二维数组forms中的八种情况 long * add(long a, long b, long c, long d, long *temp);//加法,返回结果的标准形式 long * sub(long a, long b, long c, long d, long *temp);//减法 long * mul(long a, long b, long c, long d, long *temp);//乘法 long * divv(long a, long b, long c, long d, long *temp);//除法 void PRINT(int mark, long * input, char forms[][20]);//输出函数 int main() { long inputa[5],inputb[5]; int marka=-1, markb=-1,markr=-1;//该标志位决定用哪种格式输出 long a,b,c,d; char forms[8][20]={"(-%ld %ld/%ld)","(-%ld)","(-%ld/%ld)", "%ld %ld/%ld","%ld/%ld","0","%ld","Inf"};//存放输出的八种格式,通过 //marka,markb,markr的值来访问 long result[5]; long * arrayin[3]; arrayin[0]=inputa; arrayin[1]=inputb; arrayin[2]=result; scanf("%ld/%ld %ld/%ld",&a,&b,&c,&d); toform(inputa,a,b); toform(inputb,c,d); marka=check(inputa);//分别设置输入的两个有理数的输出格式 markb=check(inputb); markr=check(add(a,b,c,d,result));//加法输出 PRINT(marka,inputa,forms); printf(" + "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); printf("\n"); markr=check(sub(a,b,c,d,result));//减法输出 PRINT(marka,inputa,forms); printf(" - "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); printf("\n"); markr=check(mul(a,b,c,d,result));//乘法输出 PRINT(marka,inputa,forms); printf(" * "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); printf("\n"); markr=check(divv(a,b,c,d,result));//除法输出 PRINT(marka,inputa,forms); printf(" / "); PRINT(markb,inputb,forms); printf(" = "); PRINT(markr,result,forms); return 0; } void toform(long * num, long a, long b) { long ys; ys=gcd((long)abs(a%b),(long)abs(b));//求最大公约数 num[0]=a/b; num[1]=(a%b)/ys; num[2]=b/ys; } int check(long * input)//决定哪种格式输出,返回值作为访问forms的下标 { if(input[4]){ if(input[0]<0) { if(input[1]==0) return 1; else return 0; } else if(input[0]>0) { if(input[1]==0) return 6; else return 3; } else { if(input[1]>0) return 4; else if(input[1]<0) return 2; else return 5; } } else return 7; } long * add(long a,long b,long c,long d, long *temp) { long num1,num2; num1=a*d+b*c; num2=b*d; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", return temp; } long * sub(long a,long b,long c,long d, long *temp) { long num1,num2; num1=a*d-b*c; num2=b*d; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", return temp; } long * mul(long a,long b,long c,long d, long *temp) { long num1,num2; num1=a*c; num2=b*d; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", return temp; } long * divv(long a,long b,long c,long d, long *temp) { long num1,num2; if(c==0) { temp[4]=0; return temp; } else { if(c<0)//计算除法要把除数倒过来,而只能是分子是负数,所以要把分子、分母换一下号 { c=-c; d=-d; } num1=a*d; num2=b*c; toform(temp,num1,num2); temp[4]=1;//除数是否为零标志位,每次输出时检测,若为0,直接输出"Inf", } return temp; } void PRINT(int mark, long * input, char forms[][20]) { switch(mark) { case 0: printf(forms[0],(long)abs(input[0]),(long)abs(input[1]),(long)abs(input[2])); break; case 1: printf(forms[1],(long)abs(input[0])); break; case 2: printf(forms[2],(long)abs(input[1]),(long)abs(input[2])); break; case 3: printf(forms[3],(long)abs(input[0]),(long)abs(input[1]),(long)abs(input[2])); break; case 4: printf(forms[4],(long)abs(input[1]),(long)abs(input[2])); break; case 5: printf(forms[5]); break; case 6: printf(forms[6],(long)abs(input[0])); break; case 7: printf(forms[7]); break; } } long gcd(long a,long b)//求最大公约数 { if(a%b==0) return b; else; return gcd(b,a%b); } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问