基础实例(1)
C语言编程基础实例1
计算2000-2500之间的闰年
闰年的计算方法是:条件1)能被4整除,且不能被100整除;2)能被400整除
# include<stdio.h>
// 计算2000-2500之间的闰年
int main(){
int leapYearNumber = 0;
for (int i = 2000; i <= 2500; i++){
if (i % 4 == 0 && i % 100 !=0){
printf("%d is a lear year!\n",i);
leapYearNumber += 1;
}
else if (i % 400 ==0){
printf("%d is a lear year!\n",i);
leapYearNumber += 1;
}
else{
printf("%d is not a leap year!\n", i);
}
}
printf("There are %d leap years between 2000 and 2500!\n",leapYearNumber);
}
结果显示:
判断一个数是否为素数
素数又叫质数,从定义看是指从1到自身,只能被1和自身整除的数。例如2是质数,4非质数
# include<stdio.h>
//判断一个数是否为素数
int main(){
printf("Please input a number:\n");
int n;
scanf("%d",&n);
int result = 0;
for (int i=2; i<= n-1; i++){
if (n % i == 0){
result += 1;
}
}
if (result == 0){
printf("%d is a prime number. \n",n);
}
else{
printf("%d is not a prime number. \n",n);
}
}
结果显示:
计算1-1/2+1/3-1/4+...+1/99-1/100
#include <stdio.h>
//计算1-1/2+1/3-1/4+...+1/99-1/100
int main(){
float result = 1.0;
int sign = 1;
for (int i = 2; i <= 100; i++){
sign = (-1)*sign;
result = result + sign*(1.0/i);
}
printf("result:%f\n",result);
return 0;
}
结果显示:
计算5!
#include<stdio.h>
//计算阶乘
int main(){
int res;
res = 1;
int i=1;
while (i <= 5){
res = res*i;
i = i+1;
}
printf("result:%d",res);
}
结果输出:
自加自减运算(一)
#include<stdio.h>
// 自增和自减运算
int main(){
int i=8;
printf("%d\n",++i); //++i是先自增后参与运算,因此是先加1,后打印出来i=9,显示9
printf("%d\n",--i); //上一步i=9,因此,先自减1=8,后再打印出来,显示8
printf("%d\n",i++);// 上一步i=8,先打印出来,在自增,i=9,显示8
printf("%d\n",i--);//先打印出i再自减,i=8,显示9
return 0;
}
结果显示:
自加自减运算(二)
#include<stdio.h>
//自加自减运算
int main() {
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++); // 先参与计算,p 等于3个i,结果为15,然后 i++3次,最后i=8
q = (++j) + (++j) + (++j); // 先自加,j自加三次,j= 8,而q = 8+8+8
printf("%d,%d,%d,%d", p, q, i, j);
return 0;
}
结果输出:
逗号运算符和逗号表达式
在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接
起来组成一个表达式, 称为逗号表达式. 其一般形式:
表达式1,表达式2
其求值过程是分别求两个表达式的值,并以表达式 2 的值作为整个逗号表达式的值。
#include<stdio.h>
//逗号表达式
int main() {
int a = 2, b = 4, c = 6, x, y;
y = (x = a + b), (b + c); //逗号表达式,x = 6,y=x=6,逗号表达式的运算级最低,比赋值运算符级别还低。因此y=x=6,后面b+c不影响y的结果,如果y = ((x = a + b), (b + c));那么逗号表达式的值等于最右一个表达式的值,此时y=10
printf("y=%d,x=%d\n", y, x);
}
结果输出:
输入输出到单个字符
#include<stdio.h>
//输入输出字符
void main(){
char c;
printf("input a character\n");
c=getchar();
putchar(c);
printf("$$$$$$$$$$$$$$$$$$\n");
putchar(getchar());
printf("%c",getchar());//与上一行的功能一样
}
结果输出:
printf函数格式化输出
#include<stdio.h>
//printf 函数格式化输出
int main() {
int i = 8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n", ++i, --i, i++, i--, -i++, -i--);
// Turbo C 是按从右到左进行的,但是显示还是从左到右。-i--,得到-8(打印-8),然后--得到7,取负得到-7(打印-7),然后再++,再取负为正得到8(打印),再--得到7(打印),再++得到8(打印)
// --i得到7,++i得到8(打印)
printf("$$$$$$$$$$$$$$$$$$$\n");
printf("%d\n", ++i);
printf("%d\n", --i);
printf("%d\n", i++);
printf("%d\n", i--);
printf("%d\n", -i++);
printf("%d\n", -i--);
}
结果输出:
格式字符串
格式字符串的一般形式为:
%[*][输入数据宽度][长度]类型
其中有方框号[]的项为任选项。各项的意义如下:
- 类型:表示输入数据的类型,其格式符和意义如下表所示:
格式 | 字符意义 |
---|---|
d | 输入十进制整数 |
o | 输入八进制整数 |
x | 输入十六进制整数 |
u | 输入无符号十进制整数 |
f或e | 输入实数型(用小数形式或指数形式) |
c | 输入单个字符 |
s | 输入字符串 |
- “*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
如scanf("%d %*d %d",&a,&b);
当输入1 2 3
时,把1
赋予a
,2
被跳过,3
赋予b
。 - 输入数据的宽度
用十进制整数指定输入的宽度(即字符数)。
例如:scanf("%5d",&a);
输入12345678
,只把12345
赋予变量a
,其余部分被截去。
又如:scanf("%4d%4d",&a,&b);
输入12345678
,将把1234
赋予a
,把5678
赋予b
。 - 长度
长度格式符为l
和h
,l
表示输入长整型数据(如%ld
)和双精度浮点数(如%lf
)。h
表示输入短整型数据。
使用scanf函数需要注意以下几点: scanf
函数中没有精度控制,如:scanf("%5.2f",&a);
是非法的。不能企图用此语句输入小数为2
位的实数.- scanf 中要求给出变量地址,如给出变量名则会出错。如
scanf("%d",a);
是非法的,应改为scanf("%d",&a);
才是合法的. - 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,
TAB
或回车作间隔。C
编译在碰到空格,TAB
,回车或非法数据(如对“%d”
输入“12A”
时,A
即为非法数据)时即认为该数据结束. - 在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符.
例如scanf("%c%c%c",&a,&b,&c);
输入为d e f
,则把'd'
赋予a
,' '赋予b
,'e'
赋予c
,只有当输入为def
时,才能把'd'
赋予a
,'e'
赋予b
,'f'
赋予c
,如果在格式控制中加入空格作为间隔,如
scanf("%c %c %c",&a,&b,&c);
则输入时各数据之间可加空格。
实例1:
# include<stdio.h>
int main(){
char a, b;
printf("input character a,b\n");
scanf("%c%c",&a,&b);//没有空格,因此打字的时候不要空格
printf("%c%c\n",a,b);
}
结果显示
实例2:
# include<stdio.h>
int main(){
char a, b;
printf("input character a,b\n");
scanf("%c %c",&a,&b);//格式控制串"%c %c"之间有空格,则打字输入时要加空格
printf("%c%c\n",a,b);
}
结果输出:
实例3:
# include<stdio.h>
int main() {
long a;
printf("input a number\n");
scanf_s("%ld", &a); //当输入数据改为长整型后,输入输出数据相等
printf("%ld", a);
}
结果输出:
实例4:
# include<stdio.h>
int main() {
int a;
long b;
float f;
double d;
char c;
printf ("\nint:%d\nlong:%d\nfloat:%d\ndouble:%d\nchar:%d\n",
sizeof(a), sizeof(b), sizeof(f), sizeof(d), sizeof(c));
}
结果输出:
实例5:
# include<stdio.h>
int main() {
char a, b, c;
printf("input character a,b,c\n");
scanf("%c %c %c", &a, &b, &c);
printf("%d,%d, %d\n % c, %c, %c\n",a,b,c,a-32,b-32,c-32); //输入三个小写字母,输出其 ASCII 码和对应的大写字母。
}
逻辑运算符
C语言中提供了三种逻辑运算符,
&&
与运算||
或运算!
非运算
逻辑运算符和其他运算符的优先级关系
!(非)->&&(与)->||(或),优先级逐次降低,而“&&”和“||”低于关系运算符,“!”高于算术运算符。
按照运算符的优先顺序可以得出:
逻辑表达式
#include<stdio.h>
//逻辑表达式
int main(){
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%d\n",!x*!y,!!!x); // !x=0,!y=0,所以!x*!y=0;!!!x=0
printf("%d,%d\n",x||i&&j-3,i<j&&x<y);//x||i&&j-3先计算j-3=-1,再计算i&&j-3的逻辑值为1,再计算x||1,因此x||i&&j-3的逻辑值为1;i<j&&x<y先计算i<j的逻辑值为1,x<y的逻辑值为0,因此1&&0的逻辑值为0
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);//i==5&&c&&(j=8),j=8的逻辑值为0,i==5的逻辑值为0,最后值为0;x+y||i+j+k,x+y的值非0,i+j+k非0,最后的逻辑值为1
}
结果输出:
if-else-if
语句
其一般形式
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
...
else
语句n;
实例
#include<stdio.h>
//if-else语句
int main(){
char c;
printf("input a character:");
c = getchar();
if(c<32)
{printf("this is a control character\n");}
else if(c>='0'&&c<='9')
{printf("this is a digit\n");}
else if(c>='A'&&c<='Z')
{printf("this is a capital letter\n");}
else if (c>='a'&&c<='z')
{printf("this is a small letter\n");}
else
{printf("this is an other character\n");}
}
switch语句
#include<stdio.h>
//switch语句
int main(){
int a;
printf("input integer number:\n");
scanf("%d",&a);
switch(a){
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 7:printf("Sunday\n");break;
default:printf("Error\n");break;
}
}
结果输出:
计算器程序
#include<stdio.h>
//计算器程序
int main(){
float a,b;
char c;
printf("input expression: a+(-,*,/)b\n");
scanf("%f%c%f",&a,&c,&b);
switch(c){
case '+':printf("%f\n",a+b);break;
case '-':printf("%f\n",a-b);break;
case '*':printf("%f\n",a*b);break;
case '/':printf("%f\n",a/b);break;
default:printf("input error\n");
}
}
循环控制
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序
段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语
言提供了多种循环语句,可以组成各种不同形式的循环结构。
- 用 goto 语句和 if 语句构成循环
- 用 while 语句
- 用 do-while语句
- 用for语句
1)goto语句
基于语法为goto 语句标号;
其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处, 执行
goto 语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与 goto 语句同处于
一个函数中,但可以不在一个循环层中。通常 goto 语句与 if 条件语句连用, 当满足某一条
件时, 程序跳到标号处运行。
实例:用goto语句和if语句构成循环计算\(\sum_{n=1}^{100} n\)
#include<stdio.h>
int main(){
int i,sum=0;
i = 1;
loop: if(i<=100){
sum = sum + i;
i++;
goto loop;
}
printf("%d\n",sum);
}
结果输出:
2)while语句
while语句的一般形式:while(表达式)语句
#include<stdio.h>
int main(){
int i,sum=0;
i=1;
while(i<=100){
sum = sum+i;
i++;
}
printf("%d\n",sum);
}
结果输出:
3)do-while语句
do-while语句的一般形式为:
do
语句
while(表达式);
这个循环与 while 循环的不同在于:先执行循环中的语句,然后再判断表达式是否为
真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while 循环至少要执行一次
循环语句。
#include<stdio.h>
//do-while语句
int main(){
int i,sum=0;
i =1;
do {
sum = sum+i;
i++;
}
while(i<=100);
printf("%d\n",sum);
}
结果输出:
4)for语句
在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为:
for(表达式1;表达式2;表达式3)语句
for 语句最简单的应用形式也是最容易理解的形式如下:
for(循环变量赋初值;循环条件;循环变量增量)
循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值;循环条件时一个关系表达式,决定什么时候退出循环,循环变量增量,定义 循环控制变量每循环一次后按照什么方式变化,注意三个部分之间用;
分开
#include<stdio.h>
//for循环
int main(){
int i,sum=0;
for (i=1;i<=100;i++){
sum = sum +i;
}
printf("%d\n",sum);
}
结果输出: