函数部分
引用最簡單的sinx函數(shù)庫
#include<stdio.h> #include<math.h> int main(){int n;scanf("%d",&n);printf("sin(%d)=%f",n,sin(n)); return 0; }##這次因?yàn)橛泻瘮?shù)所有必須加上#include<main.h>相當(dāng)于引用函數(shù)庫,而且后面編譯的時(shí)候不能使用gcc+文件名,必須gcc+文件名然后再加上 -lm代表編譯的時(shí)候加上c語言的算術(shù)動(dòng)態(tài)庫都加進(jìn)來(一般提示.text就是確實(shí)代碼庫導(dǎo)致的錯(cuò)誤)
##因?yàn)樵诰幊陶Z言中所有的都是弧度值,而不是角度值,所以需要設(shè)置參數(shù)讓輸入弧度值
##可以看到M_PI就是變量π,n*M_PI/180實(shí)現(xiàn)變量的轉(zhuǎn)換
輸入直角三角形斜邊c,和其中一個(gè)銳角alpha,求兩外兩條直角邊a,b。
分別代表開根號,次方,還有絕對值
已知三條邊長度分別為a、b、c,實(shí)現(xiàn)一個(gè)計(jì)算三角型周長的函數(shù)。(定義函數(shù))
#include<stdio.h> int length(int a,int b,int c){//這只是個(gè)定義,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); }已知圓的半徑r,實(shí)現(xiàn)一個(gè)計(jì)算圓的面積的函數(shù)。
#include<stdio.h> #include<math.h>##因?yàn)橛蠱_PI所以必須因?yàn)閙ath函數(shù),因?yàn)槭歉↑c(diǎn)所以面積必須規(guī)定為浮點(diǎn) float square(int a){return M_PI*a*a; } int main(){int a;scanf("%d",&a); float hhhh=square(a);printf("面積是:%f",hhhh); }##分別提示輸入體重和身高 計(jì)算BMI 根據(jù)BMI輸出體重級別 如果不在正常范圍內(nèi)輸出需要增肥/減肥的最小值。
#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("肥胖"); }elseprintf("非常肥胖"); } 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,和平常習(xí)慣性的scanf("%d",&n是一樣的)
指針
#include<stdio.h> int main(){int n;int*p=&n;scanf("%d",p);##類似于上面說的輸入&n一個(gè)結(jié)果printf("%d\n",n);##打印出的普通變量名printf("%p\n",p);##打印出他的地址變量printf("%d\n",*p);##打印出他的解引用后的變量,結(jié)果是普通變量 }##這是輸入是10,其他的都是輸出。
##這個(gè)代碼是構(gòu)建函數(shù)func,將n的值改為100,然后構(gòu)建的的main里面的n=10,然后引用構(gòu)建的函數(shù)func,查看輸出到底是100還是10,但是結(jié)果是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); }##給每一步都加上一個(gè)輸出可以看到輸出為
1.n=10
2.n=100
3.n=10
為什么會出現(xiàn)這樣的結(jié)果,因?yàn)閚不相同,查看下他的不同的n的地址一樣不?
##查看地址后發(fā)現(xiàn)確實(shí)不一樣,
&n=0x7ffc7de44dec
1.n=10
2.n=100
&n=0x7ffc7de44e0c
3.n=10
因此他們不是同一個(gè)n,只是名字恰好相等,因此函數(shù)func只是傳遞了n所代表的數(shù)值,并不是變量n
##傳進(jìn)去的是n=10的這個(gè)數(shù)值10,因此函數(shù)func里面先對n=10進(jìn)行接受,但是在函數(shù)里面修改n的數(shù)值,并不能修改輸出,因?yàn)閭鬟f的是數(shù)字10,而不是n。這種傳遞叫做值傳遞
##輸出為100了,和上面不同的是func(&n)是對地址進(jìn)行變量調(diào)用,因?yàn)榈刂肥莕的地址不是數(shù)值10或者100的地址,因此他會隨著變量的變化而變化
&n=0x7fff97a2321c
n=0x7fff97a2321c
n = 100
##因此指針進(jìn)行操作,和變量的操作不一樣
#實(shí)現(xiàn)函數(shù)swap()交換兩個(gè)變量的值。
#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; }
##輸出并沒有變,因?yàn)槲覀兪褂玫氖瞧胀ㄗ兞?#xff0c;他在使用函數(shù)傳輸?shù)臅r(shí)候只是傳輸?shù)臄?shù)值而不是變量,因此必須使用指針
##使用指針后發(fā)現(xiàn)已經(jīng)可以完成修改
divmod()輸入?yún)?shù)a和b,同時(shí)獲取a與b的商和余數(shù)。(這個(gè)也是利用了指針進(jìn)行編輯)
使用數(shù)組輸入5個(gè)數(shù)字,逆序打印出這5個(gè)數(shù)字。
#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個(gè)字符,單獨(dú)寫出來太多了,如何解決
#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循環(huán)來進(jìn)行輸入和輸出來達(dá)到批量的目的,50個(gè)數(shù)字同理,只要修改初始化的數(shù)組個(gè)數(shù)5為50,然后數(shù)值賦值到50,然后修改for循環(huán)的i就可以實(shí)現(xiàn)
#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的具體數(shù)值,然后再輸入它對應(yīng)的數(shù)組數(shù)值
如果訪問數(shù)組索引大于數(shù)組大小會怎樣?
如果訪問數(shù)組索引等于數(shù)組大小會怎樣?
聲明一個(gè)長度為0的數(shù)組會怎樣?
聲明一個(gè)長度為負(fù)數(shù)的數(shù)組會怎樣?
##按順序打印月份與對應(yīng)的天數(shù)(使用數(shù)組)
##前面最早的輸入月份出現(xiàn)他的月份的天數(shù),這里使用數(shù)組進(jìn)行設(shè)置
#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]); }輸入年份,打印當(dāng)前年份所有月份的天數(shù)。(注意:閏年替換二月份天數(shù))
#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]); } } }第一個(gè)30天的月份是什么
#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); }輸入年份和起式月份m和終止月份n,求出從m到n之間的天數(shù)。
#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); }利用數(shù)組,輸入某年某月某日,判斷這一天是這一年的第幾天?
#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 1sum=a[month-1]+day; // 再加上某天的天數(shù)if(year%400==0||(year%4==0&&year%100!=0)) // 判斷是不是閏年leap=1; // 是則記錄為1elseleap=0; // 不是記錄為0if(leap==1&&month>2) // *如果是閏年且月份大于2,總天數(shù)應(yīng)該加一天{sum++;}printf(" %d ",sum);printf("\n");return 0; }輸入一個(gè)長度為n的數(shù)組,輸出他的最大值和最小值。
#include<stdio.h> 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];//在數(shù)組day中求最大值和最小值,用max存儲最大值,用min的存儲最小值,將max和min的初值賦為day[0],然后再用其他數(shù)組和他比較 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); }實(shí)現(xiàn)一個(gè)字符串縱向輸出
#include <stdio.h> 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 <stdio.h>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; }輸入字符串s和字符c,打印出字符c在字符串s中出現(xiàn)的次數(shù)。
#include <stdio.h> 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; }輸入字符串s和字符c,打印出c在字符串s中的第一次出現(xiàn)的位置(第一個(gè)字符位置為0,s不包含c返回-1)。
#include<stdio.h>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;//這個(gè)return代表出現(xiàn)這個(gè)情況后,程序直接返回,不運(yùn)行了 } if(s[i]!=c){ } }printf("-1");return 0; }##也可以使用break,當(dāng)sum沒有增加,那就代表沒有出現(xiàn)相同元素
#include<stdio.h>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的方式,設(shè)定nofind=ture,然后找到的時(shí)候它就自動(dòng)為false,然后false下面的語句就執(zhí)行,不然不執(zhí)行。然后執(zhí)行下面if(nofind的語句默認(rèn)是true),如果是ture的那就執(zhí)行
#include<stdio.h> #include<stdbool.h>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("沒有出現(xiàn)"); } return 0; }輸入字符串s和字符c,打印出c在字符串s中的最后一次出現(xiàn)的位置(第一個(gè)字符位置為0,s不包含c返回-1)。
#include<stdio.h> 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、數(shù)字n和字符c ,用字符c替換字符串s中n位置的字符,打印出替換結(jié)果。
#include<stdio.h>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; }輸入字符串s,打印出字符串s的反序。
#include<stdio.h>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); }##第二種方法,第一個(gè)位置和最后一個(gè)位置的元素交換,最終實(shí)現(xiàn)反序
#include<stdio.h> 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<stdio.h>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 <stdio.h> int main(){int i;char s[18];scanf("%s",s);for(i=6;i<=13;++i){printf("%c",s[i]); } }輸入身份證號,打印身份證的地區(qū)信息。
#include<stdio.h> int main(){ char arr[19];//要驗(yàn)證的身份證號碼 int brr[17]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,5, 8, 4, 2};//身份證前17位的系數(shù) char crr[11]={1, 0, -1, 9, 8, 7, 6, 5, 4, 3, 2}; //身份證第18位驗(yàn)證碼 int sum=0; int loop=0; printf("請輸入您的身份證號碼\n"); scanf("%s",arr); for(loop;loop<17;loop++) sum=sum+(arr[loop]-'0')*brr[loop];//-'0'是實(shí)現(xiàn)字符到數(shù)字的轉(zhuǎn)換 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; }輸入身份證號,打印身份證的地區(qū)信息。
#include<stdio.h> 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("市轄區(qū)");break;case 610102:printf("屬于新城區(qū)\n");break;case 610103:printf("屬于碑林區(qū)\n");break;case 610104:printf("屬于蓮湖區(qū)\n");break;case 610111:printf("屬于灞橋區(qū)\n");break;case 610112:printf("屬于未央?yún)^(qū)\n");break;case 610113:printf("屬于雁塔區(qū)\n");break;case 610114:printf("屬于閻良區(qū)\n");break;case 610115:printf("屬于臨潼區(qū)\n");break;case 610116:printf("屬于長安區(qū)\n");break;case 610122:printf("屬于藍(lán)田縣\n");break;case 610124:printf("屬于周至縣\n");break;case 610125:printf("屬于鄠邑區(qū)\n");break;case 610126:printf("屬于高陵縣\n");break;default:printf("西安以外的我不知道!\n");break;} }##如何將指針(地址)賦值給整形,編譯的時(shí)候就會出錯(cuò),因?yàn)?/p> #include<stdio.h>int main(){int n=10;int* p,q;//p為指針,p為整型,想讓q為整型,必須得在q前面加上*q=&n;
##前面的反序構(gòu)建雙重for循環(huán)的方法之外還有新的方法(自動(dòng)取字符串的長度)
##引入string函數(shù),然后定義整形變量len=strlen(str);來達(dá)到取字符串的長度的目的(這個(gè)也是取到\0,和上面for循環(huán)的取值是一樣的)
總結(jié)
- 上一篇: 6款办公软件,文案人员常用到
- 下一篇: 【ArchSummit】社交元宇宙的技术