说明
洗扑克牌的原理其实与乱数排列是相同的,都是将一组数字(例如1~N)打乱重新排列,只不过洗扑克牌多了一个花色判断的动作而已。
解法
初学者通常会直接想到,随机产生1~N的乱数并将之存入阵列中,后来产生的乱数存入阵列前必须先检查阵列中是否已有重复的数字,如果有这个数就不存入,再重新产生下一个数,运气不好的话,重复的次数就会很多,程式的执行速度就很慢了,这不是一个好方法。
以1~52的乱数排列为例好了,可以将阵列先依序由1到52填入,然后使用一个回圈走访阵列,并随机产生1~52的乱数,将产生的乱数当作索引取出阵列值,并与目前阵列走访到的值相交换,如此就不用担心乱数重复...
水仙花数
时间限制:1000 ms | 内存限制:65535 KB
描述
我们知道,如果一个数是水仙花数,当且仅当它的各位数字的三次方的和与这个数相等。如153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3则153是水仙花数
输入
输入数据有若干组,每组一个三位数N(100<=N<=999)
输出
每组测试数据一行,如果这个数是水仙花数,则输出“Yes”,否则输出“No”.
样例输入
153
125
样例输出
Yes
No
摘自:http://www.bianchengla.com/course/24/practise/pro...
编写C程序,用迭代法求x=a^(1/2)。求平方根的迭代公式为:Xn+1=1/2(Xn+a/Xn)要求前后两次求出的得差的绝对小于0.00001。给出的答案一般是:
#include"stdio.h"#include"math.h"int main() { float x0,x1,a; scanf("%f",&a); x1=a/2; do { x0=x1;x1=(x0+a/x0)/2; }while(fabs(x0-x1)>=0.00001); printf("%.3f\n",x1); r...
如题。这是我同学在实训时候发现的问题(我们用的是VC++6.0)。
#include<stdio.h>int main(){ printf("%\n"); printf("%%\n"); return 1;}只有第二行输出了1个“%”。为什么呢?
格式控制符%%,读%符号。但是为什么不能直接输出%呢?我们姑且把%和\认为是比较特殊的字符。(我的理解不是很有根据,希望大家给点意见)
#include<stdio.h>int main(){ int n,i; printf("please input the number\n"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { while(n!=i) { if(n%i==0) { printf("%d*",i); n=n/i; } ...
三个12L、8L、5L的无刻度杯子,12L的已装满水,怎样倒可以倒出2个6L的水
12L的杯子为:a12,8L的杯子为:b8,5L的杯子为:c5.输出每次倒水后,每个杯子中水的容量。
a12 b8 c5
12 0 0
..............
..............
6 6 0
思路:
1,若b8为空,把a12的水倒满b8或者倒完a12内的水。
2,若c5为空,把b8的水倒满c5或者倒完b8内的水。
3,若c5满,则把c5的水倒入a12中。
4,直到a12,b8的水为6L
#include<stdio...
char *p="Hello world";
char a[]="Hello world";
"Hello world!\n"字符串字面量(string literal)——C语言源程序中用双引号包含的字符串的正式名称——有两种稍有区别的用法:(1)用作数组初始值(如同char a[] = "Hello world!\n";的声明),它指明数组中字符的初始值。(2)其他情况下,它会转化为一个无名的静态字符数组,可能会存储在只读内存中,这就导致它不能被修改。在表达式环境中,数组通常被立刻转换为一个指针。因此char *p = "Hello world!\n";声明把p初始化成指向无名数...
例1 #include <stdio.h> main() {int i;int b; scanf("%d",&i); getchar(); } 为什么只输入一个数字或字母都会退出? 例2 #include <stdio.h> main() {int i;int b; scanf("%d",&i); scanf("%d",&b); } 为什么输入一个数字不会退出,输入一个字母会退出? 例3 #include <stdio.h> main() {int i;int b; scanf("%d",&i); getch(); } 为什么输入一个数字或者字母都不会退出...
Win32 console Application 默认以main()为程序入口点而Win32 Application 则是WinMain()
参考:http://bbs.bccn.net/viewthread.php?tid=352959&pid=2024112&page=1
摘自:http://www.newsmth.net/pc/pccon.php?id=10002714&nid=359712
const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令 **************常量必须被初始化*************************cons的作用(1)可以定义const常量 例如:const int Max=100;int Array[Max]; (2)便于进行类型检查 例如:void f(const int i) { .........}编译器就会知道i是一个常量,不允许修改;(3)可以保护被修饰的东西,防止...
PS:本文从网上转载了,具体是什么网站,忘记了。
Justin James曾发表过一篇博文《10 tips for advancing from a beginner to an intermediate developer》,为我们分享如何才能完成程序员从初级到中级的蜕变,现将中文译文转载于此,供大家借鉴。
在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客、文章及杂志分成两类:面向初学者类(“hello world”这种类型的教程)以及面向专家类(MSDN杂志)。这个观点很好,有关程序员如何从初级跃升到中级的信息极少。以下是为了实现这种转变需要你去做...
#include<stdio.h>void main(){ int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p; printf("%d",*(p++)); printf("%d\n",**k);}程序输出()
A.4B.22C.24D.46
大家思考一下,给出答案。
答案是:C.24
题目出处:http://bbs.bccn.net/viewthread.php?tid=349295&extra=&page=1
编写程序,求下面级数前n项中偶数项的和ES。在求和过程中,以第一个绝对值大于9999的项为末项,计算并输出和数ES。(其中^表示幂运算)题目出自:http://bbs.bccn.net/viewthread.php?tid=349405&pid=2005275&page=1#pid20052751!-2!+3!-4!+……+(-1)^(n-1)*n!+ ……
#include<stdio.h>void main(){ int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM while(temp<...
在编写代码的时候,有时只考虑了程序的算法,而忘记了代码的缩进格式。导致写出的代码非常凌乱。此时可以选择你所需要对齐的代码(个人建议选择一个完成的函数包括函数最后的“}”)。按Alt+F8组合键来对齐代码。
参考于:《Visual C++ 开发实战1200例(第I卷)》——清华大学出版社 第23-24页
# include <stdio.h>void main(){ int n; scanf("%d\n",&n); printf("you typed %d\n",n);} 以上的代码要怎么样输入?
原因:
\n在scanf格式串中不表示等待换行符,而是读取并放弃连续的空白字符。(事实上,scanf格式串中的任何空白字符都表示读取并放弃空白字符。而且,诸如%d这样的格式也会丢掉前边的空白,因此你通常根本不需要在scanf格式串中加入显式的空白。) 因此,“%d\n”中的\n会让scanf读取到非空白字符串为止,而它可能需要读到下一行才能找到...
使用VC6.0编译器,关闭时,出现:
You cannot close the workspace while a build is in progress. Select the stop Build command before closing the workspace
解决方案:
One advice is to update to the latest service pack (SP6).更新服务包。1. Do not build simultaneously in multiple instances.2. Do not run any other instance ...
从键盘输入一个整数(1~20)则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:输入数字2,则程序输出:1 24 3输入数字3,则程序输出:1 2 38 9 47 6 5输入数字4, 则程序输出: 1 2 3 412 13 14 511 16 15 610 9 8 7
#include<stdio.h>#define N 21void main(){ int i,j,k,n,sum=1,s; int a[N][N]={0}; printf("Input n (n<=20):"); sc...
实际上这个问题很多情况下是由于路径设置的问题引起的,“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\VC98\Bin”下面,你可以到相应的路径下找到这个应用程序。因此问题可以按照以下方法解决:点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新设置“Excutable Fils、Include Files、Library Files、Source Files”的路径。很多情况可能就一个盘符的不同(例如你的VC装在C,但是这些路径全部在D),改过来就OK了。
以上答案摘自:http://zhidao.baidu.c...
#include<stdio.h>#include<malloc.h>void main(){ char *p1; *p1=malloc(sizeof(char));}
错误信息:
error C2440: '=' : cannot convert from 'void *' to 'char'
错误原因:这里声明的指针是p,而不舍得*p。
修改:
#include<stdio.h>#include<malloc.h>void main(){ char *p1; p1=malloc(sizeof(char));}还是有错误,错误信息如下:
e...
摘自《你必须知道的495个C语言问题》1.5
问:char *p1,p2;这样声明有声明问题?
答:这样的声明没有任何问题,但是它可能不是你想要的。指针声明中的*号并不是基本类型的一部分,它只是包含被声明标示符的声明符(declarator)的一部分。也就是说,在C语言中,声明的语法和解释并非:
类型 标示符;
而是:
基本类型 生成基本类型的东西;
其中“生成基本类型的东西”——声明符——或者是一个简单标示符,或者是如同*p、a[10]或f()这样的符号,表明被声明的变量是指向基本类型的指针、基本类型的数组或者返回基本类型的函数。(当然,更加复杂的声...