Ⅰ 利用c語言設計簡單的小學生算術自測系統,求大神編寫程序
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUMBER 10/*定義數組項目的個數為一個符號常量*/
int Num1[10]= {0},Num2[10]= {0},Pos1=0,Pos2=0;
/*定義兩個數組來保存已經出現的情況*/
int main()
{
int putquestion();/*聲明出題函數*/
int questionnum=10;/*聲明變數*/
int i=1;
printf("Please input number of question:");
scanf("%d",&questionnum);
int answer[NUMBER];/*聲明一個數組,用於儲存學生的答案*/
int rightanswer[NUMBER];/*聲明一個數組,用於儲存正確答案*/
for(i=1; i<=questionnum; i++)
{
rightanswer[i-1]=putquestion();
scanf("%d",&answer[i-1]);
}
for(i=1; i<=NUMBER; i++)
printf("\n%d%5d",answer[i-1],rightanswer[i-1]);
}
bool exist(int goal,int *Num)
{/*檢查數字goal是否已經出現在Num數組裡面*/
int i;
for(i=0; i<Pos1; i++)
if(goal==Num[i])
return true;
return false;
}
int putquestion()/*此函數用於出題*/
{
int randValue;
int num1;
int num2;
int correctanswer;
srand((int)time(NULL));
randValue=1+rand()%4;
num1=1+rand()%99;
num2=1+rand()%99;
switch(randValue)
{
case 1:/*加法作業*/
while(num1+num2>=100||exist(num1,Num1)&&exist(num2,Num2))
{/*當滿足該條件(滿足題目要求且兩個數同時出現過)時繼續循環*/
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d+%d=",num1,num2);
correctanswer=num1+num2;
break;
case 2:/*減法作業*/
while(num1-num2<0||exist(num1,Num1)&&exist(num2,Num2))
{
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d-%d=",num1,num2);
correctanswer=num1-num2;
break;
case 3:/*乘法作業*/
while(num1*num2>=100||exist(num1,Num1)&&exist(num2,Num2))
{
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d*%d=",num1,num2);
correctanswer=num1*num2;
break;
case 4:/*除法作業*/
while(num1%num2!=0||exist(num1,Num1)&&exist(num2,Num2))
{
num1=1+rand()%99;
num2=1+rand()%99;
}
Num1[Pos1++]=num1;
Num2[Pos2++]=num2;
printf("\n%d/%d=",num1,num2);
correctanswer=num1/num2;
break;
}
return(correctanswer);
}
Ⅱ c語言程序設計(1) 小學生計算機輔助教學系統
right_prompt()
{
intx;
x=rand()%4+1;
switch(x){
case1:
printf("VeryGood! ");
break;
case2:
printf("Excellent! ");
break;
case3:
printf("Nicework! ");
break;
case4:
printf("Keepupthegoodwork! ");
break
}
}
wrong_prompt()
{
intx;
x=rand()%4+1;
switch(x){
case1:
printf("No.Pleasetryagain. ");
break;
case2:
printf("Wrong.Tryoncemore. ");
break;
case3:
printf("Don』tgiveup! ");
break;
case4:
printf("Notcorrect.Keeptrying. ");
break;
}
}
Ⅲ 小學編程題目c語言摘紅蘋果
程序設計思路:
一、小朋友和蘋果都具有多樣屬性(比如高度、編號、狀態等,還可以擴展出姓名,重量等)。所以小朋友和蘋果要定義成結構體。
二、人和蘋果數量都是手動輸入,因此數組大小不確定,要使用動態數組(不使用動態,就得得限制用戶輸入的大小)。
三、題目要求確保摘到的總數最多,從最矮的小朋友開始摘,因此小朋友的數組要進行排序。
四、遞歸函數實現摘蘋果邏輯,每人在自己夠到的范圍中隨機摘兩個(不夠就拿1個)。(遞歸函數每次發現一個可摘取的蘋果,有50%概率看中,都沒看中,默認摘取最後一個看中的蘋果)。
下面是代碼(控制台刷新函數中cls僅限window系統運行,其它操作系統,刪除或修改):
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#define AFR 7//蘋果圖像的行數
#define AFC 6//蘋果圖像的行數
#define CFR 5//小朋友圖像的行數
#define CFC 6//小朋友圖像的行數
typedef struct apple//表示蘋果數據的結構體
{
int aid;//蘋果編號
int height;//蘋果的高度
int status;//0:表示未被摘取。1:表示已被摘取
char aframe[AFR][AFC];//表示蘋果的圖像
}APPE;
typedef struct childern//表示小孩子的編號
{
int cid;//小孩子的編號
int height;//小孩子的身高
int n;//小孩摘取的蘋果數量
char cframe[CFR][CFC];//表示小朋友的圖像
APPE **appes;//小孩摘取的蘋果結構指針數組
}CHN;
int n,m;//蘋果和小朋友的個數,設為全局變數
APPE *setApps();//設置蘋果。成功返回結構數組,失敗返回NULL
CHN *setChns();//設置小盆友。同上。
int orderChnByHeight(CHN *chns);//對小朋友數組按照身高升序排列
int getApple(APPE *appes,CHN *chns,char (*strInfo)[100]);//遞歸,模擬小朋友依次選蘋果。異常返回-1
int showFrame(APPE *appes,CHN *chns,char (*strInfo)[100]);
int main()
{
int i;
char (*strInfo)[100]=NULL;//用於顯示操作流水
APPE *appes=NULL;
CHN *chns=NULL;
appes=setApps();
chns=setChns();
if(orderChnByHeight(chns)==-1)return 1;
srand(time(NULL));
strInfo=(char (*)[100])malloc(sizeof(char *)*m*100);
for(i=0;i<m;i++)strInfo[i][0]=0;
if(!strInfo) return 1;
showFrame(appes,chns,strInfo);
return 0;
}
int showFrame(APPE *appes,CHN *chns,char (*strInfo)[100])
{
static int k=1;
int i,j;
system("cls");
printf(" =============每組圖像靠上的數值為高度,靠下的數值為編號============ ");
printf(" =============為確保能拿到最多的蘋果,小朋友們按升序排列============ ");
for(i=0;i<AFR;printf(" "),i++)
for(j=0;j<n;j++)
printf("%s ",appes[j].aframe[i]);
printf(" ");
for(i=0;i<CFR;printf(" "),i++)
for(j=0;j<m;j++)
printf("%s ",chns[j].cframe[i]);
printf(" ==================================================================== ");
printf("操作流水: ");
for(i=0;i<m;i++)
printf("%s ",strInfo[i]);
fflush(stdin);
printf("按下任意鍵進行下一步。。。。。。 ");
getchar();
if(getApple(appes,chns,strInfo)==-1)return -1;
if(k)showFrame(appes,chns,strInfo),k--;
return 1;
}
int getApple(APPE *appes,CHN *chns,char (*strInfo)[100])
{
static int i=0,aflag,cflag;
int j,indexSave;
if(appes==NULL||chns==NULL) return -1;
if(chns[i].n==2)i++;//當前小朋友拿夠2個,換下一個小朋友
if(i==m)return 1;//所有人均拿過,結束遞歸
aflag=0;
for(j=0;j<n;j++)
if(appes[j].status==0) {aflag=1;break;}
if(aflag==0) return 1;//所有蘋果均拿完,結束遞歸
indexSave=-1;
cflag=0;
for(j=0;j<n;j++)
{
if(appes[j].status==0 && appes[j].height<=chns[i].height)
{
cflag=1;
indexSave=j;
if(rand()%2)//每次發現,有50%概率拿取,如所有可拿蘋果都沒選中,選最後發現的目標
break;
}
}
if(cflag)//小朋友拿起一個蘋果的過程
{
appes[indexSave].status=1;
//改變蘋果初始圖像
sprintf(appes[indexSave].aframe[6]," ");
chns[i].appes[chns[i].n]=&appes[indexSave];
chns[i].n++;
if(chns[i].n==1)
{
//改變小朋友初始圖像
sprintf(chns[i].cframe[0]," %c%c/ ",3,1);
sprintf(strInfo[i],"編號%d的小朋友拿取了1個蘋果(編號%d) ",chns[i].cid,chns[i].appes[0]->aid);
}
if(chns[i].n==2)
{
//改變小朋友初始圖像
sprintf(chns[i].cframe[0]," %c%c%c ",3,1,3);
sprintf(strInfo[i],"編號%d的小朋友拿取了2個蘋果(編號%d和編號%d) ",chns[i].cid,chns[i].appes[0]->aid,chns[i].appes[1]->aid);
}
}
if(cflag==0 && chns[i].n==0) sprintf(strInfo[i],"編號%d的小朋友沒有能拿到的蘋果,非常沮喪! ",chns[i].cid),i++;
if(cflag==0 && chns[i].n==1) i++;
return getApple(appes,chns,strInfo);
}
int orderChnByHeight(CHN *chns)
{
CHN chnTemp;
int i,j;
chnTemp.appes=(APPE **)malloc(sizeof(APPE*)*2);
if(!chnTemp.appes) return -1;
else
{
chnTemp.appes[0]=chnTemp.appes[1]=NULL;
if(chns)
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(chns[i].height>chns[j].height)
chnTemp=chns[i],chns[i]=chns[j],chns[j]=chnTemp;
}
free(chnTemp.appes);
return 1;
}
CHN *setChns()
{
int i;
CHN *chns=NULL;
printf("請輸入小朋友的個數:");
scanf("%d",&m);
chns=(CHN *)malloc(sizeof(CHN)*m);
if(!chns) return NULL;
printf("請輸入%d個小朋友身高(不超過3位整數): ",m);
for(i=0;i<m;i++)
{
chns[i].cid=i+1;
scanf("%d",&chns[i].height);
chns[i].height=chns[i].height%1000;//超出3位截取
chns[i].n=0;
chns[i].appes=(APPE **)malloc(sizeof(APPE*)*2);
if(!chns[i].appes) return NULL;
chns[i].appes[0]=chns[i].appes[1]=NULL;
//設置小朋友初始圖像
sprintf(chns[i].cframe[0]," \%c/ ",1);
sprintf(chns[i].cframe[1]," / \ ");
sprintf(chns[i].cframe[2],"-----");
sprintf(chns[i].cframe[3],"高%3d",chns[i].height);
sprintf(chns[i].cframe[4],"ID%3d",chns[i].cid);
}
return chns;
}
APPE *setApps()
{
int i;
APPE *appes=NULL;
printf("請輸入蘋果的個數:");
scanf("%d",&n);
appes=(APPE *)malloc(sizeof(APPE)*n);
if(!appes) return NULL;
printf("請輸入%d個蘋果的高度(不超過3位整數): ",n);
for(i=0;i<n;i++)
{
appes[i].aid=i+1;
scanf("%d",&appes[i].height);
appes[i].height=appes[i].height%1000;//超出3位截取
appes[i].status=0;
//設置蘋果初始圖像
sprintf(appes[i].aframe[0],"高%3d",appes[i].height);
sprintf(appes[i].aframe[1],"ID%3d",appes[i].aid);
sprintf(appes[i].aframe[2],"-----");
sprintf(appes[i].aframe[3]," %c ",'|');
sprintf(appes[i].aframe[4]," %c ",'|');
sprintf(appes[i].aframe[5]," %c ",'|');
sprintf(appes[i].aframe[6]," %c ",3);
}
return appes;
}
Ⅳ C語言課程設計 小學生四則運算練習系統 源程序
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxsize 50
void trans(char str[],char exp[])/*將算術表達式str轉換成後綴表達式exp*/
{
struct
{ char data[maxsize]; /*存放運算符*/
int top; /*棧指針*/
}opr; /*定義運算符棧*/
char ch;
int i=0,t=0; /*t作為exp的下標,i作為str的下標*/
opr.top=-1; /*初始化設定top的值為負一*/
ch=str[i];i++; /*逐個讀取字元串中的字元*/
while (ch!='\0') /*str表達式未掃描完時循環*/
{ switch(ch) /*判定*/
{
case '(':
opr.top++;opr.data[opr.top]=ch; /*判定為'('號,則將其入棧opr*/
break;
case ')':
while (opr.data[opr.top]!='(') /*判定為')'號*/
{ exp[t]=opr.data[opr.top]; /*將棧opr中'('以後的字元依次刪除並存入數組exp中*/
opr.top--;
t++;
}
opr.top--; /*將左括弧刪除*/
break;
case '+': /*判定為加號或減號*/
case '-':
while (opr.top!=-1 &&opr.data[opr.top]!='(')
{ exp[t]=opr.data[opr.top]; /*將當前棧opr中(以前的所有字元依次刪除並存入數組exp中*/
opr.top--;
t++;
}
opr.top++;opr.data[opr.top]=ch; /*將ch存入棧opr中*/
break;
case '*':
case '/':
while (opr.data[opr.top]=='*'||opr.data[opr.top]=='/'||opr.data[opr.top]=='^')
{ exp[t]=opr.data[opr.top]; /*將當前棧opr中連續的'*'或'/'或'^'依次刪除並存入數組exp中*/
opr.top--;
t++;
}
opr.top++;opr.data[opr.top]=ch; /*將ch存入棧opr中*/
break;
case '^': /*判定為乘方號*/
while (opr.data[opr.top]=='^')
{ exp[t]=opr.data[opr.top]; /*將當前棧opr中連續的'^'依次刪除並存入數組exp中*/
opr.top--;
t++;
}
opr.top++;opr.data[opr.top]=ch; /*將ch存入棧opr中*/
break;
case ' ': break; /*過濾掉空格*/
default:
while(ch>='0'&& ch<='9'||ch=='.') /*判定為數字*/
{ exp[t]=ch;t++; /*將後續數字依次存入數組中*/
ch=str[i];i++;
}
i--;
exp[t]='#';t++; /*用#標示一個數值串結束*/
}
ch=str[i];i++;
}
while (opr.top!=-1) /*此時str掃描完畢,棧不空時循環*/
{ exp[t]=opr.data[opr.top];
t++;opr.top--;
}
exp[t]='\0'; /*給exp表達式添加結束標示*/
}
float compvalue(char exp[]) /*計算後綴表達式的值*/
{
struct
{ float data[maxsize]; /*存放數值*/
int top; /*棧指針*/
} st; /*定義數值棧*/
float d,d2;double po;
char ch;
int t=0,flag=1,i,count; /*t作為exp的下標*/
st.top=-1;
ch=exp[t];t++;
while (ch!='\0') /*exp字元串為掃描完時循環*/
{ switch(ch)
{
case '+':st.data[st.top-1]=st.data[st.top-1]+st.data[st.top]; /*執行兩次退棧,並將計算結果入棧*/
st.top--;break;
case '-':st.data[st.top-1]=st.data[st.top-1]-st.data[st.top];
st.top--;break;
case '*':st.data[st.top-1]=st.data[st.top-1]*st.data[st.top];
st.top--;break;
case '/':
if(st.data[st.top]!=0)
st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
else
{ printf("\n除零錯誤!\n");
exit(0); /*除數為零,異常退出*/
}
st.top--;break;
case '^':
po=pow(st.data[st.top-1],st.data[st.top]); st.data[st.top-1]=(float)po;/*調用pow子函數進行乘方運算*/
st.top--;break;
default:
d=0; flag=1; d2=0; /*將數字字元轉換成對應的數值存放到d中*/
while(ch>='0'&&ch<='9'&&flag) /*判定為數字字元*/
{ d=10*d+ch-'0';
ch=exp[t];t++;
if(ch=='.')
flag=0;
}
if(flag==0)
{ ch=exp[t];t++;count=0;
while(ch>='0'&&ch<='9') /*判定為數字字元*/
{d2=10*d2+ch-'0';
ch=exp[t];t++;count++;
}
for(i=1;i<=count;i++)
d2=0.1*d2;
}
d+=d2;
st.top++;
st.data[st.top]=d;
}
ch=exp[t];t++;
}
return st.data[st.top];
}
int main()
{
char str[maxsize],exp[maxsize]; /*str存儲原算術表達式,exp存儲對應的後綴表達式*/
printf("the arithmetic expression is:\n");
gets(str);
trans(str,exp);
printf("the postfix expression is:%s\n",exp);
printf("the result is %g\n",compvalue(exp));
}
Ⅳ 請用c語言編寫下列程序 6、小學數學輔助教學系統 設計內容:利用該系統可以鍛煉小學生的數學運算能
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intcal(int);
voidgen(int,int&,int&,int&);
intmain(void)
{
intm;//使用數字位數,當m=4,程序退出
srand((int)time(0));
printf(" 請選擇下面的一個項目: ");
printf(" 1...........................一位數 ");
printf(" 2...........................兩位數 ");
printf(" 3...........................三位數 ");
printf(" 4...........................退出 ");
do{
scanf("%d",&m);
switch(m){
case1:
case2:
case3:
cal(m);break;
case4:
break;
default:
printf("輸入錯誤,請重新輸入:");
}
}while(m!=4);
return0;
}
intcal(intm){
//m:數字位數
intnum1,num2,smb;
inti,k;
intsum,res;
intu_sum,u_res;
intwrite;
boolT;
intscore;
intfen[]={10,8,6};
//num1:第一操作數
//num2:第二操作數
//smb:操作符,有:+,-,*,/,%五種(1-5)
//sum表示加法操作的和,減法操作的差,乘法操作的積以及除法操作的商。
//res表示除法操作的余數,以及取余操作的余數。
//write:正確答案數目
//T:答對題
//score:總分
write=0;
score=0;
for(i=0;i<10;i++){
gen(m,num1,num2,smb);//生成操作數和相應的操作符
switch(smb){//生成正確答案
case1://加法
sum=num1+num2;break;
case2://減法
sum=num1-num2;break;
case3://乘法
sum=num1*num2;break;
case4://除法
sum=num1/num2;
res=num1%num2;
break;
case5://取余
res=num1%num2;
}
for(k=0;k<3;k++){
switch(smb){
case1://加法
printf("%d+%d=",num1,num2);
scanf("%d",&u_sum);
if(sum==u_sum){
write=write+1;
T=true;
}else{
T=false;
}
break;
case2://減法
printf("%d-%d=",num1,num2);
scanf("%d",&u_sum);
if(sum==u_sum){
write=write+1;
T=true;
}else{
T=false;
}
break;
case3://乘法
printf("%d*%d=",num1,num2);
scanf("%d",&u_sum);
if(sum==u_sum){
write=write+1;
T=true;
}else{
T=false;
}
break;
case4://除法
printf("%d/%d=商,余數",num1,num2);
scanf("%d,%d",&u_sum,&u_res);
if(sum==u_sum&&res==u_res){
write=write+1;
T=true;
}else{
T=false;
}
break;
case5://取余
printf("%d%%%d=",num1,num2);
scanf("%d",&u_res);
if(res==u_res){
write=write+1;
T=true;
}else{
T=false;
}
break;
default:
;
}
if(T){
score=score+fen[k];
switch(k){
case0:
printf("完全正確,你非常聰明!加%2d分 ",fen[k]);break;
case1:
printf("答對了,你很棒!加%2d分 ",fen[k]);break;
case2:
printf("答對了,祝賀你!加%2d分 ",fen[k]);break;
}
break;
}elseif(k==2){
printf("非常遺憾你又答錯了,請繼續做下一題。本題的正確答案為");
switch(smb){
case1:
case2:
case3:
printf("%d ",sum);break;
case4:
printf("%d,%d ",sum,res);break;
case5:
printf("%d ",res);break;
}
}else{
printf("你答錯了,繼續努力! ");
}
}
}
printf("你本次練習的總分為%d ",score);
return0;
}
voidgen(intm,int&num1,int&num2,int&smb){
intmin[]={0,10,100};
intmax[]={9,99,999};
inttemp;
m=m-1;
smb=rand()%(m+3)+1;
num1=rand()%(max[m]-min[m]+1)+min[m];
num2=rand()%(max[m]-min[m]+1)+min[m];
if(num1<num2&&smb==2){
temp=num1;
num1=num2;
num2=temp;
}
while(num2==0&&smb>3){
num2=rand()%(max[m]-min[m]+1)+min[m];
}
}