文章目录
- 第1章 程序设计和C语言
- 第2章 算法------程序的灵魂
- 第3章 最简单的C程序设计
- 3.1给定一个大写字母,要求用小写字母输出:
- 3.2给出三角形的三边长,求三角形面积:
- 3.3先后输出BOY三个字符:
- 3.4从键盘输入三个字符,然后把它们输出到屏幕上:
- 3.5C语言中如何输出字节数:
- 3.6输出字符型变量:
- 3.7对于方程y=ax^2+bx+c,求其实根:
- 第4章 选择结构程序设计
- 4.1根据键盘输入的x值,输出相应y的值:
- 4.2输入成绩等级,得到分数段:
- 4.3把十个数字按从小到大的顺序排序,并打印到屏幕上:
- 4.4编写程序,用getchar函数读入两个字符给c1、c2,然后判断两个字符是否属于大写字母,如果是则转换成小写字母,如果不是则不转换,输出最后得到的字符:
- 4.5输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。(和4.4相似,但方法不同)
- 4.6输入3个数a,b,c,要求按由小到大的顺序输出。
- 4.7输入两个实数,按代数值由小到大的顺序输出这两个数。(和4.6相似,但方法不同)
- 第5章 循环结构程序设计
- 5.1有一个10×10的矩阵,要求输出其中值最大的那个元素的值,以及其所在的行号和列号
- 5.2求1+2+3+…+100
- 5.3在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。
- 5.4
- 5.5求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。
- 5.6输入一个大于3的整数n,判定它是否素数(prime,又称质数):
- 5.7求100~n(n>100)间的全部素数:
- 5.8译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。(非字母字符保持原状不变输入一行字符,要求输出其相应的密码)
- C语言优先级:
第1章 程序设计和C语言
1.1在屏幕上输出一条信息:
#include<stdio.h>
int main()
{
printf("This is a C program.\n");
return 0;
}
编译结果如下:
1.2求两个整数之和:
#include<stdio.h>
int main()
{
int a,b,sum;
printf("Please input two numbers:\n");
scanf("%d%d",&a,&b);
sum=a+b;
printf("sum=%d\n",sum);
return 0;
}
编译结果如下:
1.3求两个整数中的较大者:
#include<stdio.h>
int bigger(int x,int y);
int bigger(int x,int y)
{
return(x>y?x:y);
}
int main()
{
int a,b,c;
printf("Please input two numbers:\n");
scanf("%d%d",&a,&b);
c=bigger(a,b);
printf("bigger=%d\n",c);
return 0;
}
编译结果如下:
第2章 算法------程序的灵魂
2.1求1-1/2+1/3-1/4+…+1/99-1/100的值:
S1:sign=1
S2:sum=1
S3:deno=2
S4:sign=(-1)sign
S5:term=sign(1/deno)
S6:sum=sum+term
S7:deno=deno+1
S8:若deno≤100返回S4;否则算法结束
99次循环后sum的值就是所要求的结果
#include<stdio.h>
int main()
{
int sign=1;
double deno=2.0,sum=1.0,term;
while(deno<=100)
{
sign=-sign;
term=sign/deno;
sum=sum+term;
deno=deno+1;
}
printf("%f\n",sum);
return 0;
}
编译结果如下:
第3章 最简单的C程序设计
3.1给定一个大写字母,要求用小写字母输出:
#include <stdio.h>
int main ( )
{
char c1,c2;
c1='A'; //将字符‘A’的ASCII代码65放到c1中
c2=c1+32; //将65+32的结果放到c2中
printf("%c\n",c2); //用字符形式输出
printf("%d\n",c2); //用十进制形式输出
return 0;
}
编译结果如下:
3.2给出三角形的三边长,求三角形面积:
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,s,area;
printf("请输入三角形的三边长:");
scanf("%lf%lf%lf",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%lf\n",area);
}
编译结果如下:
3.3先后输出BOY三个字符:
#include<stdio.h>
int main()
{
char a='B',b='O',c='Y';
putchar(a);
putchar(b);
putchar(c);
printf("\n");
return 0;
}
编译结果如下:
3.4从键盘输入三个字符,然后把它们输出到屏幕上:
#include<stdio.h>
int main()
{
char a,b,c;
a=getchar();
b=getchar();
c=getchar();
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
return 0;
}
编译结果如下:
简化版:
#include<stdio.h>
int main()
{
putchar(getchar());
putchar(getchar());
putchar(getchar());
putchar('\n');
}
//C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线
编译结果如下:
3.5C语言中如何输出字节数:
#include<stdio.h>
int main()
{
int a;
char stu;
float b;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(stu));
printf("%d\n",sizeof(b));
}
编译结果如下:
3.6输出字符型变量:
#include<stdio.h>
int main()
{
char c='?';
int a=2;
printf("%d\n %c\n",c,c);
printf("%s\n","China");
//s格式符。用来输出一个字符串----printf("%s","CHINA");输出字符串:CHINA
printf("%lf\n",(double)a);
//(double)a (将a转换成double类型)
}
编译结果如下:
3.7对于方程y=ax^2+bx+c,求其实根:
#include <stdio.h>
#include <math.h>
int main ( )
{
double a,b,c,disc,x1,x2,p,q;
printf("请输入a,b,c的值,并用空格隔开:\n");
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
if(disc>=0)
{
p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);
return 0;
}
else
{
printf("此方程无实根!");
}
}
编译结果如下:
第4章 选择结构程序设计
4.1根据键盘输入的x值,输出相应y的值:
#include <stdio.h>
int main(void)
{
float x,y;
printf("请输入x的值:");
scanf("%f", &x);
if(x<1)
{
y = x;
}
else if(x>=10)
{
y = 3*x-11;//注意乘号不能少!!!
}
else
{
y = 2*x-1;
}
printf("x = %f, y = %f\n", x, y);
return 0;
}
编译结果如下:
4.2输入成绩等级,得到分数段:
int main()
{
char grade;
scanf("%c",&grade);
printf("Your score:");
switch(grade)
{
case 'A': printf("85~100\n");break;
case 'B': printf("70~84\n");break;
case 'C': printf("60~69\n");break;
case 'D': printf("<60\n");break;
default: printf("enter data error!\n");
}
return 0;
}
编译结果如下:
4.3把十个数字按从小到大的顺序排序,并打印到屏幕上:
#include <stdio.h>
int main()
{
int a[10];
int j=0,i=0;
printf("Input 10 numbers:\n");//输入10个数字,并用空格隔开
printf("\n");
for(i=0; i<10; i++)
{
scanf("%d",&a[i]);
}
printf("The result:");
for(i=9; i>0; i--)
{
for(j=0; j<i; j++)
{
if(a[j] > a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(i=0; i<10; i++)
{
printf("%5d",a[i]);
}
printf("\n");
}
编译结果如下:
4.4编写程序,用getchar函数读入两个字符给c1、c2,然后判断两个字符是否属于大写字母,如果是则转换成小写字母,如果不是则不转换,输出最后得到的字符:
#include <stdio.h>
int main ( )
{
char c1,c2;
printf("输入两个字符c1,c2:\n");
c1=getchar();
c2=getchar();
if(c1>='A' && c1<='Z')
{
printf("%c\n",c1+32);
}
else
{
printf("%c\n",c1);
}
if(c2>='A' && c2<='Z')
{
printf("%c\n",c2+32);
}
else
{
printf("%c\n",c2);
}
return 0;
}
编译结果如下:
4.5输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。(和4.4相似,但方法不同)
#include<stdio.h>
int main()
{
char ch;
printf("请输入一个字母:");
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("%c\n",ch);
return 0;
}
编译结果如下:
4.6输入3个数a,b,c,要求按由小到大的顺序输出。
#include<stdio.h>
int main()
{
int a,b,c,t;
printf("请输入三个正整数:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;a=b;b=t;
}
if(a>c)
{
t=a;a=c;c=t;
}
if(b>c)
{
t=b;b=c;c=t;
}
printf("这三个正整数从小到大的排序是:\n%d\t%d\t%d\n",a,b,c);
}
编译结果如下:
4.7输入两个实数,按代数值由小到大的顺序输出这两个数。(和4.6相似,但方法不同)
#include<stdio.h>
int main()
{
int a,b;
printf("请输入两个正整数:");
scanf("%d%d",&a,&b);
if(a<b)
{
printf("这两个正整数从小到大的排序是:\n%d\t%d\n",a,b);
}
else
{
printf("这两个正整数从小到大的排序是:\n%d\t%d\n",b,a);
}
}
编译结果如下:
第5章 循环结构程序设计
5.1有一个10×10的矩阵,要求输出其中值最大的那个元素的值,以及其所在的行号和列号
#include<stdio.h>
int main()
{
int i, j, row = 0, colum = 0, max;
int a[10][10] = {{1,2,3,4,-1,-2,0,23,1,5},{9,8,7,6,1,0,2,3,4,5},{-10,2,3,4,5,6,7,10,-5,2},{1,2,3,4,5,6,7,8,9,0},
{2,3,4,5,6,1,65,43,23,21},{1,2,3,4,5,6,7,8,0,9},{2,1,3,43,-3,-4,-5,1,2,3},{1,2,3,4,-1,-2,-3,41,90,10},
{1,2,3,32,43,1,2,32,43,11},{4,5,32,12,34,45,67,5,6,7}};
max = a[0][0];
printf("array a:\n");
for (i = 0; i <= 9; i++)
{
for (j = 0; j <= 9; j++)
{
printf("%5d", a[i][j]);
}
printf("\n");
}
for (i = 0; i <= 9; i++)
{
for (j = 0; j <= 9; j++)
{
if (a[i][j] > max)
{
max = a[i][j];
row = i;
colum = j;
}
}
}
printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
return 0;
}
编译结果如下:
5.2求1+2+3+…+100
//用for循环
#include<stdio.h>
int main()
{
int i,sum;
for(sum=0,i=1;i<=100;i++)
{
sum=sum+i;
}
printf("%d\n",sum);
}
//用while循环
#include<stdio.h>
int main()
{
int i=1,sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}
printf("%d\n",sum);
return 0;
}
//用do...while...循环
#include<stdio.h>
int main()
{
int i=1,sum=0;
do
{
sum=sum+i;
i++;
}while(i<=100);
printf("%d\n",sum);
return 0;
}
5.3在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。
//break:::只能用于循环语句和switch语句之中,而不能单独使用
//continue:::有时并不希望终止整个循环的操作,而只希望提前结束本次循环,而接着执行下次循环。这时可以用continue语句
#include <stdio.h>
#define sum 100000
int main()
{
float amount,aver,total;
int i;
for (i=1,total=0;i<=1000;i++)
{
printf("please enter amount:");
scanf("%f",&amount);
total= total+amount;
if (total>=sum) break;
}
aver=total / i ;
printf("num=%d\naver=%10.2f\n",i,aver);
return 0;
}
编译结果如下:
5.4
#include <stdio.h>
#include <math.h>
int main()
{
int sign=1; double pi=0,n=1,term=1;
while(fabs(term)>=1e-6)
{
pi=pi+term;
n=n+2;
sign=-sign;
term=sign/n;
}
pi=pi*4;
printf("pi=%10.8f\n",pi);
return 0;
}
编译结果如下:
5.5求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。
这是一个有趣的古典数学问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?
#include <stdio.h>
int main()
{
int f1=1,f2=1,f3; int i;
printf("%12d\n%12d\n",f1,f2);
for(i=1; i<=38; i++)
{
f3=f1+f2;
printf("%12d\n",f3);
f1=f2;
f2=f3;
}
return 0;
}
编译结果如下:
代码可以改进为以下,使排版更清晰好看:
#include <stdio.h>
int main()
{ int f1=1,f2=1; int i;
for(i=1; i<=20; i++)
{ printf("%12d %12d ",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f2+f1;
}
return 0;
}
5.6输入一个大于3的整数n,判定它是否素数(prime,又称质数):
#include <stdio.h>
int main()
{
int n,i;
printf("n=");
scanf("%d",&n);
for (i=2;i<=n-1;i++)
{
if(n%i==0) break;
}
if(i<n)
{
printf("%d is not\n",n);
}
else
{
printf("%d is prime.\n",n);
}
return 0;
}
编译结果如下:
*
5.7求100~n(n>100)间的全部素数:
#include <stdio.h>
int fun(int n)
{
int i,j, count=0;
printf("输入n:");
scanf("%d", &n);
printf("\nThe prime number between 100 to %d\n", n);
for (i=100; i<=n; i++)
{
for (j=2; j<i; j++)
if (i%j == 0)
break;
if (j>=i)
{
count++; printf( count%15?"%5d":"\n%5d",i);
}
}
return count;
}
int main()
{
int n, k;
k = fun(n);
printf("\nThe number of prime is : %d\n", k);
}
编译结果如下:
5.8译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。(非字母字符保持原状不变输入一行字符,要求输出其相应的密码)
解题思路:问题的关键有两个:
(1) 决定哪些字符不需要改变,哪些字符需要改变,如果需要改变,应改为哪个字符c=getchar();
处理的方法是:输入一个字符给字符变量c,先判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则还要检查它是否’W’到’Z’的范围内(包括大小写字母)。如不在此范围内,则使变量c的值改变为其后第4个字母。如果在’W’到’Z’的范围内,则应将它转换为A~D(或a~d)之一的字母。
(2) 怎样使c改变为所指定的字母?
办法是改变它的ASCII值
例如字符变量c的原值是大写字母’A’,想使c的值改变为’E’,只需执行“c=c+4”即可,因为’A’的ASCII值为65,而’E’ 的ASCII值为69,二者相差4
if(c>='W' && c<='Z' || c>='w' && c<='z')
{
c=c+4-26;
}
else
{
c=c+4;
}
#include<stdio.h>
int main()
{
char c;
c=getchar();
while(c!='\n')
{
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
{
if(c>='W' && c<='Z' || c>='w' && c<='z')
{
c=c-22;
}
else
{
c=c+4;
}
}
printf("%c",c);
c=getchar();
}
printf("\n");
}
编译结果如下:
另一种解法:
#include<stdio.h>
int main()
{
char c;
while((c=getchar())!='\n')
{
if((c>='A' && c<='Z') || (c>='a' && c<='z'))
{
c=c+4;
}
if(c>='Z' && c<='Z'+4 || c>'z')
{
c=c-26;
}
printf("%c",c);
}
printf("\n");
}
编译结果如下:
C语言优先级:
//如:
//a>b==c 等效于 (a>b)==c
//c>a+b 等效于 c>(a+b)
//! → && → || (!为三者中最高)
// ! (高)
//算术运算符
//关系运算符
// && 和 ||
//赋值运算符 (低)