当前位置:首页 » 编程语言 » 小学c语言设计
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

小学c语言设计

发布时间: 2023-07-03 22:34:26

Ⅰ 利用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];
}
}