C语言练习 | 初学者经典练习汇(3)
创始人
2024-06-02 06:07:04
0

目录

1、喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水

2、实现一个函数来调整该数组中数字的顺怀

3、在屏幕上打印杨辉三角

4、根据供词猜凶手

5、5位运动员参加了10米台跳水比赛预测比赛结果

6、实现一个计算器,加减乘除

7、写一个冒泡排序

8、写一个通用方式的冒泡排序

9、给一个结构体排序

10、杨氏矩阵查找一个数

11、实现一个函数,可以左旋字符串中的k个字符。

12、字符串旋转结果

13、模拟实现strlen库函数

14、模拟实现strcat库函数

15、模拟实现strcmp库函数

16、模拟实现strstr函数(*)

17、写代码实现输入任意的字符

18、模拟实现memcpy函数

19、模拟实现memmove函数


1、喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水

要求:给20元,可以多少汽水 (编程实现)

int main()
{int money = 0;scanf("%d",&money);int total = money;int empty = money;while(empty >= 2){total += empty/2;empty = empty/2 + empty%2;}printf("%d\n",total);return 0;
}

2、实现一个函数来调整该数组中数字的顺怀

要求:使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

void move(int arr[],int sz)
{int left = 0;int right = sz-1;while(left

3、在屏幕上打印杨辉三角

 代码:

int main()
{int arr[10][10] = {0};int i = 0;int j = 0;for(i=0;i<10;i++){for(j=0;j<=i;j++){if(j == 0){arr[i][j]=1;}if(i == j){arr[i][j]=1;}if(i>=2&&j>=1){arr[i][j] = arr[i-1][j-1]+arr[i-1][j];}}}for(int i =0;i<=10;i++){for(int j =0;j

4、根据供词猜凶手

题目内容:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个
以下为4个嫌疑犯的供词:

  • A说:不是我。
  • B说:是C。
  • C说:是D
  • D说:C在胡说

已知3个人说了真话,1个人说的是假活

int main()
{char killer = 0;for(killer = 'A';killer <= 'D';killer++){if((killer != 'A')+(killer == 'C')+(killer == 'D')+(killer != 'D') == 3){printf("killer=%c\n",killer);}}return 0;
}

5、5位运动员参加了10米台跳水比赛预测比赛结果

  • A选手说: B第二,我第三;
  • B选手说: 我第二,E第四;
  • C选手说: 我第一,D第二;
  • D选手说: C最后,我第三;
  • E选手说: 我第四,A第一;

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次

int main()
{int a,b,c,d,e = 0;for(a=1;a<=5;a++){for(b=1;b<=5;b++){for(c=1;c<=5;c++){for(d=1;d<=5;d++){for(e=1;e<=5;e++){if((((b==2)+(a==3))==1)&&((b==2)+(e==4)==1)&&((c==1)+(d==2)==1)&&((c==5)+(d==3)==1)&&((e==4)+(a==1)==1)){if(a*b*c*d*e == 120){printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);}}}}}}}return 0;
}

6、实现一个计算器,加减乘除

要求:用两种方法,不用函数指针数组和用函数指针数组

不用函数指针数组:

int Add(int x,int y)
{return x + y;
}
int Sub(int x,int y)
{return x - y;
}
int Mul(int x,int y)
{return x * y;
}
int Div(int x,int y)
{return x / y;
}
void menu()
{printf("****************************\n");printf("**  1.Add   ***  2.Sub  ****\n");printf("**  3.Mul   ***  4.Div  ****\n");printf("********   0.exit  *********\n");printf("****************************\n");
}
int main()
{int input = 0;do{int a = 0;int b = 0;menu();printf("请输入:>");scanf("%d",&input);switch(input){case 1:printf("请输入两个数:>\n");scanf("%d %d",&a,&b);printf("%d\n",Add(a,b));break;case 2:printf("请输入两个数:>\n");scanf("%d %d",&a,&b);printf("%d\n",Sub(a,b));break;case 3:printf("请输入两个数:>\n");scanf("%d %d",&a,&b);printf("%d\n",Mul(a,b));break;case 4:printf("请输入两个数:>\n");scanf("%d %d",&a,&b);printf("%d\n",Div(a,b));break;case 0:printf("退出程序\n");break;default:printf("输入错误,请重新输入:>\n");break;}}while(input);return 0;
}

用函数指针数组

int Add(int x,int y)
{return x + y;
}
int Sub(int x,int y)
{return x - y;
}
int Mul(int x,int y)
{return x * y;
}
int Div(int x,int y)
{return x / y;
}
void menu()
{printf("****************************\n");printf("**  1.Add   ***  2.Sub  ****\n");printf("**  3.Mul   ***  4.Div  ****\n");printf("********   0.exit  *********\n");printf("****************************\n");
}
int main()
{int input = 0;do{int (*pfarr[5])(int,int) = {NULL,Add,Sub,Mul,Div};int a = 0;int b = 0;menu();printf("请输入:>");\scanf("%d",&input);if(input >=1 && input <= 4){printf("请输入两个数:>\n");scanf("%d %d",&a,&b);printf("%d\n",(pfarr[input])(a,b));}else if(input ==0){printf("退出程序\n");break;}else{printf("输入错误,请重新输入:>\n");}}while(input);return 0;
}

7、写一个冒泡排序

void bubble_sort(int arr[],int sz)
{int i = 0;for(i=0; iarr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}
}
void print(int arr[],int sz)
{int i = 0;for(i=0;i

8、写一个通用方式的冒泡排序

void print(int arr[],int sz)
{int i = 0;for(i=0;i0)         //比较两个元素的{Swap((char*)base+j*wideth,(char*)base+(j+1)*wideth,wideth);}}}
}
int cmp_int(const void* e1,const void* e2)
{return *(int*)e1 - *(int*)e2;
}
int main()
{int arr[] = {0,1,9,3,4,5,6,2,8,7};int sz =sizeof(arr) / sizeof(arr[0]);bubble_sort(arr,sz,sizeof(arr[0]),cmp_int);print(arr,sz);return 0;
}

9、给一个结构体排序

要求:用到qsort函数:
void qsort(void* base,size_t num,size_t size,int(*cmp)(const void* e1,const void* e2))

#include
#include
struct Stu
{char name[20];int age;
};
int sort_by_name(const void* e1,const void* e2)
{return strcmp(((struct Stu*)e1)->age,((struct Stu*)e2)->age);
}
void test()
{struct Stu s[3] = {{"zhangsan",30},{"lise",23},{"wangwu",33}};int sz = sizeof(s) / sizeof(s[0]);qsort(s,sz,sizeof(s[0]),sort_by_name);
}
int main()
{test();return 0;
}

10、杨氏矩阵查找一个数

要求:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

int find_num(int arr[3][3],int r,int c,int k)
{int x = 0;int y = c-1;while(x=0){if(arr[x][y]k){y--;}else{printf("在第%d行,第%d列\n",x+1,y+1);return 1;}}return 0;
}
int main()
{int arr[3][3] = {1,2,3,4,5,6,7,8,9};int k = 7;int ret = find_num(arr,3,3,k);if(ret == 1){printf("找到了\n");}else{printf("找不到\n");}return 0;	
}

 在函数里不打印,怎么返回来行和列的值

int find_num(int arr[3][3],int* r,int* c,int k)
{int x = 0;int y = *c-1;while(x<*r && y>=0){if(arr[x][y]k){y--;}else{*r = x;*c = y;return 1;}}return 0;
}
int main()
{int arr[3][3] = {1,2,3,4,5,6,7,8,9};int k = 7;int x = 3;int y = 3;int ret = find_num(arr,&x,&y,k);if(ret == 1){printf("找到了,下标为:%d %d\n",x,y);}else{printf("找不到\n");}return 0;	
}

11、实现一个函数,可以左旋字符串中的k个字符。

例如:ABCD左旋一个字符得到BCDA
        ABCD左旋两个字符得到CDAB

#include
void left_move(char* str,int k)
{int len = strlen(str);int i = 0;for(i=0; i

利用散布翻转法

#include
void reverse(char *start,char* end)
{while(start

12、字符串旋转结果

题目内容:
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串
例如:
给定s1 = PABCD和s2 = BCDAA,返回1
给定s1 = abcd和s2 = ACBD,返回0.

#include
int is_left_move(char arr1[],char arr2[])
{int n = strlen(arr1);int  i = 0;for(i=0; i

方法二(用strncat和strstr库函数)

#include
int is_left_move(char* str1,char* str2)
{if(strlen(str1) != strlen(str2))  //长度不相等,肯定不是旋转得来的{return 0;}int len = strlen(str1);strncat(str1,str2,len);           //str1字符串的后面追加一个str1char* ret = strstr(str1,str2);    //判断str2是否为str1的字符串return ret != NULL;
}
int main()
{char arr1[20] = "abcdef";char arr2[] = "cdefab";int ret = is_left_move(arr1,arr2);if(ret == 1){printf("Yes\n");}else{printf("No\n");}return 0;
}

13、模拟实现strlen库函数

#include
int my_strlen(const char* str)
{assert(str != NULL);int count = 0;while(*str != '\0'){str++;count++;}return count;
}
int main()
{char arr[] = "abc";printf("%d\n",my_strlen(arr));return 0;
}

14、模拟实现strcat库函数

#include
char* my_strcat(char* dest,const char* src)
{char* ret = dest;assert(dest && src);while(*dest)                  //找到目标字符串的\0{dest++;}while(*dest++ = *src++)       //追加字符串,包括\0{;}return ret;					  //返回目标空间的起始位置
}
int main()
{char arr[20] = "bit ";char arr1[] = "hello";printf("%s\n",my_strcat(arr,arr1));return 0;
}

15、模拟实现strcmp库函数

int my_strcmp(char* s1,char* s2)
{while(*s1 == *s2){if(*s1 == '\0'){return 0;}s1++;s2++;}if(*s1>*s2){return 1;}else{return -1;}
}
int main()
{char* p = "abcd";char* q = "abca";int ret = my_strcmp(p,q);if(ret > 0){printf("p>q\n");}else if(ret < 0){printf("p

16、模拟实现strstr函数(*)

#include
char* my_strstr(const char* str1,const char* str2)
{assert(str1 && str2);const char* s1 = NULL;const char* s2 = NULL;const char* cp = str1;if(*str2 == '\0'){return (char*)str1;}while(*cp){s1 = cp;s2 = str2;while(*s1 && *s2 && (*s1 == *s2)){s1++;s2++;}if(*s2 == '\0'){return (char*)cp;}cp++;}
}
int main()
{char arr1[] = "abcdef";char arr2[] = "bcd";char* ret = my_strstr(arr1,arr2);if(ret == NULL){printf("找不到\n");}else{printf("找到了:%s\n",ret);}return 0;
}

17、写代码实现输入任意的字符

要求:输入任意的字符,输出的都是小写

#include
int main()
{char arr[10] = {0};scanf("%s",&arr);int i = 0;while(arr[i] != '\0'){if(isupper(arr[i])){arr[i] = tolower(arr[i]);}printf("%c ",arr[i]);i++;}return 0;
}

18、模拟实现memcpy函数

#include
void* my_memcpy(void* dest,const void* src,size_t num)
{assert(dest && src);void* ret = dest;while(num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;
}	
int main()
{int arr1[] = {1,2,3,4,5,6,7,8,9};  int arr2[20] = {0};my_memcpy(arr2,arr1,20);return 0;
}

19、模拟实现memmove函数

#include
void* my_memmove(void* dest,const void* src,size_t num)
{assert(dest && src);void* ret = dest;if(dest

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...