最新《C++程序设计案例教程》习题答案第6章 非基本数据类型
C++面向对象程序设计第六章课后习题答案
第六章课后习题答案(第二版谭浩强)1://xt6-1/cpp#include <iostream> //如用VC++应改为∶#include <iosttram.h>using namespace std; //如用VC++应取消此行#include "cylinder.h"#include "point.cpp"#include "circle.cpp"#include "cylinder.cpp"int main(){Cylinder cy1(3.5,6.4,5.2,10);cout<<"\noriginal cylinder:\nx="<<cy1.getX()<<", y="<<cy1.getY()<<", r="<<cy1.getRadius()<<",h="<<cy1.getHeight()<<"\narea="<<cy1.area()<<", volume="<<cy1.volume()<<endl;cy1.setHeight(15);cy1.setRadius(7.5);cy1.setPoint(5,5);cout<<"\nnew cylinder:\n"<<cy1;Point &pRef=cy1;cout<<"\npRef as a point:"<<pRef;Circle &cRef=cy1;cout<<"\ncRef as a Circle:"<<cRef;return 0;}3:解法一#include <iostream>using namespace std;class Point{public:Point(float a,float b):x(a),y(b){}~Point(){cout<<"executing Point destructor"<<endl;}private:float x;float y;};class Circle:public Point{public:Circle(float a,float b,float r):Point(a,b),radius(r){} ~Circle(){cout<<"executing Circle destructor"<<endl;} private:float radius;};int main(){Point *p=new Circle(2.5,1.8,4.5);delete p;return 0;}3:解法二#include <iostream>using namespace std;class Point{public:Point(float a,float b):x(a),y(b){}~Point(){cout<<"executing Point destructor"<<endl;} private:float x;float y;};class Circle:public Point{public:Circle(int a,int b,int r):Point(a,b),radius(r){}~Circle(){cout<<"executing Circle destructor"<<endl;} private:float radius;};int main(){Point *p=new Circle(2.5,1.8,4.5);Circle *pt=new Circle(2.5,1.8,4.5);delete pt;return 0;}3:解法三#include <iostream>using namespace std;class Point{public:Point(float a,float b):x(a),y(b){}virtual ~Point(){cout<<"executing Point destructor"<<endl;}private:float x;float y;};class Circle:public Point{public:Circle(float a,float b,float r):Point(a,b),radius(r){}virtual ~Circle(){cout<<"executing Circle destructor"<<endl;}private:float radius;};void main(){Point *p=new Circle(2.5,1.8,4.5);delete p;}4:#include <iostream>using namespace std;//定义抽象基类Shapeclass Shape{public:virtual double area() const =0; //纯虚函数};//定义Circle类class Circle:public Shape{public:Circle(double r):radius(r){} //结构函数virtual double area() const {return 3.14159*radius*radius;};//定义虚函数protected:double radius; //半径};//定义Rectangle类class Rectangle:public Shape{public:Rectangle(double w,double h):width(w),height(h){} //结构函数virtual double area() const {return width*height;} //定义虚函数protected:double width,height; //宽与高};class Triangle:public Shape{public:Triangle(double w,double h):width(w),height(h){} //结构函数virtual double area() const {return 0.5*width*height;}//定义虚函数protected:double width,height; //宽与高};//输出面积的函数void printArea(const Shape &s){cout<<s.area()<<endl;}//输出s的面积int main(){Circle circle(12.6); //建立Circle类对象circlecout<<"area of circle =";printArea(circle);//输出circle的面积Rectangle rectangle(4.5,8.4); //建立Rectangle类对象rectanglecout<<"area of rectangle =";printArea(rectangle);//输出rectangle的面积Triangle triangle(4.5,8.4); //建立Triangle类对象cout<<"area of triangle =";printArea(triangle); //输出triangle的面积return 0;}5:#include <iostream>using namespace std;//定义抽象基类Shapeclass Shape{public:virtual double area() const =0; //纯虚函数};//定义Circle(圆形)类class Circle:public Shape{public:Circle(double r):radius(r){}//结构函数virtual double area() const {return 3.14159*radius*radius;};//定义虚函数protected:double radius; //半径};//定义Square(正方形)类class Square:public Shape{public:Square(double s):side(s){} //结构函数virtual double area() const {return side*side;} //定义虚函数protected:double side;};//定义Rectangle(矩形)类class Rectangle:public Shape{public:Rectangle(double w,double h):width(w),height(h){} //结构函数virtual double area() const {return width*height;} //定义虚函数protected:double width,height; //宽与高};//定义Trapezoid(梯形)类class Trapezoid:public Shape{public:Trapezoid(double t,double b,doubleh):top(t),bottom(t),height(h){} //结构函数virtual double area() const {return0.5*(top+bottom)*height;} //定义虚函数protected:double top,bottom,height; //上底、下底与高};//定义Triangle(三角形)类class Triangle:public Shape{public:Triangle(double w,double h):width(w),height(h){} //结构函数virtual double area()const {return 0.5*width*height;}//定义虚函数protected:double width,height; //宽与高};int main(){Circle circle(12.6); //建立Circle类对象circleSquare square(3.5); //建立Square类对象squareRectangle rectangle(4.5,8.4); //建立Rectangle类对象rectangleTrapezoid trapezoid(2.0,4.5,3.2); //建立Trapezoid类对象trapezoidTriangle triangle(4.5,8.4); //建立Triangle类对象Shape*pt[5]={&circle,&square,&rectangle,&trapezoid,&triangle};//定义基类指针数组pt,使它每一个元素指向一个派生类对象double areas=0.0; //areas为总面积for(int i=0;i<5;i++){areas=areas+pt[i]->area();}cout<<"totol of all areas="<<areas<<endl; //输出总面积return 0;}(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)。
C程序设计第六章答案
实验六数组练习6.2代码如下:#include <iostream>using namespace std;int main(){int num, max = 0, count = 1;//user input 6 numbersfor (int i = 0; i < 6; i++){cout << "Enter a number: ";cin >> num;//if number entered > max, max = num, count = 1 again.if (num > max){max = num;count = 1;}else if (num == max){count++;}}//displaycout << "The largest number is " << max <<endl;cout << "The largest number appears " << count << " times\n";return 0;}练习6.4代码如下:#include <iostream>using namespace std;int main (){int score[40];int upcount = 0, downcount = 0, equalcount = 0, count = 0,i = 0, j = 0, sum = 0;//input the arrays, and when user enter a minus, stop inputingdo{cout << "Please enter less than 40 students' score, if you want to stop entering you can enter a minus.\n";cout << "You have entered " << count << " scores\n";cin >> j;if ((j >= 0) && (j <= 100)){score[i] = j;j++;count++;i++;}else if (j > 100){cout << "You should enter a correct score";}}while (j >= 0);//compute the sum of the arraysfor (i = 0; i < count; i++){sum += score[i];}//compute the averageint average = sum / count;for (i = 0; i < count; i++){if (score[i] > average){upcount++;}else if (score[i] == average){equalcount++;}else if (score[i] < average){downcount++;}}//display the resultcout << "The summer scores among " << count << " students is " << sum << endl;cout << "The average scores among " << count << " students is "<< average << endl;cout << "There are(is) " << upcount << " student's(s') scores are(is) higher than average.\n";cout << "There are(is) " << equalcount << " student's(s') scores are(is) equal to average.\n";cout << "There are(is) " << downcount << " student's(s') scores are(is) lower than average.\n";return 0;}练习6.6代码如下:#include <iostream>#include <iomanip>using namespace std;bool isPrime (int num);int main (){int prime[50];for (int i = 0, num = 2; i < 50; num++){if ( isPrime(num) ){prime[i] = num;i++;}}for (int i = 0, count = 0; i < 50; i++){cout << setw(6) << prime[i];count++;if (10 == count){cout << endl;count = 0;}}system("pause");return 0;}//this function called isPrime is used to judge an integer is prime or not... bool isPrime (int num){bool isPrime = true;for (int i = 2; i <= sqrt( (double)num ); i++){if (0 == num %i){isPrime = false;break;}}return isPrime;}练习6.8代码如下:#include <iostream>using namespace std;int average(int array[], int size);double average(double array[], int size);int main (){int array1[6] = {1,2,3,4,5,6};double array2[7] = {6.0,4.4,1.9,2.9,3,4,3.5};//display the resultcout << average(array1,6) << endl << average(array2,7) << endl;return 0;}//the kind of integerint average(int array[], int size){double sum = 0;for (int i = 0; i < size; i++){sum += array[i];}return sum / size;}//the kind of integerdouble average(double array[], int size) {double sum = 0;for (int i = 0; i < size; i++){sum += array[i];}return sum / size;}练习6.10代码如下:#include <iostream>using namespace std;void min (int array[], int size);int main (){int array[8] = {2,2,4,5,10,100,2,2};min(array,8);return 0;}//打印最小元的下标void min (int array[], int size){int min = array[0];int xiabiao[10];int j = 0;for (int i = 0; i < size; i++){if ( array[i] <= min ){min = array[i];xiabiao[j] = i;j++;}}int k = j;j = 0;//保存最小元下标的个数cout << "The min of the array(s) is " << min << endl;cout << "The subscript of the minnest number is(are) ";for (; j < k; j++){cout << xiabiao[j] << endl;}}练习6.12代码如下:#include <iostream>using namespace std;void reverse (int soure[], int size);//swapvoid reverse (int soure[], int size){for (int i = 0; i < (size / 2); i++){swap ( soure[i], soure[size-1-i] );}}//check the void reverse is right or notint main (){int array[6] = {1,2,3,4,5,6};reverse (array, 6);for (int i = 0; i < 6; i++){cout << array[i] << endl;}return 0;}练习6.14代码如下:#include <iostream>#include <ctime>using namespace std;int main (){int num[100000];srand ( time(0) );for (long i = 0; i < 100000; i++){num[i] = rand();}//生成关键字int key = rand();cout << "关键字是" << key << endl;//开始计时long startTime1 = time(0);for (int i = 0; i < 100000; i++){if (key == num[i]){cout <<"关键字的下标是"<< i <<endl;}}long endTime1 = time(0);long time1 = endTime1 - startTime1;cout << "顺序搜索时间是" << time1 <<"秒\n\n";//二分搜索int low = 0;int high = 99999;//对数组进行排序,现在开始第二次计时long startTime2 = time(0);for (long i = 9999;i >= 1; i--){int xiabiao = 0, lagest = num[0];for (long j = 1;j <= i; j++){if ( num[j] > lagest ){lagest = num[j];xiabiao = j;}}//swapif ( xiabiao != i){num[xiabiao] = num[i];num[i] = lagest;}}while (high >= low){int mid = (low + high) / 2;if (key < num[mid]){high = mid - 1;}else if (key == num[mid]){cout << "关键字下标是" << mid << endl;break;}else{low = mid + 1;}}long endTime2 = time(0);long time2 = endTime2 - startTime2;cout << "排序和二分搜索花费时间是" << time2 << "秒\n\n";system("pause");return 0;}练习6.16代码如下:#include <iostream>using namespace std;void turn ( double arrays[], int size);int main (){double arrays[7] = {6.0,4.4,1.9,2.9,3.4,2.9,3.5};turn(arrays, 7);for (int i = 0; i < 7; i++){cout << arrays[i] << " ";}system("pause");return 0;}//起泡排序void turn ( double arrays[], int size){bool changed = true;do{changed = false;for (int i = 0; i < size - 1; i++){if (arrays[i] > arrays[i+1]){swap(arrays[i], arrays[i+1]);changed = true;}}} while (changed);}练习6.18代码如下:#include <iostream>using namespace std;int main (){int arrays[4][4] = {{1,2,4,5},{6,7,8,9},{10,11,12,13},{14,15,16,17}};int sum = 0;for (int i = 0, j = 0; i < 4; i++,j++){sum += arrays[i][j];}cout << "主对角线之和为" << sum << endl;system("pause");return 0;}练习6.20代码如下:#include <iostream>using namespace std;void turn ( int arrays[], int size);int main(){int time[8][7] = {{2,4,3,4,5,8,8},{7,3,4,3,3,4,4},{3,3,4,3,3,2,2},{9,3,4,7,3,4,1},{3,5,4,3,6,3,8},{3,4,4,6,3,4,4},{3,7,4,8,3,8,4},{6,3,5,9,2,7,9}};int sumofRow[8] = {0,0,0};for (int row = 0; row < 8; row++){for (int i = 0; i < 7; i++){sumofRow[row] += time[row][i];}}turn(sumofRow, 8);for (int i = 7; i >= 0; i--){cout << sumofRow[i] << endl;}system("pause");return 0;}//排序void turn ( int arrays[], int size){bool changed = true;do{changed = false;for (int i = 0; i < size - 1; i++){if (arrays[i] > arrays[i+1]){swap(arrays[i], arrays[i+1]);changed = true;}}} while (changed);}练习6.22代码如下:#include <iostream>using namespace std;//compute the sumvoid mutiplyMatrix (int a[][5],int b[][5],int c[][5],int rowsize){for (int i = 0; i < rowsize; i++){for (int j = 0; j < rowsize; j++){for (int k = 0; k < rowsize; k++){c[i][j] += (a[i][k] + b[k][j]);}}}}int main (){int a[5][5] = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};int b[5][5] = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};int c[5][5] = {{0,0,0,0,0},{0},{0},{0},{0}};mutiplyMatrix(a,b,c,5);for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){cout << c[i][j] << endl;}}system("pause");return 0;}练习6.24代码如下:#include <iostream>#include <ctime>using namespace std;int main(){srand( time(0) );int chess[8][8];//随机输入0和1,并输出8*8列表for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){chess[i][j] = rand() % 2;cout << chess[i][j];}cout << endl;}//计算每行的和for (int row = 0; row < 8; row++){int sumofrow = 0;for (int column = 0; column < 8; column++){sumofrow += chess[row][column];}if (0 == sumofrow){cout << "All 0s on row" << row + 1 << endl;}else if (8 == sumofrow){cout << "All 1s on row" << row + 1 << endl;}}//计算每列的和for (int column = 0; column < 8; column++){int sumofcolumn = 0;for (int row = 0; row < 8; row++){sumofcolumn += chess[row][column];}if (0 == sumofcolumn){cout << "All 0s on column" << column + 1 << endl;}else if (8 == sumofcolumn){cout << "All 1s on column" << column + 1 << endl;}}//计算两个对角线的和int sumofsubdiagonal1 = 0, sumofsubdiagonal2 = 0;for (int row = 0, column = 0; row < 8; row++,column++){sumofsubdiagonal1 += chess[row][7 - column];sumofsubdiagonal2 += chess[row][column];}if ( 0 == sumofsubdiagonal1 ){cout << "All 0s on subdiagonal1" << endl;}else if ( 8 == sumofsubdiagonal1 ){cout << "All 1s on subdiagonal1" << endl;}if ( 0 == sumofsubdiagonal2 ){cout << "All 0s on subdiagonal2" << endl;}else if ( 8 == sumofsubdiagonal2 ){cout << "All 1s on subdiagonal2" << endl;}system("pause");return 0;}练习6.26代码如下:#include <iostream>using namespace std;int factors(int num, int table[][2]){/*从i=2开始除,若不能被i整除则i++;若能被i整除则输出i,且num变成num除以i的商,重新把2赋值给i,循环。
C语言程序设计第四版第六章答案_谭浩强
C语言程序设计第四版第六章答案_谭浩强1、用筛选法求100之内的素数。
解:#include#includeint main(){int i,j,n,a[101];for (i=1;i<=100;i++)a[i]=i;a[1]=0;for (i=2;i<sqrt(100);i++)< bdsfid="73" p=""></sqrt(100);i++)<>for (j=i+1;j<=100;j++){if(a[i]!=0 && a[j]!=0)if (a[j]%a[i]==0)a[j]=0;}printf("\");for (i=2,n=0;i<=100;i++){ if(a[i]!=0){printf("%5d",a[i]);n++;}if(n==10){printf("\");n=0;}}printf("\");return 0;}2、用选择法对10整数排序。
解:#includeint main(){int i,j,min,temp,a[11];printf("enter data:\");for (i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\");printf("The orginal numbers:\");for (i=1;i<=10;i++)printf("%5d",a[i]);printf("\");for (i=1;i<=9;i++){min=i;for (j=i+1;j<=10;j++)if (a[min]>a[j]) min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\The sorted numbers:\");for (i=1;i<=10;i++)printf("%5d",a[i]);printf("\");return 0;}3、求一个3×3的整型矩阵对角线元素之和。
C程序设计(第五版)-第6章利用数组处理批量数据课后习题答案
C程序设计(第五版)-第6章利⽤数组处理批量数据课后习题答案1.⽤筛选法求100质数⼜称素数。
⼀个⼤于1的⾃然数,除了1和它⾃⾝外,不能被其他⾃然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)先解释⼀下筛选法的步骤:<1> 先将1挖掉(因为1不是素数)。
<2> ⽤2去除它后⾯的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> ⽤3去除它后⾯的各数,把3的倍数挖掉。
<4> 分别⽤5…各数作为除数去除这些数以后的各数。
上述操作需要⼀个很⼤的容器去装载所有数的集合,只要满⾜上述条件,即2的倍数⼤于1的全部置0,3的倍数⼤于1的全部置0,4的倍数⼤于1的全部置0……⼀直到这个数据集合的末尾,这样⼀来不为0的数就是素数了,然后按下标在⾥⾯进⾏查找就好了1#include <stdio.h>2#include <windows.h>3int main()4{5printf("------------------\n");6int i, j, k, a[100];7// 先给100个数赋值8for (i = 0; i < 100; i++)9{10a[i] = i + 1;11}1213// 1不是质数也不是合数14a[0] = 0;1516for (i = 0; i < 100; i++)17{18for (j = i + 1; j < 100; j++)19{20// 把后⾯的数能整除前⾯的数赋值为021if (a[i] != 0 && a[j] != 0)22{23if (a[j] % a[i] == 0)24{25a[j] = 0; //把不是素数的都赋值为026}27}28}29}3031// 打印质数,每10个换⾏32for (i = 0; i < 100; i++)33{34if (k % 10 == 0)35{36printf("\n");37}38if (a[i] != 0)39{40printf("%d ", a[i]);41k++;42}43}4445return 0;46}2.⽤选择法对101#include <stdio.h>2#include <windows.h>3int main()4{5printf("请输⼊10个数:\n");6int minIndex, temp, a[10];78for (int i = 0; i < 10; i++)9{10scanf("%d", &a[i]);11}1213for (int i = 0; i < 10; i++)14{15minIndex = i;16for (int j = i + 1; j < 10; j++)17{18if (a[j] <= a[minIndex])19{20minIndex = j;21}22}2324temp = a[i];25a[i] = a[minIndex];26a[minIndex] = temp;27}2829printf("排序后结果:\n");3031for (int i = 0; i < 10; i++)32{33printf("%d ", a[i]);34}35return 0;36}3.求⼀个3*31#include <stdio.h>2#include <windows.h>3int main()4{5printf("请输⼊元素:\n");6int x, y, z, a[3][3];7for (int i = 0; i < 3; i++)8{9for (int j = 0; j < 3; j++)10{11scanf("%d", &a[i][j]);12}13}14printf("输出刚刚输⼊的元素:\n");15for (int i = 0; i <= 2; i++)16{17for (int j = 0; j <= 2; j++)18{19printf("%d\t", a[i][j]);20}2122printf("\n");23}24printf("\n");25// 计算对⾓线的合26for (int i = 0; i < 3; i++)27{28x += a[i][i];29}3031for (int i = 0, j = 2; i < 3; i++, j--)32{33y += a[i][j];34}35z = x + y;36printf("左上到右下对⾓线的合:%d\n", x); 37printf("右上到左下对⾓线的合:%d\n", y); 38printf("两条对⾓线之合:%d\n", z);39// 结果40// 请输⼊元素:41// 1 2 3 4 5 6 7 8 942// 输出刚刚输⼊的元素:43// 1 2 344// 4 5 645// 7 8 94647// 左上到右下对⾓线的合:1548// 右上到左下对⾓线的合:3149// 两条对⾓线之合:4650return 0;51}4.1#include <stdio.h>2#include <windows.h>3int main()4{5printf("------------------\n");6int t, x, a[5] = {1, 2, 4, 5, 6};78printf("请输⼊需要插⼊的数字:\n");9scanf("%d", &x);10for (int i = 0; i < 5; i++)11{12if (x < a[i])13{14t = a[i];15a[i] = x;16x = t;17}18printf("%3d", a[i]);19}20printf("%3d", x);2122return 0;23}5.讲⼀个数组的值按逆序重新存放。
C语言程序设计实例教程 第2版 习题答案 作者 李红 第6章 数组
6.4 课后习题6.4.1 项目练习一.练习目的1.进一步巩固一维数组的定义与数组元素的引用方法2.进一步巩固二维数组的定义与数组元素的引用方法3.进一步巩固字符数组的定义与引用方法二.练习内容1.用起泡法对10个数由大到小进行排序。
分析:起泡法的算法思想是,n个数排序,将相邻两个数依次进行比较,将大数调在前头,逐次比较,直至将最小的数移至最后,然后再将n-1个数继续比较,重复上面操作,直至比较完毕。
可采用双重循环实现起泡法排序,外循环控制进行比较的次数,内循环实现找出最小的数,并放在最后位置上(即沉底)。
#include "stdio.h"main(){int a[10];int i,j,t;printf("请输入10个整数:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]<a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("排序后的数为::\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");getch();}2.从键盘输入10个整数,检查整数3是否包含在这些数据中,若是的话,它是第几个被输入的。
#include "stdio.h"main(){int i,a[10];printf("请输入这10个整数:");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){if(a[i]==3) printf("3包含于数列中,输入顺序号是:%d",i+1);elseprintf("3不包含于此数列中");}getch();}3.编程:一个3*5的数组,要求每行都进行降序排列,并求出每行的平均值。
c++程序设计课后习题第6章答案
length = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
angle = atan( (y2-y1) / (x2-x1) );
angle = angle *180/3.141592653;
{
protected:
int n;
public:
void Show() {cout<<n<<endl;}
};
class Derived:public Base1,public Base2
{
public:
void Set(int x,int y) { m=x;n=y;}
//Derived类中重载show()方法
}
四、编程题
1.设计一个基类,从基类派生圆柱,设计成员函数输出它们的面积和体积。
#include < iostream >
using namespace std;
class Basic//基类
{
protected:
double r;
public :
Basic(){ r = 0; }
}
void printPoint()
{
cout<<"圆形直角坐标:("<< x <<", "<< y <<")"<< endl;
}
void printRadius()
{
cout<<"圆的半径:"<< r << endl;
c 程序设计教程习题6_8章参考答案
int getage()
{
return age;
}
double getweight()
{
return weight;
}
char *getcolor()
{
return color;
}
};
void main()
{
Cat c1;
int a;
double w;
char c[10];
cin>>a>>w>>c;
print(h3);
}
第七章
一、选择题
1、D2、B3、B4、A5、B
6、A7、D8、B9、C10、B
二、程序填空
1、fname,“w”(ch=getchar())!=’#’count++
2、(c=fgetc(fp))length++length=0
3、”wb”&emp, sizeof(employer),1,fpfclose(fp)“rb”
newnode->expn=p1->expn;
p1=p1->next;
}
else if(p1->expn<p2->expn)
{
newnode->coef=p2->coef;
newnode->expn=p2->expn;
p2=p2->next;
}
else
{
newnode->coef=p2->coef+p1->coef;
else
{
if(p->coef!=0&&p->expn!=0)
c程序设计第四版(谭浩强)第六章答案
# include<stdio.h># include<math.h># include<string.h>/*int main() //筛选法求100以内的素数{intp,m=0,i,j;for(i=2;i<100;i++){p=(int)sqrt(i);for(j=2;j<=p;j++)if(i%j==0)break;if(j==p+1){printf("%-3d",i);m+=1;}if(m%10==0)printf("\n");}putchar('\n');}void sort(int a[],int n) //选择法排序{inti,j,k;for(i=1;i<n;i++)for(j=i;j<n;j++)if(a[i-1]>a[j]){k=a[i-1];a[i-1]=a[j];a[j]=k;}}int main(){int a[10],i;printf("10 munber:");for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10);printf("sort:");for(i=0;i<10;i++)printf("%-2d",a[i]);putchar('\n');}int main(){int a[3][3],i,j,s=0; //求对角线元素之和printf("输入矩阵:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)s+=a[i][i];printf("对角线元素之和为:%d\n",s);}int main(){int a[]={1,2,3,4,6,7,8,9}; //向已排好序的数组插入新数ints,b,i,j;s=sizeof(a)/4;printf("enter number:");scanf("%d",&b);for(i=0;i<s;i++)if(b>a[i]&&i!=s-1)continue;else if(i==s-1)a[s]=b;else{for(j=s;j>i;j--)a[j]=a[j-1];a[i]=b;break;}printf("new sort:");for(i=0;i<=s;i++)printf("%-2d",a[i]);printf("\n");}int main(){int a[9]={1,2,3,4,5,6,7,8,9},i,n,t,l; //逆序输出l=sizeof(a)/4;n=l/2;for(i=0;i<=n;i++){t=a[i];a[i]=a[l-i-1];a[l-i-1]=t;}for(i=0;i<l;i++)printf("%d ",a[i]);putchar('\n');}int main(){int a[10][10],i,j; //杨辉三角for(i=0;i<10;i++)for(j=0;j<10;j++)if(j==0||i==j)a[i][j]=1;else if(i>j)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<10;i++)for(j=0;j<10;j++){if(i>=j)printf("%-4d",a[i][j]);if(j==9)putchar('\n');}putchar('\n');}int a[25][25]={0}; //魔方阵void array(int n){staticint b[2];inti,j,k;for(k=1;k<=n*n;k++){if(k==1){a[0][n/2]=k;b[0]=0;b[1]=n/2;}else{if(b[0]==0&&b[1]<n-1){a[n-1][(b[1]+1)]=k;b[0]=n-1;b[1]=b[1]+1;}else if(b[0]>0&&b[1]==n-1){a[b[0]-1][0]=k;b[0]=b[0]-1;b[1]=0;}else if(b[0]==0&&b[1]==n-1){a[1][n-1]=k;b[0]=1;b[1]=n-1;}else if(a[b[0]-1][b[1]+1]!=0){a[b[0]+1][b[1]]=k;b[0]=b[0]+1;}else{a[(b[0]-1)][(b[1]+1)]=k;b[0]=b[0]-1;b[1]=b[1]+1;}}}for(i=0;i<n;i++)for(j=0;j<n;j++){printf("%-5d",a[i][j]);if(j==n-1)putchar('\n');}}int main(){int n;printf("输入小于25的奇数:");scanf("%d",&n);array(n);}int main()int a[3][3],i,j,k,l,max; //寻找鞍点printf("输入矩阵:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){max=a[i][0];l=0;for(j=1;j<3;j++){k=0;if(max<a[i][j]){max=a[i][j];l=j;}if(j==2){for(;k<3;k++)if(max<=a[k][l])continue;elsebreak;}if(k==3)printf("鞍点为:%d\n",max);}}}void star(){printf("* * * * *\n"); //打印图案}int main(){inti,j;for(i=0;i<5;i++){for(j=0;j<2*i;j++)printf(" ");star();}#define N 15voidnum(int a[],int n){int min=0,max=N-1,mid=N/2; //折半查找法while(min<=max){mid=(max+min)/2;if(n>a[mid]){min=mid+1;}else if(n<a[mid]){max=mid-1;}else{printf("第%d个数\n",mid+1);break;} }if(min>max)printf("无此数!\n");}int main(){int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},n,i;for(i=0;i<N;i++)printf("%-3d",a[i]);printf("\nenter number:");scanf("%d",&n);num(a,n);}int main(){char a[3][80],u=0,l=0,n=0,b=0,o=0,i,j;for(i=0;i<3;i++)for(j=0;j<80;j++)scanf("%c",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<80;j++){if(a[i][j]>='A'&&a[i][j]<='Z')u+=1;else if(a[i][j]>='a'&&a[i][j]<='z')l+=1;else if(a[i][j]>='0'&&a[i][j]<='9')n+=1;else if(a[i][j]==' ')b+=1;elseo+=1;}printf("\n大写字母个数:%d\n小写字母个数:%d\n数字个数:%d\n空格个数:%d\n 其他字符个数:%d\n",u,l,n,b,o);}# define N 20int main(){char a[N]="512/R olevblf",b[N];inti=0,j=0;printf("密码:");while(a[i]){printf("%c",a[i]);i++;}printf("\n原文:");while(a[j]){if(a[j]>='a'&&a[j]<='z')b[j]='a'+'z'-a[j];else if(a[j]>='A'&&a[j]<='Z')b[j]='A'+'Z'-a[j];elseb[j]=a[j];j++;}b[j]='\0';printf("%s\n",b);}#define N 20void str_cat(char a[],char b[]) //字符串连接{int s1=strlen(a),i=0;while(b[i]){a[s1+i]=b[i];i++;}a[s1+i]='\0';}int main(){char a[N]="I ",b[N]="love you!";str_cat(a,b);printf("%s\n",a);}#define N 20void str_cpy(char a[],char b[]) //字符串复制{inti=0;while(a[i]=b[i])i++;}int main(){char s1[N],s2[]="I love you!";str_cpy(s1,s2);printf("s2=%s\ns1=%s\n",s2,s1);}*/#define N 20intstr_cmp(char a[],char b[]) //字符串比较{inti=0,n;n=strlen(b);while(a[i]==b[i]){i++;if(i==n)break;}printf("%d",a[i]-b[i]);}int main(){char s1[N],s2[N];gets(s1);gets(s2);str_cmp(s1,s2);putchar('\n');}。
C程序设计第1-7章部分习题参考答案
课后习题解答(第1-7章)第一章1_1.1_1_2判断正误:即使两个整型数据未超出该数据的取值范围,它们的和也可能会超出该数据取值范围。
正确。
1_1_4判断正误:一个C程序可以有多个函数,其中主函数必须在程序的最开头。
错误。
其它函数如果要在主函数中使用的话,必须先在主函数之前定义或者声明。
1_1_6判断正误:若有定义“float x=1.3;”,则表达式(int)x的值为1,因此可以说x中存放的值就是1。
错误。
(int)x表达式的值与x的值是不一样的,前者是对x取整后的数值,而取整运算对x 自身的值不会产生影响。
1_1_8判断正误:若有命令行“#define N 1000”,则N++是不合法的表达式。
正确。
N为符号常量,不能对符号常量进行修改。
1_1_10 C程序是由函数构成的,一个C程序必须有一个主函数。
1_1_12以下变量中不合法的是②、④、⑥,合法的是①、③、⑤、⑦、⑧。
①name ②double ③Int ④if ⑤for_1 ⑥2k ⑦a12345678 ⑧_a1_1_14下面程序段的输出结果是1,1.000000int a; double b;a=b=123/100%2;printf("%d,%f", a, b);1_1_16 a*a*a*b*b/(c-d)1_1_20假设圆柱体的底面半径为r(=2.5),高为h(=3.5),请按下面给定的步骤编写求体积(体积=底面积X高)的程序。
①定义变量r,h,v(存放体积值),注意变量的数据类型。
②给变量r,h赋值。
③计算体积,并将结果存放在v中。
④输出r,h,v的值。
程序如下:#include <stdio.h>#define PI 3.1415926main(){float r, h, v;r=2.5;h=3.5;v=PI*r*r*h;printf("r=%f, h=%f, v=%f\n", r, h, v);}1_1_22编写输出以下图形的程序。
C程序设计第三版课后习题答案全解
C程序设计第三版课后习题答案全解第一章介绍本章主要介绍了C程序设计的基本概念和语法规则。
C语言作为一种通用的编程语言,被广泛应用于各个领域的软件开发中。
在本章中,我们将回答C程序设计第三版书中第一章习题,并给出详细的解答。
1.1 选择题1. A2. B3. C4. A5. D1.2 填空题1. 编译器2. 源程序3. 高级语言4. 运行时错误5. 堆栈6. 弱类型检查1.3 简答题1. 运行时错误与逻辑错误之间的区别是什么?运行时错误是程序在运行过程中出现的错误,例如除以零、数组越界等。
而逻辑错误是程序的设计或者实现上的错误,导致程序运行的结果不符合预期。
2. 为什么C语言被广泛应用于系统编程?C语言具有高效、灵活和可移植等特点,使得它成为系统编程的首选语言。
C语言可以直接访问底层硬件,具有强大的指针操作能力,同时又具备高级语言的特点,可以进行模块化设计和复用。
3. C语言的运算符有哪些类别?C语言的运算符可以分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。
1.4 编程题#include <stdio.h>int main() {int a = 5, b = 10;int c = a + b;printf("Sum is %d", c);return 0;}第二章数据类型本章主要讲解了C语言的数据类型及其使用方法。
数据类型是C程序中非常重要的概念,不同的数据类型可以存储不同范围和类型的数据。
在本章中,我们将回答C程序设计第三版书中第二章习题,并给出详细的解答。
2.1 选择题1. D2. A3. C4. B5. A2.2 填空题1. char2. 整型3. 浮点型4. double5. 短整型2.3 简答题1. 什么是数据类型?数据类型是一种确定数据存储和操作方式的分类。
C语言根据数据的性质将其分为不同的数据类型,以便于更有效地使用和管理数据。
C第六章习题答案(大题非选做).docx
6-3 (1)#include <iostream>using namespace std;int main(void){int num[10], *p, i, j, temp; cout«**输入10 个整数"vvendl; for(i=0; i<10; i++){ cin»num[订;}for(i=0; i<10; ■++){// 0, 1_________ 8p = &num[i];for(j = i+1; J<10; j++){//1, 2・.・ 9 if(num[i]<=num[J]){p = &num[j];}}cout«*p«endl; temp = *p;*p = num[i]; num[i] = temp;}system(M pause f,);return 0;(2)注:N的数值可以在宏定义中更改,以下是W12的吋候:#include <iostream>using namespace std;#define N 12struct N0DE{int num;NODE *next;};int i:class List{private:NODE list[N];NODE *temp;public:List() {//设置一个结点组成的圈temp = Iist;Iist[0].num = 1 ;Iist[0].next = &list[1];//第一个结点己经完成for(i=1: i<(N-1); ■++){Iist[i].num = i+1:Iist[i].next = &Iist[i+1];}//第二个至倒数第二个已经完成Iist[N-1].num = N;Iist[N-1].next = &list[O];//最后一个结点已经完成void Next2(){temp = temp->next;temp = temp->next;}void Fun(){temp = & list[N-1];//得到链表的最后一个结点地址do{Next2();//当前是0,数到2〃现在temp已经是标号为2的结点的地址了cout«(temp->next)->num«ff M;//$ny出要被删除的结点(p+1) temp->next = (temp->next)->next ;//^ 被删除的结点的前一个(p)和后一个相连接(p+2)}while(temp->next != (temp->next)->next); cout«temp->num;}};int main(void){List one; one.Fun(j; system(ft pause f,); return 0;}(3)#include <iostream>#include <string> using namespace std;#define SIZE 512class Str{private:char str1[SIZE]:char str2[SIZE];char *p;int i, length;public:void set(){cout«ff输入第一个字符串:ff«endl; cin>>str1;cout«ff输人第二个字符串:ft«endl; cin>>str2;}void fun(){Iian(str1, str2):}void Iian(char *m, char *n){ length = strlen(n); for(i=0; i<strlen(n)+1; i++){ P = & n[i];str1 [length+i] = *p;}cout«ft连接之后的结果:\n ft«str1«endl;}};int main(void){ Str one; one.set(); one.funO; system(ft pause f,); return 0;}(4)#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str[SIZE]:int upper, lower, space, number, other, i:public:Str(){upper=Iower=space=number=other=0;void set(){cout«ff输入一个字符ff«endl;gets(str);}void check(){for(i=0; i<strlen(str); i++){if(str[i]>=w A・ && str[i]<="Z>){upper++;}else if(str[i]>=w a w && str[i]<=w z w){lower++;}else if(str[i]=="・){space++;}else if(str[i]>=w O w && str[i]<=w9w){number++;}else{other++;}}}void te11(){check();coutvv"箕冇大写字母ff«upper«ft个,小写字母"«lower«ff个,空格"vvspacevv”个,数字ff«numbervv”个,其他字符■•vvothervv”个”vvendl;}};int main(void){Str one;one.set();one.tel 1();system(ft pause ff);return 0;}(5)代码中要用到strlen函数,所以包含了string头文件,但strcmp函数在string中己经定义,所以下题屮改用Strcmpo#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str1[SIZE];char str2[SIZE];■ nt i;public:void get(){cout«ft输入第一个字符串vvendl;OP+Q(Q+r1\■cout«M输入菊二个字符串:“vvendl; gets(str2);}void fun(){ Strcmp(str1, str2);}void Strcmp(char *m, char *n){int num;for(i=0; i<strlen(str1) || i<strlen(str2); i++){if(str1[i]==str2[i]){num = 0;}else{num = str1[i] - str2[i]; break;}}}};irrt main(void){Str one;one.get();one・fun();system(fl pause f,); return 0;}(6)注意:原有数组是不变的,但指针数组是排序Z后的。
《C语言程序设计》第6章习题答案
1、选择题(1)A(2)C(3)A(4)B(5)B(6)D(7)D(8)B(9)D(10)B2、填空题(1)a=10,b=20a=20,b=10(2)**pp=603、程序设计题(1)#include<stdio.h>char *month_name(int n);void main(){int n;printf("\nPlease enter 1 integer:");scanf("%d",&n);printf("%d month :%s\n",n,month_name(n));}char *month_name(int n){static char*name[]={"illegal month","Jan","Feb","Mar","Apr","May","Jun","July","Aug","Sept","Oct","Nov","Dec"};return ((n<1||n>12)?name[0]:name[n]);}(2)#include<stdio.h>#define N 10sort(int data[]){int i,j,min_a,temp;for(i=0;i<N;i++){min_a=i;for(j=i+1;j<N;j++)if(*(data+j)<*(data+min_a))min_a=j;if(min_a!=i){temp=*(data+min_a);*(data+min_a)=*(data+i);*(data+i)=temp;}}}main(){int i,j,data[N],temp;int min_a;printf("\nPlease input %d int:\n",N);for(i=0;i<N;i++)scanf("%d",&data[i]);sort(data);printf("After sorted:\n");for(i=0;i<N;i++)printf(" %d",data[i]);}(3)#include <stdlib.h>void reverse(char *c);void main(){char str[80];puts("Please enter 1 string\n");gets(str);reverse(str) ;puts("After reversed\n");puts(str);}void reverse(char *c){char *p,*q,temp;int size=0;for(p=c;*p!='\0';p++)size++;size=size/2;for(q=c,p--;q<c+size;q++,p--){temp=*q;*q=*p;*p=temp;}}(4)#include<stdio.h>#include<string.h>void sort(char *keyword[],int size);void print(char *keyword[],int size)void main(){char *keyword[]={"if","else","case","switch","do","whlie","for","break","continue"};sort(keyword,9);print(keyword,9);}void sort(char *keyword[],int size){int i,j,min_location;char *temp;for(i=0;i<size-1;i++){min_location=i;for(j=i+1;j<size;j++)if(strcmp(keyword[min_location],keyword[j])>0) min_location=j;if(min_location!=i){temp=keyword[i];keyword[i]=keyword[min_location];keyword[min_location]=temp;}}}void print(char *keyword[],int size){int i;for(i=0;i<size;i++)printf("\n%s",*(keyword+i));}(5)#include<stdio.h>void fun_char(char str1[],char str2[],char str3[]);void main(){char str1[80],str2[80],str3[80],c,i;printf("\nPlease enter 2 string:");scanf("%s%s",str1,str2);fun_char(str1,str2,str3);printf("Third string is %s.",str3);}void fun_char(char *str1,char *str2,char *str3){int i,j,k,flag;i=0,k=0;while(*(str1+i)!='\0'){j=0;flag=1;while(*(str2+j)!='\0'&&flag==1){if(*(str2+j)==*(str1+i)) flag=0;j++;}if(flag){*(str3+k)=*(str1+i); k++;}i++;}*(str3+k)='\0';}(6)#include<stdio.h>int count_word(char *str);void main(){char str1[80],c,res;puts("\nPlease enter a string:");gets(str1);printf("There are %d words in this sentence",count_word(str1)); }int count_word(char *str){int count ,flag;char *p;count=0;flag=0;p=str;while(*p!='\0'){if(*p==' ')flag=0;else if(flag==0){flag=1;count++;}p++;}return count;}(7)#include<stdio.h>#include<string.h>char *encrypt(char *string);char *decrypt(char *string);main(){char item[80];char *point;char *pEncrypted;char *pDecrype;printf("Please enter the string need to encrypt:\n");gets(item);point=item;pEncrypted=encrypt(point);printf("\nThe string after encrypted is:\n%s\n",pEncrypted); pDecrype=decrypt(pEncrypted);printf("\nThe string after decrypted is:\n%s\n",pDecrype);free(pEncrypted);free(pDecrype);}char *encrypt(char *string){char *q,*t;q=(char *)malloc(sizeof(char)*80);if(!q){printf("No place to malloc!");return 0;}t=q;while(*string!='\0'){*q=*string-2;string++;q++;}*q='\0';return t;}char *decrypt(char *string){char *q,*t;q=(char *)malloc(sizeof(char)*80); if(!q){printf("No place to malloc!");return 0;}t=q;while(*string!='\0'){*q=*string+2;string++;q++;}*q='\0';return t;}。
c语言程序设计第五版课后答案谭浩强第六章习题答案
c语⾔程序设计第五版课后答案谭浩强第六章习题答案第六章:利⽤数组处理批量数据1. ⽤筛选法求100之内的素数【答案解析】素数:约数为1和该数本⾝的数字称为素数,即质数筛选法:⼜称为筛法。
先把N个⾃然数按次序排列起来。
1不是质数,也不是合数,要划去。
第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。
2后⾯第⼀个没划去的数是3,把3留下,再把3后⾯所有能被3整除的数都划去。
3后⾯第⼀个没划去的数是5,把5留下,再把5后⾯所有能被5整除的数都划去。
这样⼀直做下去,就会把不超过N 的全部合数都筛掉,留下的就是不超过N的全部质数。
因为希腊⼈是把数写在涂腊的板上,每要划去⼀个数,就在上⾯记以⼩点,寻求质数的⼯作完毕后,这许多⼩点就像⼀个筛⼦,所以就把埃拉托斯特尼的⽅法叫做“埃拉托斯特尼筛”,简称“筛法”。
(另⼀种解释是当时的数写在纸草上,每要划去⼀个数,就把这个数挖去,寻求质数的⼯作完毕后,这许多⼩洞就像⼀个筛⼦。
)【代码实现】//⽤筛选法求100以内的素数#include<stdio.h>int main(){int i, j, k = 0;// 将数组汇总每个元素设置为:1~100int a[100];for (i = 0; i < 100; i++)a[i] = i+1;// 因为1不是素数,把a[0]⽤0标记// 最后⼀个位置数字是100,100不是素数,因此循环可以少循环⼀次a[0] = 0;for (i = 0; i < 99; i++){// ⽤a[i]位置的数字去模i位置之后的所有数据// 如果能够整除则⼀定不是素数,该位置数据⽤0填充for (j = i + 1; j < 100; j++){if (a[i] != 0 && a[j] != 0){//把不是素数的都赋值为0if (a[j] % a[i] == 0)a[j] = 0;}}}printf(" 筛选法求出100以内的素数为:\n");for (i = 0; i < 100; i++){//数组中不为0的数即为素数if (a[i] != 0)printf("%3d", a[i]);}printf("\n");return 0;}【运⾏结果】2. ⽤选择法对10个整数排序【答案解析】选择排序原理:总共两个循环,外循环控制选择的趟数,内循环控制具体选择的⽅式。
《C++程序设计案例教程》第六章非基本数据类型课件
5)
6)
在C++中,提供了三种形 式来引用结构体中的成员:
如果声明一个指
(1)结构体变量名.成员名; (2)指针变量名->成员名; (3)(*指针变量名).成员 名。
针变量,并让其 指向一个结构体 数据类型,那么 称该指针为结构
体指针 。
结构体变量 的初始化
引用结构体成员
结构体指针
目录
6.2 联合体结构
成员变量列表 … }; 声明联合体变量的方法与声明结构体变量的类似。 在任一时刻,结构体中的所有成员都可访问,而联 合体中只有一个成员可以访问,其余成员都不可访问。 如果同时给联合体变量中的两个成员赋值,那么在该 联合体所占内存空间中,将只保存最后一次赋值。
目录
6.3 枚举类型
▪ C▪li案ck 例to a引dd入Text
}
目录
6.4 自定义类型
▪ C▪li案ck 例to a引dd入Text
A使dd用yo自ur定te义xt i类n h型ere
使用类型重定义关键字typedef,重新定义整型类型和字符类型,并 用其声明变量并初始化,然后将变量值输出。
目录
6.4 自定义类型
源代码展示
#include "stdafx.h"
定义结构体
在C++中,使用关键字struct来 定义结构体,其语法格式如下: struct 结构体标识符 {
成员变量列表 … };
目录
知识讲解
声明结构体变量
常用的声明方法有以下两种。
(1)先定义结构体类型,再单独进行变量声明。示例
程序中声明的结构体变量stu1就属于这种方法。
(2)在定义结构体类型同时声明结构体变量。使用这
C语言程序设计实例教程 第2版 习题答案 作者 李红 第6章 数组
6.4 课后习题6.4.1 项目练习一.练习目的1.进一步巩固一维数组的定义与数组元素的引用方法2.进一步巩固二维数组的定义与数组元素的引用方法3.进一步巩固字符数组的定义与引用方法二.练习内容1.用起泡法对10个数由大到小进行排序。
分析:起泡法的算法思想是,n个数排序,将相邻两个数依次进行比较,将大数调在前头,逐次比较,直至将最小的数移至最后,然后再将n-1个数继续比较,重复上面操作,直至比较完毕。
可采用双重循环实现起泡法排序,外循环控制进行比较的次数,内循环实现找出最小的数,并放在最后位置上(即沉底)。
#include "stdio.h"main(){int a[10];int i,j,t;printf("请输入10个整数:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]<a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("排序后的数为::\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");getch();}2.从键盘输入10个整数,检查整数3是否包含在这些数据中,若是的话,它是第几个被输入的。
#include "stdio.h"main(){int i,a[10];printf("请输入这10个整数:");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){if(a[i]==3) printf("3包含于数列中,输入顺序号是:%d",i+1);elseprintf("3不包含于此数列中");}getch();}3.编程:一个3*5的数组,要求每行都进行降序排列,并求出每行的平均值。
C++程序设计基础课后答案第六章
C++程序设计基础课后答案第六章6.1 阅读下列程序,写出执行结果1. #includeclass T{ public :T() { a = 0; b = 0; c = 0; }T( int i , int j , int k ){ a = i; b =j ; c = k; }void get( int &i , int &j , int &k ) { i = a; j = b; k = c; }T operator * ( T obj );private:int a , b , c;};T T::operator * ( T obj ){ T tempobj;tempobj.a = a * obj.a;tempobj.b = b * obj.b;tempobj.c = c * obj.c;return tempobj;}void main(){ T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3; int a , b , c;obj3 = obj1 * obj2;obj3.get( a, b, c );cout << "( obj1 * obj2 ): \t"<< "a = " << a << '\t' << "b = " << b<< '\t' << "c = " << c << '\t' << endl; ( obj2 * obj3 ).get( a, b, c );cout << "( obj2 * obj3 ): \t "<< "a = " << a << '\t' << "b = " << b << '\t' << "c = "<< c<< '\t' << endl; }2. #include < iostream.h >class Vector{ public:Vector(){ }Vector(int i,int j){ x = i ; y = j ; }friend Vector operator + ( Vector v1, Vector v2 ){ Vector tempVector ;tempVector.x = v1.x + v2.x ;tempVector.y = v1.y + v2.y ;return tempVector ;}void display(){ cout << "( " << x << ", " << y << ") "<< endl ; } private:int x , y ;};void main(){ Vector v1( 1, 2 ), v2( 3, 4 ), v3 ;cout << "v1 = " ;v1.display() ;cout << "v2 = " ;v2.display() ;v3 = v1 + v2 ;cout << "v3 = v1 + v2 = " ;v3.display() ;}6.2 思考题1.一个运算符重载函数被定义为成员函数或友员函数,从定义方式、解释方式和调用方式上有何区别?可能会出现什么问题?请用一个实例说明之。
电子工业出版社教材《C程序设计实例教程》习题答案
(7)设y是int型变量,请写出判断y为奇数的关系表达式 (y%2) = =1
。
习
题 4
4.1 单项选择题 (1)若以下选项中的变量已正确定义,则正确的赋值语句是___C___。 A.x1=26.8%3 B.1+2=x2 C.x3=0x12 D.x4=1+2=3; (2)以下程序输出结果是___D___。
(3)C 语言中,运算对象必须是整型的运算符是( B ) 。 A./ B.% C.+ D.(4)若有以下定义:char a; int b; float c; double d ;则表达式 a*b+d-c 值的类型为( D ) 。 A.float B.int C.char D.double (5)执行语句“x=(a=3,b=a--)”后,x,a,b 的值依次是( C ) 。 A.3,3,2 B.3,2,2 C.3,2,3 D.2,3,2 (6)若有代数式 3ae/bc,则不正确的 C 语言表达式是( C ) 。 A.a/b/c*e*3 B.3*a*e/b/c C.3*a*e/b*c D.a*e/b/c*3 (7)设整型变量 n 的值为 2,执行语句“n+=n-=n*n; ”后,n 的值是( C ) 。 A.0 B.4 C.-4 D.2 (8)已知 a=5,b=8,c=10,d=0;表达式的值为真的是( D ) 。 A.a*2>8+2 B.a&&d C.(a*2-c)||d D.a-b<c*d (9)以下程序运行后的输出结果是( A ) 。
D.switch(a+b)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章非基本数据类型
一、选择题
1. C
2.C
3.D
4.A
5.D
二、写出下面程序的运行结果
zhangsan 37 2493
三、编程题
1. 定义一个表示日期的结构体变量(包括年月日),写一个函数,返回值为某天是当年的第几天。
#include <iostream.h>
struct date //定义结构体类型
{
int year;
int month;
int day;
};
int
i,count,daysofmonth[13]={0,31,28,31,30,31,30,31,31,30,31 ,30,31};
int main(int argc, char* argv[])
{
struct date d; //定义结构体变量
int days=0;
cout<<"请输入日期(年月日):"<<endl;
cin>>d.year>>d.month>>d.day;
count=d.day; //把 dt.d 计入总天数 for(i=0;i<d.month;i++)
count+=daysofmonth[i];
//把输入月份前面的每月的天数累计入总数
if(d.month>2 &&
(d.year%4==0&&d.year%100!=0||d.year%400==0) )
count+=1;
//如果是闰年,则要把3月份和3月份以后的总天数加1
cout<<"这一日是这一年的第"<<count<<"日"<<endl;
return 0;
}
2. 定义一种表示学生的姓名,课程名,期中和期末成绩的结构,然后输入一个学生的期中和期末成绩,计算平均成绩并输出。
#include <iostream.h>
struct student
{
char *name;
char *coursename;
float qzcj;
float qmcj;
}stu={"LiPing","语文",80,85};
int main(int argc, char* argv[])
{
float avgScore;
avgScore=(stu.qzcj+stu.qmcj)/2;
cout<<stu.coursename<<"平均成绩为:"<<avgScore<<endl;
return 0;
}。