#include<cstdio>intmain(){
int i =100,sum =0;//求1 + 2 + 3 + ... + 100,while()实现while(i){
sum += i;i--;}printf("%d\n", sum);return0;}
问题 B: 例题5-1-2 连续自然数求和
#include<cstdio>intmain(){
int n =1, sum =0;//使用do...while语句实现1到100求和do{
sum += n;n++;}while(n <=100);printf("%d\n", sum);return0;}
问题 C: 例题5-1-3 连续自然数求和
#include<cstdio>intmain(){
int sum =0;//求1 + 2 + 3 + ... + 100,要求用for语句实现for(int i =100; i >=0; i--){
sum += i;}printf("%d", sum);return0;}
问题 E: 例题5-1-5 连续自然数求和
#include<cstdio>intmain(){
int i,sum=0;//编程实现求1+2+3+...和的程序,要求得到使和数大于1000的最小正整数。for(i=1; sum <=1000;i++){
sum += i;}i--;printf("%d\n", i);return0;}
问题 F: 例题5-6 矩阵输出
#include<cstdio>intmain(){
for(int i =1; i <=4; i++){
for(int j =1; j <=5; j++){
printf("%3d", i*j);}printf("\n");}return0;}
问题 G: 例题5-7 求圆周率pi的近似值
#include<cstdio>#include<cmath>#include<cstdio>/* 用如下公式 pi/4 = 1-1/3+1/5-1/7....求圆周率PI的近似值,直到发现某一项的绝对值 小于10-6为止(该项不累加)。 如果需要计算绝对值,可以使用C语言数学库提供的函数fabs,如求x的绝对值,则为fabs(x). 输出 PI=圆周率的近似值 输出的结果总宽度占10位,其中小数部分为8位。末尾输出换行。 */intmain(){
double pi =0.0;for(double term =1, i =1, j =3;fabs(term)>=1e-6;j+=2){
pi += term;i =-i;term = i / j;}printf("PI=%10.8f\n",pi*4);getchar();return0;}
问题 H: 例题5-8 Fibonacci数列
#include<cstdio>/*输入 一个不超过50的正整数 输出 Fibonacci数列的第n个数,末尾输出换行。*/intfibo(int n){
//利用递归实现分治法的简单例子//递归函数的实现必须要有递归边界和递归式if(n ==1|| n ==2)return1;elsereturnfibo(n -1)+fibo(n -2);}intmain(){
int n;scanf("%d",&n);printf("%d\n",fibo(n));return0;}
问题 I: 习题5-10 分数序列求和
#include<cstdio>/* 有一个分数序列:2/1 , 3/2 , 5/3 , 8/5 , 13/8 , 21/13 ... 求出这个数列的前20项之和. 输出 小数点后保留6位小数,末尾输出换行。*/doubletop(int n){
if(n ==1)return2;elseif(n ==2)return3;elsereturntop(n -1)+top(n -2);}doublebottom(int n){
if(n ==1)return1;elseif(n ==2)return2;elsereturnbottom(n -1)+bottom(n -2);}intmain(){
double sum =0.0;for(int i =1; i <=20; i++){
sum +=double(top(i)/bottom(i));}printf("%.6f\n", sum);return0;}
数组
问题 A: 习题6-4 有序插入
#include<cstdio>/* 第一行输入以空格分隔的9个整数数,要求按从小到大的顺序输入。 第二行输入一个整数, 将此整数插入到前有序的9个数中,使得最终的10个数 依然是从小到大有序的。 输出 从小到大输出这10个数,每个数一行8*/intmain(){
int a[10],b;for(int i =0; i <9; i++)scanf("%d",&a[i]);scanf("%d",&b);/*for (int i = 8; i >= 0; i--){if (b < a[i])a[i + 1] = a[i];else{a[i+1] = b;break;} }for (int i = 0; i < 10; i++)printf("%d\n", a[i]);*/int i;for(i =9; b < a[i -1]&&i >=1; i--)//注意i>=1a[i]= a[i -1];a[i]= b;for(int i =0; i <10; i++)printf("%d\n", a[i]);return0;}
问题 B: 习题6-5 数组元素逆置
#include<cstdio>/* 将一个长度为10的整型数组中的值按逆序重新存放。 输入 从键盘上输入以空格分隔的10个整数。 输出 按相反的顺序输出这10个数,每个数占一行。*/intmain(){
int a[10],b[10];int j =9;for(int i =0; i <10; i++){
scanf("%d",&a[i]);b[j]= a[i];j--;}for(int i =0; i <10; i++)printf("%d\n", b[i]);return0;}
问题 C: 习题6-6 杨辉三角
#include<cstdio>//输入 输入只包含一个正整数n,表示将要输出的杨辉三角的层数。//输出 对应于该输入,请输出1 - 相应层数的杨辉三角,每一层的整数之间用一个空格隔开, 最多输出10层intmain(){
int n, a[10]={
1,1};scanf("%d",&n);for(int i =1; i <= n; i++){
//打印第1,2层if(i ==1)printf("%d\n", a[0]);elseif(i ==2)printf("%d %d\n", a[0], a[1]);else{
//打印其它层int temp[10];temp[0]=1;int j;//从a的现在一层推导出下一层,存入临时数组for(j =1; j <= i -2; j++)temp[j]= a[j -1]+ a[j];temp[j]=1;//打印这一层for(int k =0; k <=j; k++)printf("%d ", temp[k]);printf("\n");//更新数组afor(int m =0; m < i; m++)a[m]= temp[m];}}return0;}
问题 D: 习题6-12 解密
#include<cstdio>#include<cstring>#include<iostream>usingnamespace std;//第一个字母变成第26个字母,第i个字母变成第(26 - i + 1)个字母,非字母字符不变。//要求根据密码译回原文,并输出。//输入 输入一行密文; 输出 解密后的原文,单独占一行。intmain(){
char str[100];gets(str);for(int i =0; i <strlen(str); i++){
if(str[i]>=65&& str[i]<=90){
str[i]=155- str[i];}elseif(str[i]>=97&& str[i]<=122){
str[i]=219- str[i];}}puts(str);//syetem("pause");std::cin.get();return0;}
问题 E: 习题6-13 字符串比较
#include<cstdio>#include<cstring>//比较两个字符串s1和s2的大小,如果s1>s2,则输出一个正数;//若s1 = s2,则输出0;若s1<s2,则输出一个负数。// 要求:不用strcpy函数;两个字符串用gets函数读入。// 输入 输入2行字符串// 输出 一个整数,表示这两个字符串 比较的差值,单独占一行。intmain(){
char s[100], t[100];int temp;gets(s);gets(t);int a=strlen(s);int b=strlen(t);int lt = a < b ? a : b;for(int i =0;i < lt; i++){
temp=s[i]- t[i];if(temp)//如果不等于0break;else{
if(a == b && i == a -1)break;}}printf("%d\n", temp);return0;}
问题 F: 例题6-1 逆序输出数组元素
#include<cstdio>//输入 10个整数,以空格分隔//输出 将输入的10个整数逆序输出,每个数占一行。intmain(){
int a[10];for(int i =0; i <10; i++)scanf("%d", a+i);for(int i =9; i >=0; i--)printf("%d\n", a[i]);return0;}
问题 G: 例题6-2 数组求解Fibonacci数列问题
#include<cstdio>//输入 无//输出 Fibonacci数列的前20个数,每个数占一行。intmain(){
int fib[20]={
1,1};for(int i =2; i <20; i++)fib[i]=fib[i -1]+ fib[i -2];for(int i =0; i <20; i++)printf("%d\n", fib[i]);return0;}
问题 H: 例题6-3 冒泡排序
#include<cstdio>intmain(){
int a[10];for(int i =0; i <10; i++)scanf("%d",&a[i]);for(int i =1; i <=9; i++){
for(int j =0; j <=9-i; j++){
if(a[j]> a[j+1]){
int temp = a[j];a[j]= a[j+1];a[j+1]= temp;}}}for(int i =0; i <10; i++)printf("%d\n", a[i]);return0;}
问题 I: 例题6-4 矩阵转置
#include<cstdio>//输入 2行数据,每行3个整数,以空格分隔。//输出 行列互换后的矩阵,3行,每行2个数据,以空格分隔intmain(){
int a[2][3];for(int i =0; i <2; i++){
for(int j =0; j <3; j++){
scanf("%d",&a[i][j]);}}/*for (int i = 0; i < 3; i++){for (int j = 0; j < 2; j++){printf("%d ", a[j][i]);}printf("\n");}*/int aT[3][2];for(int i =0; i <2; i++){
for(int j =0; j <3; j++){
aT[j][i]= a[i][j];}}for(int i =0; i <2; i++)printf("%d %d\n", aT[i][0], aT[i][1]);return0;}
问题 J: 例题6-9 字符串求最大值
#include<cstdio>#include<cstring>//输入 输入3行,每行均为一个字符串。//输出 一行,输入三个字符串中最大者intmain(){
char s1[100], s2[100], s3[100],*Max;gets(s1);gets(s2);gets(s3);Max = s1;if(strcmp(Max, s2)<0) Max = s2;if(strcmp(Max, s3)<0) Max = s3;printf("%s", Max);return0;}
函数
问题 A: 习题7-5 字符串逆序存放
#include<cstdio>#include<cstring>//输入 一行字符串。//输出 输入字符串反序存放后的字符串。单独占一行voidreverse(char a[]){
int len =strlen(a);for(int i =0; i < len/2; i--){
int temp = a[i];a[i]= a[len -1- i];a[len -1- i]= temp;}}intmain(){
char a[100];gets(a);reverse(a);printf("%s\n", a);return0;}
问题 B: 习题7-7 复制字符串中的元音字母
//输入 一个字符串(一行字符)。//输出 该字符串所有元音字母构成的字符串。行尾换行voidvowels(char s1[],char s2[]){
int len =strlen(s1),j =0;for(int i =0; i < len; i++){
if(s1[i]=='a'|| s1[i]=='e'|| s1[i]=='i'|| s1[i]=='o'|| s1[i]=='u'){
s2[j]= s1[i];j++;}}s2[j]='\0';}intmain(){
char s1[100],s2[100];gets(s1);vowels(s1,s2);printf("%s\n", s2);return0;}
指针
问题 A: C语言10.1
#include<cstdio>//输入a和b两个整数,按先大后小的顺序输出a和b//注意请使用指针变量的方式进行比较和输出intmain(){
int a, b;scanf("%d%d\n",&a,&b);int*p=&a,*p1=&b;if(*p >=*p1)printf("%d %d\n",*p,*p1);elseprintf("%d %d\n",*p1,*p);return0;}
问题 B: C语言10.2
#include<cstdio>//输入 三个用空格隔开的整数a、b和c。//输出 按先大后小的顺序输出a、b和c,用空格隔开。请注意行尾输出换行intmain(){
int a[3];scanf("%d%d%d\n",&a[0],&a[1],&a[2]);for(int i =1; i <=2; i++){
for(int* p = a; p < a+2; p++){
if(*p <*(p +1)){
int temp =*p;*p =*(p +1);*(p +1)= temp;}}}printf("%d %d %d\n",*a,*(a +1),*(a +2));return0;}
问题 C: C语言10.10
#include<cstdio>#include<cstring>//给定字符串定义char *a = “I love China!”,//读入整数n,输出在进行了a = a + n这个赋值操作以后字符指针a对应的字符串。//输入 一个整数n,保证0 <= n<13.//输出 输出进行了题目描述中赋值操作之后a对应的字符串.请注意行尾输出换行intmain(){
char* a ="I love China!";int n;scanf("%d",&n);puts(a + n);return0;}
#include<cstdio>//输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求//用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。//输入 用空格隔开的10个整数。//输出 输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格voidinp(int a[]){
for(int i =0; i <10; i++)scanf("%d", a + i);}voidswap(int*a,int*b){
int temp =*a;*a =*b;*b = temp;}voidtackle(int a[]){
int min=*a, max=*a,mink=0,maxk=0;for(int i =1; i <10; i++){
if(a[i]< min){
min =*(a + i);mink = i;}if(a[i]> max){
max =*(a + i);maxk = i;}}swap(a, a + mink);swap(a +9,a + maxk);}voidoup(int a[]){
for(int* p = a; p < a+10; p++){
printf("%d ",*p);}printf("\n");}intmain(){
int a[10];inp(a);tackle(a);oup(a);return0;}
结构体
问题 A: C语言11.1
#include<cstdio>#include<cstring>//输入第一行有一个整数n,表示以下有n张选票信息将会输入。保证n不大于100。//以后的n行中,每一行包含一个人名,为选票的得票人。保证每一个人名都是Li,//Zhang和Fun中的某一个。//输出//有三行,分别为Li,Zhang和Fun每人的得票数。格式为首先输出人名,其后输出一个冒号,//最后输出候选人的得票数。注意行尾输出换行struct person{
char name[20];int count;}leader[3]={
"Li",0,"Zhang",0,"Fun",0};intmain(){
int n;char name1[20];scanf("%d",&n);for(int i =0; i < n; i++){
scanf("%s",&name1);if(!strcmp(name1, leader[0].name))leader[0].count++;elseif(!strcmp(name1, leader[1].name))leader[1].count++;else leader[2].count++;}for(int i =0; i <3; i++){
printf("%s:%d\n", leader[i].name, leader[i].count);}return0;}
问题 B: C语言11.2
#include<cstdio>//输入 第一行有一个整数n,表示以下有n个学生的信息将会输入。保证n不大于20。//以后的n行中,每一行包含对应学生的学号、名字、性别和年龄,用空格隔开。保证每一个人名//都不包含空格且长度不超过15,性别用M和F两个字符来表示。//输出 有n行,每行输出一个学生的学号、名字、性别和年龄,用空格隔开struct student{
int num;char name[20];char sex;int age;};intmain(){
int n;scanf("%d",&n);student stu[20],*ptrToStu[20];for(int i =0; i < n; i++){
scanf("%d %s %c %d\n",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].age);ptrToStu[i]=&stu[i];}for(int i =0; i < n; i++)//printf("%d %s %c %d\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age);printf("%d %s %c %d\n", ptrToStu[i]->num, ptrToStu[i]->name, ptrToStu[i]->sex, ptrToStu[i]->age);return0;}
问题 C: C语言11.4
#include<cstdio>struct body{
int num;char name[10];char sex;char job;union{
int classes;char position[10];}category;}member[100];intmain(){
int n;scanf("%d",&n);for(int i =0; i < n; i++){
scanf("%d %s %c %c",&member[i].num, member[i].name,&member[i].sex,&member[i].job);if(member[i].job =='s')scanf("%d",&member[i].category.classes);elseif(member[i].job =='t')scanf("%s", member[i].category.position);}for(int i =0; i < n; i++){
if(member[i].job =='s')printf("%d %s %c %c %d\n", member[i].num, member[i].name, member[i].sex, member[i].job, member[i].category.classes);elseif(member[i].job =='t')printf("%d %s %c %c %s\n", member[i].num, member[i].name, member[i].sex, member[i].job, member[i].category.position);}return0;}
问题 D: C语言11.7
#include<cstdio>typedefstruct student {
int num;char name[20];int score1;int score2;int score3;};voidinput(student stds[]){
for(int i =0; i <5; i++)scanf("%d %s %d %d %d",&stds[i].num, stds[i].name,&stds[i].score1,&stds[i].score2,&stds[i].score3);}voidprint(student *stds){
for(int i =0; i <5; i++)printf("%d %s %d %d %d\n", stds[i].num, stds[i].name, stds[i].score1, stds[i].score2, stds[i].score3);}intmain(){
struct student stds[5];input(stds);print(stds);return0;}
问题 E: C语言11.8
#include<cstdio>struct student{
int num;char name[20];int score[3];};voidinput(student stu[]){
for(int i =0; i <10; i++)scanf("%d %s %d %d %d",&stu[i].num, stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);}voidprint(student stu[]){
double sum[3]={
0}, max_aver =(stu[0].score[0]+ stu[0].score[1]+ stu[0].score[2])/3.0;int k =0;for(int i =0; i <10; i++){
sum[0]+= stu[i].score[0];sum[1]+= stu[i].score[1];sum[2]+= stu[i].score[2];double now_max =(stu[i].score[0]+ stu[i].score[1]+ stu[i].score[2])/3.0;if(now_max > max_aver){
k = i;max_aver = now_max;}}printf("%.2f %.2f %.2f\n", sum[0]/10, sum[1]/10, sum[2]/10);printf("%d %s %d %d %d\n", stu[k].num, stu[k].name, stu[k].score[0], stu[k].score[1], stu[k].score[2]);}intmain(){
student stu[10];input(stu);print(stu);return0;}