1.輸入一個4位數:輸出這個輸的個位 十位 百位 千位
#include <stdio.h>
int main(int argc, char const *argv[])
{int a;printf("輸入一個4位數:");scanf("%d",&a);printf("個位:%d\n",a%10);printf("十位:%d\n",a%100/10);printf("百位:%d\n",a/100%10);printf("千位:%d\n",a/1000);return 0;
}
2.從鍵盤讀入兩個整數,輸出他們的和
#include <stdio.h>
int main(int argc, char const *argv[])
{int a,b;printf("輸入第一個整數:");scanf("%d",&a);printf("輸入第二個整數:");scanf("%d",&b);printf("它們的和:%d\n",a+b);return 0;
}
3.一個水分子的質量約為3.0*10^-23g,1夸脫水大約有950g,編寫一個程序,要求輸入水的夸脫數,然后顯示這么多水中包含多少水分子。表示:3.0e-23 打印格式:%f或%e
#include <stdio.h>
int main(int argc, char const *argv[])
{int a;printf("輸入水的夸脫數:");scanf("%d",&a);printf("%d夸脫水包含%f水分子\n",a,a*950/3.0e-23);return 0;
}
4.實現大小寫轉換(用getchar、putchar實現)即如果是大寫字母轉成小寫輸出如果是小寫字母轉為大寫輸出。
#include <stdio.h>
int main(int argc, char const *argv[])
{int a=getchar();if(65<=a&&a<=90){putchar(a+32);putchar(10);}else if (a>=97&&a<=122){putchar(a-32);putchar(10);}return 0;
}
5.從終端輸入3個整數;從大到小輸出。
#include <stdio.h>
int main(int argc, char const *argv[])
{int a, b, c;printf("請輸入三個整數:\n");scanf("%d%d%d", &a, &b, &c);if (a <= b){int m;m = a;a = b;b = m;}if (b >= c)printf("%d %d %d\n", a, b, c);else if (a >= c && c >= b)printf("%d %d %d\n", a, c, b);elseprintf("%d %d %d\n", c, a, b);return 0;
}
6.輸入任意兩個數,輸出兩數之間(包括這兩個數)偶數之和
#include <stdio.h>
int main(int argc, char const *argv[])
{int a, b, c;int sum = 0;printf("輸入任意兩個數:\n");scanf("%d%d", &a, &b);if (a > b){c = a;a = b;b = c;}for (int i = a; i <= b; i++){if (i % 2 == 0)sum += i;}printf("%d與%d偶數之和為%d\n", a, b, sum);return 0;
}
7.寫程序實現功能:讀入兩個整數(data1和data2)和一個運算符(op),計算表達式data1 op data2 的值.其中op可以為+、-、*、/四個符號中的任一種(用switch語句實現)
#include <stdio.h>
int main(int argc, char const *argv[])
{int a, b;char c;printf("輸入兩個整數:\n");scanf("%d%d", &a, &b);getchar();printf("輸入一個運算符(+、-、*、/):\n");scanf("%c", &c);switch (c){case '+':printf("%d%c%d=%d\n", a, c, b, a + b);break;case '-':printf("%d%c%d=%d\n", a, c, b, a - b);break;case '*':printf("%d%c%d=%d\n", a, c, b, a * b);break;case '/':printf("%d%c%d=%d\n", a, c, b, a / b);break;}return 0;
}
8.終端輸入十個數,去掉其中最大值和最小值,求平均值。
#include <stdio.h>
int main(int argc, char const *argv[])
{int a[10];int max, min;int sum = 0;printf("輸入十個數:\n");for (int i = 0; i < 10; i++){scanf("%d", &a[i]);sum += a[i];}for (int i = 0; i < 10; i++){max = a[0];min = a[0];if (a[i] > max)max = a[i];if (a[i] < min)min = a[i];}printf("sum=%d\n", sum);printf("max=%d\n", max);printf("min=%d\n", min);printf("去掉最大值和最小值,平均值為:%f\n", (float)(sum - max - min) / 8);return 0;
}
9.計算斐波那契數列前15項并逆序輸出。
#include <stdio.h>
int main(int argc, char const *argv[])
{int a[15] = {1, 1};for (int i = 2; i < 15; i++){a[i] = a[i - 2] + a[i - 1];}for (int i = 14; i >= 0; i--)printf("%d\n", a[i]);return 0;
}
10.循環輸入一個5位數,判斷它是不是回文數。當輸入0時循環結束。即12321是回文數,個位與萬位相同,十位與千位相同。
#include <stdio.h>
int main(int argc, char const *argv[])
{int a;printf("輸入一個5位數:");while (1){scanf("%d", &a);if (a == 0)break;if ((a % 10 == a / 10000) && (a / 10 % 10 == a / 1000 % 10))printf("是回文數\n");elseprintf("不是回文數\n");printf("輸入一個5位數:");}return 0;
}
11.輸入一個字符串,大小寫轉換輸出。
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{char a[33] = {};scanf("%s", a);int n = strlen(a);for (int i = 0; i < n; i++){if (a[i] >= 'a' && a[i] <= 'z')printf("%c", a[i] - 32);else if (a[i] >= 'A' && a[i] <= 'Z')printf("%c", a[i] + 32);}return 0;
}
12.冒泡排序。
#include <stdio.h>
int main(int argc, char const *argv[])
{int a[5] = {6, 5, 4, 2, 3};for (int i = 0; i < 4; i++){for (int j = 0; j < 4 - i; j++){if (a[j] > a[j + 1]){a[j] = a[j] ^ a[j + 1];a[j + 1] = a[j] ^ a[j + 1];a[j] = a[j] ^ a[j + 1];}}}for (int i = 0; i < 5; i++){printf("%d", a[i]);}return 0;
}
13.選擇排序。
#include <stdio.h>
int main(int argc, char const *argv[])
{int a[5] = {5, 4, 6, 9, 7};int temp;for (int i = 0; i < 4; i++){int min = i;for (int j = i + 1; j < 5; j++){if (a[j] < a[min])min = j;}temp=a[i];a[i]=a[min];a[min]=temp;}for (int i = 0; i < 5; i++)printf("%d", a[i]);return 0;
}
14.字符串逆序輸出(兩種方法實現)。
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{// 字符串逆序輸出// 法1// char a[] = "hello world";// char *p = a;// int n = strlen(a);// for (int i = n; i >= 0; i--)// {// printf("%c ", p[i]);// }char a[] = "hello world";char *p = a + strlen(a) - 1;for (int i = 0; i < strlen(a); i++){printf("%c", *p);p--;}// 法2// char a[] = "hello world";// char *p = a;// int n = strlen(a);// for (int i = 0; i < n / 2; i++)// {// p[i] = p[i] ^ p[n - i - 1];// p[n - i - 1] = p[i] ^ p[n - i - 1];// p[i] = p[i] ^ p[n - i - 1];// }// printf("%s", p);// return 0;char a[66];gets(a);char *p = a;char *q = a + strlen(a) - 1;while (p < q){*p = *p ^ *q;*q = *p ^ *q;*p = *p ^ *q;p++;q--;}printf("%s", a);return 0;
}
15.字符串轉數字:"1234" -----> 1234(一千兩百三十四)。
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{// 字符串轉數字//法1// char a[33];// gets(a);// int n=strlen(a);// int sum=0;// int j;// for (int i = 1; i < n; i++)// {// j*=10;// } // for (int i = 0; i < n; i++)// {// sum+=(a[i]-48)*j;// j/=10;// }// printf("%d\n", sum);// return 0;//法2char a[33];gets(a);char *p=a;int n=0;while (*p!='\0'){n=n*10+(*p-48);p++;}printf("%d\n",n);
}
16.打印楊輝三角前十行(二維數組)。
#include <stdio.h>
int main(int argc, char const *argv[])
{// 打印楊輝三角前十行// 法1// int a[10][10] = {0};// for (int i = 0; i < 10; i++)// {// for (int j = 0; j <= i; j++)// {// if (j - 1 >= 0)// a[i][j] = a[i - 1][j - 1] + a[i - 1][j];// else// a[i][j] = 1;// }// }// for (int i = 0; i < 10; i++)// {// for (int j = 0; j <= i; j++)// printf("%-3d ", a[i][j]);// printf("\n");// }// 法2int a[10][10] = {};for (int i = 0; i < 10; i++){a[i][0] = 1;a[i][i] = 1;}for (int i = 2; i < 10; i++){for (int j = 1; j < 10; j++)a[i][j] = a[i - 1][j - 1] + a[i - 1][j];}for (int i = 0; i < 10; i++){for (int j = 0; j <= i; j++)printf("%d ", a[i][j]);putchar(10);}
}
17.已知字符數組a[10]和b[10]中元素的值遞增有序,用指針實現將兩個數組中元素按照遞增順序輸出。如:char a[10]=”acdgjmno”?; char b[10]=”befhil”;->”abcdefghijlmno”
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{char a[10] = "acdgjmno";char b[10] = "befhil";char *p = a, *q = b;int i = 0, j = 0;while (i < strlen(a) && j < strlen(b)){if (p[i] < q[j]){printf("%c", p[i]);i++;}else{printf("%c", q[j]);j++;}}if (i < strlen(a)){for (int k = i; k < strlen(a); k++)printf("%c", a[k]);}if (j < strlen(b)){for (int k = j; k < strlen(b); k++)printf("%c", b[k]);}return 0;
}
18.給定一串字符"I love china",實現以單詞為單位的逆序,如:"china love i"
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{char a[] = "i love china";char *p = a;int n = strlen(a);for (int i = 0; i < n / 2; i++){p[i] = p[i] ^ p[n - i - 1];p[n - i - 1] = p[i] ^ p[n - i - 1];p[i] = p[i] ^ p[n - i - 1];}char *q;char *k=NULL, temp;p = q = a;while (*p != '\0'){while (*p == ' ' )p++;q = p;while (*q != ' ' && *q != '\0')q++;k = q;q = k - 1;while (p < q){temp = *p;*p = *q;*q = temp;p++;q--;}p = k;}printf("%s\n", a);return 0;
}
19.定義求x的n次方值的函數( x是實數, n為正整數)。
#include <stdio.h>int fun(int x, int n)
{int r = 1;for (int i = 0; i < n; i++)r *= x;printf("%d\n", r);return r;
}int main(int argc, char const *argv[])
{// int r = 1;// int x = 2;// for (int i = 0; i < 4; i++)// r *= x;// printf("%d\n", r);printf("%d\n", fun(2, 4));
}
20.編寫一個函數,函數的2個參數,第一個是一個字符,第二個是一個char *,返回字符串中該字符的個數。
#include <stdio.h>int fun(char ch, char *p) //ch=a='a', p=s
{int n = 0;while (*p != '\0') //*p{if (*p == ch)n++;p++; //p=p+1}return n;
}int main(int argc, char const *argv[])
{char a = 'a';char s[32] = "abbba";printf("%d\n", fun(a, s));
}
21.編程實現strlen函數的功能,strlen計算字符串實際長度,不包含'\0'
#include <stdio.h>int fun(char *p)
{int n = 0;while (*p){n++;p++;}return n;
}int main(int argc, char const *argv[])
{char s[32] = "abbba";int len = 0;len = fun(s);printf("%d\n", len);//printf("%d\n", fun(s));//printf("%d\n", fun("6666666"));
}
22.字符串"123"轉換成整型123
#include <stdio.h>int fun(char *p)
{int sum = 0;while (*p != '\0'){sum = sum * 10 + (*p - 48);p++;}return sum;
}int main(int argc, char const *argv[])
{char str[32] = "123";printf("%d\n", fun(str));
}
23.封裝函數實現兩數交換。
#include <stdio.h>
void fun(int *x, int *y)
{int tmp;tmp = *x;*x = *y;*y = tmp;
}int main(int argc, char const *argv[])
{int a = 10, b = 20;fun(&a, &b);printf("%d %d\n", a, b);
}
24.封裝函數實現strcpy功能。
#include <stdio.h>void fun(char *p, char *q)
{while (*q != '\0')*p++ = *q++; //*p=*q; p++; q++;*p = '\0';
}int main(int argc, char const *argv[])
{char a[32] = "";char b[32] = "hello";fun(a, b);printf("%s\n", a);
}
25.封裝函數實現strcat功能。
#include <stdio.h>
#include <string.h>
void fun(char *p, char *q)
{while (*p) //p=p+strlen(p);p++;while (*q)*p++ = *q++;*p = '\0';
}int main(int argc, char const *argv[])
{char a[32] = "hello";char b[32] = "world";fun(a, b);printf("%s\n", a);
}
26.用遞歸函數求5的階乘5!
#include <stdio.h>
#include <string.h>int fac(int n) //n=5 n=4 n=3 n=2 n=1
{if (n == 1)return 1; //fac(1)=1if (n > 1)return n * fac(n - 1); //遞推階段:5*fac(4) fac(4)=4*fac(3) fac(3)=3*fac(2) fac(2)=2*fac(1)//回歸階段:==> fac2(2)=2*1=2 ==>fac(3)=3*2=6 ==> fac(4)=4*6=24 ==>fac(5)=5*24=120
}int main(int argc, char const *argv[])
{int n = 5;printf("%d\n", fac(n));
}
27.斐波那契數列:指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F(1)=1,F(2)=1,?F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 求第五個數。
#include <stdio.h>
#include <string.h>int fac(int n) //5 4
{if (n == 1 || n == 2)return 1;if (n > 2)return fac(n - 1) + fac(n - 2); //fac(5)=fac(4)+fac(3)= fac(3)+fac(2) +fac(3) = 5
}int main(int argc, char const *argv[])
{int n = 5;printf("%d\n", fac(n));
}
28.創建一個名為student的結構體,包含姓名,學號,班級,從終端輸入學生的信息并打印。
#include <stdio.h>
#include <string.h>
struct student
{char name[32];int id;int class;
};struct student s1;
int main(int argc, char const *argv[])
{scanf("%s %d %d", s1.name, &s1.id, &s1.class);printf("%s %d %d\n", s1.name, s1.id, s1.class);
}
29.typedef用法
#include <stdio.h>
#include <string.h>
//1.給普通變量重命名
typedef int size4;//2. 給指針類型重命名
typedef int *int_p;//3. 給數組類型重名
typedef int intArr5[5];int main()
{size4 a = 10; //等同于int a=10;int_p p = &a; //等同于int *p=&a;intArr5 arr = {1, 2, 3, 4, 5}; //等同于int arr[5]={1,2,3,4,5};printf("%d\n", *p); //10printf("%d\n", arr[3]); //4
}
30.創建一個描述手機的結構體叫phone, 包含品牌,型號,顏色,價格。從終端輸入你自己手機的信息并打印。(用typedef)。
#include <stdio.h>
#include <string.h>
typedef struct phone
{char brand[32];char type[32];char color[32];int price;
} ph;ph my;
int main()
{scanf("%s %s %s %d", my.brand, my.color, my.type, &my.price);printf("%s %s %s %d\n", my.brand, my.color, my.type, my.price);
}
31.創建一個名為student的結構體數組,包含學號,姓名,成績,(數據類型自己定義),從終端輸入學生的信息并打印分數及格的學生信息(輸入3人即可)。
#include <stdio.h>
typedef struct student
{char name[32];int number;int score;
} st;int main(int argc, char const *argv[])
{st s[3];for (int i = 0; i < 3; i++)scanf("%s %d %d", s[i].name, &s[i].number, &s[i].score);for (int i = 0; i < 3; i++){if (s[i].score >= 60)printf("%s %d %d\n", s[i].name, s[i].number, s[i].score);}return 0;
}
32.創建一個結構體數組,數組名為book,結構體成員包含編號,書名,售價(數據類型自己設定)。寫一個函數,包含兩個形參,分別接收結構體數組的首地址和一個指定的售價,函數的功能為打印結構體數組中售價大于指定售價的書的信息。
#include <stdio.h>
#define N 3
typedef struct book
{char name[32];int id;int price;
} BOOK; //BOOK等同于struct bookBOOK b[N] = {{"shuihu", 1, 40},{"zyj zhuan", 2, 200},{"tuling zhuan", 3, 0}};void bookPri(BOOK *p, int n)
{for (int i = 0; i < N; i++){if (p->price > n)printf("%s %d %d\n", p->name, p->id, p->price);p++;}
}int main(int argc, char const *argv[])
{bookPri(b, 6);return 0;
}
33.創建一個游戲英雄的結構體數組(5個元素), 結構體成員包含名稱, 血量和價格。給出每個英雄信息,封裝函數實現按價格從低到高打印英雄信息,(用冒泡排序)。封裝函數實現修改英雄信息功能。
#include <stdio.h>typedef struct hero
{char name[32];int hp;int price;
} HERO;void sort(HERO *p, int n)
{HERO tmp;for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (p[j].price > p[j + 1].price){tmp = p[j];p[j] = p[j + 1];p[j + 1] = tmp;}}}
}void change(HERO *p, int n)
{if (n <= 3)scanf("%s %d %d", p[n - 1].name, &p[n - 1].hp, &p[n - 1].price);elseprintf("err\n");
}int main(int argc, char const *argv[])
{HERO a[3] = {{"zdl", 1, 50},{"zyj", 999, 100},{"xyb", 10000, 2}};change(a, 1);sort(a, 3);for (int i = 0; i < 3; i++)printf("%s %d %d\n", a[i].name, a[i].hp, a[i].price);return 0;
}
34.封裝函數實現冒泡排序。
#include <stdio.h>void fun(int *a, int n)
{for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - 1 - i; j++){if (a[j + 1] > a[j]){int temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}for (int i = 0; i < 10; i++)printf("%d ", a[i]);printf("\n");
}int main(int argc, char const *argv[])
{int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};fun(a, 10);return 0;
}
35.封裝函數實現如下功能:輸入任意兩個數,返回兩數之間(包括這兩個數)偶數之和。
#include <stdio.h>int fun(int a, int b)
{int sum = 0;if (a >= b){int t = a;a = b;b = t;}for (int i = a; i <= b; i++){if (i % 2 == 0)sum += i;}return sum;
}int main(int argc, char const *argv[])
{int a, b, sum;scanf("%d %d", &a, &b);sum = fun(a, b);printf("%d\n", sum);return 0;
}