#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;}
#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>=1
a[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;}