标签:opp imp ever 控制 values nts ade fst number
Both version give the same answers, but the if else
version is more efficient. Consider what happens, for example, when ch
is a space. Version 1, after incrementing spaces, tests whether the character is a newline. This wastes time because the program has already established that ch
is a space and hence could not be a newline. Version 2, in the same situation, skips the newline test.
Both ++ch
and ch + 1
have the same numerical value. But ++ch
is type char
and prints as a character, while ch + 1
, because it adds a char
to an int
, is type int
and prints as a number.
注:另外,++ch
导致ch
增1,而ch + 1
并没有改变ch
。
#include <iostream>
using namespace std;
int main()
{
char ch;
int ct1, ct2;
ct1 = ct2 = 0;
while ((ch = cin.get()) != '$')
{
cout << ch;
ct1++;
if (ch = '$')
ct2++;
cout << ch;
}
cout << "ct1 = " << ct1 << ", ct2 = " << ct2 << "\n";
return 0;
}
控制台效果截图(细体表示输入,粗体表示输出):
Because the program uses ch = ‘$‘
instead of ch == ‘$‘
, the combined input and output looks like above. Each character is converted to the $
character before being printed the second time. Also the value of the expression ch = $
is the code for the $
character, hence nonzero, hence true; so ct2
is incremented each time.
注:cin.get()
依次从输入流中读入字符H
i
!
\n
S
e
n
d
` `
a. weight >= 115 && weight < 125
b. ch == ‘q‘ || ch == ‘Q‘
c. x % 2 == 0 && x != 26
d. x % 2 == 0 && x % 26 == 0
e. donation >= 1000 && donation <= 2000 || guest == 1
f. (ch >= ‘a‘ && ch <= ‘z‘) || (ch >= ‘A‘ && ch <= ‘Z‘)
Not necessarily. For example, if x is 10, then !x is 0 and ! ! x is 1. However, if x is a bool variable, then ! ! x is x.
(x < 0)? -x : x;
or (x >= 0) x : -x;
switch (ch)
{
case 'A': a_grade++;
break;
case 'B': b_grade++;
break;
case 'C': c_grade++;
break;
case 'D': d_grade++;
break;
default: f_grade++;
break;
}
If you use integer labels and the user types a noninteger such as q, the program hangs because integer input can‘t process a character. But if you use character labels and the user types an integer such as 5, character input will process 5 as a character. Then the default part of the switch can suggest entering another character.
Here is one version:
int line = 0;
char ch;
while (cin.get(ch) && ch != 'Q')
{
if (ch == '\n') /* 不等于时 continue 跳出本次循环,相当于等于时,继续执行下面的语句 */
line++;
}
#include <iostream>
#include <cctype>
int main()
{
using namespace std;
cout << "Enter words: ";
char ch;
ch = cin.get();
while (ch != '@')
{
if (!isdigit(ch))
{
if (isupper(ch))
ch = tolower(ch);
else if (islower(ch))
ch = toupper(ch);
cout << ch;
}
cin.get(ch);
}
return 0;
}
#include <iostream>
const int ArSize = 10;
int main()
{
using namespace std;
double arr[ArSize];
double sum = 0.0;
double aver = 0.0;
int count = 0;
cout << "Enter 10 donotion values: ";
for (int i = 0; i < ArSize; ++i)
{
cin >> arr[i];
sum += arr[i];
}
aver = sum / ArSize;
cout << "Average: " << aver << endl;
for (int i = 0; i < ArSize; ++i)
{
if (arr[i] > aver)
++count;
}
cout << count << " numbers in the array are larger than the average.\n";
return 0;
}
#include <iostream>
int main()
{
using namespace std;
char ch;
cout << "Please enter one of the following choices:\n"
<< "c) carnivore p) pianis\n"
<< "t) tree g) game\n"
<< "f\n";
cin >> ch; /* cin.get(ch)只会读输入流的第一个字符,其它字符还在输入流待下次读取 */
while (ch != 'c' && ch != 'p' && ch != 't' && ch != 'g')
{
cout << "Please enter a c, p, t, or g: ";
cin >> ch;
}
switch (ch)
{
case 'c':
cout << "A tiger is a carnivore.\n";
break;
case 'p':
cout << "Beethoven is a pianist.\n";
break;
case 't':
cout << "A maple is a tree.\n";
break;
case 'g':
cout << "LOL is a game.\n";
break;
}
return 0;
}
#include <iostream>
const int STRSIZE = 20;
const int MEMBERS = 5;
enum {FULLNAME, TITLE, BOPNAME};
struct bop {
char fullname[STRSIZE]; // real name
char title[STRSIZE]; // job title
char bopname[STRSIZE]; // secret BOP name
int preference; // 0 = fullname, 1 = title, 2 = bopname
};
int main()
{
using namespace std;
bop members[MEMBERS] = {
{"Wimp Macho", "Game Designer", "WIMPY", FULLNAME},
{"Raki Rhodes", "Junior Programmer", "RAR", TITLE},
{"Celia Laiter", "Operation Engineer", "MIPS", BOPNAME},
{"Hoppy Hipman", "Analyst Trainee", "HAHA", TITLE},
{"Pat Hand", "Code Analyst", "LOOPY", BOPNAME}
};
cout << "Benevolent Order of Programmers Report\n"
<< "a. display by name b. display by title\n"
<< "c. display by bopname d. display by preference\n"
<< "q. quit\n"
<< "Enter your choice: ";
char choice;
int i;
cin >> choice;
while (choice != 'q')
{
switch (choice)
{
case 'a':
for (i = 0; i < MEMBERS; ++i)
cout << members[i].fullname << endl;
break;
case 'b':
for (i = 0; i < MEMBERS; ++i)
cout << members[i].title << endl;
break;
case 'c':
for (i = 0; i < MEMBERS; ++i)
cout << members[i].bopname << endl;
break;
case 'd':
for (i = 0; i < MEMBERS; ++i)
switch (members[i].preference)
{
case FULLNAME:
cout << members[i].fullname << endl;
break;
case TITLE:
cout << members[i].title << endl;
break;
case BOPNAME:
cout << members[i].bopname << endl;
break;
}
break;
}
cout << "Next choice: ";
cin >> choice;
}
cout << "Bye!\n";
return 0;
}
#include <iostream>
#include <cctype>
int main()
{
using namespace std;
double income;
double tax;
cout << "Enter your income (enter a negative number or non-numeric will quit): ";
cin >> income;
while (income >= 0.0 && !isascii(income))
{
tax = 0.0;
/* 低于5000不收税;5001~15000收10%税;15000~35000收15%税;大于35000部分收20%税,所以分界点为35000、15000和5000 */
if (income > 35000.0)
tax += (income - 35000.0) * 0.2 + 20000.0 * 0.15 + 10000.0 * 0.1;
else if (income > 15000.0)
tax += (income - 15000.0) * 0.15 + 10000 * 0.1;
else if (income > 5000.0)
tax += (income - 5000.0) * 0.1;
cout << "Tax = " << tax << endl;
cout << "Enter your income (enter a negative number or non-numeric will quit): ";
cin >> income;
}
cout << "Bye!\n";
return 0;
}
double min(double a, double b)
{
return a < b ? a : b;
}
#include <iostream>
#include <string>
struct Patron
{
std::string name;
double donation;
};
int main()
{
using namespace std;
int n;
cout << "Enter the number of patrons: ";
cin >> n;
Patron * patrons = new Patron[n];
int i;
int grand_patrons = 0;
for (i = 0; i < n; ++i)
{
cout << "Enter the name of patron " << i + 1 << ": ";
cin >> patrons[i].name; // 此处读入的名字不包含任何空字符(空格、tab)
cout << "Enter the donation of patron " << i + 1 << ": ";
cin >> patrons[i].donation;
if (patrons[i].donation > 10000.0)
grand_patrons++;
}
cout << "Grand Patrons:\n";
if (grand_patrons == 0)
cout << "none\n";
else
for (i = 0; i < n; ++i)
if (patrons[i].donation > 10000.0)
cout << "Name: " << patrons[i].name
<< ", Donation: " << patrons[i].donation << endl;
cout << "Patrons:\n";
if (grand_patrons == n || n == 0)
cout << "none\n";
else
for (i = 0; i < n; ++i)
if (patrons[i].donation <= 10000.0)
cout << "Name: " << patrons[i].name
<< ", Donation: " << patrons[i].donation << endl;
delete [] patrons;
return 0;
}
#include <iostream>
#include <cctype>
#include <string>
int main()
{
using namespace std;
string words;
int vowels = 0;
int consonants = 0;
int others = 0;
cout << "Enter words (q to quit):\n";
while (cin >> words)
{
if (words[0] == 'q' || words[0] == 'Q')
break;
else if (isalpha(words[0]))
switch (words[0])
{
case 'a':
case 'A':
case 'o':
case 'O':
case 'e':
case 'E':
case 'i':
case 'I':
case 'u':
case 'U':
vowels++;
break;
default:
consonants++;
break;
}
else
others++;
}
cout << vowels << " words beginning with vowels\n"
<< consonants << " words beginning with consonants\n"
<< others << " others\n";
return 0;
}
#include <iostream>
#include <fstream> // for file I/O
int main()
{
using namespace std;
ifstream inFile;
inFile.open("/Users/gemingdai/Desktop/DS/test"); // “test :I love Apple!” 算上空格正好13个字符
int count = 0;
if (!inFile.is_open())
{
cout << "Can't open file\n";
exit(EXIT_FAILURE); // same as return 1
}
inFile.get();
while (!inFile.eof())
{
inFile.get();
++count;
}
cout << "The file cotains " << count << " characters.\n";
inFile.close();
return 0;
}
#include <iostream>
#include <fstream> // for file I/O
#include <cstdlib>
struct Patron
{
char name[20];
double donation;
};
int main()
{
using namespace std;
int num;
ifstream inFile;
inFile.open("/Users/gemingdai/Desktop/DS/test");
if (!inFile.is_open())
{
cout << "Can't open file\n";
exit(EXIT_FAILURE); // same as return 1
}
inFile >> num;
inFile.get();
Patron * pd = new Patron[num];
for(int i = 0; i < num; ++i)
{
inFile.getline(pd[i].name, 20);
inFile >> pd[i].donation;
cout << "Name: " << pd[i].name << ", Donation: " << pd[i].donation << endl;
inFile.get();
}
inFile.close();
return 0;
}
《C++ primer plus 英文版 第六版》Chapter 6
标签:opp imp ever 控制 values nts ade fst number
原文地址:https://www.cnblogs.com/narisu/p/8971007.html