C语言选择题,数组c 输出数组问题,原题如图所示。

求前辈进来指导修改程序。。。。单项选择题标准化考试系统【c语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:534,875贴子:
求前辈进来指导修改程序。。。。单项选择题标准化考试系统收藏
下面是源代码,想通过小改实现以下两个功能:1、试题保存在文件中2、每道题有三次答题机会,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案。第一次输入正确答案得5分,第二次输入正确答案得3分,第三次输入正确答案得1分,否则不得分恳请前辈们指点指点
#include&iostream&#include&vector&//#include&ctype.h&#include&fstream&#include&stdlib.h&//#include&string&#defineTRUE 1#defineERROR 0#defineMAX
30typedefint Stypedefstruct{
charoption1[30],option2[30],option3[30],option4[30],subject[150];}TestNTestNodeTestquestions[MAX];StatusSaveNode(int N){
if((fp=fopen("cheng","wb"))==NULL)return ERROR;
for(i=0;i&N;i++)
fwrite(&Testquestions[i],sizeof(TestNode),1,fp);
fclose(fp);
return TRUE;}StatusReadNode(int &N) //从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERROR{
if((fp=fopen("cheng","rb"))==NULL)return ERROR;
while(!feof(fp))// 用feof检测文件是否结束,如果结束,返回正确
fread(&Testquestions[i],sizeof(TestNode),1,fp);
return TRUE;}StatusInsertNode(int &N) //插入试题内容{
if(N&MAX) return ERROR;
cout&&"请输入所要插入题题目、题干和选项:"&&
cout&&"请输入题目:";
gets(Testquestions[N].subject);
cout&&"请输入选项A:";
gets(Testquestions[N].option1);
cout&&"请输入选项B:";
gets(Testquestions[N].option2);
cout&&"请输入选项C:";
gets(Testquestions[N].option3);
cout&&"请输入选项D:";
gets(Testquestions[N].option4);
cout&&"请输入答案:";
cin&&&Testquestions[N].getchar();
//N表示结构体数组长度,通过加&号使其值能返回
returnTRUE;}StatusDeleteNode(int n){
return TRUE;}voidprintNode(TestNode p,int n){
"&&p.subject&&"
"&&p.option1&&"
"&&p.option2&&"
"&&p.option3&&"
"&&p.option4&&"
Match(TestNode p,char m)//判断m是否为p题目的答案,若是返回TRUE,否则返回ERROR{
if(m==p.result) return TRUE;
else return ERROR;}voidanswer(int sum){inti,score=0,N
for(i=1;i&=i++)
Num=rand()%
printNode(Testquestions[Num],Num+1);
cout&&"请输入答案:";
cin&&&r;getchar();if(Match(Testquestions[Num],r))
cout&&"答案正确!"&&
else{cout&&
cout&&"答案错误!"&&}}
cout&&"你的总成绩为:"&&score&&}voidmain(){
char flag='N';
int N=0,i, sum,score=0,
/*cout("输入想建立的题目文件题目数:");
cin&&&N;getchar();
InputTitle(N);*/
ReadNode(N);
while(flag=='N'||flag=='n')
"&&"单项选择题标准化考试系统"&&
"&&"1 进行答题并判卷"&&
"&&"2 显示整张试卷内容"&&
"&&"3 插入试题"&&
"&&"4 保存到文件"&&
"&&"5 退出系统"&&
"&&"请选择:";
cin&&getchar();
switch(chose)
{case1:system("cls");
{cout&&"题库中没有试题,请添加后在进行答题!"&&}
cout&&"题库中共有"&&N&&"道试题,请输入答题个数:";
cin&&getchar();
{cout&&"输入错误,请重新操作!!"&&}
answer(sum);
case2:system("cls");
{cout&&"题库中没有试题,请添加后在进行此类操作!"&&}
for(i=1;i&=N;i++)
printNode(Testquestions[i-1],i);
case3:system("cls");InsertNode(N);
case4:system("cls");
if(SaveNode(N))cout&&"保存成功!"&&
else cout&&"保存失败!"&&
case5:cout&&"你将退出系统(Y or N)?";
cin&&&getchar();
if(flag=='Y'||flag=='y') exit(0);
system("cls");
default:cout&&"请输入正确选择!"&&}}}
@良化纲领_
这个试题是存在.exe文件中的么
不是可以存文件么
#include&iostream&#include&vector&//#include&ctype.h&#include&fstream&#include&stdlib.h&//#include&string&#define TRUE 1#define ERROR 0#define MAX
30typedef int Stypedef struct{char option1[30],option2[30],option3[30],option4[30],subject[150];}TestNTestNode Testquestions[MAX];Status SaveNode(int N) {FILE *if((fp=fopen("C:\\heqing.txt","wb"))==NULL) return ERROR;for(i=0;i&N;i++)fwrite(&Testquestions[i],sizeof(TestNode),1,fp);fclose(fp);return TRUE;}Status ReadNode(int &N)//从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERROR{FILE *int i=0;if((fp=fopen("C:\\heqiang.txt","rb"))==NULL) return ERROR;while(!feof(fp))// 用feof检测文件是否结束,如果结束,返回正确{fread(&Testquestions[i],sizeof(TestNode),1,fp);i++;}
N=i-1;return TRUE;}Status InsertNode(int &N) //插入试题内容{if(N&MAX) return ERROR;
cout&&"请输入所要插入题题目、题干和选项:"&&cout&&"请输入题目:";gets(Testquestions[N].subject);cout&&"请输入选项A:";gets(Testquestions[N].option1);cout&&"请输入选项B:";gets(Testquestions[N].option2);cout&&"请输入选项C:";gets(Testquestions[N].option3);cout&&"请输入选项D:";gets(Testquestions[N].option4);cout&&cout&&"请输入答案:";cin&&&Testquestions[N].getchar();N++;
//N表示结构体数组长度,通过加&号使其值能返回return TRUE;}Status DeleteNode(int n) {return TRUE;}void printNode(TestNode p,int n){cout&&n;cout&&"、"&&p.subject&&"
"&&cout&&"A.
"&&p.option1&&"
";cout&&"B.
"&&p.option2&&"
"&&cout&&"C.
"&&p.option3&&"
";cout&&"D.
"&&p.option4&&"
"&&}Status
Match(TestNode p,char m)//判断m是否为p题目的答案,若是返回TRUE,否则返回ERROR{if(m==p.result) return TRUE;else return ERROR;}void answer(int sum){int i,score=0,N for(i=1;i&=i++){Num= rand()%
printNode(Testquestions[Num],Num+1);
cout&&cout&&"请输入答案:";
cin&&&r;getchar();if( Match(Testquestions[Num],r)) {cout&&cout&&"答案正确!"&&score+=5;}else {cout&& cout&&"答案错误!"&&
cout&&"请再次输入答案:";
cin&&&r;getchar();if( Match(Testquestions[Num],r)) {cout&&cout&&"答案正确!"&&score+=3;}else {cout&& cout&&"答案错误!"&&
cout&&"请最后一次输入答案:";
cin&&&r;getchar();if( Match(Testquestions[Num],r)) {cout&&cout&&"答案正确!"&&score+=1;}else {cout&& cout&&"你在3次内未将该题答对,请继续下一题!"&&}}}cout&&"你的总成绩为:"&&score&&}void main()//
提示error C2601: 'main' : local function definitions are illegal{char
flag='N';int N=0,i, sum,score=0,/*cout("输入想建立的题目文件题目数:");cin&&&N;getchar();InputTitle(N);*/ReadNode(N);while(flag=='N'||flag=='n'){ cout&&"
"&&"单项选择题标准化考试系统"&&
cout&& cout&&"
"&&"1 进行答题并判卷"&& cout&&"
"&&"2 显示整张试卷内容"&& cout&&"
"&&"3 插入试题"&& cout&&"
"&&"4 保存到文件"&& cout&&"
"&&"5 退出系统"&& cout&&"
"&&"请选择:";cin&&getchar(); switch(chose)
{case 1:system("cls"); if(N==0) {cout&&"题库中没有试题,请添加后在进行答题!"&&}
cout&&"题库中共有"&&N&&"道试题,请输入答题个数:";
cin&&getchar();
{cout&&"输入错误,请重新操作!!"&&}
answer(sum);
case 2:system("cls");
if(N==0) {cout&&"题库中没有试题,请添加后在进行此类操作!"&&}for(i=1;i&=N;i++) {
printNode(Testquestions[i-1],i);
case 3:system("cls");InsertNode(N);
case 4:system("cls");if(SaveNode(N)) cout&&"保存成功!"&& else cout&&"保存失败!"&&
case 5:cout&&"你将退出系统(Y or N)?";
cin&&&getchar();
if(flag=='Y'||flag=='y') exit(0);
system("cls"); default:cout&&"请输入正确选择!"&&}}}//e:\高级语言程序设计\4\4.cpp(143) : fatal error C1004: unexpected end of file found
上面是我改过的,但是在调用主函数main()的时候和最后出现问题,在上面标出了,肿么回事啊
这代码复制到vc中真的很乱,alt+F8都没用。百度“local function definitions are illegal”可能main之前函数少一个右大括号“}”。于是将answer函数排好版,发现确实少了一个大括号,应该在cout&&"你的总成绩为:"&&score&&之前加一个“}”,程序就能运行了。看了一下你的answer函数,Num= rand()%有可能抽到同一题,可以先把题目序号打乱保存到一个数组中,发题时按打乱后的数组顺序出题,就不会出到同一题了。另外我觉得 if - else 嵌套可以改为循环判断答同一题次数,这样程序会比较清晰一些。附个打乱题目的函数( Fisher_Yates 洗牌算法 ):void ShuffleArray(char* arr, int len){if(len &= 0)
int i = len,srand( (unsigned)time(NULL) );
while ( --i ) {
j = rand() % (i+1);
temp = arr[i];
arr[i] = arr[j];
登录百度帐号推荐应用程序猿之---C语言细节30(数组和指针操作测试题,你能全答对吗??)
主要内容:数组和指针操作测试
int main()
int a[5] = {1,2,3,4,5};
/* 你能答对最后一条语句的输出吗?*/
int *ptr1 = (int *)(&a+1);
int *ptr2 = (int *)((int)a+1);
 printf("&a
= %d\n",(&a));
printf("(&a+1)
= %d\n",(&a+1));
= %d\n",a);
printf("(a+1)
= %d\n",(a+1));
printf("(int)a+1 = %d\n",(int)a+1);
 printf("ptr1 = %d,*ptr2 = %d",ptr1[-1],*ptr2); // 输出是多少?
printf("(&a+1)
= %d\n",(&a+1));//加1是加了整个数组的大小
printf("(int)a+1 = %d\n",(int)a+1);//这里加1是当成整数加1欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 4581 人关注过本帖
标题:c语言结构体数组的输入输出问题
等 级:新手上路
结帖率:100%
&&已结贴√
&&问题点数:20&&回复次数:5&&&
c语言结构体数组的输入输出问题
for(i=0;i&N;i++)
&&printf(&\n&&请输入教师%d信息:\n&,i+1);
&&printf(&\t教师号:&);
&&scanf(&%d&,&tea[i].num);
&&printf(&\t姓名:&);
&&scanf(&%s&,tea[i].name);
&&printf(&\t性别:&);
&&scanf(&%s&,tea[i].sex);
&&printf(&\t单位名称:&);
&&scanf(&%s&,tea[i].danwei);
&&printf(&\t家庭住址:&);
&&scanf(&%s&,tea[i].zhuzhi);
&&printf(&\t联系电话:&);
&&scanf(&%d&,&tea[i].phone);
&&printf(&\t基本工资:&);
&&scanf(&%d&,&tea[i].jbgz);
&&&&&&我输入&&&&&&&&&&&2 aaa w ffff gggg 65
&&&&&在输出结果时显示为2 aaawffff wffff gggg 65&&& 求高人指点...
搜索更多相关主题的帖子:
等 级:新手上路
补充 输出函数为:
for(i=0;i&N;i++)
&&&&&&printf(&\n教师号:%9d\t姓名:%9s\n性别:%9s\t\t单位名称:%9s\n家庭住址:%9s\t联系电话:%9d\n基本工资:%9d\t津贴:%9d\n生活补贴:%9d\t应发工资:%9d\n电话费:%9d\t水电费:%9d\n房租:%9d\t\t所得税:%9d\n卫生费:%9d\t公积金:%9d\n合计扣款:%9d\t实发工资:%9d\n\n&,tea[i].num,tea[i].name,tea[i].sex,tea[i].danwei,tea[i].zhuzhi,tea[i].phone,tea[i].jbgz,tea[i].jt,tea[i].shbt,tea[i].yfgz,tea[i].dhf,tea[i].sdf,tea[i].fz,tea[i].sds,tea[i].wsf,tea[i].gjj,tea[i].hjkk,tea[i].sfgz);
等 级:业余侠客
帖 子:215
专家分:267
个人认为是‘\t’这个转义字符在起作用
等 级:新手上路
哥们儿,可不可以讲的再清楚一点。。。
等 级:业余侠客
帖 子:93
专家分:275
是性别和单位名称输出了两遍吗?你最好是有截图,这样会认人误导,
或者是你将他们分别输出试试,好知道是不是输出函数的问题?还是程序中有其他问题
不要认为CPU运算速度快就 把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做 ,因为CPU是为用户服务的,不是为我们程序员服务的!
等 级:职业侠客
帖 子:215
专家分:367
没有完成的程序,不好分析错误原因
版权所有,并保留所有权利。
Powered by , Processed in 0.047480 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 11315 人关注过本帖
标题:C语言:数组输出问题,按照每行4个数据输出数组a,下面程序应该怎么填写啊, ...
等 级:论坛游民
帖 子:92
专家分:70
结帖率:80%
&&已结贴√
&&问题点数:20&&回复次数:9&&&
C语言:数组输出问题,按照每行4个数据输出数组a,下面程序应该怎么填写啊,求高手解答。谢谢!!
#include&stdio.h&
#include&stdlib.h&
#define N 20
int main()
&&& int a[N],i;
&&& for(i=0;i&N;i++)
&&&&&& a[i]=i+1;
&&& for(i=0;i&N;i++)
&&&&&&&&&if(这里是空格,需要大家填写适当的语句,使得数组a按照每行4个数的形式输出)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&& printf(&%3d&,a[i]);
&&& printf(&\n&);
&&& system(&pause&);
&&& return 0;
想了很久,都不知道空格处该填什么??求高手解答!谢谢!!
搜索更多相关主题的帖子:
来 自:何方
等 级:版主
威 望:158
帖 子:6715
专家分:41591
&&for(i=0;i&N;i++)
&&&&&&&&& if(i % 4 == 0) printf(&\n&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& printf(&%3d&,a[i]);
这样不知道符合你要求不,只是后面多了个分号了。
如果一定要在()里面填东西, 可以变态一点
&&for(i=0;i&N;i++)
&&&&&&&&& if(i % 4 == 0) printf(&\n&);// )&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& printf(&%3d&,a[i]);
也就是填空的位置写上:i % 4 == 0) printf(&\n&);//
我的博客:
http://blog.sina. com. cn/yuccn
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
if((i +1)% 4 == 0) printf(&\n&);
等 级:蜘蛛侠
帖 子:567
专家分:1313
&&得分:10&
#include&stdio.h&
#include&stdlib.h&
#define N 20
int main()
&&& int a[N],i;
&&& for(i=0;i&N;i++)
&&&&&& a[i]=i+1;
&&& for(i=0;i&N;i++)
&&&&&&&&&if(i%4==0) printf(&\n&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&& printf(&%3d&,a[i]);
&&& printf(&\n&);
&&& system(&pause&);
&&& return 0;
[ 本帖最后由 小小战士 于
13:19 编辑 ]
小小战士,战士中的战斗机!
等 级:论坛游民
帖 子:92
专家分:70
以下是引用yuccn在 12:59:41的发言:
&&for(i=0;i&N;i++)
&&&&&&&&& if(i % 4 == 0) printf(&\n&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& printf(&%3d&,a);
这样不知道符合你要求不,只是后面多了个分号了。
如果一定要在()里面填东西, 可以变态一点
&&for(i=0;i&N;i++)
&&&&&&&&& if(i % 4 == 0) printf(&\n&);// )&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& printf(&%3d&,a);
也就是填空的位置写上:i % 4 == 0) printf(&\n&);//
你这里 if(i % 4 == 0) printf(&\n&);// )&&&&&&后面的//)是什么意思啊??没看懂!能解释下吗?谢谢!!
等 级:论坛游民
帖 子:92
专家分:70
以下是引用小小战士在 13:16:39的发言:
#include&stdio.h&
#include&stdlib.h&
#define N 20
int main()
&&& int a[N],i;
&&& for(i=0;i&N;i++)
&&&&&& a=i+1;
&&& for(i=0;i&N;i++)
&&&&&&&&&if(i%4==0) printf(&\n&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&& printf(&%3d&,a);
&&& printf(&\n&);
&&& system(&pause&);
&&& return 0;
但是这里有个小问题,就是在输出数组的时候一个元素都没输出就开始换行,也就是打印的时候第一行就会是空行,是不是改成这样好一点:
&if(i&1&&i%4==0) printf(&\n&);这样的话就避免了数组输出时一开始就换行!
等 级:论坛游民
帖 子:92
专家分:70
以下是引用yuccn在 12:59:41的发言:
&&for(i=0;i&N;i++)
&&&&&&&&& if(i % 4 == 0) printf(&\n&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& printf(&%3d&,a);
这样不知道符合你要求不,只是后面多了个分号了。
如果一定要在()里面填东西, 可以变态一点
&&for(i=0;i&N;i++)
&&&&&&&&& if(i % 4 == 0) printf(&\n&);// )&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& printf(&%3d&,a);
也就是填空的位置写上:i % 4 == 0) printf(&\n&);//
但是这里有个小问题,就是在输出数组的时候一个元素都没输出就开始换行,也就是打印的时候第一行就会是空行,是不是改成这样好一点:
&if(i&1&&i%4==0) printf(&\n&);这样的话就避免了数组输出时一开始就换行!
等 级:新手上路
if((i +1)% 4 == 0) printf(&\n&);
i的初值为0,应该是这样吧
等 级:蜘蛛侠
帖 子:567
专家分:1313
回复 6楼 weishen2011
这样更好,同意
小小战士,战士中的战斗机!
等 级:蜘蛛侠
帖 子:567
专家分:1313
以下是引用游离的沼泽鱼在 23:24:01的发言:
if((i +1)% 4 == 0) printf(&\n&);
i的初值为0,应该是这样吧
这样就不对了吧,结果就成了:
12 13 14 15
16 17 18 19
小小战士,战士中的战斗机!
版权所有,并保留所有权利。
Powered by , Processed in 0.060380 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved

我要回帖

更多关于 java数组选择题 的文章

 

随机推荐