一个c语言其实很简单 pdf的C语言问题

一个简单的C语言问题
一个简单的C语言问题
#include&"stdio.h"int&main(void){&int&i=3;&&&&printf("++i+(++i)+(++i)=&%d\n",++i+(++i)+(++i));&&&&&}&答案16,求解析。
运行结果应该是++i+(++i)+(++i)=15,左边输出的仅仅是字符,没有计算,右边的话++i得意思就是i加1,所以右边是4+5+6=15
我运行了答案不是16,
tc运行是15,vc6运行是16
我试验了下,发现不同的编译器不一样的,你的应该是vc6把,vc6是这样的,因为++是一元运算符,而加法是二元运算符,优先级是++高,但是vc6是却规定,++只优先了一次,比如本题,运算顺序是这样的:第一步:++i,第二部,再是++i,此时i=5,第三步 ,加法,即5+5=10,第四步,++i=6,最后加法,答案16
这个就是你的16的由来,看看吧,不同编译器的区别,所以这题题目不用很在意,只不过我还是觉得18比较好,因为从理论上优先级分析,应该先是计算所有的++再计算加法,
谢谢你,你的答案很具体。
其实我也是那样想的,不过这是朋友问我的,呵呵,再次谢谢你的回答。
麻烦采纳下好吗?急需分
以前这个问题倒是没怎么注意,也谢谢你这个问题
的感言:我有采纳啊,只不过网速有点慢,我再采纳一下哈。 相关知识
其他回答 (4)
答案是18,编译器检测过了
++i+(++i)+(++i))相当于
i+=1;i+=1;i+=1;i+i+i
i初始值为3
执行三个加一后,i值为6,故i+i+i=18
注意++i是在该语句执行之前i值加一,有多少个++i,i就执行多少遍加一
VS2005运行如图
此程序结果根据编译器平台不同而不同
Poss的是正解。
有的编译器首先计算完所有的前置++符号,所以结果是18.
有的编译器从左计算到右,所以结果是4+5+6=15.
还有的从右计算到左,不过恰好这题结果也是15.
至于你说的答案16...不好意思...我还真不知道是怎么的。
++i&& i+1 之后的数&计算
i++&& i当前值计算
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号c语言简单问题,输入一行英文,提取其中的单词。总是有个错误找不到,麻烦高手_百度知道
c语言简单问题,输入一行英文,提取其中的单词。总是有个错误找不到,麻烦高手
#include &stdio.h&
//输入一行英文,提取其中所有的单词。#include &string.h&int isKeyWord(char c){ if(c&='a'&&c&='z'||c&='A'&&c&='Z'||'_')
return 1; else
return 0;}void main(){ char s1[256]; char allword[16][16]; char word[16];
//? int i,k,a=0, printf(&please input data:\n&); gets(s1); k=0; flag=0; //puts(s1); for(i=0;s1[i]!='\0';i++) {
if(isKeyWord(s1[i]))
word[k++]=s1[i];
else if(flag==1)
word[k]='\0';
strcpy(allword[a++],word);
} } for(i=0;i&a;i++)
printf(&%s&,allword[i]);}
提问者采纳
看带注释的地方#include &stdio.h&
//输入一行英文,提取其中所有的单词。#include &string.h&int isKeyWord(char c){ if(c&='a'&&c&='z'||c&='A'&&c&='Z'|| c=='_')/////这行改一下,判断为下划线的地方
return 1; else
return 0;}void main(){ char s1[256]; char allword[16][16]; char word[16];
//? int i,k,a=0, printf(&please input data:\n&); gets(s1); k=0; flag=0; //puts(s1); for(i=0;s1[i]!='\0';i++) {
if(isKeyWord(s1[i]))
word[k++]=s1[i];
else if(flag==1)
word[k]='\0';
strcpy(allword[a++],word);
} } if(flag==1)//////////////这个我新加的,有一种情况你没考虑到 {
//如果刚好到字符串结束了,循环退出,但是这个字符串你没有保存到allwords
word[k]='\0';
strcpy(allword[a++],word); }
for(i=0;i&a;i++)
printf(&%s\n&,allword[i]);///加个回车好看}
来自团队:
其他类似问题
为您推荐:
其他5条回答
#include &stdio.h&
//输入一行英文,提取其中所有的单词。#include &string.h&int isKeyWord(char c){ if(c&='a'&&c&='z'||c&='A'&&c&='Z'||c=='_')/*****/
return 1; else
return 0;}void main(){ char s1[256]; char allword[16][16]; char word[16];
//? int i=0,k=0,a=0, printf(&please input data:\n&); gets(s1); k=0; flag=0; //puts(s1); for(i=0;;i++) {
if(isKeyWord(s1[i]))
word[k++]=s1[i];
else if(flag==1)
word[k]='\0';
strcpy(allword[a++],word);
if(s1[i]=='\0')
} } for(i=0;i&a;i++)
printf(&%s\n&,allword[i]);}
//int isKeyWord(char c)函数错误。
#include &stdio.h&
//输入一行英文,提取其中所有的单词。
#include &string.h&
int isKeyWord(char c){//这样不一定计算完所有的条件,即可正确返回,而且容易分析,还好看
if((c-'A')&0 )return 0;
if((c-'A')&26)return 1;
if((c-'a')&0 )return 0;
if((c-'a')&26)return 1;
void main(){
char s1[256];
char allword[16][16]={'\0'};
char word[16];
int i,j,a=0,m=0,n=0,
printf(&please input data:\n&);
for(i=0;s1[i]!='\0';i++)
if(isKeyWord(s1[i]))
allword[m][n]=s1[i];
if(flag==0)//遇到第一个空格
{m++;//下一个字符串
if(c&='a'&&c&='z'||c&='A'&&c&='Z'||'_') 这里的问题!!!改成: if((c&='a'&&c&='z')||(c&='A'&&c&='Z')|| c=='_')
if(c&='a'&&c&='z'||c&='A'&&c&='Z'||'_')错了,返回始终是正确的改成:if(c&='a'&&c&='z'||c&='A'&&c&='Z'||c=='_')
if(c&='a'&&c&='z'||c&='A'&&c&='Z'||'_')最后面 || c=='_'
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求大神帮忙C语言编程:做一个简单的问题回答小系统。要求程序运行时,显示出系统菜单项_百度知道
求大神帮忙C语言编程:做一个简单的问题回答小系统。要求程序运行时,显示出系统菜单项
c语言编程 做一个简单的问题回答小系统。要求程序运行时,显示出系统菜单项:1.
回答问题;2.
查看分数;3.
添加新问题和答案;4.
查看问题库里的题目和答案;5.
退出系统; 按照用户的选择,执行不同的功能。初始问题库至少要包含20个问题以及相应的答案。 求大神帮忙啊!!
分析:问题库(QAS)用外部的配置文件保存,每次运行前先载入库中已经建立的问题。然后再进入操作选择。完整代码如下:/*
1. 暂时不考虑汉字;
2. 可以用链表优化;
3. 将每一种操作封装成一个函数;*/#include &stdio.h&#include &stdlib.h&#include &string.h&#include &time.h&//////////////////////////////////////////////////////////////////////////// 字符串最大长度#define MAX_STR_LEN
2048// 题库上限#define MAX_QAS_LEN
1024// 配置文件路径#define QAS_FILE_PATH
&d:\\qasconfig.txt&//////////////////////////////////////////////////////////////////////////// 问题结点typedef struct tagQASNode{
Question[MAX_STR_LEN];
Answer[MAX_STR_LEN];
IsA}QASN// 问题库QASNode *g_QASLib[MAX_QAS_LEN];int
g_QASIndex = 0;//////////////////////////////////////////////////////////////////////////// 添加bool InsertToLib(char *pQuestion, char *pAnswer, double score){
if (pQuestion == NULL || strcmp(pQuestion, &&) == 0 || pAnswer == NULL)
QASNode *pNewNode = (QASNode*)malloc(sizeof(QASNode));
memset(pNewNode, 0L, sizeof(QASNode));
strcpy_s(pNewNode-&Question, pQuestion);
strcpy_s(pNewNode-&Answer, pAnswer);
pNewNode-&Score =
g_QASLib[g_QASIndex++] = pNewN}// 随机一个不重复的序号int GetQuestionIndex(){
int retVal = -1;
int tryCnt = 0;
while (tryCnt++ & g_QASIndex)
int randVal = rand() % (g_QASIndex+1);
if ( !g_QASLib[randVal]-&IsAnswered )
retVal = randV
return retV}//////////////////////////////////////////////////////////////////////////int main(){
// 打开配置文件
FILE *pStream = NULL;
if( fopen_s(&pStream, QAS_FILE_PATH, &a+&) != 0 )
printf_s(&Open the config file failed.\n&);
return -1;
// 加载已有的QAS
fseek(pStream, 0L, SEEK_END);
int fileSize = ftell(pStream);
fseek(pStream, 0L, SEEK_SET);
while ( !feof(pStream) && fileSize )
if (g_QASIndex & MAX_QAS_LEN)
char tempQ[MAX_STR_LEN] = {0}, tempA[MAX_STR_LEN] = {0};
double tempS = 0.0;
fscanf_s(pStream, &%s&, tempQ, MAX_STR_LEN);
fscanf_s(pStream, &%s&, tempA, MAX_STR_LEN);
fscanf_s(pStream, &%lf&, &tempS);
InsertToLib(tempQ, tempA, tempS);
// 累计得分
double totalSocore = 0.0;
int currentIndex = -1;
// 获取操作类型
int opType = -1;
printf_s(&请选择操作类型:\n
1. 回答问题;\n
2. 查看分数;\n
3. 添加新问题;\n
4. 查看问题库里的问题和答案;\n
0. 退出系统;\n\n&);
while (opType != 0)
printf_s(&请选择操作类型: &);
scanf_s(&%d&, &opType);
switch (opType)
if (pStream)
fclose(pStream);
if (g_QASIndex == 0)
printf(&问题库为空, 请试着添加一个问题吧!\n&);
srand((unsigned)time(NULL));
currentIndex = GetQuestionIndex();
if (currentIndex != -1)
printf_s(&Question: %s\n&, g_QASLib[currentIndex]-&Question);
printf_s(&Input answer:&);
char tempA[MAX_STR_LEN] = {0};
fflush(stdin);gets_s(tempA, MAX_STR_LEN);
if (strcmp(tempA, g_QASLib[currentIndex]-&Answer) == 0)
printf(&Right!\n&);
totalSocore += g_QASLib[currentIndex]-&S
g_QASLib[currentIndex]-&IsAnswered =
printf(&Wrong!\n&);
printf(&你已经答对了所有的问题!\n&);
if (currentIndex != -1)
printf(&Quest: %s\nScore = %.2f\n&, g_QASLib[currentIndex]-&Question, g_QASLib[currentIndex]-&Score);
printf(&请先选择\&回答问题\&!\n&);
// 一次只添加一个问题
if (g_QASIndex & MAX_QAS_LEN)
char tempQ[MAX_STR_LEN] = {0}, tempA[MAX_STR_LEN] = {0};
double tempS = 0.0;
printf_s(&请输入新问题:\n&);
fflush(stdin);gets_s(tempQ, MAX_STR_LEN);
printf_s(&请输入对应的答案:\n&);
fflush(stdin);gets_s(tempA, MAX_STR_LEN);
printf_s(&请输入对应的分值:\n&);
fflush(stdin);scanf_s(&%lf&, &tempS);
InsertToLib(tempQ, tempA, tempS);
// 添加到题库
fprintf_s(pStream, &%s %s %f\n&, tempQ, tempA, tempS);
if (g_QASIndex == 0)
printf(&问题库为空, 请试着添加一个问题吧!\n&);
for (int i=0; i&g_QASI ++i)
printf(&第%d个:\nQ:%s\nA:%s\nS:%.2f\n&, i+1, g_QASLib[i]-&Question, g_QASLib[i]-&Answer, g_QASLib[i]-&Score);
printf(&\n&);
return 0;}运行起来后先建立问题库!
其他类似问题
为您推荐:
c语言编程的相关知识
其他2条回答
天涯其实一点也不远。。。因为人已经在天涯。。。天涯还远吗。。。”
这个似乎太简单了,本地模块数据库,用结构体链表做,呵呵。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁急求一个简单的89C51 红绿灯C语言_百度知道
提问者采纳
&就这种问题& 还有人私密我说什么 代做毕业设计什么的 、还是我自己做好了 换个自己的号骗到财富~~这个是简易版的、因为就快毕业了& 自己觉得都没什么时间玩了、 还读书 、、、诶、这个观点是不是不应该、、 这个的 缺点是 无论那边是红灯都只有10S倒计时& 跟正常的红绿灯有点偏差图也整理了下 因为都是10S倒计时 所以就不需要两个数码管了、#include&reg51.h&#define uchar unsigned char#define uint unsigned intuchar tmp,keyboard();unsigned char q,w;uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void delay1s(void){unsigned char h,i,j,k;&for(h=5;h&0;h--)for(i=4;i&0;i--)for(j=116;j&0;j--)for(k=214;k&0;k--);}void main(){&for(q=9;q&0;q--)& {P0=table[q%10];&switch(q)&{ case 9:P1=0&& case 8:P1=0&case 7:P1=0&case 6:P1=0&case 5:P1=0&case 4:P1=0& case 3:P1=0& case 2:P1=0& case 1:P1=0xee&;&}&delay1s();&P0=table[q%10];&}& for(w=9;w&0;w--)& { P0=table[w%10];& switch(w)&{ case 9:P1=0xf3;&& case 8:P1=0xf3;&case 7:P1=0xf3;&case 6:P1=0xf3;&case 5:P1=0xf3;&case 4:P1=0xf7;& case 3:P1=0xf3;& case 2:P1=0xf7;& case 1:P1=0xf5&;&& }& delay1s();& P0=table[w%10];&}& }&&
提问者评价
采纳率100%
其他类似问题
为您推荐:
红绿灯的相关知识
其他1条回答
这个是可以操作,也比较麻烦。但是不是免费的奥。。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一个简单的C语言问题_百度知道
提问者采纳
问题不大,你只需要在gets(word);前面添加一句scanf(“%c”,&c),用于接收空格字符就行(记得再定义一个c);还有一个问题,你的程序就统计小写字母对,其他的都是错的,尽量自己解决,不行的话再追问我!不明白继续追问
十分感谢,题目所述问题已经解决。不过我运行感觉大写字母,小写字母,数字和空格的统计个数都是正确的啊。( ^_^ )其实我是帮我同学写,我学化学的,C语言也只学了一点,所以写出来的很烂,然后为了凑行数还把if((a[i]&='a')&&(a[i]&='z')) 拆成了两行。
满意请采纳!
提问者评价
来自团队:
其他类似问题
为您推荐:
c语言的相关知识
其他1条回答
在scanf后面加个getchar();抵消回车应该就可以了吧
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 一个c语言程序是由 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信