当前位置: 首页 > article >正文

编程之路,从0开始:练习篇

Hello大家好,我们又见面啦!

给生活添点passion,开始今天的编程之路!

今天我们来练习十道基础小题~

1、从键盘任意输入一个字符串,计算其实际字符个数并打印输出,即不使用字符串处理函数strlen()编程实现strlen()的功能。
**输入格式要求:"%s" 提示信息:"Please enter a string:"
**输出格式要求:"The length of the string is: %u\n"
程序的运行示例如下:
Please enter a string:Hello China
The length of the string is: 11

#include  <stdio.h>

int  MyStrlen(char str[]);

int  MyStrlen(char str[])
{
    int  i;
    int len = 0;
    for (i = 0; str[i] != '\0'; i++)
    {
        len++;
    }
    return (len);
}

int main()
{
    char   a[80];
    int  len;
    printf("Please enter a string:");
    gets(a);
    len = MyStrlen(a);
    printf("The length of the string is: %d\n", len);
    return 0;
}

2、

A代表数字0到9中的前五个数字,Z代表后五个数字,请还原下列乘式。问题本身并不复杂,可以对乘式中的每一位使用穷举法,最终可以得到结果。本题的关键在于怎样有效的判断每个部分积的每一位是否满足题意,这一问题处理不好,编写的程序会很长。
A代表数字0到9中的前五个数字,Z代表后五个数字,请还原下列乘式。
A Z A
× A A Z
------------
A A A A
A A Z Z
Z A A
------------
Z A Z A A

*问题分析与算法设计
问题本身并不复杂,可以对乘式中的每一位使用穷举法,最终可以得到结果。本题的关键在于怎样有效的判断每个部分积的每一位是否满足题意,这一问题处理不好,编写的程序会很长。程序实现中采用了一个判断函数,通过传入函数的标志字符串对所有的数进行统一的判断处理。

*程序说明与注释
 

#include<stdio.h>
void print(long a, long b, long s1, long s2, long s3);
int jud(long q, char* pflag);
int main()
{
	long i, j, k, l, m, n, term, t1, t2, t3;
	int flag;
	for (i = 0;i <= 4;++i) /*被乘数的第一位*/
		for (j = 5;j <= 9;++j) /*被乘数的第二位*/
			for (k = 0;k <= 4;++k) /*被乘数的第三位*/
			{
				term = 100 * i + 10 * j + k; /*被乘数*/
				for (flag = 0, n = 0;n < 4 && !flag;) /*乘数的第一位*/
					flag = jud((t3 = ++n * 100 * term) / 100, "001"); /*判断第三个部分积*/
				if (flag)
				{
					for (flag = 0, m = 0;m < 4 && !flag;) /*乘数的第二位*/
						flag = jud((t2 = ++m * 10 * term) / 10, "1100"); /*判断第二个部分积*/
					if (flag)
					{
						for (flag = 0, l = 5;l < 9 && !flag;) /*乘数的第三位*/
							flag = jud(t1 = ++l * term, "0000"); /*判断第一个部分积*/
						if (flag && jud(t1 + t2 + t3, "00101")) /*判断乘式的积*/
							print(term, n * 100 + m * 10 + l, t1, t2, t3);
					}
				}
			}
}

void print(long a, long b, long s1, long s2, long s3) /*打印结果*/
{
	printf("\n %ld\n", a);
	printf("*%ld\n", b);
	printf("......................\n");
	printf(" %ld\n %ld\n %ld\n", s1, s2 / 10, s3 / 100);
	printf("......................\n");
	printf(" %ld\n", a * b);
}
int jud(long q, char* pflag) /*判断一个数的每一位是否满足要求的判断函数*/
/*q:需要判断的数。pflag:标志字符串,A用1表示,Z用0表示。标志串排列顺序:个十百...*/
{
	while (q != 0 && *pflag != NULL) /*循环判断对应位的取值范围是否正确*/
		if (*pflag - '0' != (q % 10 >= 5 ? 1 : 0)) /*标志位与对应的位不符,返回0*/
			return 0;
		else
		{
			q /= 10;++pflag; /*若相符则取下一位进行判断*/
		}
	if (q == 0 && *pflag == NULL) /*q的位数与标志字符串的长度相同时,返回1*/
		return 1;
	else return 0;
}

3、不使用字符串处理函数strcat()编程实现strcat()的功能,即任意输入两个字符串,然后连接这两个字符串,返回连接后字符串的首地址。
程序的运行示例如下:
Input the first string:Hello
Input the second string:China
The result is: HelloChina

#define _CRT_SECURE_NO_WARNINGS 1
#include  <stdio.h>
#include  <string.h>

void test(char a[], char b[])
{
    int len = 0;
    int i = 1;
    for (i = 0;a[i] != '\0'; i++)
    {
        len++;
    }
    for (i = len;b[i - len] != '\0';i++)
    {
        a[i] = b[i - len];
    }
    int n = 0;
    printf("The result is: ");
    for (n = 0;n <= i;n++)
    {
        printf("%c", a[n]);
    }
}
int main()
{
    char   a[100] = {0};
    char b[100] = {0};
    int  len=0;
    int i = 0;
    printf("Input the first string:");
    gets(a);
    printf("Input the second string:");
    gets(b);
    test(a, b);
    return 0;
}

4、请按给定的函数原型编程实现两个数组中对应该元素值的交换(数组的长度定义成5)。 
函数原型:void exchange(int a[5],int b[5]) 
要求:
在主函数中输入两个数组中各元素的内容;
调用函数exchange实现两个数组中对应该元素值的交换;
在主函数中输出交换后两个数组的内容。
****输入提示信息格式: 无
****输入数据格式要求: "%d"
****输出提示信息格式:"Output array a:"
                     "Output array b:"
****输出数据格式要求:"%5d"

#define _CRT_SECURE_NO_WARNINGS 1
#include  <stdio.h>

void exchange(int a[5], int b[5])
{
    int i = 0;
    for (i = 0;i < 5;i++)
    {
        int temp = 0;
        temp = a[i];
        a[i] = b[i];
        b[i] = temp;
    }
    printf("Output array a:");
    for (i = 0;i < 5;i++)
    {
        printf("%5d", a[i]);
    }
    printf("Output array b:");
    for (i = 0;i < 5;i++)
    {
        printf("%5d", b[i]);
    }

}

int main()
{
    int i = 0;
    int a[5] = { 0 };
    int b[5] = { 0 };
    for (i = 0;i < 5;i++)
    {
        scanf("%d", &a[i]);
    }
    for (i = 0;i < 5;i++)
    {
        scanf("%d", &b[i]);
    }
    exchange(a,b);
  

    return 0;
}

5、程序:数列求和
编写一个程序对用户输入的整数数列进行求和计算。
**输入格式要求:"%d" 提示信息:"This program sums a series of integers.\n" "Enter integers (0 to terminate):"
**输出格式要求:"The sum is: %d\n" 
下面显示的是用户可见的内容:
This program sums a series of integers.
Enter integers (0 to terminate) : 8 23 71 5 0
The sum is : 107

#define _CRT_SECURE_NO_WARNINGS 1
#include  <stdio.h>
int main()
{
    int i = 0;
    int arr[100] = { 0 };
    int sum = 0;
    printf("This program sums a series of integers.\nEnter integers (0 to terminate) : ");
    do
    {
        scanf("%d",&arr[i]);
        i++;
    } while (getchar() != '\n');
    int n = 0;
    for (n = 0;n < i;n++)
    {
        sum = sum + arr[n];
    }
    printf("The sum is : %d", sum);
    return 0;
}

6、编写程序,打印1~999之间的全部同构数。所谓同构数,是指该数出现在它的平方数的右侧。如25^2=625,25出现在625的右端,25就是同构数。
***输入提示信息:无
***输入数据格式:无
***输出提示信息:"Print all the isomorphism between 1-999:\n"
***输出数据格式:"%d "
注:输出提示信息请放在循环体之外

#include <stdio.h>
int main()
{
	int i;
	printf("Print all the isomorphism between 1-999:\n");
	for(i=1;i<=999;i++)
	{
		if		(i<10)	{if(i*i%10==i)		printf("%d ",i);}
		else if	(i<100)	{if(i*i%100==i)		printf("%d ",i);}
		else			{if(i*i%1000==i)	printf("%d ",i);}
	}
	return 0;
}

7、

从键盘输入n,然后计算并输出1~n之间的所有数的阶乘值。
**输入格式要求:"%d" 提示信息:"Please enter n:"
**输出格式要求:"%d! = %ld\n"
程序运行示例如下:
Please enter n:10
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800

#include <stdio.h>
main()
{  	   	
    int   i, n;
    long  p = 1;
    printf("Please enter n:");
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {  	   	
        p = p * i;
        printf("%d! = %ld\n", i, p); 	/* 输出1~n之间的所有数的阶乘值 */
    }
} 

8、从键盘输入一个英文字母,如果它是大写英文字母,则将其转换为小写英文字母,如果它是小写英文字母,则将其转换为大写英文字母,然后将它及其ASCII码值显示到屏幕上,如果不是英文字母,则不转换直接输出到屏幕上。
**输入格式要求:提示信息:"Press a key and then press Enter:"
**输出格式要求:"%c, %d\n"
程序运行示例1如下:
Press a key and then press Enter:A
a, 97
程序运行示例2如下:
Press a key and then press Enter:a
A, 65

#include<stdio.h>
int main()
{
    char ch;
    printf("Press a key and then press Enter:");
    scanf("%c", &ch);
    if (ch >= 'a'&&ch <= 'z')
    {
        ch = ch - 32;
        printf("%c, %d\n", ch, ch);
    }else if(ch >= 'A'&&ch <= 'Z')
    {
        ch = ch + 32;
        printf("%c, %d\n", ch, ch);
    }else
    {
        printf("%c, %d\n", ch, ch);
    }
    return 0;
}

9、一辆卡车违反了交通规则,撞人后逃逸。现场有三人目击该事件,但都没有记住车号,只记住车号的一些特征。甲说:车号的前两位数字是相同的;乙说:车号的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:4位的车号正好是一个整数的平方。现在请根据以上线索帮助警方找出车号以便尽快破案。
**输出格式要求:"The number is:%d\n"

#include <stdio.h>
int main()    
{              
	int i,j,k,m ; 
	for (i = 0 ; i <= 9 ; i++)
	{
		for (j = 0 ; j <= 9 ; j++)
		{
			if ( i != j )
			{
				k = i * 1000 + i * 100 + j * 10 + j ;
				for (m = 3 ; m * m <= k ; m++)       //因为四位车牌最小为0011 所以m最小为3//
				{                                    
					if (m*m == k)
					{
						printf("The number is:%d\n",k);
					}
				}
			}
		}
	}
	return 0 ;
}

10、假设银行一年整存零取的月息为1.875%(年息为12*1.875%,年息按复利计算),现在某人手头有一笔钱,他打算在今后5年中,每年年底取出1000元作为孩子来年的教育金,到第5年孩子毕业时刚好取完这笔钱,请采用逆推法编程计算第1年年初时他应存入银行多少钱。
**输出格式要求:"He must save %.2f at the first year.\n"
程序运行示例如下:
He must save 2833.29 at the first year.

#include<stdio.h >
#define a 12*1.875/100//利息
int main()
{
	int i = 0;
	double x = 0;
	//从公式上看就是:(((x*(1*a)-1000)*(1+a)-1000)*(1+a)-1000)...=0
	while (i < 5)
	{
		x = (x + 1000) /(1+ a);//不要忘了1
		i++;
	}

	printf("He must save %.2f at the first year.\n",x);
	return 0;
}

今天的内容就分享到这,期待我们再见!

 


http://www.kler.cn/a/390478.html

相关文章:

  • 第二节 OSI-物理层
  • 利用 Screen 保持 VSCode 连接远程任务持续运行
  • 【项目开发 | 跨域认证】JSON Web Token(JWT)
  • Qt 编写插件plugin,支持接口定义信号
  • PaaS云原生:分布式集群中如何构建自动化压测工具
  • 【机器学习】机器学习中用到的高等数学知识-3.微积分 (Calculus)
  • Maven最佳实践
  • 嵌入式ARM平台Linux网络实时性能优化
  • Spring Plugin与策略模式:打造动态可扩展的应用
  • 大数据技术在智慧医疗中的应用
  • 期刊论文查重率多少,才会不被认定为学术不端?
  • CSS的定位(文档流,相对定位,绝对定位,固定定位)
  • Tomcat(4) Tomcat支持哪些版本的Java?
  • PCB板材和适用场合
  • 常见的排序算法及分类对比
  • ReactPress:构建高效、灵活、可扩展的开源发布平台
  • 模块化沙箱:深信达如何为数据安全提供全方位保护
  • 数据库SQL——嵌套子查询(IN/NOT IN/SOME/ALL/EXIST/NOT EXIST)
  • 见人就说“数字化转型”,但你真的理解“转型”转的到底是什么吗
  • 黑盒测试方法论—边界值
  • 网络编程示例之socket编程
  • 第十三天 概率论与统计学
  • shodan 【2】(泷羽sec)
  • iOS 18.2 重磅更新:6个大动作
  • uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别
  • Timer指定时间定时任务运行