运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为 。main() { int m, n; printf(" Enter m,n:"); scanf("%d%d" ,&m,&n); while(m!=n) { while(m> n)m-=n; while(n> m)n-=m; } printf("'m=%d\n",m); }
时间: 2024-03-11 14:43:45 浏览: 134
程序的输出结果应该是 "m=1"。这个程序使用了辗转相减法来求两个数的最大公约数。具体地,程序中的 while 循环会不断地执行以下两个操作,直到 m 和 n 相等:
1. 如果 m 大于 n,则将 m 减去 n。
2. 如果 n 大于 m,则将 n 减去 m。
最终的结果就是 m(或 n)的值,它就是输入的两个数的最大公约数。在输入 65 和 14 之后,程序会执行以下几个步骤:
1. m 被赋值为 65,n 被赋值为 14。
2. 第一个 while 循环执行了 4 次,m 被依次赋值为 37、23、13 和 10。
3. 第二个 while 循环执行了 2 次,n 被依次赋值为 3 和 1。
4. 第一个 while 循环执行了 7 次,m 被依次赋值为 7、4、3、1、0、1 和 0。
5. 第二个 while 循环执行了 1 次,n 被赋值为 1。
6. 因为 m 和 n 相等,所以 while 循环结束,输出 m 的值,即 1。
相关问题
编写一个程序,从键盘上输入一个个单词,每接收到一个单词后,输出该单词是否曾经出现过以及出现次数。可以尝试分别用多重集合(multiset)或映射(map)两种途径实现,将二者进行比较。本题答案你可以任意提交一种方法的代码。 注:输入一个单词并回车,立即输出出现的次数(用times:次数)表示。输入#结束。 参考的输入输出如下(下面单数行为输入,双数行为输出): hello times:0 world times:0 hello times:1 hello times:2 # 【样例输入】 【样例输出】 【样例说明】 【评分标准】 #include <iostream> #include <string> using namespace std; #include <set> int main() { multiset<string> arr; string s; cin>>s; while(s!="#") { int times=0; cout<<"times:"<<times<<endl; arr.insert(s); cin>>s; } }
以下是用 multiset 实现的代码:
```c++
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main() {
multiset<string> words;
string word;
while (cin >> word && word != "#") {
auto iter = words.find(word);
if (iter == words.end()) {
cout << "times:0" << endl;
} else {
cout << "times:" << words.count(word) << endl;
}
words.insert(word);
}
return 0;
}
```
以下是用 map 实现的代码:
```c++
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
map<string, int> words;
string word;
while (cin >> word && word != "#") {
if (words.find(word) == words.end()) {
cout << "times:0" << endl;
} else {
cout << "times:" << words[word] << endl;
}
words[word]++;
}
return 0;
}
```
两种方法的思路都比较简单:每输入一个单词,就在 multiset 或 map 中查找该单词是否已经出现过,如果是,则输出出现次数,否则输出 0 并将该单词插入 multiset 或 map 中。其中 multiset 的 find 函数返回的是迭代器,可以用 count 函数获取该单词在 multiset 中出现的次数;而 map 的 find 函数返回的是键值对的迭代器,可以直接通过迭代器访问该单词出现的次数。
若运行以下程序时,从键盘输入 ADesci tor<CR>(<CR> 表示回车),则程序的运行结果是 #include<stdio.h> void main() char C; int v0=0.v1=0.T2=0: do I switch (c-getchar)) { case "a': case 'A': case e": case 'E: case "': case T': case 'O'; case 'O': case ui': case'(: vl+=1: default: vO+=1: v2+=1: } while (c! 'n'): printf("v0=%d,v1=%d,v2-%din",vO,v1,v2); A. vO-7.v1=4,12-7 B. v0-8,v1=4,v2-8 YO-ILv-A,v2-11 D.v0=12,v1=4.v2=12
根据给出的代码,程序运行时会接收字符输入,并根据输入的字符执行同的操作。根据输入的字符不同,v0、v1、v2 的值会发生变化。以下是对程序的解析:
1. 根据代码,变量 C 应该是 char 类型,但是声明语句 `char C;` 缺少分号,应该改为 `char C;`。
2. 变量声明语句 `int v0=0.v1=0.T2=0:` 是错误的,应该使用逗号来分隔不同的变量声明,正确的写法应该是 `int v0=0, v1=0, v2=0;`。
3. `do` 和 `I` 是无效的语句,应该删除。
4. `switch` 语句中的 `c-getchar` 应该改为 `c-getchar()`,表示获取一个字符输入。
5. `case "': case T':` 中的双引号应该是单引号,即改为 `case ': case T':`。
6. `case ui': case'(: vl+=1:` 中的 `ui` 应该是 `u`,即改为 `case 'u': case '(': v1+=1;`。
7. `default: vO+=1:` 中的 `vO` 应该是 `v0`,即改为 `default: v0+=1;`。
综上所述,修正后的代码如下:
```c
#include<stdio.h>
void main()
{
char c;
int v0=0, v1=0, v2=0;
do
{
c = getchar();
switch (c)
{
case 'a': case 'A':
case 'e': case 'E':
case 'i': case '(':
v1 += 1;
break;
case 'o': case 'O':
v2 += 1;
break;
default:
v0 += 1;
break;
}
} while (c != 'n');
printf("v0=%d, v1=%d, v2=%d\n", v0, v1, v2);
}
```
根据修正后的代码,如果从键盘输入 ADesci tor<CR>,则程序的运行结果是 v0=7, v1=4, v2=12。因此,正确答案应该是 D. v0=7, v1=4, v2=12。
阅读全文