C语言入门20个简单程序|最新更新2021.7.13
本文創作目的是寫幾個簡單程序幫助學習C語言的同學練手,深化面向過程編程的思維方式。
** 如有錯誤,感謝指正**
如有錯誤,感謝指正,請私信博主,有辛苦紅包,拜“一字之師”。
請根據目錄尋找自己需要的段落
99乘法表
題目1:打印九九乘法表
發散思維,倒九九,豎九九。
斐波那契兔子
題目2:已知一對兔子每一個月可以生一對小兔子,而一對兔子出生后第二個月就開始生小子。假如一年內沒有發生死亡,則一對兔子一年內能繁殖成多少對?
本題解沒有使用遞歸函數
100-200間素數判斷
素數判斷方法(初中奧賽會學近10種判斷方法,建議補習,回頭傳給孩子)
本題解采用暴力循環
完全數問題
如果一個數恰好等于它的真因子之和,則稱該數為“完全數”
#include<stdio.h> int main() {int i, j;int sum;for (i = 1; i <= 1000; i++) {sum = 0;for (j = 1; j < i; j++)if (i % j == 0) {sum += j;}if (sum == i) {printf("%d\n", i);}} }數組旋轉問題
44數組逆時針旋轉90°存儲
想用獲取鍵盤輸入,自己寫,改成55的自己練
楊輝三角
#include <stdio.h> #define N 10 int main() {int arr[N][N] = { 0 };int i = 0;for (i = 0; i < N; i++){int m = 0;for (m = 0; m < N - i; m++){printf(" ");}int j = 0;for (j = 0; j <= i; j++){if ((0 == j) || (i == j)){arr[i][j] = 1;}else{arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];}printf("%4d", arr[i][j]);}printf("\n");}return 0; }成績數組
通過鍵盤輸入3名學生4門課程的成績, 分別求每個學生的平均成績和每門課程的平均成績。
要求所有成績均放入一個4行5列的數組中,輸入時同一人數據間用空格,不同人用回車
其中最后一列和最后一行分別放每個學生的平均成績、每門課程的平均成績及班級總平均分。
字符串反轉C語言實現
方式一:char* reverseString(char* s) {int len = strlen(s);int i = 0;char ch;while (i < len / 2) {ch = *(s + i);*(s + i) = *(s + len - 1 - i);*(s + len - 1 - i) = ch;i++;}return s; }方式二 #include <stdio.h> #include <string.h> #define MAX_SIZE 1024void reverse(char* str){assert(str);int ilen = strlen(str);char* p = str + ilen - 1;int itemp = 0;while(str < p){itemp = *p;*p = *str;*str = itemp;p--;str++;} }方式三 //遞歸實現 void reverse_string(char* str, int len){ assert(str); if (*str == '\0'){ return; } reverse_string(str + 1, len - 1); printf("%c", *str); }//方法二 遞歸,參數循環入棧,每次往后拷貝一個字符 void revers(char* in, char* out) {if (in == NULL || out == NULL ) {return;}if (*in == '\0') {return; }revers(in+1, out);strncat(out, in, 1);return; }int main(){char str[MAX_SIZE];printf(" 請輸入字符串:\n");gets(str);reverse(str);prntf(" 反轉后的字符串:\n"); } 指針法 void invert(char *s){ int i.j,k; char t; k=strlen(s); for(i=o.j=k-1;i<k/2;i++,j--) { t=*(s+i);*(s+i)=*(s+j);“(s+j)=t; } } main(){ FILE *fp; char str[200],*p,i,j; if((fp=fopen("p9_2.out","w"))==NULL) { printf("cannot open thefile\n"); exit(O); } printf("input str:in");gets(str); printf(”in%s",str); fprintf(fp."%s",str); invert(str); printf("in%s",str); fprintf(fp,"n%s",str); fclose(fp);從字符數組s中刪除存放在c中的字符
#include <stdio.h>main() { char s[80],c;int j,k; printf("InEnter a string: "); gets(s); printf("\nEnter a character: "); c=getchar( ); for(j=k=O;s[j]!= '\O';j++)if(s[j]!=c)s[k++]=s[ij];s[k]='\O'; printf("\n%s",s);排序輸出
編寫一個voidsort(int *x,int n)實現將x數組中的n個數據從大到小排序。n及數組元素在主函數中輸入。將結果顯示在屏幕上并輸出到文件p9 1.out中
#include<stdio.h> void sort(int *x,int n){ int j,k,t; for(i=0;i<n-1;i++){k=i;for(j=i+1:j<n;j++){if(x[j]>x[k]) k=j;if(k!=i){t=x[i];x[i]=x[k];x[k]=t;} } } void main() {FILE *fp; int *p.i,a[10]; fp=fopen("p9_ 1.out"w"); p=a; printf("Input 10 numbers:"); for(i=0;i<10;i++) scanf("%d",p++); p=a; sort(p,10); for(;p<a+10;p++) { printf("%d ","p); fprintf(fp,"%d ","p); } system(' pause"); fclose(fp); }無序插入后排序
已知數組a中的元素已按由小到大順序排列,以下程序的功能是將輸入的一個數插入數組a中,插入后,數組a中的元素仍然由小到大順序排列
main() { inta[10]={0,12,17,20,25,28,30}; /* a[0]為工作單元,從a[1]開始存放數據*/int x,i,j=6; /*j為元素個數*/printf("Enter a number: ");scanf("%d",&x);a[0]=x;i=j; /*從最后一個單元開始*/while(a[i]>x){ a[i+1]=a[i];i--; } /*將比x大的數往后移動一個位置*/a[++i]=x;j++; /*插入x后元素總個數增加*/for(i=];i<=j;i++) printf("%8d" ,a[i]);printf("\n"); }替換輸出
編寫函數replace(char *s,char c1,char c2)實現將s所指向的字符串中所有字符c1 用c2替換,字符串、字符c1和c2均在主函數中輸入,將原始字符串和替換后的字符串顯示在屏幕上,并輸出到文件p10 2. out中
#include<stdio.h> replace(char* s,char cl,char c2) {while(*s!='\0'){ if(*s==c1)*S=c2;S++; } } main() {FILE *fp; char str[100],a,b; if((fp=fopen("p1O_ 2.out","w"l)==NULL) { printf("cannot open thefile\n");exit(O); } printf("Enter a string:\n"); gets(str); printf(" Enter a&&b:\n"); scanf("%c,%c" ,&a,&b); printf("%s\n" ,str); fprintf(fp," %s\n" ,str); replace(str,a,b); printf("Thenew string is----%s\n" ,str); fprintf(fp,"Thenew string is--- -%s\n" ,str); fclose(fp); }在一個字串s1中查找一 子串s2,若存在則返回子串在主串中的起始位置,不存在則返回-1
main() {chars1[6]="thisis";char s2[5]="is"; printf("%d\n" ,search(s1,s2)); system("pause"); int search(chars1[],char s2[]) {inti=0,j,len=strlen(s2); while(s1[j]){ for(j=O;j<len;j++) if(s1[i+j]!=s2[j]) break; if(j>=len)return i else i++; } return -1; }用指針變量輸出結構體數組元素。
struct student{ int num; char *name; char sex; int age; } stu[5]={1001,lihua",'F',18},{1002,"liuxing",'M',19},{1003, "huangke",F',19},1004, "fengshou",F',19}, {1005,"Wangming",'M' ,18}}; main() {int i; struct student *ps; printf("Num \tName\t\t\tSex\tAge\t\n"); /*用指針變量輸出結構體數組元素。*/ for(ps=stu;ps<stu+5;ps++) printf(" %d\t% 10s\t\t%c\t%d\t\n",ps- >num,ps- >name,ps- >sex,ps- >age); /*用數組下標法輸出結構體數組元素學號和年齡。*/ for(i= 0;i<5;i++) printf("%d\t%d\t\n" ,stu[i].num,stu[i].age); }建立-一個有三個結點的簡單鏈表
#define NULL 0 struct student{ int num; char *name; int age ; struct student*next; }; void main(){ struct studenta,b,c,*head, P; a.num=1001;a.name= "lihua"; a.age=18; /*對結點成員進行賦值*/ b.num=1002;b.name="liuxing"; b.age=19; c.num=1003;c.name=" huangke "; c.age=18; head= &a; /*建立鏈表,a為頭結點*/ a.next=&b; b.next=. &C; c.next=NULL; p=head; /*輸出鏈表*/ do{ printf("%5d,%s,%3d\n" ,p->num,p->name,p->age); p=p->next; }while(p!=NULL); }輸入一個字符串,判斷其是否為回文。
回文字符串是指從左到右讀和從右到左讀完全相同的字符串。
#include<stdio.h> #include<string.h> #include<string.h> main() { char s[100]; int ij,n; printf("輸入字符串: \n"); gets(s); n=strlen(s); for(i=0,j=n-1;i<j;i++.j--) if(s[i]!=s[j]) break; if(i>=j) printf("是回文串\n"); else printf("不是回文串\n"); }冒泡排序,從小到大,排序后結果輸出到屏幕及文件myf2.out
#include<stdio.h> void fun(inta[],int n) {int ij,t;for(i=O;i<=n-1;i++){for(j=O;j<ij++){if(a[j]>a[j+1]) t=a[j];a[j]=a[j+1];a[j+1]=t;}} } main(){inta[10]={12,45,7,8,96,4,10,48,2,46},n=10,i;FILE *f;if((f=fopen("myf2.out","W))==NULL)printf("open file myf2.outfailed!\n");fun(a,10);for(i=0;i<10;++){ printf("%4d" ,a[i]);fprintf(f,"%4d",a[i]);}fclose(f); }總結
以上是生活随笔為你收集整理的C语言入门20个简单程序|最新更新2021.7.13的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab调和均值滤波_中值和均值滤波
- 下一篇: java random 种子数_JAVA