Some interesting C problems
来源:互联网 发布:淘宝客服旺旺号是多少 编辑:程序博客网 时间:2024/05/16 16:02
The expected output of the following C programis to print the elements in the array. But whenactually run, it doesn't do so.
#include<stdio.h>Find out what's going wrong.
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
return 0;
}
I thought the following program was a perfect C program. But on compiling, I found a silly mistake. Can you find it out (withoutcompiling the program :-) ?
#include<stdio.h>
void OS_Solaris_print()
{
printf("Solaris - Sun Microsystems\n");
}
void OS_Windows_print()
{
printf("Windows - Microsoft\n");
}
void OS_HP-UX_print()
{
printf("HP-UX - Hewlett Packard\n");
}
int main()
{
int num;
printf("Enter the number (1-3):\n");
scanf("%d",&num);
switch(num)
{
case 1:
OS_Solaris_print();
break;
case 2:
OS_Windows_print();
break;
case 3:
OS_HP-UX_print();
break;
default:
printf("Hmm! only 1-3 :-)\n");
break;
}
return 0;
}
What's the expected output for the following program and why?
enum {false,true};
int main()
{
int i=1;
do
{
printf("%d\n",i);
i++;
if(i < 15)
continue;
}while(false);
return 0;
}
The following program doesn't "seem" to print "hello-out".(Try executing it)
#include <stdio.h>What could be the reason?
#include <unistd.h>
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}
<script type="text/javascript"><!--google_ad_client = "pub-0522693748079521";google_ad_width = 120;google_ad_height = 600;google_ad_format = "120x600_as";google_ad_type = "text_image";google_ad_channel ="";google_color_border = "CCCCCC";google_color_bg = "FFFFFF";google_color_link = "000000";google_color_url = "666666";google_color_text = "333333";//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><script>google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);</script>
#include <stdio.h>Just by looking at the program one "might" expect the output to be, thesame for both the printf statements. But on running the program you getit as:
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
printf("%s\n",h(f(1,2)));
printf("%s\n",g(f(1,2)));
return 0;
}
bash$ ./a.out
12
f(1,2)
bash$
Why is it so?
If you expect the output of the above program to beNONE, I would request you to check it out!!
#include<stdio.h>
int main()
{
int a=10;
switch(a)
{
case '1':
printf("ONE\n");
break;
case '2':
printf("TWO\n");
break;
defa1ut:
printf("NONE\n");
}
return 0;
}
The following C program segfaults of IA-64, but works fine onIA-32.
int main()Why does it happen so?
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
Here is a small piece of program(again just 14 lines of program)which counts the number of bits set in a number.
Input Output 0 0(0000000) 5 2(0000101) 7 3(0000111)
int CountBits (unsigned int x )Find out the logic used in the above program.
{
static unsigned int mask[] = { 0x55555555,
0x33333333,
0x0F0F0F0F,
0x00FF00FF,
0x0000FFFF
} ;
int i ;
int shift ; /* Number of positions to shift to right*/
for ( i =0, shift =1; i < 5; i ++, shift *= 2)
x = (x & mask[i ])+ ( ( x >> shift) & mask[i]);
return x;
}
What do you think would be the output of the following program andwhy? (If you are about to say "f is 1.0", I would say check it out again)
#include <stdio.h>
int main()
{
float f=0.0f;
int i;
for(i=0;i<10;i++)
f = f + 0.1f;
if(f == 1.0f)
printf("f is 1.0 \n");
else
printf("f is NOT 1.0\n");
return 0;
}
I thought the following C program is perfectly valid (after reading aboutthe comma operator in C).But there is a mistake in the following program, can you identify it?
#include <stdio.h>
int main()
{
int a = 1,2;
printf("a : %d\n",a);
return 0;
}
What would be the output of the following C program?(Is it a valid C program?)
#include <stdio.h>
int main()
{
int i=43;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}
void duff(register char *to, register char *from, register int count)Is the above valid C code? If so, what is it trying to acheiveand why would anyone do something like the above?
{
register int n=(count+7)/8;
switch(count%8){
case 0: do{ *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
}while( --n >0);
}
}
Here is yet another implementation of CountBits.Verify whether it is correct (how do you that???). If so, find out thelogicused.
int CountBits(unsigned int x)
{
int count=0;
while(x)
{
count++;
x = x&(x-1);
}
return count;
}
Are the following two function prototypes same?
int foobar(void);The following programs should be of some help in finding the answer:(Compile and run both the programs and see what happens)
int foobar();
Program 1:
#include <stdio.h>Program 2:
void foobar1(void)
{
printf("In foobar1\n");
}
void foobar2()
{
printf("In foobar2\n");
}
int main()
{
char ch = 'a';
foobar1();
foobar2(33, ch);
return 0;
}
#include <stdio.h>
void foobar1(void)
{
printf("In foobar1\n");
}
void foobar2()
{
printf("In foobar2\n");
}
int main()
{
char ch = 'a';
foobar1(33, ch);
foobar2();
return 0;
}
What's the output of the following program and why?
#include <stdio.h>
int main()
{
float a = 12.5;
printf("%d\n", a);
printf("%d\n", *(int *)&a);
return 0;
}
The following is a small C program split across files.What do you expect the output to be, when both of themcompiled together and run?
File1.c
int arr[80];File2.c
extern int *arr;
int main()
{
arr[1] = 100;
return 0;
}
Explain the output of the following C program(No, the output is not 20).
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{ int b=20;
case 1: printf("b is %d\n",b);
break;
default:printf("b is %d\n",b);
break;
}
return 0;
}
What is the output of the following program?(Again, it is not 40, (if the size of integer is 4)).
#define SIZE 10
void size(int arr[SIZE])
{
printf("size of array is:%d\n",sizeof(arr));
}
int main()
{
int arr[SIZE];
size(arr);
return 0;
}
The following is a simple c program, in which there is a functioncalled Error to display errors. Can you see a potential problemwith the way Error is defined?
#include <stdlib.h>
#include <stdio.h>
void Error(char* s)
{
printf(s);
return;
}
int main()
{
int *p;
p = malloc(sizeof(int));
if(p == NULL)
{
Error("Could not allocate the memory\n");
Error("Quitting....\n");
exit(1);
}
else
{
/*some stuff to use p*/
}
return 0;
}
What is the differnce between the following function calls toscanf?(Please notice the space carefully in the second call. Tryremoving it and observe the behaviour of the program)
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
printf("%c\n",c);
scanf(" %c",&c);
printf("%c\n",c);
return 0;
}
What is the potential problem with the following C program?
#include <stdio.h>
int main()
{
char str[80];
printf("Enter the string:");
scanf("%s",str);
printf("You entered:%s\n",str);
return 0;
}
What is the output of the following program?
#include <stdio.h>
int main()
{
int i;
i = 10;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n",sizeof(i++));
printf("i : %d\n",i);
return 0;
}
Why does the following program give a warning? (Please remember thatsending a normal pointer to a function requiring const pointer does notgive any warning)
#include <stdio.h>
void foo(const char **p) { }
int main(int argc, char **argv)
{
foo(argv);
return 0;
}
What is the output of the following program?
#include <stdio.h>
int main()
{
int i;
i = 1,2,3;
printf("i:%d\n",i);
return 0;
}
The following is a piece of code which implementsthe reverse Polish Calculator. There is a(are) serious(s) bug inthe code. Find it(them) out!!!Assume that the function getop returns the appropriate return valuesfor operands, opcodes, EOF etc..
#include <stdio.h>
#include <stdlib.h>
#define MAX 80
#define NUMBER '0'
int getop(char[]);
void push(double);
double pop(void);
int main()
{
int type;
char s[MAX];
while((type = getop(s)) != EOF)
{
switch(type)
{
case NUMBER:
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
push(pop() - pop());
break;
case '/':
push(pop() / pop());
break;
/* ...
* ...
* ...
*/
}
}
}
The following is a simple program which implements a minimalversion of banner command available on most *nix systems.Find out the logic used in the program.
#include<stdio.h>
#include<ctype.h>
char t[]={
0,0,0,0,0,0,12,18,33,63,
33,33,62,32,62,33,33,62,30,33,
32,32,33,30,62,33,33,33,33,62,
63,32,62,32,32,63,63,32,62,32,
32,32,30,33,32,39,33,30,33,33,
63,33,33,33,4,4,4,4,4,4,
1,1,1,1,33,30,33,34,60,36,
34,33,32,32,32,32,32,63,33,51,
45,33,33,33,33,49,41,37,35,33,
30,33,33,33,33,30,62,33,33,62,
32,32,30,33,33,37,34,29,62,33,
33,62,34,33,30,32,30,1,33,30,
31,4,4,4,4,4,33,33,33,33,
33,30,33,33,33,33,18,12,33,33,
33,45,51,33,33,18,12,12,18,33,
17,10,4,4,4,4,63,2,4,8,
16,63
};
int main(int argc,char** argv)
{
int r,pr;
for(r=0;r<6;++r)
{
char *p=argv[1];
while(pr&&*p)
{
int o=(toupper(*p++)-'A')*6+6+r;
o=(o<0||o>=sizeof(t))?0:o;
for(pr=5;pr>=-1;--pr)
{
printf("%c",( ( (pr>=0) && (t[o]&(1<<pr)))?'#':' '));
}
}
printf("\n");
}
return 0;
}
What is the output of the following program?
#include <stdio.h>
#include <stdlib.h>
#define SIZEOF(arr) (sizeof(arr)/sizeof(arr[0]))
#define PrintInt(expr) printf("%s:%d\n",#expr,(expr))
int main()
{
/* The powers of 10 */
int pot[] = {
0001,
0010,
0100,
1000
};
int i;
for(i=0;i<SIZEOF(pot);i++)
PrintInt(pot[i]);
return 0;
}
The following is the implementation of the Euclid's algorithmfor finding the G.C.D(Greatest Common divisor)of two integers.Explain the logic for the below implementation and thinkof any possible improvements on the current implementation.
BTW, what does scanf function return?
#include <stdio.h>Also implement a C function similar to the above tofind the GCD of 4 integers.
int gcd(int u,int v)
{
int t;
while(v > 0)
{
if(u > v)
{
t = u;
u = v;
v = t;
}
v = v-u;
}
return u;
}
int main()
{
int x,y;
printf("Enter x y to find their gcd:");
while(scanf("%d%d",&x, &y) != EOF)
{
if(x >0 && y>0)
printf("%d %d %d\n",x,y,gcd(x,y));
printf("Enter x y to find their gcd:");
}
printf("\n");
return 0;
}
What's the output of the following program. (No, it's not 10!!!)
#include <stdio.h>
#define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
int main()
{
int y = 100;
int *p;
p = malloc(sizeof(int));
*p = 10;
y = y/*p; /*dividing y by *p */;
PrintInt(y);
return 0;
}
The following is a simple C program to read a dateand print the date. Run it and explain the behaviour
#include <stdio.h>
int main()
{
int day,month,year;
printf("Enter the date (dd-mm-yyyy) format including -'s:");
scanf("%d-%d-%d",&day,&month,&year);
printf("The date you have entered is %d-%d-%d\n",day,month,year);
return 0;
}
The following is a simple C program to read andprint an integer. But it is not working properly.What is(are) the mistake(s)?
#include <stdio.h>
int main()
{
int n;
printf("Enter a number:\n");
scanf("%d\n",n);
printf("You entered %d \n",n);
return 0;
}
The following is a simple C program which tries to multiplyan integer by 5 using the bitwise operations. But it doesn't do so.Explain the reason for the wrong behaviour of the program.
#include <stdio.h>
#define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
int FiveTimes(int a)
{
int t;
t = a<<2 + a;
return t;
}
int main()
{
int a = 1, b = 2,c = 3;
PrintInt(FiveTimes(a));
PrintInt(FiveTimes(b));
PrintInt(FiveTimes(c));
return 0;
}
Is the following a valid C program?
#include <stdio.h>
#define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
int max(int x, int y)
{
(x > y) ? return x : return y;
}
int main()
{
int a = 10, b = 20;
PrintInt(a);
PrintInt(b);
PrintInt(max(a,b));
}
The following is a piece of C code, whose intentionwas to print a minus sign 20 times. But you can noticethat, it doesn't work.
#include <stdio.h>Well fixing the above code is straight-forward.To make the problem interesting, you have to fixthe above code, by changing exactly one character.There are three known solutions. See if you can getall those three.
int main()
{
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("-");
return 0;
}
What's the mistake in the following code?
#include <stdio.h>
int main()
{
int* ptr1,ptr2;
ptr1 = malloc(sizeof(int));
ptr2 = ptr1;
*ptr2 = 10;
return 0;
}
What is the output of the following program?
#include <stdio.h>
int main()
{
int cnt = 5, a;
do {
a /= cnt;
} while (cnt --);
printf ("%d\n", a);
return 0;
}
What is the output of the following program?
#include <stdio.h>
int main()
{
int i = 6;
if( ((++i < 7) && ( i++/6)) || (++i <= 9))
;
printf("%d\n",i);
return 0;
}
What is the bug in the following program?
#include <stdlib.h>
#include <stdio.h>
#define SIZE 15
int main()
{
int *a, i;
a = malloc(SIZE*sizeof(int));
for (i=0; i<SIZE; i++)
*(a + i) = i * i;
for (i=0; i<SIZE; i++)
printf("%d\n", *a++);
free(a);
return 0;
}
Is the following a valid C program? If so, what is the outputof it?
#include <stdio.h>
int main()
{
int a=3, b = 5;
printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
printf(&a["WHAT%c%c%c %c%c %c !\n"], 1["this"],
2["beauty"],0["tool"],0["is"],3["sensitive"],4["CCCCCC"]);
return 0;
}
What is the output of the following, if the input provided is:
Life is beautiful
#include <stdio.h>
int main()
{
char dummy[80];
printf("Enter a string:\n");
scanf("%[^a]",dummy);
printf("%s\n",dummy);
return 0;
}
Note : This question has more to do with Linker than C language
We have three files a.c, b.c and main.c respectively as follows:
a.c
---
int a;b.c
---
int a = 10;main.c
------
extern int a;Let's see what happens, when the files are compiled together:
int main()
{
printf("a = %d\n",a);
return 0;
}
bash$ gcc a.c b.c main.cHmm!! no compilation/linker error!!! Why is it so??
bash$ ./a.out
a = 10
The following is the offset macros which is used many a times.Figure out what is it trying to do and what is the advantage ofusing it.
#define offsetof(a,b) ((int)(&(((a*)(0))->b)))
The following is the macro implementation of the famous, Triple xorswap.
#define SWAP(a,b) ((a) ^= (b) ^= (a) ^= (b))What are the potential problems with the above macro?
What is the use of the following macro?
#define DPRINTF(x) printf("%s:%d\n",#x,x)
Let's say you were asked to code a function IAddOverFlow which takesthreeparameters, pointer to an integer where the result is to be stored, andthe two integers which needs to be added. It returns 0 if there isan overflow and 1 otherwise:
int IAddOverFlow(int* result,int a,int b)So, how do you code the above function?(To put in a nutshell, what is the logic you use for overflowdetection?)
{
/* ... */
}
What does the following macro do?
#define ROUNDUP(x,n) ((x+n-1)&(~(n-1)))
Most of the C programming books, give the following example forthe definition of macros.
#define isupper(c) (((c) >= 'A') && ((c) <= 'Z'))But there would be a serious problem with the above definition ofmacro, if it is used as follows (what is the problem??)
char c;But most of the libraries implement the isupper (declared inctypes.h) as a macro (without any side effects). Find out how isupper()is implemented on your system.
/* ... */
if(isupper(c++))
{
/* ... */
}
I hope you know that ellipsis (...) is used to specifyvariable number of arguments to a function.(What is the function prototype declaration for printf?)What is wrong with the following delcaration?
int VarArguments(...)
{
/*....*/
return 0;
}
Write a C program to find thesmallest of three integers, without using any of thecomparision operators.
What does the format specifier %n of printffunction do?
Write a C function which does the addition of two integerswithout using the '+' operator. You can use only the bitwiseoperators.(Remember the good old method of implementingthe full-adder circuit using the or, and, xor gates....)
How do you print I can print % using the printffunction?(Remember % is used as a format specifier!!!)
What's the difference between the following two C statements?
const char *p;
char* const p;
What is the difference between memcpy and memmove?
What is the format specifiers for printf to print doubleand float values?
Write a small C program to determine whether amachine's type is little-endian or big-endian.
Write a C program which prints Hello World! without usinga semicolon!!!
0
上一篇:c 语言中的宏,井号,可变参数
下一篇:利用ftrace调试内核
相关热门文章
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- ffmpeg解复用视频文件
- 自制操作系统之七 重写后的boo...
- 图像处理之qt实现
- open和fopen的区别
- LM3S系列底层基础函数, 自用...
给主人留下些什么吧!~~
评论热议
- Some interesting C problems
- Some essential problems in C
- Interesting problems
- some problems
- some problems
- Some interesting Softwares
- Some Interesting Papers
- Android PopupWindow & some problems
- Some problems of mysql
- ubuntu android some problems
- Some Problems of FATFS
- 翻转链表:LinkList:Reverse a LinkList has some interesting method(C++)
- Some Sharepoint problems and resolutions
- Some interesting questions raised by Google
- Hint of Some Interesting Webs from LinuxSir
- Some Interesting Papers from NIPS 2012
- Some unsure problems about JCreator Pro
- Some tricky problems related to "protected"
- 多核体系概述--多核系列之一
- 软件并行模型--多核系列之二
- 程序设计中多核的影响--多核系列之三
- QEMU - Running Debian in Debian
- c 语言中的宏,井号,可变参数
- Some interesting C problems
- 利用ftrace调试内核
- vim multifile edit
- vim diff two files
- Use clonezilla to clone and restore disk
- Bash check IP and port
- Linux 内核中的 GCC 特性(转)
- php快速学习之php的控制语句(有其他语言基础适用)
- android 休眠唤醒机制分析(三) — suspend
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
属鼠的
属鼠哪年生
属鼠的多大
属鼠的男生
属鼠和属鼠的婚配好吗
属鼠的男人
属鼠的女人
那年属鼠
属鼠的性格
属鼠的人
属鼠命运
属鼠的今年
属鼠和属鼠
属鼠男人
属鼠女性格
属鼠几几年
属鼠和属猴
属鼠和属狗
属猴和属鼠
属鼠与属狗
属鼠与属猴
属狗与属鼠
属鼠属猴
属鼠和属羊
属鼠和属鸡
属鼠好不好
96年属鼠
属鼠是哪年
1996年属鼠
84年属鼠
属鼠的今年多大
属鼠今年多大
1984年属鼠什么命
1996年属鼠什么命
72年属鼠人48岁以后命
96年属鼠什么命
属鼠的命好吗
属鼠人的性格
属鼠月份命运
女属鼠人一生命运
属鼠今年多少岁