c入门编程练习
lanmy_dl
美团程序员在职
展开
-
21指针字符串的连接
问题描述在字符串a的后面加上字符串b代码#include<stdio.h>#include<stdlib.h>char* strcat(char *str1,char *str2){ char *head=str1;//head保存str1的头指针 while(*str1!='\0'){ str1++; }//移到最后一位 while(*str2!='\0'){ *str1=*str2;//再把str2复制到str1的尾部 str1++; st原创 2021-03-20 16:31:28 · 372 阅读 · 0 评论 -
20字符串a中指定位置插入字符串b
问题分析编写函数,要在a字符串中给定位置(从1开始)插入字符串b然后结束输出结果例如:abcdefg12342a1234bcdefgc语言代码#include<stdio.h>#include<string.h>#include<stdlib.h>#define N 20void *my_insert(char *a,char *b,int n);//例如abcdefg中第二个位置插入1234 结果变为a1234bcdefg int main原创 2021-03-19 21:12:56 · 467 阅读 · 0 评论 -
19回文数
判断回文数或者是回文字符串例如:abba 12321这些对称的都是回文数代码#include<stdio.h>#include<string.h>#define N 30//字符串或者数都可以 abba 12321 int fun(char *str){ int n=strlen(str); char *start=str;//首地址 char *end=str+n-1;//尾地址 int flag=1; while(start<=end&a原创 2021-03-13 17:35:59 · 127 阅读 · 0 评论 -
18字符串逆序(指针和数组)
逆序字符串究其本质都是传入的数组首地址,然后进行逆序代码#include<stdio.h>#include<string.h>#define N 30//指针操作void reverse(char *str,int n)//*str 或者str[] { int i; char p; for(i=0;i<n/2;i++){ p=*(str+i);//存放从第一个继续的首地址 *(str+i)=*(str+n-i-1);//比如abcdef -1是原创 2021-03-13 17:17:16 · 299 阅读 · 0 评论 -
17一个英文句将首字母A和尾字母K的单词进行调换
题意转换前:ThIS IS TOOK A TOK AO TIK转换后:THIS IS TOOK TIK AO TOK A代码#include<stdio.h>#include<string.h>#define N 60void change(char **,int);int main(){ char str[N]; //char str[N]="I AM A LK BOY VERY OK"; //写死 char c[2]=" ";//因为还有个/0 c原创 2021-03-13 15:44:19 · 273 阅读 · 0 评论 -
16将一个英文句子的每个单词首字母大写指针的指针传参
代码和分析首先需要使用strtok把这个字符串以空格分割成一个一个的单词,然后把每一个单词字符串存进一个数组a里面。注意2点:1.不能用scanf传递该句子,因为有空格,要用gets2.传参的时候,老是报错,因为传的一维进去,函数里面用2维就不会知道下一个字符串的首地址,网上也搜了别人的博客看怎么解决的,如下:二维数组函数传参博客链接本题代码#include<stdio.h>#include<string.h>#include<math.h>#defi原创 2021-03-13 15:32:08 · 1215 阅读 · 0 评论 -
15比较2个输入字符串的首字母大小返回差值(指针和字符数组2种方式)
问题描述比较2个输入字符串的首字母大小返回差值如果(可延伸:比较n组字符串的首字母大小排序)代码(main函数可以使用指针和引用)以下分别写了2个main,选择一个即可#include<stdio.h>#define N 30int compare(char *m,char *n); //定义指针指向字符串的首地址//int main()//{// char *str1,*str2;//定义2个字符串数组 // printf("请输入字符串str1\n");// s原创 2021-03-12 20:27:13 · 482 阅读 · 0 评论 -
15复制file1文件到file2中
一、创建file1文件1.代码#include<stdio.h>#include<stdlib.h> int main(){ FILE *p; char filename[20]; printf("请输入文件名:"); scanf("%s",filename);//要回车但是遗留了 getchar();//用来消化最后的回车符 ,getchar的会 自动忽略回车 if((p=fopen(filename,"w"))==NULL){ printf("不能打原创 2021-03-11 23:03:52 · 2327 阅读 · 0 评论 -
14写文件和读文件的常用2段
一、写文件1.定义好直接写入#include<stdio.h>#include<stdlib.h>int main(){ FILE *fp; char filename[20]; printf("请输入文件名:"); scanf("%s",&filename); if((fp=fopen(filename,"a"))==NULL){//a表示在尾部继续添加,而w表示重新添加 exit(0); } char s[]="1 直接一定anny456原创 2021-03-11 22:22:48 · 144 阅读 · 0 评论 -
2篇搞懂二分法、牛顿迭代法、弦截法求平方根和解非线性方程求根
链接牛顿迭代法转载 2021-03-11 13:26:28 · 657 阅读 · 0 评论 -
13成绩百分制和等级的转换
问题描述根据输入的成绩判断是否合法,然后输出成绩等级代码#include<stdio.h>void change(int );int main(){ int score; puts("请输入考试成绩:"); scanf("%d",&score); if(0<=score&&score<=100){ change(score); }else{ puts("您输入的成绩不合法,请重新输入:"); scanf("%d",&s原创 2021-03-10 17:59:04 · 519 阅读 · 0 评论 -
12超简单理解写闰年
问题描述求闰年代码闰年简单来说就是:普通年能被4整除(普通年当然不能被100整除),世纪年能被400整除。#include<stdio.h>int main(){//闰年:普通年能被4整除(普通年当然不能被100整除),世纪年能被400整除 ,所以直接分两步 int i; for(i=1969;i<=2032;i++){ if(i%100==0){//世纪年 if(i%400==0){ printf("%d\n",i); } }else{/原创 2021-03-10 17:19:26 · 266 阅读 · 0 评论 -
字符串数组大写小写互相转换
问题描述对于输入的字符串数组,把里面的大写转换成小写代码思路:可以直到A的ASCII码是65,a的ASCII码是97,相差32#include<stdio.h>#define N 100int main(){ char ch[N]; gets(ch); //连续得到字符串数组 int i=0; do{ if(ch[i]<'z'&&ch[i]>'a'){//小写转大写 ch[i]=ch[i]-32; } else if(ch[i]原创 2021-03-10 16:14:00 · 2790 阅读 · 0 评论 -
12选择排序法
问题描述输入10个数,每个数按回车,用选择排序法输出代码和分析选择排序:每次从待排序序列中选择一个最小的数和已知的某位进行交换#include<stdio.h>#define N 10int main(){ int a[N]; int i,j,k; for(i=0;i<N;i++){ scanf("%d",a+i);//回车输入10个数 } for(i=0;i<N;i++){//从第一个开始和后面中选择一个最小也就是求min的交换 k=i;//记原创 2021-03-10 12:49:39 · 87 阅读 · 0 评论 -
11malloc动态建立单链表实时输入数据后遍历输出
问题描述我们要在动态建立链表时空间才不会被浪费,每增加一个节点数据就动态为他分配一个空间,然后插入到主链表中,最后输出链表代码解决#include<stdio.h>#include<stdlib.h> #define LEN sizeof(Student)//定义一个结构体的大小,因为每次分配一个节点的大小 typedef struct Student{ int num; float score; struct Student *next;}Student;/原创 2021-03-09 21:19:54 · 235 阅读 · 0 评论 -
10单链表的遍历
问题描述一个学生数据结构体可以有学号,成绩我们需要定义一个链表,遍历输出各个数据代码#include<stdio.h>//定义数据结构typedef struct Student{ int num; float score; struct Student *next;//因为这个在里面还么有定义Stu }Student;int main(){ Student a={1,98.2},b={2,78},c={3,89},d={4,68};//也可以通过a.num a.sco原创 2021-03-09 16:42:53 · 222 阅读 · 0 评论 -
9学生中三门课平均分最高的那个学生信息
问题描述输入3个学生包含学号,姓名和三门课的成绩,中间以空格分开,然后输出最大平均分的那个学生的信息代码#include<stdio.h>#include<string.h># define N 3typedef struct Student{ long id; char name[20]; float score[3]; float aver;}Student;//Student stu_1={10101,"张三",67,93,87.5};//Studen原创 2021-03-09 16:17:48 · 153 阅读 · 0 评论 -
8用学生结构体排序成绩
问题描述把学生成绩(包含姓名和成绩)从高到低排序后输出学生信息代码分析:需要定义一个学生结构体,包含学生姓名和成绩,然后对成绩排序,交换的时候注意是交换整个学生结构体,而不仅仅是里面的成绩#include<stdio.h>typedef struct Student{ char name[20]; float score;}Student;int main(){ int i,j; Student temp;//中间变量结构体 Student stu[5]={{"张三"原创 2021-03-09 12:40:17 · 1424 阅读 · 0 评论 -
7有输入单个数大3的数字有序输出三位数整数
问题输入一个数,让其大3的这几个数,总共重新组成一个三位数,并按大小顺序输出,每6个换一行例如输入 2输出234 235 243 245 253 254324 325 342 345 352 354423 425 432 435 452 453523 524 532 534 542 543输入 5输出567 568 576 578 586 587657 658 675 678 685 687756 758 765 768 785 786856 857 865 867 875 876原创 2021-03-04 11:31:57 · 105 阅读 · 2 评论 -
6求最大公约数之辗转相除法
问题描述:最大公约数解法:辗转相除法#include<stdio.h>int main(){ int a,b,t; scanf("%d %d", &a, &b); while(b!=0){ t = a%b; a = b; b = t; } printf("%d",a);}结果原创 2021-03-04 10:51:39 · 87 阅读 · 1 评论 -
5连续输入求平均数
问题描述连续输入数,直到-1结束代码#include<stdio.h>int main(){ int number; int count = 0; int sum = 0; scanf("%d",&number);//输入一个数 1,注意没有\n换行 while(number!=-1){//判断输入的数 sum += number; count++; scanf("%d",&number); } printf("您总共输入了%d个数,平均值原创 2021-03-03 21:27:56 · 239 阅读 · 1 评论 -
4逆序数
#include<stdio.h>int main(){ int x; x=12345; //scanf("%d",&x);//当然你也可以自己输入 int digit;//末-位的数 int ret = 0;// 转化后的数,需要乘过来的 while(x > 0){ digit = x%10;//末一位的数5 ,要是末2位就%100// //printf("%d",digit);//007 ret = ret*10 + digit; //上一位数原创 2021-03-03 21:22:37 · 172 阅读 · 1 评论 -
3猜数
#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){ //srand(time(0)); int random = rand()%100+1;//保证随机数是1-100之间的 int count = 0; int number; printf("开始猜数吧!\n"); do{ printf("请输入您的数1-100:\n"); scanf("%d", &number原创 2021-03-03 19:51:41 · 92 阅读 · 1 评论 -
2求三个数中的最大数
#include<stdio.h>int main(){ int a, b, c,max;//max变量记录最大的数 printf("请输入3个数a, b, c\n"); scanf("%d %d %d", &a, &b ,&c); if(a>b){ if(a>c){ max = a; }else{ max = c; } }else{//a<b if(b>c){ max = b; }else{//原创 2021-03-03 16:39:31 · 84 阅读 · 1 评论 -
1.计算时间差
思路可以全部转化为分钟数,计算后再转回去#include<stdio.h>int main(){ int hour1,minute1; int hour2,minute2; scanf("%d %d", &hour1, &minute1); scanf("%d %d", &hour2, &minute2); int t1 = hour1 * 60 + minute1; int t2 = hour2 * 60 + minute2; int t =原创 2021-03-03 11:30:57 · 114 阅读 · 0 评论