⑴ c語言 隨機生成10個加法算式,輸入每個算式的計算結果,判斷計算是否正確,輸出成績
除法沒有校驗,有餘數,輸出整除即可;
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
int ChoiceFunc(int a, int b,int Suanfa)
{
int result = 0;
switch (Suanfa)
{
case 0:
result = a + b;
break;
case 1:
result = a - b;
break;
case 2:
result = a * b;
break;
case 3:
if (b!=0)
{
result = a / b;
}
break;
default:
break;
}
return result;
}
int main()
{
int a1, b1, c1,jieguo,shuru;
int jishu = 0;
int secore=0;
srand((unsigned)time(NULL));
for (int i = 0; i < 3000; i++)
{
a1 = rand() % 100;
b1 = rand() % 100;
c1 = rand() % 4;
jieguo = ChoiceFunc(a1, b1, c1);
if (jishu<10&&b1!=0)
{
if (jieguo > 0 && jieguo < 100)
{
jishu++;
switch (c1)
{
case 0:
printf("%d+%d=
", a1, b1 );
printf("請輸入結果:");
scanf("%d", &shuru);
if (shuru==jieguo)
{
secore++;
printf("正確
");
}
break;
case 1:
printf("%d-%d=
", a1, b1);
printf("請輸入結果:");
scanf("%d", &shuru);
if (shuru == jieguo)
{
secore++;
printf("正確
");
}
break;
case 2:
printf("%d*%d=
", a1, b1);
printf("請輸入結果:");
scanf("%d", &shuru);
if (shuru == jieguo)
{
secore++;
printf("正確
");
}
break;
case 3:
printf("%d/%d=
", a1, b1);
printf("請輸入結果:");
scanf("%d", &shuru);
if (shuru == jieguo)
{
secore++;
printf("正確
");
}
break;
default:
break;
}
}
}
else
{
//jishu = 0;
//printf("結束
");
}
}
printf("結束,分數為%d
", secore);
getchar();
getchar();
return 0;
}
⑵ 在C語言中怎樣判斷一個程序運算結果是否溢出,舉個例子,你用C語言編寫程序求n!,判斷n為幾時n!溢出
#include<stdio.h>
unsignedf(unsigned*n){
unsignedi=2,res=1,lres=1;
while(1){
lres*=i;
if(lres<res){
*n=i-1;
returnres;//溢出後,階乘的結果會變小。
}
res=lres;
i++;
}
returni;//本行是不會執行的,這是為了函數需要返回值而設的。
}
intmain(){
unsignedn;
printf("%u!=%u ",n,f(&n));
return0;
}
⑶ 在C語言中如何用棧檢驗一個算數表達式的正確
給你一個完整的程序,自己按需要修改吧。這是我2001年使用過的一個段落。編譯後,可以直接運行。 編譯如下: /************* Compile: gcc $1.c -o $1.e -lm *********/ #include <stdio.h> #include <stdlib.h> #include <math.h> #define TTRUE 0 #define TFALSE 1 #define MY_BUF_SIZ 256 #define WORD_SIZ 32 int A=100; float B=200.002; double C=300.033; struct Variables{ char name[64]; int ty; //int--0,float--1,double--2 double val; }VarTable[]={ {"A",0,0.0}, {"B",1,0.0}, {"C",2,0.0} }; int VarTableLen = 3; int isTheVar(char *tv){ int i = 0; void setVarValue(int); for(i = 0;i<VarTableLen;i++){ if(strcmp(VarTable[i].name,tv) == 0){ setVarValue(i); return i; } } return -1; } double getVarValue(int i){ return VarTable[i].val; } void setVarValue(int i){ if(strcmp(VarTable[i].name,"A") == 0){ VarTable[i].val = A; }else if(strcmp(VarTable[i].name,"C") == 0){ VarTable[i].val = C; }else if(strcmp(VarTable[i].name,"B") == 0){ VarTable[i].val = B; }else{ printf("Out of Var Range!\n");; exit(TFALSE); } } struct expr_Cstr{ char var[WORD_SIZ]; int ty; }expr[MY_BUF_SIZ]; int expr_n = 0; int expr_pos = -1; int getWord(char *str,char *wd){ int j = 0; int WDT = 0,WTX = 0; int pos = ++expr_pos; wd[0] = 0; for(;str[pos]!=0 && (str[pos] == ' ' || str[pos] == '\t');pos++); expr_pos = pos; for(;str[pos];pos++){ expr_pos = pos; switch(str[pos]){ case '\t': case ' ': case '^': case '/': case '*': case '(': case ')': case '+': case '-': if(WDT){expr_pos --;WTX = 1;break;} wd[j++] = str[pos];wd[j] = 0; return 1; default: WDT = 1; wd[j++] = str[pos];wd[j] = 0; } if(WTX)break; } if(WDT)return 2; return 0; } #define NUM_TYPE 0 #define STR_TYPE 1 #define OPR_TYPE 2 int getWordType(char *wd){ printf("wd=%s\n",wd); switch(wd[0]){ case '^': case '/': case '*': case '(': case ')': case '+': case '-': return OPR_TYPE; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return NUM_TYPE; default: return STR_TYPE; } return STR_TYPE; } void expParse(char *str){ int t,top=0; char wd[WORD_SIZ]; char stack[MY_BUF_SIZ]; t=0; while(getWord(str,wd)){ switch(getWordType(wd)){ case STR_TYPE: //VariableName expr[t].ty = STR_TYPE; strcpy(expr[t++].var,wd); break; case NUM_TYPE: expr[t].ty = NUM_TYPE; strcpy(expr[t++].var,wd); break; case OPR_TYPE: expr[t].ty = OPR_TYPE; if(strcmp(wd,"(") == 0){ top++; stack[top]=wd[0]; }else if(strcmp(wd,")") == 0){ while(top!=0 && stack[top]!='('){ expr[t].ty = OPR_TYPE; sprintf(expr[t++].var,"%c",stack[top]); top--; } top--; }else if (strcmp(wd,"+") == 0 || strcmp(wd,"-") == 0){ while(top!=0&&stack[top]!='(') { expr[t].ty = OPR_TYPE; sprintf(expr[t++].var,"%c",stack[top]); top--; } top++; stack[top]=wd[0]; }else if (strcmp(wd,"*") == 0 || strcmp(wd,"/") == 0){ while(top!=0 && (stack[top]=='*'||stack[top]=='/')) { expr[t].ty = OPR_TYPE; sprintf(expr[t++].var,"%c",stack[top]); top--; } top++; stack[top]=wd[0]; }else if(strcmp(wd,"^") == 0) { top++; stack[top]=wd[0]; } break; } } while(top!=0) { expr[t].ty = OPR_TYPE; sprintf(expr[t++].var,"%c",stack[top]); top--; } expr_n = t; printf("expression = ["); for(t = 0;t<expr_n;t++)printf("%s",expr[t].var); printf("]\n"); } //expression over double getNumValue(int t){ return (double)atof(expr[t].var); } double getExpValue(){ int t,top=0; double val_stk[64]; int is_val = -1; t=0; top=-1; for(t = 0;t<expr_n;t++){ switch(expr[t].ty){ case NUM_TYPE: val_stk[++top]=getNumValue(t); break; case OPR_TYPE: switch(expr[t].var[0]){ case '^': val_stk[top-1]=pow(val_stk[top-1],val_stk[top]); break; case '+': val_stk[top-1]=val_stk[top-1]+val_stk[top]; break; case '-': val_stk[top-1]=val_stk[top-1]-val_stk[top]; break; case '*': val_stk[top-1]=val_stk[top-1]*val_stk[top]; break; case '/': if(val_stk[top]!=0){ val_stk[top-1]=val_stk[top-1]/val_stk[top]; }else { printf("ERROR!!! Divide by Zero.\n"); exit(0); } break; default: printf("ERROR!!! unknown operator <%s>.\n",expr[t].var); exit(0); } top--; break; case STR_TYPE: if((is_val = isTheVar(expr[t].var))>=0){ val_stk[++top] = getVarValue(is_val); }else{ if(expr[t].var[0]<'0' || expr[t].var[0] >'9'/*expr[t].var[0]>'F'*/){ printf("Bad Var <%s>\n",expr[t].var); exit(TFALSE); } val_stk[++top] = atof(expr[t].var); } //printf("This version does not process [STR_TYPE]\n"); break; default: printf("ERROR!!! unknown var TYPE <%d>.\n",expr[t].ty); exit(0); } } printf("The Result is val_stk[%d]=%g\n",top,val_stk[top]); return val_stk[top]; } //getExpValue Over int main(int argc,char *argv[]){ if(argc<2){ printf("Usage: %s expression\n",argv[0]); exit(0); } //expression Begin expParse(argv[1]); //getExpValue Begin printf("we got value = %g\n",getExpValue()); exit(0); }
⑷ C語言如何實現判斷用戶輸入的算式結果正確
將用戶輸入的算式存在字元串中,然後將字元串中的字元轉換成對應的數字和符號,自己算一遍。如果對,則告訴用戶對,如果錯,則告訴用戶錯。
⑸ c語言中如何判斷計算結果精確到小數點後8位
int multiply(int i)
{
if (i ==1 || i == 0) return 1;
else return (i*multiply(i-1));
}
int _tmain(int argc, _TCHAR* argv[])
{
int i=1,j=1;
double x;
scanf("%lf",&x);
double result=1;
while (1)
{
j = j*(-1);
int sum = multiply(i);
double k;
k=pow(x,2*i)/sum;
result =result+j*pow(x,2*i)/(double)sum;
if (k<=0.00000001)
{printf("result = %.8f ; i = %d",result, i);
break;}
i++;
}
system("pause");
return 0;
}
⑹ 計算機c語言答案是怎麼算出來的
計算過程如下:
m=f(f(f(1)));
先計算最內層的f(1),此時返回2作為中間的f調用參數,變為
m=f(f(2));
再計算內層的f(2),此時返回4作為外層的f調用參數,變為
m=f(4);
此時返回8,故m是8。
在手機上用易歷知食軟體里的微C程序設計來運行此程序,檢驗一下結果,手機上的代碼如下:
⑺ C語言程序中,要檢測一個數據是否在變化著,應該怎麼實現
方法很多種:1)單步調試跟蹤變數值。
2)如上所說,用一個暫存變數保存它的值,比較。
3)在想查看它的值的地方printf();
c語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言具有高效、靈活、功能豐富、表達力強和較高的可移植性等特點,在程序設計中備受青睞。C語言編譯器普遍存在於各種不同的操作系統中,例如Microsoft Windows、macOS、Linux、Unix等。C語言的設計影響了眾多後來的編程語言,例如C++、Objective-C、Java、C#等。
C語言是一門面向過程的計算機編程語言,與C++、Java等面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言描述問題比匯編語言迅速,工作量小、可讀性好,易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%~20%。
⑻ c語言計算檢驗和。。。。。。。。
第一段是將高nleft/2位的數字累加第二段式說 如果nleft=1 sum等於 w的高位第三段 將sum的高十六位移到地十六位 並與原sum的低16位相加然後再把得到的這個數取反 至於這句話sum+=(sum>>16); 我也沒太看懂sum已經剩下低16位了再右移不久是0了嗎 加0有什麼意義呢?這大概是一個校驗碼的生成方法你對照這個方法看代碼應該就很容易理解了我現在看代碼也就是看看代碼再干什麼