> 文章列表 > GDPU C语言 天码行空9

GDPU C语言 天码行空9

GDPU C语言 天码行空9

填空题

1. 指针+排序 +数组GDPU C语言 天码行空9

输入

n=5
30 85 12 77 6

输出

6 12 30 77 85 

🤠 代码

#include<stdio.h>#define N 10void sort(int *x,int n)// *x 是 数组 a 的地址
{int i,j,k,t;for(i=0;i<n-1;i++)//从前往后枚举 坑位{k=i;      for(j=i+1;j<n;j++)    if(x[k]>x[j])//每轮找最小值放在 前边的坑位 里边        k=j;t=x[i],x[i]=x[k],x[k]=t;// 交换}
}int main()
{int a[N],n,*p;scanf("n=%d",&n);              for(p=a;p<a+n;p++)//数组名 是 首元素地址,数组元素在内存中的地址是连续的scanf("%d",p); sort(a,n);for(p=a;p<a+n;p++)printf("%d ",*p);printf("\\n");return 0;
}
#include<stdio.h>#define N 10void sort(int *x,int n)// *x 是 数组 a 的地址
{int i,j,k,t;for(i=0;i<n-1;i++)//从前往后枚举 坑位{k=i;      for(j=i+1;j<n;j++)    if(x[k]>x[j])//每轮找最小值放在 前边的坑位 里边        k=j;t=x[i],x[i]=x[k],x[k]=t;// 交换}
}int main()
{int a[N],n,*p;scanf("n=%d",&n);              for(p=a;p<a+n;p++)//数组名 是 首元素地址,数组元素在内存中的地址是连续的scanf("%d",p); sort(a,n);for(p=a;p<a+n;p++)printf("%d ",*p);printf("\\n");return 0;
}

2. 指针+字符型转整型

GDPU C语言 天码行空9

输入

http://99shufu.123love55

输入

  99  123  55

⭐ 注意数据类型
⭐ 源代码

#include <stdio.h>int getdig(char *p, int *q)
{int i = 0;//记录数字的个数,并作为返回值返回for(; *p != '\\0'; p++)if(*p >= '0' && *p <= '9'){*q = *p-'0';//字符型转整型p++;while(*p != '\\0' && (*p >= '0' && *p <= '9'))*q = *q * 10 + (*p++ -'0');//字符数组指针后移i++;//数字数量 ++q++;//数字数组指针后移一位}return i;   
}int main()
{char str[100], *p = str;int a[100], *q = a, count = 0;gets(p);count = getdig(p, q);;for(q = a; q < a + count; q++)printf("%4d", *q);
}

编程题

1. 字符删除问题

GDPU C语言 天码行空9


⭐ 注意输入输出格式问题

#include <stdio.h>#define N 100000int main()
{char a[N],*i,x;//gets(a);//gets 读字符串会吃掉回车scanf("%s\\n", &a);//scanf不会把 enter (回车)吃掉,将会影响下一次读入scanf("%c", &x);printf("After delete:\\n");for(i = a; *i != '\\0'; i++){if(x != *i)printf("%c", *i);}return 0;
}

代码片段

1. 递归函数计算x的n次方

GDPU C语言 天码行空9
⭐ 递归出口是 0 次方

#include "stdio.h"/*
//复习一下快速幂
double power(double x, int n) //
{double res = 1.0;while(n){if(n & 1)res *= x;x *= x;n >>= 1;}return res;
}
*/double power(double x, int n) //
{// 递归出口if(n == 0)return 1;return x*power(x, n - 1);//第n个x 乘于 x的(n-1)次方 == x的n次方
}int main()
{double x, a;int n;scanf("%lf,%d", &x, &n);a = power(x, n);printf("a=%f\\n", a);return 0;
}

2. 递归方法求Fibonacci数列第n项

GDPU C语言 天码行空9


⭐ 递归出口:斐波那契第一第二项为 1

#include "stdio.h"
int fib(int n)
{if(n == 1 || n == 2)return 1;return fib(n - 1) + fib(n - 2);
}int main()
{int n;scanf("%d", &n);printf("NO%d=%d\\n", n, fib(n));return 0;
}

3. 递归实现十进制转二进制

GDPU C语言 天码行空9


⭐ 先向下递归再输出

#include "stdio.h"
void dec2bin(int n)
{if(n == 0)//递归出口return;int x = n % 2;dec2bin(n / 2);printf("%d", x);
}int main()
{int n;scanf("%d", &n);dec2bin(n);printf("\\n");return 0;
}

4. 数组元素循环移位问题(左移)

GDPU C语言 天码行空9


⭐ 数组传参传的 是 地址

#include "stdio.h"
#define N 10
void cycle(int s[], int n, int count);//n表示数组长度,count表示移动的位置数
int main()
{int i, n, s[N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };scanf("%d", &n);//移动的位数printf("Before:\\n");for(i = 0; i<N; i++)printf("%4d", s[i]);cycle(s, N, n);printf("\\nAfter:\\n");for(i = 0; i<N; i++)printf("%4d", s[i]);printf("\\n");return 0;
}
void cycle(int s[], int n, int count)
{if(count == 0)return;int t = s[0],i;for(i = 0; i < n-1; i++){s[i] = s[i + 1];}s[n-1] = t;cycle(s, n, count - 1);
}

5. 实数拆分问题

GDPU C语言 天码行空9
GDPU C语言 天码行空9


⭐ 引用传递

#include "stdio.h"
void splitfloat(double x, int *intpart, double *fracpart);
int main()
{double a, fracpart;int intpart;scanf("%lf", &a);splitfloat(a, &intpart, &fracpart);//传地址printf("INT:%d\\nFRAC:%lf\\n", intpart, fracpart);return 0;
}
void splitfloat(double x, int *intpart, double *fracpart)
{*intpart = (int)x;//浮点型 强转成 整型 向下取整(丢弃浮点数)*fracpart = x - (double)*intpart;
}

6. 递归方法计算关于x的多项式的和

GDPU C语言 天码行空9
⭐ 递归出口 + 找规律

#include "stdio.h"
double f(double x, int n)
{if(n == 1)//递归出口return x;int flag = 1;// flag 记录当前项的正负if(n % 2 == 0)flag = -1;return flag * pow(x, n) + f(x, n - 1);
}int main()
{double x, a;int n;scanf("%lf,%d", &x, &n);a = f(x, n);printf("a=%f\\n", a);return 0;
}