• 0

[C++] Tutorial #1 Simple Sum/Average


Question

As I do on most forums that I join, I usually post a series of tutorials for programming, specifically C++. I'll be creating tutorials at random or by request, and usually cover most of the basics, advancing into intermediate programming and later scratching the surface of more advanced programs.

 

This tutorial assumes you have basic, minimal knowledge of C++.

 

What you will need:

  • Microsoft Visual Studio

And that's it! I currently use Visual Studio 2013 Professional, I got it for free via Dreamspark (if you're a college student like myself, go grab it now) or download the evaluation software.

 

http://www.visualstudio.com/downloads/download-visual-studio-vs

 

Now for the tutorial! This program is a simple program that asks the user to specify the amount of grades you want averaged and summed. It then asks for the actual grade of each, followed by the logic of average/sum of the user specified grades.

 

Step 1

 

Open Visual Studio, and click File > New Project. A pop up window will appear, and on the left hand tab, select Visual C++, and then Win32 Console Application.

 

7S8b1.png

 

A screen will appear, click next, but do not click finish on the next screen!

 

7S8J5.png

 

Before clicking Finish, make sure you check off the box that says "Empty Project"

 

7S8KY.png

 

Next, Click the tab Project > Add New Item

 

A screen will appear like this one, chose the .cpp and name it whatever you'd like. This file is the source code file for your program.

 

7S8Qb.png

 

You now have a blank workspace for your program, time to dive into the language.

 

Step 2

 

We're now going to add the file headers to the source. There are many functions and inputs in the language of C++, and these headers allow us access to them so we don't have to code them individually in each program. I.e the function "cout" , or command output, allows us to print whatever we want on screen. 

 

So go ahead and add these file headers.

#include <iostream>
#include <iomanip>
using namespace std;

And here's an image for the visual learners of what it should be so far.

 

7S8ZX.png

 

Step 3

 

After we add the headers, we need to initiate a start up function, and the default function that's called when a program is ran is int main(). Your entire source for your program, or the entire logic of the program, is within these parameters.

 

(I'll be adding code to previous code so it's chronological and makes more sense).

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
	
}

Boom! This is our entire program. Within those brackets, you can do whatever, such as say hello..

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
	cout << "Hello Neowin";
}

And if you ran this, it would create a program that says Hello Neowin. Simple, helloworld crap. 

 

Step 4

 

However, we want to create a program that does averages/sums of user specified input. So how do we do that?

 

First, we're going to need to init and double a few variables. 

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
	int n_grades, grade;
	double sum_grades, average_grades;
}

The variables above are as follows:

  •  
  • n_grades = how many grades are going to be entered
  •  
  • grade = the grade of each test that was specified above
  •  
  • sum_grades / average_grades = sum and average of the grades, respectively
  •  

Step 5

 

We now need to have the program ask the user how many grades are going to be inputted.

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
	int n_grades, grade;
	double sum_grades, average_grades;

	cout << "How many grades are you going to enter?: \n";
	cin >> n_grades;
}

Let's break this down a little if you're lost. Currently, the code above simply is going to print out on screen "How many grades are you going to enter?", and n_grades will record whatever number you input.

 

Step 6

 

Now for the hardest part of the program. How are we going to code something that gives the user infinite amount of options (how many grades he can input... 1- infinity)? This is where the for loop comes in handy. I'm going to post the code first, then explain.

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
	int n_grades, grade;
	double sum_grades, average_grades;

	cout << "How many grades are you going to enter?: \n";
	cin >> n_grades;

	for (int count = 0; count <= n_grades; count++){
		cout << "Please enter grade: \n";
		cin >> grade;
		sum_grades += grade;
	}
}

As you can see, the for loop above does it all for us. If you can't see however, read on. The first line of the loop

for (int count = 0; count <= n_grades; count++)

Simply inits the variable count, which we use to determine how many times we ask the user to enter a grade, based on his input before. Then, if count is less than or equal to n_grades, then we increment count by one, or count++.

 

Within the loop, we also take care of the math part of figuring out the sum of the grades, using 

sum_grades += grade;

which is the same as 

sum_grades = grade + grade;

Step 7

The rest of the program is a cruise from this point on. We just need to to the math logic for the average, and output the results!! I'll post the full source below, as I've got to finish this up quickly. 

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
	int n_grades, grade;
	double sum_grades, average_grades;
	cout << setprecision(2) << setiosflags(ios::fixed) << setiosflags(ios::showpoint);

	cout << "How many grades are you going to enter?: \n";
	cin >> n_grades;

	for (int count = 0; count <= n_grades; count++){
		cout << "Please enter grade: \n";
		cin >> grade;
		sum_grades += grade;
	}

	average_grades = sum_grades / n_grades;

	cout << "The total number of grades are: " << n_grades << endl;
	cout << "The sum of all grades are: " << sum_grades << endl;
	cout << "The average of all the grades are: " << average_grades << endl;

	system("PAUSE");
	return 0;
}

And voila! We have a simple program that allows us to find the average and the sum of a user specified number. Sorry for the shortness and briefness of the tutorial, gotta run out the door as we speak. Let me know any areas that could be improved, tutorial wise or code wise. Thank you!

 

7Sbq5.png

Link to comment
https://www.neowin.net/forum/topic/1207513-c-tutorial-1-simple-sumaverage/
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Thanks for the tutorial.

But isn't your output wrong?

You enter 100 and 50

how can the sum be 100

and how can the average be 50

 

shouldn't the answers be 150 and 75?

 

Or am I missing something?

  • Like 3
  • 0
  On 01/04/2014 at 16:52, Stoffel said:

Thanks for the tutorial.

But isn't your output wrong?

You enter 100 and 50

how can the sum be 100

and how can the average be 50

 

shouldn't the answers be 150 and 75?

 

Or am I missing something?

Oi I messed up on the math, the average is correct but let me fix the sum really quick.

  • 0

You're not initializing your variables to 0, so the behavior of the program is undefined. It might work in debug and print out garbage in release, for instance.

 

Also, if you're just going to use standard library functions, you could create an empty project rather than a Win32 console application.

  • Like 2
  • 0

Welcome to the forum, and happy birthday!

 

Some comments:

  1. You don't initialize any of your variables. This means that the output could be literally anything. You should set all primitive types to a value before performing operations on them (i.e. zero).
  2. Your input loop will run one more time than required, since you're using "<=" instead of just "<" for the comparison in the for loop.
  3. Good C++ style dictates that you should declare your variables when you need them. Declaring all your variables at the top of the function is a C idiom and not necessary for C++.
  • 0
  On 01/04/2014 at 16:56, Andre S. said:

You're not initializing your variables to 0, so the behavior of the program is undefined. It might work in debug and print out garbage in release, for instance.

 

Also, if you're just going to use standard library functions, you could create an empty project rather than a Win32 console application.

 

 

  On 01/04/2014 at 17:02, Majesticmerc said:

 

Welcome to the forum, and happy birthday!

 

Some comments:

  1. You don't initialize any of your variables. This means that the output could be literally anything. You should set all primitive types to a value before performing operations on them (i.e. zero).
  2. Your input loop will run one more time than required, since you're using "<=" instead of just "<" for the comparison in the for loop.
  3. Good C++ style dictates that you should declare your variables when you need them. Declaring all your variables at the top of the function is a C idiom and not necessary for C++.

 

I didn't init anything to zero simply for the purpose of beginners, as I remember when I was learning, that we keep everything undefined for later purposes. 

 

As for the input loop running three times, it'll run as many times as user specified.

 

Either way, thank you both! I'm still relatively new to C++ as a whole, been programming a type of hybrid C++/C# for a few years but just recently started uniform C++. 

  • 0
  On 01/04/2014 at 17:13, coolbunny1234 said:

I didn't init anything to zero simply for the purpose of beginners, as I remember when I was learning, that we keep everything undefined for later purposes.  

You use the initial value of sum_grades, therefore you have to define it. If sum_grades is initially -177463 or some random value (it could be anything if you don't define it), then obviously the total sum will not be correct.

 

Perhaps you're used to C# where everything is zero-initialized for you by default, but this is not the case in C++. If your program works in its current form, it's by pure chance and not by design.

  • Like 1
  • 0
  On 01/04/2014 at 17:16, Andre S. said:

You use the initial value of sum_grades, therefore you have to define it. If sum_grades is initially -177463 or some random value (it could be anything if you don't define it), then obviously the total sum will not be correct.

 

Perhaps you're used to C# where everything is zero-initialized for you by default, but this is not the case in C++. If your program works in its current form, it's by pure chance and not by design.

Yes I see what you mean, thank you. Kind of a pain, there isn't a way to default an initial value to zero?

  • 0

This is good. We should have more tutorials like this, perhaps a weekly thread, and maybe not C++ but something more current like XAML for Windows Phone and Windows 8 app development? Especially some of the new features available in the new Windows Phone 8.1 SDK. I have some great ideas for apps but sadly the extent my programming knowledge goes as far as programming Microcontrollers in C and Assembly Language.

  • 0
  On 01/04/2014 at 17:13, coolbunny1234 said:

I didn't init anything to zero simply for the purpose of beginners, as I remember when I was learning, that we keep everything undefined for later purposes.

As for the input loop running three times, it'll run as many times as user specified.

Initializing to zero is EVEN MORE important for beginners, as undefined behaviour is one of the hardest things to debug. The problem is that with the variable's being undefined, sum_grades could be zero, or it could be 23840947835. You just don't know. To quote Herb Sutter and/or Andrei Alexandrescu:

 

  Quote

Start with a clean slate. Uninitialized bugs are a common source of bugs in C and C++ programs. Avoid such bugs by being disciplined about cleaning memory before you use it; initialize variables upon definition.

The only time you don't want to initialize a variable is for optimization, but it's a MASSIVE micro-optimization, and in the real world you're unlikely to see any difference.

This is my console output from running in the Visual Studio debugger:

 

How many grades are you going to enter?:
2
Please enter grade:
100
Please enter grade:
50
Please enter grade:
25
The total number of grades are: 2
The sum of all grades are: -92559631349317830000000000000000000000000000000000000000000000.00
The average of all the grades are: -46279815674658915000000000000000000000000000000000000000000000.00
Press any key to continue . . .
  • Like 1
  • 0
  On 01/04/2014 at 17:19, coolbunny1234 said:

Yes I see what you mean, thank you. Kind of a pain, there isn't a way to default an initial value to zero?

If you don't want pain, don't use C++ :P

  • Like 3
  • 0
  On 01/04/2014 at 17:19, coolbunny1234 said:

Yes I see what you mean, thank you. Kind of a pain, there isn't a way to default an initial value to zero?

Not as such. In container classes (lists, that kind of thing), C++ will usually "default construct" which for an integer will set it to zero, but when declaring a regular variable, the onus is on the programmer to initialize the variable.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • LibreOffice 25.2.4 by Razvan Serea LibreOffice is the free power-packed Open Source personal productivity suite for Windows, Macintosh and Linux, that gives you six feature-rich applications for all your document production and data processing needs: Writer, Calc, Impress, Draw, Math and Base. Support and documentation is free from our large, dedicated community of users, contributors and developers. You, too, can also get involved! Choosing Between LibreOffice Still and LibreOffice Fresh: LibreOffice Still is a good choice if you value stability, a longer support cycle, and a more conservative approach to software updates. It's suitable for businesses and organizations where reliability and compatibility are crucial. LibreOffice Fresh is ideal if you're an enthusiast or an early adopter who wants to stay on the cutting edge of LibreOffice development and is willing to accept more frequent updates and occasional minor issues. Features: Writer is the word processor inside LibreOffice. Use it for everything, from dashing off a quick letter to producing an entire book with tables of contents, embedded illustrations, bibliographies and diagrams. The while-you-type auto-completion, auto-formatting and automatic spelling checking make difficult tasks easy (but are easy to disable if you prefer). Writer is powerful enough to tackle desktop publishing tasks such as creating multi-column newsletters and brochures. The only limit is your imagination. Calc tames your numbers and helps with difficult decisions when you're weighing the alternatives. Analyze your data with Calc and then use it to present your final output. Charts and analysis tools help bring transparency to your conclusions. A fully-integrated help system makes easier work of entering complex formulas. Add data from external databases such as SQL or Oracle, then sort and filter them to produce statistical analyses. Use the graphing functions to display large number of 2D and 3D graphics from 13 categories, including line, area, bar, pie, X-Y, and net - with the dozens of variations available, you're sure to find one that suits your project. Impress is the fastest and easiest way to create effective multimedia presentations. Stunning animation and sensational special effects help you convince your audience. Create presentations that look even more professional than the standard presentations you commonly see at work. Get your collegues' and bosses' attention by creating something a little bit different. Draw lets you build diagrams and sketches from scratch. A picture is worth a thousand words, so why not try something simple with box and line diagrams? Or else go further and easily build dynamic 3D illustrations and special effects. It's as simple or as powerful as you want it to be. Base is the database front-end of the LibreOffice suite. With Base, you can seamlessly integrate into your existing database structures. Based on imported and linked tables and queries from MySQL, PostgreSQL or Microsoft Access and many other data sources, you can build powerful databases containing forms, reports, views and queries. Full integration is possible with the in-built HSQL database. Math is a simple equation editor that lets you lay-out and display your mathematical, chemical, electrical or scientific equations quickly in standard written notation. Even the most-complex calculations can be understandable when displayed correctly. E=mc2. LibreOffice also comes configured with a PDF file creator, meaning you can distribute documents that you're sure can be opened and read by users of almost any computing device or operating system. LibreOffice also comes configured with a PDF file creator, meaning you can distribute documents that you're sure can be opened and read by users of almost any computing device or operating system. Download: LibreOffice 64-bit | LibreOffice 32-bit ~300.0 MB (Open Source) View: LibreOffice Website | Screenshot | Release Notes Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • I'm not sure why, but for some reason I think that if they are deciding to use the year for the version history they should use the whole year (i.e. iOS 2026).
    • Here's why it makes sense to name it iOS 26 and why it doesn't by Aditya Tiwari It has been almost 18 years since Apple launched the first version of its popular mobile operating system alongside the original iPhone. Recent reports and rumors circulating on the web suggest that the company is all set to unveil a major overhaul for iOS 19 at this year's WWDC keynote. There is something that baffled many when they found that the Cupertino giant is reportedly planning to rename iOS 19 to iOS 26. Yes, a company like Apple skipping eight versions for iOS is enough to leave users with a "why?" expression on their face. However, even if Apple pulls it off, there are two sides to the coin. Why it makes sense to call it iOS 26 There are several reasons why calling it iOS 26 instead of iOS 19 isn't as weird as it sounds. To begin with, it's something that has been done in the past. Samsung is a well-known example when we think about renaming device lineups and skipping version numbers. Samsung launched the Galaxy S20 series in 2020. But what was its predecessor? Galaxy S19? No, it was the Galaxy S10. The South Korean giant renamed its device lineup and aligned it with the year of launch, jumping ten versions in the process. So, someone viewing a Galaxy S23 can easily determine that the device was launched in 2023. It also gives them a feeling that they are using the 'latest and greatest' product. On the flip side, a device from the previous year may feel outdated, potentially motivating them to upgrade. Skipping version numbers isn't fun and games for everyone. Microsoft became the butt of jokes when it skipped Windows 9 and announced that Windows 8.1 will be upgraded to Windows 10 (that too in 2015). Windows 10 was thought to be "the last version of Windows", but things turned out differently. Apple's case would be a bit different, where the iOS version number is one year ahead. So, iOS 26 will release in 2025, iOS 27 in 2026, and so on. This approach is similar to how game companies like Electronic Arts name their gaming titles. Although it may seem off track, the naming scheme aligns with Apple's development schedule. The company typically announces new iOS versions at WWDC in June and rolls them out to the public in the fall season. After that, it continues to push incremental updates through the following year. In other words, a particular iOS version lives on your iPhone for a quarter of the launch year and about nine to ten months in the following year. Meanwhile, Samsung releases new Galaxy S devices at the start of the year, so it makes more sense to align their name with the current year. Not just iOS 26, reports said that Apple will streamline its confusing software naming system by renaming almost all of its operating systems to a single version. So, there will be iPadOS 26, macOS 26, tvOS 26, and watchOS 26 instead of iPadOS 19, macOS 16, tvOS 12, and so on. While the big move will make things easier for users, it will also highlight the work Apple has been doing to unify its software experience across devices. iOS and iPadOS have been related to each other from the beginning, but macOS gained ARM support in 2020 and began incorporating iOS-like UI elements. Apple has already developed a suite of Continuity features that enable different Apple devices to work together. macOS 14 Sonoma further bridged the gap between iPhone and Mac in 2023 with a revamped widgets picker UI, which allows access to and syncing with widgets stored on your iPhone. New widgets introduced in macOS 14 are interactive, similar to those on iPhone. They let you do stuff like checking off reminders, playing or pausing media, accessing smart home controls, and more. Apple's iOS 26/iOS 19 would be the second major naming shake-up in the history of iOS. The first one was when Apple renamed the operating system from iPhone OS to iOS in June 2010. iOS 26 is expected to be the biggest update in years, reportedly featuring a 'dramatic' glass-like UI overhaul, a revamped Camera app, live translation for AirPods, a new gaming app, and a new set of accessibility features. The glass-like design, first introduced on Apple's Vision Pro headset, is expected to make its way to tvOS and watchOS. Why doesn't it make sense to call it iOS 26 It already feels a bit awkward when you realize that the iPhone 16 runs iOS 18, for whatever reason, when the first iterations of both iPhone and iOS arrived in the same year. Adding eight more digits to the iOS version number will make it sound even weirder. The 19th generation of iPhone's operating system will be called iOS 26. Imagine buying an iPhone 17 later this year, and it runs iOS 26 out of the box. However, there are a couple of things Apple can do to tone down the awkwardness. Perhaps Apple can rename the iPhone series and start calling it iPhone 26 to match its software counterpart. A far-fetched and even more unlikely option is to drop version numbers from the iPhone's name entirely. Apple is already doing it for its tablets (iPad, iPad Pro, and iPad Air) and its Mac computers. Therefore, it won't be an issue once the users absorb the initial shock of the announcement. But we can't ignore that not having a version number tied to a product has its downsides. These are all speculations anyway. Whatever happens, Apple fans will get over it and learn to live with it, like they are living with the hopes of an upgraded Siri and AirPower to charge their Apple devices together.
    • I'd prefer the disclaimer being more transparent by putting it above the article.
    • dBpoweramp Music Converter 2025-06-05 by Razvan Serea Audio conversion perfected, effortlessly convert between formats. dBpoweramp contains a multitude of audio tools in one: CD Ripper, Music Converter, Batch Converter, ID Tag Editor and Windows audio shell enhancements. Preloaded with essential codecs (mp3, wave, FLAC, m4a, Apple Lossless, AIFF), additional codecs can be installed from [Codec Central], as well as Utility Codecs which perform actions on audio files. After 21 days the trial will end, reverting to dBpoweramp Free edition (learn the difference between Reference and dBpoweramp Free, here). dBpoweramp is compatible with Windows 10, 8, 7, Vista, both 32 and 64 bit. dBpoweramp Music Converter features: Convert audio files with elegant simplicity. mp3, mp4, m4a (iTunes / iPod), Windows Media Audio (WMA), Ogg Vorbis, AAC, Monkeys Audio, FLAC, Apple Lossless (ALAC) to name a few! Multi CPU Encoding Support Rip digitally record audio CDs (with CD Ripper) Batch Convert large numbers of files with 1 click Windows Integration popup info tips, audio properties, columns, edit ID-Tags DSP Effects such as Volume Normalize, or Graphic EQ [Power Pack Option] Command Line Encoding: invoke the encoder from the command line DSP Effects - process the audio with Volume Normalize, or Sample / Bit Rate Conversion, with over 30 effects dBpoweramp is a fully featured mp3 Converter dBpoweramp integrates into Windows Explorer, an mp3 converter that is as simple as right clicking on the source file >> Convert To. Popup info tips, Edit ID-Tags are all provided. dBpoweramp Music Converter 2025.06.05 changelog: Darkmode added Core Converter Debug log dumps ID Tags written VST Effect Folders dialog fixed missing InitCommonControls would not show correctly FLAC/Ogg/Opus/etc - allows editing of CDTOC ID Tag CD Ripper secure ripping log where shows TOC was not showing CD Extra correctly CD Ripper was incorrectly setting data track length on main display (for certain drives) CD Ripper internally better handling of corrupt TOCs CD TOC to Tag was incorrectly adding 150 to CD Extra disc CD Ripper shows "AccurateRip Unconfigured" in rip status rather than "not in accuraterip" if unconfigured CD Ripper art paste accepts https CueSheet added as standard - log file written to same folder as cue and folder.jpg AIFF internal code merge (macos >> windows) Download: dBpoweramp Music Converter R2025.06.05 | 82.2 MB (Shareware) View: dBpowerAMP Music Converter Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • Week One Done
      abortretryfail earned a badge
      Week One Done
    • First Post
      Mr bot earned a badge
      First Post
    • First Post
      Bkl211 earned a badge
      First Post
    • One Year In
      Mido gaber earned a badge
      One Year In
    • One Year In
      Vladimir Migunov earned a badge
      One Year In
  • Popular Contributors

    1. 1
      +primortal
      495
    2. 2
      snowy owl
      255
    3. 3
      +FloatingFatMan
      252
    4. 4
      ATLien_0
      227
    5. 5
      +Edouard
      191
  • Tell a friend

    Love Neowin? Tell a friend!