#include<stdio.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
printf("sin(%d)=%f",n,sin(n));
return 0;
}
##这次因为有函数所有必须加上#include
##因为在编程语言中所有的都是弧度值,而不是角度值,所以需要设置参数让输入弧度值
#include<stdio.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
printf("sin(%d)=%f",n,sin(n*M_PI/180));
return 0;
}
##可以看到M_PI就是变量π,n*M_PI/180实现变量的转换
输入直角三角形斜边c,和其中一个锐角alpha,求两外两条直角边a,b。
#include<stdio.h>
#include<math.h>
int main(){
float a,b,c,d,alpha;
scanf("%f %f",&c,&alpha);
d=alpha*M_PI/180;
a=c*sin(d);
b=c*cos(d);
printf("%f %f",a,b);
return 0;
}
#include<stdio.h>
int length(int a,int b,int c){
//这只是个定义,a,b,c代换成其他的任何字母都行
return a+b+c;
}
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int res=length(a,b,c);
printf("length=%d\n",res);
}
#include<stdio.h>
#include<math.h>##因为有M_PI所以必须因为math函数,因为是浮点所以面积必须规定为浮点
float square(int a){
return M_PI*a*a;
}
int main(){
int a;
scanf("%d",&a);
float hhhh=square(a);
printf("面积是:%f",hhhh);
}
#include<stdio.h>
#include<math.h>
void BMI_(float w,float h){
float BMI;
BMI=w/(h*h);
printf("%f",BMI);
if(0<BMI<18.5){
printf("过轻");
}else if(18.5<=BMI<=23.9){
printf("正常");
}else if(24<=BMI<28){
printf("超重");
}else if(28<=BMI<32){
printf("肥胖");
}else
printf("非常肥胖");
}
void suggestion(float w,float h){
float BMI,m;
if(BMI<18.5){
BMI=18.5;
m=BMI*h*h;
printf("要增加的体重%f",m-w);
}
if(BMI>23.9){
BMI=23.9;
m=BMI*h*h;
printf("要减少的体重%f",w-m);
}
}
int main(void){
float h,w;
scanf("%f %f",&w,&h);
BMI_(w,h);
suggestion(w,h);
return 0;
}
##定义指针P并且给他赋值n的地址,然后scanf直接选择p,和平常习惯性的scanf("%d",&n是一样的)
#include<stdio.h>
int main(){
int n;
int*p=&n;
scanf("%d",p);##类似于上面说的输入&n一个结果
printf("%d\n",n);##打印出的普通变量名
printf("%p\n",p);##打印出他的地址变量
printf("%d\n",*p);##打印出他的解引用后的变量,结果是普通变量
}
#include<stdio.h>
int func(int n){
n=100;
}
int main(){
int n=10;
func(n);
printf("%d",n);
}
##这个代码是构建函数func,将n的值改为100,然后构建的的main里面的n=10,然后引用构建的函数func,查看输出到底是100还是10,但是结果是10,为什么呢
#include<stdio.h>
int func(int n){
printf("1.n=%d\n",n);
n=100;
printf("2.n=%d\n",n);
}
int main(){
int n=10;
func(n);
printf("3.n=%d\n",n);
}
##给每一步都加上一个输出可以看到输出为
1.n=10
2.n=100
3.n=10
为什么会出现这样的结果,因为n不相同,查看下他的不同的n的地址一样不?
#include<stdio.h>
int func(int n){
printf("&n=%p\n",&n);
printf("1.n=%d\n",n);
n=100;
printf("2.n=%d\n",n);
}
int main(){
int n=10;
func(n);
printf("&n=%p\n",&n);
printf("3.n=%d\n",n);
}
##查看地址后发现确实不一样,
&n=0x7ffc7de44dec
1.n=10
2.n=100
&n=0x7ffc7de44e0c
3.n=10
因此他们不是同一个n,只是名字恰好相等,因此函数func只是传递了n所代表的数值,并不是变量n
##传进去的是n=10的这个数值10,因此函数func里面先对n=10进行接受,但是在函数里面修改n的数值,并不能修改输出,因为传递的是数字10,而不是n。这种传递叫做值传递
#include<stdio.h>
int func(int* n){
*n = 100;
}
int main(){
int n = 10;
func(&n);
printf("n = %d\n",n);
}
##输出为100了,和上面不同的是func(&n)是对地址进行变量调用,因为地址是n的地址不是数值10或者100的地址,因此他会随着变量的变化而变化
&n=0x7fff97a2321c
n=0x7fff97a2321c
n = 100
##因此指针进行操作,和变量的操作不一样
#include<stdio.h>
void swap(int a,int b){
int t=a;
a=b;
b=t;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("a=%d b=%d\n",a,b);
swap(a,b);
printf("a=%d b=%d\n",a,b);
return 0;
}
##输出并没有变,因为我们使用的是普通变量,他在使用函数传输的时候只是传输的数值而不是变量,因此必须使用指针
#include<stdio.h>
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("a=%d b=%d\n",a,b);
swap(&a,&b);
printf("a=%d b=%d\n",a,b);
return 0;
}
##使用指针后发现已经可以完成修改
divmod()输入参数a和b,同时获取a与b的商和余数。(这个也是利用了指针进行编辑)
#include<stdio.h>
int divmod(int a,int b,int* mod){
*mod=a%b;
return a/b;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
int mod;
int res=divmod(a,b,&mod);
printf("%d %d\n 商%d\n 余%d\n",a,b,res,mod);
return 0;
}
#include<stdio.h>
int main(){
int day[5]={
1,2,3,4,5};
scanf("%d %d %d %d %d",&day[0],&day[1],&day[2],&day[3],&day[4]);
printf("%d %d %d %d %d",day[4],day[3],day[2],day[1],day[0]);
}
如果是50个字符,单独写出来太多了,如何解决
#include<stdio.h>
int main(){
int day[5]={
1,2,3,4,5};
int i;
for(i=0;i<5;++i){
scanf("%d",&day[i]);
}
for(i=4;i>=0;--i){
printf("%d",day[i]);
}
printf("\n");
}
##也可以加上for循环来进行输入和输出来达到批量的目的,50个数字同理,只要修改初始化的数组个数5为50,然后数值赋值到50,然后修改for循环的i就可以实现
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int day[n];
int i;
for(i=0;i<n;++i){
scanf("%d",&day[i]);
}
for(i=n-1;i>=0;--i){
printf("%d",day[i]);
printf("\n");
}
}
##先输入n的具体数值,然后再输入它对应的数组数值
如果访问数组索引大于数组大小会怎样?
如果访问数组索引等于数组大小会怎样?
声明一个长度为0的数组会怎样?
声明一个长度为负数的数组会怎样?
##按顺序打印月份与对应的天数(使用数组)
#include<stdio.h>
int main(){
int days[]={
31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=0;i<12;++i){
printf("%d月有%d天\n",i+1,days[i]);
}
}
##前面最早的输入月份出现他的月份的天数,这里使用数组进行设置
#include<stdio.h>
int main(){
int days[]={
31,28,31,30,31,30,31,31,30,31,30,31};
int i;
scanf("%d",&i);
printf("%d月有%d天\n",i,days[i-1]);
}
#include<stdio.h>
int main(){
int days[]={
31,28,31,30,31,30,31,31,30,31,30,31};
int dayss[]={
31,29,31,30,31,30,31,31,30,31,30,31};
int n,i;
scanf("%d",&n);
if(n%4==0 && n%100!=0 || n%400==0){
for(i=0;i<12;++i){
printf("%d月份有%d天",i+1,dayss[i]);
}
}else{
for(i=0;i<12;++i){
printf("%d月份有%d天",i+1,days[i]);
}
}
}
#include<stdio.h>
int main(){
int days[]={
31,28,31,30,31,30,31,31,30,31,30,31};
int dayss[]={
31,29,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=0;i<12;++i){
if(days[i]==30){
break;
}
}
printf("%d",i+1);
}
#include<stdio.h>
int main(){
int days[]={
31,28,31,30,31,30,31,31,30,31,30,31};
int dayss[]={
31,29,31,30,31,30,31,31,30,31,30,31};
int i,sum,m,n;
scanf("%d %d",&m,&n);
for(i=m-1;i<n;++i){
sum = sum+days[i];
}
printf("%d",sum);
}
#include <stdio.h>
int main()
{
int day,month,year,sum,leap;
int a[]= {
0,31,59,90,120,151,181,212,243,273,304,334};
printf("please input year month day(year month day)\n");
scanf("%d %d %d",&year,&month,&day); // 格式为:2015 12 10 2015 10 1
sum=a[month-1]+day; // 再加上某天的天数
if(year%400==0||(year%4==0&&year%100!=0)) // 判断是不是闰年
leap=1; // 是则记录为1
else
leap=0; // 不是记录为0
if(leap==1&&month>2) // *如果是闰年且月份大于2,总天数应该加一天
{
sum++;
}
printf(" %d ",sum);
printf("\n");
return 0;
}
#include
int main(){
int n,max,i,min;
float sum=0;
scanf("%d",&n);
int day[n];
for(i=0;i<n;++i){
scanf("%d",&day[i]);
}
max=min=day[0];//在数组day中求最大值和最小值,用max存储最大值,用min的存储最小值,将max和min的初值赋为day[0],然后再用其他数组和他比较
for(i=0;i<n;++i){
if(max<day[i]){
max=day[i];
} if(min>day[i]){
min=day[i];
sum=sum+day[i];
}
}
printf("max=%d min=%d",max,min);
}
#include
int main(){
int i;
char str[1024];
printf("请输入字符:");
scanf("%s",str);
for ( i=0; '\0' != str[i]; ++i){
printf("%c\n",str[i]);
}
return 0;
}
##输入字符串s,打印出字符串s的长度(不包含’\0’)。
#include
int main(){
int i;
char str[1024];//1024有无都行
printf("请输入字符字:");
scanf("%s",str);
for ( i=0; '\0' != str[i]; ++i){
}
printf("%d\n",i);
return 0;
}
#include
int main(){
int i,sum=0;
char str[1024],c;
printf("请输入你字符:");
scanf("%s %c",str,&c);
for ( i=0; '\0' != str[i]; ++i){
if(str[i]==c){
++sum;
}
}
printf("%d\n",sum);
return 0;
}
#include
int main(){
int i;
char s[1024],c;
scanf("%s %c",s,&c);
for(i=0;'\0'!=s[i];++i){
if(s[i]==c){
printf("%d",i+1);
return;//这个return代表出现这个情况后,程序直接返回,不运行了
}
if(s[i]!=c){
}
}
printf("-1");
return 0;
}
##也可以使用break,当sum没有增加,那就代表没有出现相同元素
#include
int main(){
int i,sum=0;
char s[1024],c;
scanf("%s %c",s,&c);
for(i=0;'\0'!=s[i];++i){
if(s[i]==c){
++sum;
printf("%d",i+1);
break;
}
}
if(sum==0){
}
printf("-1");
return 0;
}
##也可以用bool的方式,设定nofind=ture,然后找到的时候它就自动为false,然后false下面的语句就执行,不然不执行。然后执行下面if(nofind的语句默认是true),如果是ture的那就执行
#include
#include
int main(){
int i;
char s[1024],c;
scanf("%s %c",s,&c);
bool nofind = true;
for(i=0;'\0'!=s[i];++i){
if(s[i]==c){
nofind=false;
printf("%d",i+1);
break;
}
}
if(nofind){
printf("没有出现");
}
return 0;
}
#include
int main(){
int n;
scanf("%d",&n);
int i;
char s[n],c;
scanf("%s %c",s,&c);
for(i=n-1;'\0'!=s[i];--i){
if(s[i]==c){
printf("%d",i+1);
return;
}
if(s[i]!=c){
}
}
printf("-1");
}
##输入字符串s、数字n和字符c ,用字符c替换字符串s中n位置的字符,打印出替换结果。
#include
int main(){
int n,i;
char s[1024],c;
scanf("%s %d %c",s,&n,&c);
for(i=0;'\0'!=s[i];++i){
if(i==n-1){
s[n-1]==c;
}
printf("%s",s);
}
return 0;
}
#include
int main(){
int i;
char s[1024];
scanf("%s",s);
for(i=0;'\0'!=s[i];++i){
}
char c[i];
c[i]='\0';
int t;
for(t=0;t<i;++t){
c[t]=s[i-1-t];
}
printf("%s\n",c);
}
##第二种方法,第一个位置和最后一个位置的元素交换,最终实现反序
#include
int main(){
int i;
char s[1024];
scanf("%s",s);
for(i=0;'\0'!=s[i];++i){
}
int p=0;
int q=i-1;
while(p<q){
char t=s[p];
s[p]=s[q];
s[q]=t;
++p;
--q;
}
printf("%s",s);
}
#include
int main(){
int i;
char s[18];
scanf("%s",s);
for(i=0;'\0'!=s[i];++i){
}
printf("年份为%c%c%c%c 月份为%c%c 日为%c%c",s[6],s[7],s[8],s[9],s[10],s[11],s[12],s[13]);
}
##第二种方法
#include
int main(){
int i;
char s[18];
scanf("%s",s);
for(i=6;i<=13;++i){
printf("%c",s[i]);
}
}
#include
int main(){
char arr[19];//要验证的身份证号码
int brr[17]={
7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,5, 8, 4, 2};//身份证前17位的系数
char crr[11]={
1, 0, -1, 9, 8, 7, 6, 5, 4, 3, 2}; //身份证第18位验证码
int sum=0;
int loop=0;
printf("请输入您的身份证号码\n");
scanf("%s",arr);
for(loop;loop<17;loop++)
sum=sum+(arr[loop]-'0')*brr[loop];//-'0'是实现字符到数字的转换
if(sum%11==2){
if(arr[17]=='X')
printf("合法\n");
else
printf("不合法\n");
}
else{
if((arr[17]-'0')==crr[sum%11])
printf("合法\n");
else
printf("不合法\n");
}
return 0;
}
#include
int main(){
char arr[19];
int i,sum=0;
scanf("%s",arr);
for(i=0;i<6;++i){
sum=sum*10+(arr[i]-'0');
}
switch(sum){
case 610101:printf("市辖区");break;
case 610102:printf("属于新城区\n");break;
case 610103:printf("属于碑林区\n");break;
case 610104:printf("属于莲湖区\n");break;
case 610111:printf("属于灞桥区\n");break;
case 610112:printf("属于未央区\n");break;
case 610113:printf("属于雁塔区\n");break;
case 610114:printf("属于阎良区\n");break;
case 610115:printf("属于临潼区\n");break;
case 610116:printf("属于长安区\n");break;
case 610122:printf("属于蓝田县\n");break;
case 610124:printf("属于周至县\n");break;
case 610125:printf("属于鄠邑区\n");break;
case 610126:printf("属于高陵县\n");break;
default:printf("西安以外的我不知道!\n");break;
}
}
##如何将指针(地址)赋值给整形,编译的时候就会出错,因为
#include
int main(){
int n=10;
int* p,q;//p为指针,p为整型,想让q为整型,必须得在q前面加上*
q=&n;
##前面的反序构建双重for循环的方法之外还有新的方法(自动取字符串的长度)
##引入string函数,然后定义整形变量len=strlen(str);来达到取字符串的长度的目的(这个也是取到\0,和上面for循环的取值是一样的)