定义整型变量 a、b,写出将 a、b 两个变量值进行互换的程序 (要求不能使用第三个变量)

本文探讨了在不使用第三个变量的情况下,如何实现两个变量值的交换。通过数学运算的方法,提供了不同于传统方法的新思路。

说实话,刚开始看到这题的时候我愣了一下,因为在学校里刚开始上手做程序的时候除了“Hello World!”以外,第一个应该就是变量a,b值的交换了。交换变量a,b的值其实思路很简单,就是定义一个额外的变量c,通过让c起一个过渡的作用来达到让a,b的值交换的结果。如下图:
在这里插入图片描述
最终得到结果:
在这里插入图片描述
这种方法的原理就像是交换两个杯子中的水,需要第三杯子作为载体才能实现
但我们如何在题目明确要求不能使用第三个变量的情况下实现两个变量值的交换呢?
首先,我们先要跳出杯中水的思维,明白a,b是两个被存储在内存中的整型变量,而且是可以进行数学运算的,想到这里,关于这一题的思路显然就会被打开很多。如下图:
在这里插入图片描述
得到结果:
在这里插入图片描述
至此,这个程序就完成了!

1. 下列四组选项中,均不是C语言关键字的选项是()。 A) define、IF、type B) gect、char、printf、go、type、scanf、case、pow C) include、scanf、case D) while、go、pow 2. 若有以下定义,则能使为3的表达式是()。(题干中定义内容缺失,结合选项推测原定义可能为“int k=7,x=12;”) A) x%=(k%=5) B) x%=(k-k%5) C) x%=k-k%5 D) (x%=k)-(k%=5) 3. 判断char型变量c1是否为小写字母的正确表达式为()。 A) 'a'<=c1<='z' B) (c1>='A')&&(c1<='z') C) (c1>='a')||(c1<='z') D) (c1>='a')&&(c1<='z') 4. 在C语言中,如果下面变量都是int型,则输出的结果是()。 int sum=pad=5; pad=sum++, pad++, ++pad; printf("%d\n",pad); A) 7 B) 6 C) 5 D) 4 5. 设有程序段如下: int k=10; while (k=0) k=k-1; 则下面描述中正确的是()。 A) while循环执行10次 B) 循环是无限循环 C) 循环体语句一次也不执行 D) 循环体语句执行一次 6. 在C语言程序中,表达式7%4的结果是()。 A) 2.5 B) 2 C) 1 D) 3 7. 如果int a=7, b=2;则条件表达式“a<b? a:b”的是()。 A) 2 B) 7 C) 0 D) 1 8. 以下叙述中正确的是()。 A) a是实型变量,C语言允许进行以下赋a=10,因此可以这样说:实型变量中允许存放整型 B) 在赋表达式中,赋号右边既可以是变量也可以是任意表达式 C) 执行表达式a=b后,在内存中a和b存储单元中的原有都将被改变,a的已由原改变为b的,b的由原变为0 D) 已有a=3,b=5,当执行了表达式a=b, b=a之后,已使a中的为5,b中的为3 9. 以下程序的运行结果是()。 #include<stdio.h> main() { int a,b,c,s,w,t; s=w=t=0; a=-1; b=3; c=3; if (c>0) s=a+b; if (a<=0) { if (b>0) if (c<=0) w=a-b; } else if (c>0) w=a-b; else t=c; printf("%d %d %d", s,w,t); } A) 1 0 0 B) 0 2 2 C) 2 1 0 D) 2 0 0 10. 请选出以下程序的输出结果()。 #include<stdio.h> sub(int x,int y,int *z) { *z=y-x; } main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(" %d,%d,%d\n ",a,b,c); } A) 5,2,3 B) -5,-12,-7 C) -5,-12,-17 D) 5,-1,-7 11. 对于整型变量x,下述语句()与赋句:x=x%2==0 ? 1 :0;不等价。 A) if(x%2!=0)x=0;else x=1; B) if(x%2)x=1;else x=0; C) if(x%2==0)x=1;else x=0; D) if(x%2==1)x=0;else x=1; 12. 以下叙述中,正确的是()。 A) 宏展开不占用运行时间,只占用编译时间 B) 预编译处理命令行必须以分号结束 C) 一个源程序只能有一个预编译处理命令行 D) 使用带参数的宏定义时,应该说明每个参数的数据类型 13. 以下程序段运行后*(++p)为()。 char a[6]="work"; char *p; p=a; A) 'w' B) 存放'w'的地址 C) 'o' D) 存放'o'的地址 14. 设已定义x为double类型变量x=213.82631; printf("%-6.2e\n",x);则以上语句()。 A) 输出格式描述符的域宽不够,不能输出 B) 输出为21.38e+01 C) 输出为2.14e+02 D) 输出为-2.14e2 15. 以下不正确的语句(设有int p,q)是()。 A) p*=3; B) p/=q; C) p=(q=5, q+5); D) p+=p;(选项D内容缺失,根据常见题型补充推测) 16. 若a为整型变量,则以下语句(a=-2L; printf("%d\n",a);)的结果是()。 A)不合法 B) 输出为-2 C) 输出为不确定 D) 输出为2 17. 设a为整型变量,初为12,执行完语句a+=a-=a*a后,a的是()。 A) 552 B) 144 C) 264 D) -264 18. 若变量都已正确说明,则以下程序段输出为()。 int a=1,b=2,c=3; if(a>b) a=b; b=c; c=a; printf("a=%d b=%d c=%d\n",a,b,c); A) a=1 b=2 c=1 B) a=1 b=2 c=3 C) a=1 b=3 c=1 D) a=2 b=3 c=2 19. 设有程序段: t=0; while(printf("*")) { t++; if (t<3) break; } 下面描述正确的是()。 A) 其中循环控制表达式与0等价 B) 其中循环控制表达式与'0'等价 C) 其中循环控制表达式是不合法的 D) 以上说法都不对 20. 设ch是char型变量,其为'Z',且有下面的表达式,其为()。 ch=(ch>='A'&&ch<='Z')?(ch+32):ch A) 'A' B) 'a' C) 'Z' D) 'z' 21. 下列运算符中,不属于关系运算符的是()。 A) < B) >= C) ! D) != 22. 若struct teacher{ int num; char name[10]; char sex; int age; float score; }teacher1; 则变量teacher1所占用的内存字节是()。(按32位系统计算,int占4字节,char占1字节,float占4字节) A) 5 B) 14 C) 19 D) 20 23. 以下C语言共用体类型数据的描述中,不正确的是()。 A) 共用体变量占的内存大小等于所需内存最大的成员所占的内存 B) 共用体类型可以出现在结构体类型定义中 C)定义共用体变量的同时允许对一个成员的进行初始化 D) 同一共用体中各成员的首地址不相同 24. 若有定义: struct node{ int date; struct node *next; }; 函数: void fun(struct node *head) { struct node *p=head; while(p) { struct node *q=p->next; free(p); p=q; } } 则该函数的功能是()。 A) 删除整个单向链表 B) 删除单向链表中的一个结点 C) 显示单向链表中的所有数据 D) 创建单向链表 25. 若有定义:int a=20, b=28, c;则执行语句c=(a&b)>>2;后C的为()。 A) 5 B) 7 C) 80 D) 112 26. 以下叙述正确的是()。 A) C语言中的文件是流式文件,因此只能顺序存取数据 B) 打开一个已存在的文件进行了写操作后,原有文件中的全部数据必定被覆盖 C) 在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第一个数据 D) 当对文件的写操作完成之后,必须将它关闭,否则可能导致数据丢失 27. 以下使i的运算结果为4的表达式是()。(题干中选项缺失,推测常见选项如“int i=3; i++;”“int i=5; i-=1;”等,需结合完整选项判断) 28. 设int n=3;则++n的结果是()。 A) 2 B) 3 C) 4 D) 5 29. 已知char a;使用scanf()函数输入一个字符给变量a,不正确的函数调用是()。 A) scanf("%d",&a); B) scanf("%lf",&a); C) scanf("%c",&a); D) scanf("%u",&a); 30. 逻辑运算符两侧运算对象的数据类型是()。 A) 只是0或1 B) 只能是0或非0正数 C) 只能是整型或字符型数据 D) 可以是任何类型数据 31. 以下符号中不能用作用户标识符的符号是()。 A) _256 B) void C) scanf D) Struct 32. C语言提供的合法的数据类型关键字是()。 A) Double B) short C) integer D) Char 33. 设int n=3;则有表达式n++,n的结果是()。 A) 2 B) 3 C) 4 D) 5 34. 执行x=5>1+2&&2||2*4<4-10后,x的为()。 A) -1 B) 0 C) 1 D) 5 35. 对于scanf("a=%d", &a),设a为整型变量,输入5,其输出可为()。(题干选项不完整,推测正确输入应为“a=5”,输出为变量a的5) A) a=5 B) 5 C) 出错 D) 不确定 36. 以下能对一维数组a进行正确初始化的语句是()。(题干选项缺失,常见正确选项如“int a[]={1,2,3};”“int a[5]={0};”等) 37. 标准函数fgets(s, n, f)的功能是()。 A) 从文件f中读取长度为n的字符串存入指针s所指的内存 B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存 C) 从文件f中读取几个字符存入指针s所指的内存 D) 从文件f中读取长度为n-1的字符串存入指针s所指的内存 38. C语言中函数返回的类型是由()决定的。 A) 函数定义时指定的类型 B) return语句中的表达式类型 C) 调用该函数时的实参的数据类型 D) 形参的数据类型 39. 在C语言中,表示静态存储类别的关键字是()。 A) auto B) register C) static D) extern 40. 下列表达式的,哪一个等于0()。 A) 5%6 B) 5/6 C) 5/6.0 D) 5-6 41. 设有如下定义: struct sk { int a; float b; }data; int *p; 若要使p指向data中的a域,正确的赋语句是()。 A) p=&data; B) p=data.a; C) p=&data.a; D) *p=data.a; 42. 算术运算符、赋运算符和关系运算符的运算优先级按从高到低依次为()。 A) 算术运算、赋运算、关系运算 B) 算术运算、关系运算、赋运算 C) 关系运算、赋运算、算术运算 D) 关系运算、算术运算、赋运算 43. 有以下程序: main() { int k=5,n=0; while(k>0) { switch(k) { default : break; case 1: n+=k; case 2: case 3: n+=k; } k--; } printf("%d\n",n); } 程序运行后的输出结果是()。 A) 0 B) 4 C) 6 D) 7 44. C语言中函数的隐含存储类型是()。 A) auto B) static C) extern D) 无存储类型 45. 以下函数调用语句中,含有实参的个数为()。 fun((2,3),(4,5+6,7)); A) 1 B) 2 C) 5 D) 6 46. 在C语言中,下列哪个字符为合法的字符常量()。 A) '\084' B) '\x43' C) 'ab' D) '\0' 47. 已定义x为float型变量x=213.82631; printf("%-4.2f\n",x);则以上语句()。 A) 输出格式描述符的域宽不够,不能输出 B) 输出为213.83 C) 输出为213.82 D) 输出为-213.82 48. 下列运算符中优先级最高的是()。 A) < B) + C) && D) != 49. 下列能正确输入字符数组a的语句是()。 A) scanf("%s",a); B) scanf("%s",&a); C) scanf("%c",a); D) 循环执行scanf("%c",&a[i]);(需确保循环范围正确,如for(i=0;i<N;i++)) 50. 以下程序输出结果是()。 main() { int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",m--); } A) 7 B) 6 C) 5 D) 4 51. 以下程序的输出结果是()。 main() { int i=0, j=0, k=6; if ((++i>0)||(++j>0)) k++; printf("%d, %d, %d\n", i, j, k); } A) 0, 0, 6 B) 1, 0, 7 C) 1, 1, 7 D) 0, 1, 7 52. 以下不是无限循环的语句为()。 A) for(y=0,x=1;x>++y;x=i++) i=x; B) for( ; ;x++=i); C) while(1){x++;} D) for(i=10; ; i--) sum+=i; 53. 以下不正确的描述是()。 A) break语句不能用于循环语句和switch语句外的任何其他语句 B) 在switch语句中使用break语句或continue语句的作用相同 C) 在循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环的执行 D) 在循环语句中使用break语句是为了使流程跳出循环体,提前结束循环 54. 以下程序运行后,屏幕显示下列说法正确的是()。 #include<stdio.h> main() { FILE *fp; fp=fopen("data.txt","wt"); if(fp!=NULL) { fprintf(fp,"%s\n","File write successed!\n"); fclose(fp); printf("write ok!\n"); } } A) 当前工作目录下存在data.txt文件,其中内容是“write ok!” B) fclose(fp);语句的功能是打开文件 C) 当前工作目录下一定不存在data.txt文件 D) 当前工作目录下一定存在data.txt文件 55. 已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3'后,c2中的为()。 A) 'D' B) 68 C) 不确定的 D) 'C' 56. 若t为double类型,表达式t=1, t+5, t++的是()。 A) 1 B) 6.0 C) 2.0 D) 1.0 57. 在C语言中,逻辑“真”的表示是用()。 A) true B) 整型0 C) 非0整型 D) T 58. 用getchar函数可以从键盘读入一个()。 A) 整型变量表达式 B) 实型变量值 C) 字符串 D) 字符或字符型变量值 59. 如下的数组中,数组array占用的内存空间是()个字节。char array[]={'c','h','i','n','a'}; A) 1 B) 5 C) 6 D) 不确定 60. 在C语言的if语句中,用作判断的表达式为()。 A) 关系表达式 B) 逻辑表达式 C) 算术表达式 D) 任意表达式
最新发布
12-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值